十大免费网站推广入口,无锡网站建设首选捷搜,网站设计区域,高端大气网站案例5.1三次握手的过程 一次握手#xff1a;客户端发送带有SYN(x)标志的数据包到服务端#xff0c;然后客户端进入SYN_SEND状态#xff0c;等待服务器端的确认。 二次握手#xff1a;服务端发送带有SYN(y)ACK(x1)标志的数据包到客户端#xff0c;然后服务端进入SYN_RECV状态。…5.1三次握手的过程 一次握手客户端发送带有SYN(x)标志的数据包到服务端然后客户端进入SYN_SEND状态等待服务器端的确认。 二次握手服务端发送带有SYN(y)ACK(x1)标志的数据包到客户端然后服务端进入SYN_RECV状态。 三次握手客户端发送带有ACK(y1)标志的数据包到服务端然后服务端和客户端都进入已建立状态完成TCP三次握手。 5.2为什么要三次握手
因为要确保可靠的连接三次握手的目的就是保证双方都互相知道对方的发送和接收是正常的。四次没必要多余了而两次不够因为两次无法让服务器知道自己的发送和对方的接收是否正常。
第一次握手后服务端能知道客户端的发送和自己的接收是正常的第二次握手后客户端能知道自己的发送和接收是正常的服务端的发送和接收是正常的而经过第三次握手后服务器才会知道自己的发送和客户端的接收是正常的。所以三次握手就能保证双方都知道对方的发送和接收功能都正常。
5.3第二次握手服务端传回了ACK为什么还要传回SYN
是为了客户端发出的第三次握手做准备服务端在第二次握手中传回了ACK(x1)服务端就表明了我收到你客户端的第一次握手的信息了。而传回的SYN为的就是让客户端在第三次握手时发出ACK确认报文表明我客户端也收到你服务端发送的第二次握手的信息了总的来说就是为了确保双方的可靠连接。
5.4四次挥手的过程 第一次挥手客户端发送一个FIN(x)标志的数据包到服务端请求关闭客户端到服务端的数据传送。然后客户端进入FIN-WAIT-1状态。 第二次挥手服务端发送一个ACK(x1)标志的数据包到客户端然后服务端进入到CLOSE-WAIT状态客户端进入FIN-WAIT-2状态。 第三次挥手服务端发送一个FIN(y)标志的数据包到客户端请求关闭服务端到客户端的连接然后服务端进入LAST-ACK状态。 第四次挥手客户端发送一个ACK(y1)标志的数据包到服务端然后客户端进入到TIME-WAIT状态服务端在收到客户端ACK确认数据包后进入CLOSE状态。此时如果客户端等待了2MSL(是报文段的最长寿命MSL时间是不确定的取决于操作系统)后没有收到服务器端的任何回复那就说明服务端已正常关闭随后客户端就可以关闭连接了客户端进入CLOSED状态。
注意只要四次挥手没有结束客户端和服务端就可以继续传输数据 5.5为什么要四次挥手
同一问题为什么不能把服务器发送的 ACK 和 FIN 合并起来变成三次挥手
因为服务器收到客户端要断开连接的第一次挥手请求时可能还有一些数据没有发完这时服务端先回复ACK报文表明我服务端接收到了你断开连接的请求等到服务端的数据发送完后再发送一个FIN报文段表示请求断开服务端到客户端的数据传送。
5.6如果第二次挥手时服务器的 ACK 没有送达客户端会怎样
客户端如果没有收到ACK确认客户端会重新发送FIN请求。
5.7为什么第四次挥手后客户端需要等待 2MSL时间后才进入 CLOSED 状态
因为客户端也要确保服务端成功接收到了自己发送的第四次挥手的ACK确认报文如果服务端没有接收到的话那么服务端就要重新发送FIN报文这时客户端就要时刻准备着重发ACK不然服务端会一直重发FIN报文。如果从开始就一切顺利的话客户端到最后等了2MSL都没有再次收到服务端发送的FIN那么客户端就会推断ACK已经被服务端成功接收了才会进入CLOSED状态关闭TCP连接。