0%

06-网络编程-第二节

一、TCP 四次挥手

OSI 虽然很学术,但是 要熟悉,一般工程使用 IEEE 的 TCP/IP 的四层模型。

4G 和 5G 这种事在数据链路层及以下的协议

两端都可能发起分手,分手4个流程如下:

  1. 客户端发送 FIN=1,seq = x ,随后进入 FIN_WAIT_1

  2. 服务端收到之后进入 CLOSE_WAIT 状态,随后发送确认 ACK = 1,ack = x + 1,客户端收到之后变为 FINE_WAIT_2 状态

  3. 接着服务端也发送 FIN = 1, seq = y ,随后进入 CLOSE 状态

  4. 客户端收到之后,变为 TIME_WAITING 状态,随后发送确认 ACK = 1,seq = y +1 ,服务端收到之后变为 CLOSED 状态

  5. 最后,客户端在 TIME_WAITING 状态持续了 2* MSL 时长之后,才最终变为 CLOSED 状态

MSL 即 最长报文段寿命,即一个报文在网络上能存活的最长时间,协议规定是 2分钟,一般定义成 30s ,所以 是等待 1~4分钟。

面试官:为什么要 4 次?

因为是TCP 是全双工的,必须要确认双方都没有数据要发送了,才能结束。假如,客户端发送了 FIN 的时候,服务端没有数据了,可以将 ACK 和 FIN 同时发送,所以,这就变成了 3 次了。

为什么 TIME_WAITING ?

  1. 有可能最后一步客户端发送的 ACK 丢失了,这时候服务端以为客户端没收到,可能会重发 FIN 过来,所以必须要等待

  2. A 应用程序用了 123 端口,它关闭了,之后,B应用用了 123 端口,此时 A 应用的服务端还发送了数据,由于是马上重用了 123 端口,所以这个数据很大可能还没过期,此时 B 应用就没法区分了这个数据了。所以TIME_WAITING 可以让数据在网络上过期,便于区分

二、网络工具

wireshark 目前免费,支持的协议比较多,所以比较推荐使用 wireshark。 wireshark 工具可以查看网络情况,在输入栏里面可以做一些过滤,比如:

!udp //不看udp

ip.addr==101.89.23.12 //只看特定的ip

!udp and ip.addr==101.89.23.12 //不看udp 并且 指定ip

除了 and 还有多种符号,or ,xor(异或) 等等

三、一次完整的 Http 请求的过程

一次完整的http请求过程,比如在浏览器中输入一个网址,最后怎么出来网页展示出来的?总共大概有 7 个步骤:

  1. 首先 DNS 解析域名(浏览器缓存、操作系统缓存或者 DNS 服务器)

  2. 三次握手建立 TCP 连接

  3. 客户端发起 Http 请求

  4. 服务端响应 Http 请求

  5. 客户端解析 Html 代码,并请求 Html 代码中的资源

  6. 客户端渲染展示内容

  7. 关闭 TCP 连接

DNS 劫持和 Http劫持:http 劫持是把 html 的内容给替换了,或者http 的请求给你改了,到其他页面了

防止劫持的手段: 用自己的 DNS 不要用点心公司的,使用 https 。

谢谢你的鼓励