TCP三次挥手和四次挥手学习

1. TCP中一些简写的含义

参考文章https://blog.****.net/qq_25948717/article/details/80382766

TCP三次挥手和四次挥手学习

TCP(Transmission Control Protocol)传输控制协议,有六种标识位,分别为

  • SYN(synchronous建立联机)
  • ACK(acknowledgement 确认)
  • PSH(push传送)
  • FIN(finish结束)
  • RST(reset重置)
  • URG(urgent紧急)
  • Sequence number(顺序号码)
  • Acknowledge number(确认号码)

2. 三次挥手

2.1 三次挥手过程

图片来自https://blog.****.net/qzcsu/article/details/72861891

TCP三次挥手和四次挥手学习

简写名称 含义
CLOSED 链接关闭状态
LISTEN 监听
SYN-SENT 发送SYN
SYN-RCVE 接受SYN
ESTABLISHED 建立链接

客户端–发送带有 SYN 标志的数据包–一次握手–服务端
服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

2.2 ACK和ack的区别

参考https://blog.****.net/baiyan3212/article/details/81302448

ACK是Acknowledgement,确认值,常为1,用来确认建立链接
ack是Acknowledgement Number,为接收到seq+1,发送回去后表示已经成功接受之前的数据

2.3 为什么第二次还要把SYN发送回去?

直接用ACK表示链接成功不行吗?不行
回传的相同SYN可以让client证实server收到的信息确实是client发送过来的

2.4 为什么要三次挥手

第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常

第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常

第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常

只有三次挥手后,才能让双方都确信自己与对方的发送和接受功能是正常的

3. 四次挥手

3.1 四次挥手过程

TCP三次挥手和四次挥手学习

  • 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
  • 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
  • 服务器-关闭与客户端的连接,发送一个FIN给客户端
  • 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。

参考https://github.com/Snailclimb/JavaGuide/blob/master/docs/network/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C.md