咱们学程序的必然离不开这个东西,我也理解不深。我就浅入浅出吧。🤣 TCP/IP(Transmission ControlProtocol / Internet Protocol)中文为 传输控制协议/因特网互联协议 。他们合在一起讲,就是一个大家族呀HTTP、HTTPS、FTP、TCP、IP、UDP...... ,这些的统称 就叫 TCP/IP ,其中 TCP IP 是其中最为核心的所以就叫这个名字了
- A机器的 一个程序发送了一次GET 请求,这个GET请求就是HTTP中的规则,比如你要发送 JSON格式的还是FORM 表单格式的数据,常见的HTTP的错误码 404 也是个规则。
- 程序将符合HTTP协议的请求打包后,告诉传输层,我已经把数据打包好了。这个时候传输层就进行三次握手和B机器建立连接,建立连接后才能进行传输。当然 三次握手都是必须经过网络层 和 链路层的哦。
总体的过程看来就是这么点,但是真要搞懂每一个节点,那很复杂,因为每个协议都不简单。我就简单的讲一讲最主要的 TCP 连接时的三次,TCP 断开连接时的四次挥手
TCP 三次握手
- A机器 把
SYN=1序列号 seq=x(这个x 就是一个未知数的意思,好来做演示),。B 机器收到了,它明白了SYN=1是建立连接的意思呀 - B机器知道是建立连接的意思后发送一个相应包给A机器 把
SYN=1,ACK=1;把序列号seq=y,确认序号ack=x+1。
A机器这个时候收到了。发现 SYN=1,ACK=1 表示B机器愿意与我建立连接,再把 ack 校验一下 果然是我上 次发送 x 加上 1 的值。这个时候确认 B机器 接收能力没有任何问题
- A机器收到B的响应后 把
ACK=1seq=x+1ack=y+1,发送给B机器
B机器收到后,发现 ACK=1表示A机器收到了我的请求,再查看 ack=y+1刚刚好是我上次发送的 y 加上1的结 果, 这表示A机器的接收能力也没有问题。确认了双方 发送和接收能力没有任何问题了,就可以正式的传输 数据了。
TCP 四次挥手
- A机器 把
FIN=1,seq=u发送给B机器
B机器接收到了,发现 FIN=1 知道A机器要断开连接了,这个时候会通知程序要断开连接了,赶快把任务处理 完成,紧接着会发送一次响应请求
- B机器马上发送一次请求 把
ACK=1,seq=vack=u+1发送给A机器,发送后直接进入CLOSE_WAIT等待关闭状态,并且通知应用程序快点搞,我要关闭了
A机器收到后发现 没有 FIN 只有 ACK,然后校验 ack 中的结果是否是 上次请求发送 u 加上1的结果,如果正 确就说明:B机器还没有处理完,我就等等吧。此时 A机器处于 FIN_WAIT_2 半关闭状态,无法发送请求了, 就等着 B机器把 FIN=1发送过来了。
- 此时B机器的应用程序终于处理完成了,把
FIN=1,ACK=1seq=wack=u+1发送给A机器
A机器收到后,发现 FIN 和 ACK 都是1了,然后校验 ack 是不是上次发送 u 加上1的结果。发现是正确的
- A机器发现接收到了正确的结果后,把
ACK=1,seq=u+1ack=w+1发送给B机器,发送完成后 进入TIME_WAIT 这个状态就是:等待一段时间后就可以释放资源了,完全的断开连接了,等待时间为2MSL 也就是 2分钟。
B机器收到了请求,ACK=1 在校验 ack 是否是上次发送的 w 加 1 的结果。没错后终于可以关闭释放资源了。