首页 > 计算机网络 > TCP的三次握手与四次挥手理解

TCP的三次握手与四次挥手理解

作者:bin

在了解TCP三次握手,前先了解TCP用来确认链接和数据顺序要用到的报文头
序号(seq):表示发送的数据字节流,确保TCP传输有序,对每个字节编号
确认序号(ack):发送方期待接收的下一序列号,接收成功后的数据字节序列号加 1。只有ACK=1时才有效。
ACK(Acknowledge character):确认序号的标志,ACK=1表示确认号有效,ACK=0表示报文不含确认序号信息
SYN(Synchronize Sequence Numbers):连接请求序号标志,用于建立连接,SYN=1表示请求连接
FIN:结束标志,用于释放连接,为1表示关闭本方数据流

1、三次握手(目的是确认客户端和服务端,都可以正常端收发消息)
1.客服端发送带有SYN标识,和seq = 1的报文,给服务端,请求建立链接
2.服务端发送带有SYN标识、ACK标识、自己seq、和发送方的ack=x+1的报文,给服务端(此时客户端知道自己发送、接收都正常)
3.客服端发送带有ACK标识、seq+1、ack+1的报文给(此时服务端知道自己发送、接收都正常)
第三次握手后建立链接开始传输数据

2、四次挥手(目的是确认双方消息都已经发送完毕)
1.客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态
2.服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态
3.客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)
4.客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态。

为什么三次握手和四次挥手?
三次握手时,服务器同时把ACK和SYN放在一起发送到了客户端那里
四次挥手时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方 ACK 和 FIN 一般都会分开发送(特殊情况也会一起发送,例如关闭浏览器时)

为什么客户端最后还要等待2MSL
客户端需要保证最后一次发送的ACK报文到服务器,如果服务器未收到,可以请求客户端重发,这样客户端还有时间再发,重启2MSL计时
2MSL时间:RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等

您必须 [ 登录 ] 才能发表留言!