一、前言
学习东西的最好方式就是,在自己学习了之后采用输出的方式来记录自己对知识点的理解,以便以后可以复查,同时也加深了自己对知识的理解,扯远了哈!!!废话不多说了进入主题(后续还会补充这个部分的知识点)
二、握手与挥手中的常见TCP标志位和序号
- SYN(synchronous建立同步连接)通常与ACK搭配使用。
- ACK(acknowledgement 确认)。
- FIN(finish结束)
序号
- Sequence number:顺序号,发送数据包中的第一个字节的序列号,小写为seq。
- Acknowledge number:确认号,响应前面的seq,值为seq+1,可以理解为希望下次给的序列号为seq+1。
三、TCP的三次握手
- 第一次握手:客户端向服务端发送位码为
SYN=1随机生成序列为号seq=x,服务器知道客户端要建立连接。 - 第二次握手:服务器收到后发送位码
SYN=1和ACK=1,同时生成seq=y的随机序列号及确认号ack=x+1,代表已收到请求,请客户端确认。 - 第三次握手:客户端收到后会检查ack是否是第一次的seq+1,以及位码是否为1,代表服务端已经收到了之前的信息;然后客户端向服务器发送
ACK=1已经自己之前的seq+1即seq=x+1和服务端的序列号加一即ack=y+1。
四、TCP的四次挥手
- 第一次挥手:客户端发送标志位
FIN=1和随机生成序列号seq=u(u为前面传送过来的数据最后一个字节序号加一)。客户端进入终止等待状态。 - 第二次挥手:服务端收到了报文,并且回复了
ACK=1和ack=u+1,再带上自己的顺序号seq=v,此时服务端就进入了关闭等待状态,客户端不会给它发送数据了,如果服务端要发送数据给客户端,客户端依然要接受。 - 第三次挥手:服务端将最后的数据发送完后,就向客户端发送释放报文
FIN=1、ack=u+1和ACK=1以及随机序列号seq=w,此时服务端进入最后确认状态,等待客户端的确认。 - 第四次挥手:客户端收到了后,发送
ACk=1和ack=w+1以及之前自己的序列号加一,即seq=u+1,这时客户端进入等待状态,等待2MSL的时间(最长报文寿命)后,进入关闭状态,服务端接收到信息后就立即进入了关闭状态。