内蒙古中汇建设有限公司网站,seo快速建站,成都郫县网站建设,人类命运共同体TCP三次握手建立连接的过程#xff1a;
一次握手#xff1a;客户端发送带有 SYN#xff08;seqx#xff09;标志的数据包到服务端#xff0c;然后客户端进入 SYN_SEND 状态#xff0c;等待服务端的确认。二次握手#xff1a;服务端收到 SYN 包后#xff0c;发送带有 S… TCP三次握手建立连接的过程
一次握手客户端发送带有 SYNseqx标志的数据包到服务端然后客户端进入 SYN_SEND 状态等待服务端的确认。二次握手服务端收到 SYN 包后发送带有 SYNACKseqyackx1标志的数据包到客户端然后服务器进入 SYN_RECV 状态。三次握手客户端收到 SYNACK 包后发送带有 ACKacky1标志的数据包到服务端然后客户端和服务端都进入ESTABLISHED状态连接完成。 SYN 指同步序列号只有在第一次和第二次发起连接请求和连接接受的情况下置为1seq为随机取值。 seq 指初始化序列号用于标识客户端将要发送的数据包顺序。确保建立的连接是可靠的传输不会造成数据丢失和失序。 第一次握手和第二次握手不发送数据只有第三次握手时才发送数据。 TCP四次挥手释放连接的过程
第一次挥手客户端发送一个 FINseqx标志的数据包到服务端用来关闭客户端到服务端的数据传送然后客户端进入 FIN-WAIT-1状态。第二次挥手服务端收到这个 FINseqx标志的数据包它发送一个 ACKackx1标志的数据包到客户端然后服务端进入 CLOST-WAIT状态客户端进入 FIN-WAIT-2状态。第三次挥手服务端发送一个 FINseqy标志的数据包到客户端请求关闭连接然后服务端进入 LAST-ACK 状态。第四次挥手客户端发送 ACKacky1标志的数据包到服务端然后客户端进入 TIME-WAIT状态服务端在收到ACKacky1标志的数据包后进入CLOSED状态此时如果客户端等待2MSL后依然没有收到回复就证明服务端已正常关闭随后客户端也可以关闭连接了。
1.1. 为什么要三次握手 三次握手的目的是建立可靠的通信信道确保客户端和服务端发送及接收数据都是正常的。
第一次握手服务端确认客户端发送正常服务端接收正常。第二次握手客户端确认接收发送正常服务端接收发送正常。第三次握手服务端确认服务端发送正常客户端接收正常。 其次是为了防止“已失效的连接请求报文段”被服务器误接收。当网络情况比较复杂的情况下发送方第一次发送请求后由于网络原因发生了阻塞此时客户端会超时重传再次发送请求。如果握手只有两次那么当连接释放后之前阻塞的请求到达服务端服务端此时以为与客户端建立了连接会分配资源保持这个连接一直监听等待客户端发送数据但客户端不会发送请求造成了服务端资源的浪费。 因此需要服务端发送请求后客户端响应了服务端的请求进行三次握手后才算建立了连接可以发送请求。
1.2. 为什么要四次挥手 因为TCP通过三次握手建立的是全双工通信任何一方都可以在数据传送结束后发出连接释放的通知 当一方想要关闭连接时不能直接断开因为另一方可能还有数据需要发送。 某一方发出释放连接请求时待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候则发出连接释放的通知对方确认后完全关闭TCP连接。因此四次挥手保证了双方都确认断开连接有效防止了未传输完的数据丢失。
第一次挥手客户端发送 FIN表示它不再发送数据。第二次挥手服务端收到 FIN回复 ACK确认不再接收客户端数据。第三次挥手服务端发送 FIN表示它的数据也发送完毕不再发送数据请求释放连接。第四次挥手客户端收到服务端的 FIN发送 ACK确认连接关闭。
1.3. 为什么不能把服务端发送的ACK和FIN合并起来变成三次挥手 因为服务端收到客户端断开连接的请求时可能还有一些数据没有发完这时先回复 ACK表示服务端收到了客户端发送的断开连接的请求不再接收客户端发送的数据但服务端此时仍可以向客户端发送数据等到数据发完之后再发送 FIN 给客户端断开服务端到客户端的数据传送。
1.4. 如果第二次挥手时服务端的 ACK 没有送达客户端会怎样 客户端在发送 FIN 给服务端后没有收到服务端发送到 ACK会重新发送 FIN 请求。
1.5. 为什么要有第四次挥手 第四次挥手客户端发送 ACK 给服务端的目的是确保服务端知道客户端已经收到关闭请求服务端可以安全的释放资源并结束连接。否则如果不进行第四次挥手的话服务端发送 FIN给客户端后无法知道客户端是否接收到了自己释放连接的请求导致客户端一直进行等待。如果客户端不发送 ACK服务端会一直保持 LAST-ACK状态直至超时或重发 FIN。
1.6. 为什么第四次挥手客户端需要等待 2*MSL报文最长寿命时间后才进入CLOSED状态 因为第四次挥手时客户端发送给服务端的 ACK 有可能丢失如果服务端因为某些原因没有接收到 ACK 的话服务端就会重发 FIN 如果客户端在 2*MSL的时间内收到了 FIN就会重新发送 ACK 并再次等待 2MSL防止服务端没有收到 ACK 而不断重发 FIN。 MSL(Maximum Segment Lifetime) : 一个片段在网络中最大的存活时间2MSL 就是一个发送和一个回复所需的最大时间。如果直到 2MSLClient 都没有再次收到 FIN那么 Client 推断 ACK 已经被成功接收则结束 TCP 连接。