TCP/IP-简单解析握手 挥手

380 阅读4分钟

咱们学程序的必然离不开这个东西,我也理解不深。我就浅入浅出吧。🤣 TCP/IP(Transmission ControlProtocol / Internet Protocol)中文为 传输控制协议/因特网互联协议 。他们合在一起讲,就是一个大家族呀HTTP、HTTPS、FTP、TCP、IP、UDP...... ,这些的统称 就叫 TCP/IP ,其中 TCP IP 是其中最为核心的所以就叫这个名字了

02db465212d3c374a43c60fa2625cc1caeaab796.png
IMG_20200419_042559.jpg
我直接放图,你可能直接就懵逼了。他们是一层一层套下去的。

  1. A机器的 一个程序发送了一次GET 请求,这个GET请求就是HTTP中的规则,比如你要发送 JSON格式的还是FORM 表单格式的数据,常见的HTTP的错误码 404 也是个规则。
  2. 程序将符合HTTP协议的请求打包后,告诉传输层,我已经把数据打包好了。这个时候传输层就进行三次握手和B机器建立连接,建立连接后才能进行传输。当然 三次握手都是必须经过网络层 和 链路层的哦。

总体的过程看来就是这么点,但是真要搞懂每一个节点,那很复杂,因为每个协议都不简单。我就简单的讲一讲最主要的 TCP 连接时的三次,TCP 断开连接时的四次挥手


TCP 三次握手

微信图片_20200419132930.jpg

  1. A机器 把 SYN=1 序列号 seq=x (这个x 就是一个未知数的意思,好来做演示),。B 机器收到了,它明白了 SYN=1 是建立连接的意思呀
  2. B机器知道是建立连接的意思后发送一个相应包给A机器 把 SYN=1ACK=1;把序列号seq=y, 确认序号ack=x+1

A机器这个时候收到了。发现 SYN=1ACK=1 表示B机器愿意与我建立连接,再把 ack 校验一下 果然是我上         次发送 x 加上 1 的值。这个时候确认 B机器 接收能力没有任何问题

  1. A机器收到B的响应后 把 ACK=1 seq=x+1 ack=y+1,发送给B机器

B机器收到后,发现 ACK=1表示A机器收到了我的请求,再查看 ack=y+1刚刚好是我上次发送的 y 加上1的结        果, 这表示A机器的接收能力也没有问题。确认了双方 发送和接收能力没有任何问题了,就可以正式的传输          数据了。

TCP 四次挥手

微信图片_20200419132934.jpg

  1. A机器 把 FIN=1seq=u发送给B机器

B机器接收到了,发现 FIN=1 知道A机器要断开连接了,这个时候会通知程序要断开连接了,赶快把任务处理        完成,紧接着会发送一次响应请求

  1. B机器马上发送一次请求 把 ACK=1 ,seq=v ack=u+1 发送给A机器,发送后直接进入CLOSE_WAIT 等待关闭状态,并且通知应用程序快点搞,我要关闭了

A机器收到后发现 没有 FIN 只有 ACK,然后校验 ack 中的结果是否是 上次请求发送 u 加上1的结果,如果正          确就说明:B机器还没有处理完,我就等等吧。此时 A机器处于 FIN_WAIT_2 半关闭状态,无法发送请求了,        就等着 B机器把 FIN=1发送过来了。

  1. 此时B机器的应用程序终于处理完成了,把 FIN=1ACK=1 seq=w ack=u+1 发送给A机器

A机器收到后,发现 FIN 和 ACK 都是1了,然后校验 ack 是不是上次发送 u 加上1的结果。发现是正确的

  1. A机器发现接收到了正确的结果后,把 ACK=1seq=u+1 ack=w+1 发送给B机器,发送完成后 进入TIME_WAIT 这个状态就是:等待一段时间后就可以释放资源了,完全的断开连接了,等待时间为2MSL 也就是 2分钟。

B机器收到了请求,ACK=1 在校验 ack 是否是上次发送的 w 加 1 的结果。没错后终于可以关闭释放资源了。