如何给自己的网站做优化,讯美 深圳网站建设,世界摄影网站,国内最好的seo培训TCP#xff08;传输控制协议#xff09;使用三次握手#xff08;3WHS#xff09;来建立一个可靠的连接#xff0c;并使用四次挥手#xff08;4WHS#xff09;来终止连接。以下是每个步骤的详细解释#xff1a;
三次握手#xff08;3WHS#xff09;建立连接#xff…TCP传输控制协议使用三次握手3WHS来建立一个可靠的连接并使用四次挥手4WHS来终止连接。以下是每个步骤的详细解释
三次握手3WHS建立连接 SYN同步序列编号 客户端选择一个初始序列号x并发送一个带有SYN标志的TCP段给服务器请求建立连接。此时TCP段的序列号字段设置为x。 SYN-ACK同步-确认 服务器收到客户端的SYN段后如果同意建立连接则会发送一个SYN-ACK段作为响应。服务器选择自己的初始序列号y并在ACK确认字段中确认客户端的序列号x1期望接收到的第一个字节的序列号。同时SYN标志位也被设置。 ACK确认 客户端收到服务器的SYN-ACK段后发送一个带有ACK标志的TCP段给服务器确认服务器的初始序列号。客户端在ACK字段中填入y1。
完成这三个步骤后TCP连接就成功建立客户端和服务器可以开始发送数据。
为什么需要三次握手
防止已失效的连接请求报文段突然传到服务器因而产生错误如果使用两次握手服务器端收到一个旧的连接请求并响应可能会导致服务器错误地建立一个新连接。例子允许双方确认彼此的初始序列号三次握手确保了客户端和服务器都能够确认对方的接收能力和发送能力。
四次挥手4WHS终止连接 FIN结束 当一方完成数据传输并希望关闭连接时它发送一个带有FIN标志的TCP段表示已经没有数据要发送了。 ACK确认 对方收到FIN段后发送一个ACK段确认这个FIN。 FIN结束 对方完成数据传输后也发送一个带有FIN标志的TCP段。 ACK确认 最初发送FIN的一方收到这个FIN段后发送最后一个ACK段确认。
完成这四个步骤后TCP连接被关闭。
为什么需要四次挥手
TCP连接是全双工的意味着数据可以在两个方向上独立传输。因此每个方向上的连接都需要单独关闭。确保数据传输完成四次挥手允许一方在关闭自己的发送部分后仍然接收来自对方的剩余数据。
上述为什么要三次握手第一个原因的理解
为什么TCP连接建立需要三次握手而两次握手可能不足以防止已失效的连接请求的问题。
假设场景
假设客户端A想要与服务器B建立TCP连接但是客户端A发送的第一个连接请求SYN在网络中延迟了没有立即到达服务器B。
第一次握手SYN
客户端A发送一个SYN报文假设序列号为1000给服务器B请求建立连接。
网络延迟
这个SYN报文在网络中延迟没有立即到达服务器B。
第二次握手SYNACK如果是两次握手
假设我们只使用两次握手客户端A在发送第一个SYN报文后由于没有收到响应会重新发送另一个SYN报文假设序列号为2000。
第三次握手ACK如果是两次握手
服务器B最终收到了第二个SYN报文序列号2000并发送了一个SYNACK报文作为响应同意建立连接。
延迟的报文到达
此时客户端A收到了服务器B的SYNACK报文并发送了一个ACK报文确认完成了两次握手过程。但是之前延迟的第一个SYN报文序列号1000现在终于到达了服务器B。
问题出现
如果服务器B在两次握手后没有收到客户端A的最终ACK确认它可能会认为连接没有成功建立。因此当服务器B收到延迟的SYN报文序列号1000时它可能会错误地认为客户端A又发送了一个新的连接请求并尝试重新建立一个新的连接。
三次握手的作用
通过三次握手即使客户端A的第一个SYN报文序列号1000延迟到达服务器B也不会错误地建立一个新的连接。这是因为 服务器B在收到第一个SYN1000后会发送一个SYNACK期望收到100011001等待客户端的确认。客户端A收到这个SYNACK后会发送一个ACK确认1001但由于客户端A实际上发送的是序列号2000所以这个ACK不匹配服务器B的期望。服务器B收到不匹配的ACK后会知道这不是对它发出的SYNACK的响应因此不会错误地建立一个新的连接。
通过这个例子你可以看到三次握手如何确保即使在网络延迟或重传的情况下连接的建立也是可靠和有序的。它防止了因为旧的或延迟的连接请求而导致的不必要的连接建立确保了服务器不会对已经失效或过时的连接请求做出响应。