码迷,mamicode.com
首页 > 其他好文 > 详细

TCP协议的三次握手和四次挥手

时间:2018-03-18 18:39:54      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:TCP

TCP协议的三次握手和四次挥手

我们知道,TCP是主机对主机层的传输控制协议,提供可靠的连接服务,需要三次握手建立连接,而终止一个连接要经过四次挥手。

三次握手

第一次握手:客户端申请连接(SYN=1),发送seq=x的数据包,等待服务器确认。
第二次握手:服务器端申请连接(SYN=1),确认收到客户端的申请(ACK=1).;服务器期望下次收到x+1数据包(ack=x+1),发送seq=y的数据包。
第三次握手:客户端确认收到请求(SYN=1),发送服务器期望的数据包(y+1),完成连接。
技术分享图片

四次挥手

第一次挥手:客户端请求断开连接(FIN=1),发送数据(seq=u)。
第二次挥手:确认收到请求(ACK=1),期望收到数据包(ack=u+1),发送数据(seq=v)。
第三次挥手:服务器申请断开连接(FIN=1),确认收到你之前的请求(ACK=1);期望收到数据(ack=u+1),发送数据(seq=w)。
第四次挥手:确认收到请求(ACK=1),发送数据(seq=u+1),断开连接。
技术分享图片

为什么需要三次握手?

   如果不采用“三次握手”,那么只要服务器发出确认,新的连接就建立了。由于现在客户端并没有发出建立连接的请求,因此不会理睬服务器的确认,也不会向服务器发送ACK包,但是服务端确认为新的连接开始了,等待客户端发数据,这样就会白白浪费资源。而经过三次握手,客户端和服务器都有应有答,这样可以确保TCP正确连接。

为什么需要四次挥手?

  在TCP建立连接时,服务器端的SYN和ACK向客户端发送是一次性发送的,而在断开连接的过程中,服务器端向客户端端发送的ACK和FIN是是分两次发送的。因为在服务器端接收到客户端的FIN后,客户端可能还有数据要传输,所以先发送ACK,等客户端处理完自己的事情后就可以发送FIN断开连接了。

为什么四次挥手后有2MSL的时间等待?

   MSL(Maximum Segment Lifetime),最大报文段生存时间,2个MSL是报文段发送和接收的最长时间。假定网络不可靠,那么第四次发送的ACK可能丢失,即服务器端无法收到这个ACK,如果服务器端收不到这个确认ACK,服务器端会定时向客户端重复发送FIN,直到服务器端收到客户端的确认ACK。所以这个2MSL就是用来处理这个可能丢失的ACK的。

TCP协议的三次握手和四次挥手

标签:TCP

原文地址:http://blog.51cto.com/13570220/2088222

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!