标签:资源 视频 说明 com 丢失 一个 停止 inf ica
传输层有两个协议:TCP协议和UDP协议,两者主要的区别是TCP是提供可靠服务,而UDP是提供不可靠服务。UDP没有TCP为了保证传输而进行的三次握手和四次挥手,所以UDP在效率上高于TCP,目前还应用在一些语音、视频等对丢失信息不敏感的信息传输中。
本文主要介绍一下TCP中的三次握手和四次挥手,详细介绍其流程、原理以及缺点。
1、三次握手
三次握手需要用到下面的标志位和数据:
SYN表示请求打开连接;
流程就是上图所示
第一次握手:客户端发送SYN=1标志符给服务器,请求与服务器建立连接,同时发送seq=x给服务器;其中x是客户端产生的,位于TCP首部中。
第二次握手:服务器收到客户端的消息后,如果确认请求便向客户端回复ACK=1标志符,表示确认请求,发送ack=x+1,用于验证序列;与此同时,服务器向客户端也发送一个建立连接请求SYN=1和序列号seq=y;
第三次握手:客户端收到了服务器发来的消息,ACK=1说明服务器确认了客服端向其发送的建立连接请求被确认,接着验证ack=x+1,确认回复的是自己发送的连接请求;收到了服务器向客户端发送的建立连接请求SYN=1,seq=y,同意建立连接,回复ACK=1,ack=y+1。
当服务器收到客户端发送的ack=y+1和ACK=1,即整个三次握手完成,可以进行TCP通信。
为什么需要三次握手?
根本原因是为了防止客户端的消息由于拥塞等原因,又重复发送一次SYN请求。由于请求实质上没有丢失,服务器之后会收到两次SYN请求。由于客户端只发送了一次请求,所以对服务器端发回的两次ACK只响应一次。在三次握手的情况下,对于第二次从服务器发出的请求,由于服务器没有再收到客户端发送的确认,服务器等待超时后就停止等待响应。如果没有三次握手,服务器端将无法获得客户端的状态,将一直等待下去,浪费大量资源。
2、四次挥手
四次握手可以由客户端发起,也可以由服务器端发起,所以只区分主动方和被动方。当一方发送完全部数据,即发起Fin断开请求。
第一次挥手:主动方发送请求FIN=1,表示主动方已经发送完所有的数据,这时发送最后的数据ack=Z,发送序列号seq=X;
第二次挥手:被动方收到了主动方的请求和序号,确认后断开从主动方到被动方的连接,并回复消息:ack=seq+1=X+1;并且发送序号seq=Z;被动方依旧可以继续发送数据给主动方;
第三次挥手:当被动方将所有的数据发送完成后,向主动方格发送断开连接请求FIN=1,ack是对上一次传输数据的确认,发送序号seq=Y;
第四次挥手:确认请求,断开从被动端到主动端的连接。
需要四次握手的原因:
因为在被动方收到主动方的断开请求FIN时可能还有数据需要发送,所以被动方回复主动方的确认后继续发送数据,完成数据发送后再向主动方发送请求,发送断开请求。而三次握手时由于中间不需要发送数据,所以确认和发送请求一并发送,即三次。
标签:资源 视频 说明 com 丢失 一个 停止 inf ica
原文地址:https://www.cnblogs.com/takemytime/p/9385884.html