TCP三次握手四次挥手
TCP三次握手四次挥手
三次握手
- 客户端想要建立连接,发起一个syn=1 seq=x的tcp包,表示想要建立连接
- 服务端收到包,表示可以建立连接,回复一个 ack=1 syn=1 seq=y ACKnum=x+1的包同意连接
- 客户端收到确认包之后,了解到可以建立连接;再次发送包 ack=1 syn=0 ACKnum=y+1确认建立连接;客户端进入连接状态,服务器收到包之后也进入连接状态 tcp连接建立
数据传输
- 传输过程中,tcp连接会一次性发送若干个包测试连接速度,根据连接速度调整tcp包的发送频率
四次挥手
- 客户端需要断开连接,发起一个fin=1 seq=x的包,请求断开连接
- 服务端收到请求断开的包,发送一个ack=1 ACKnum=x+1的包表示请求已确认,但是这期间可能有剩余数据需要发送,将剩余的数据发送完毕
- 服务端检查所有数据都已发送完毕,发送一个find=1 seq=y的包表示同意断开请求
- 客户端收到同意断开请求的包,发送ack=1 ACKnum=y+1的表示确认断开连接
- 最后阶段,服务端收到最后一个包之后,断开连接,客户端在发送最后一个包之后,等待两个最大生命周期,然后也断开连接 tpc连接断开
序号(sequence number):Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
确认号(acknowledgement number):Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1
标志位的含义
- URG:紧急指针(urgent pointer)有效。
- ACK:确认序号有效。
- PSH:接收方应该尽快将这个报文交给应用层。
- RST:重置连接。
- SYN:发起一个新连接。
- FIN:释放一个连接。
link: 参考资料