TCP的三次握手和四次挥手
背景知识
- TCP报文的头部(HEAD内容)各字段的含义,TCP头部最小为20个字节,这20个字节分为5行,每行4个字节。
- 其中第4行从第11个字节到第16个字节是6个标志位,每1位的值只有0和1,代表不同的含义。
- ACK:确认序号有效。当值为1时,表示确认号有效。一般称携带ACK标志为1值当报文段为“确认报文段”。同时,TCP规定在连接建立后所有传送的报文段都必须把ACK设置为1。
- SYN:发起一个新连接。当SYN的值为1时,表明这是一个请求连接报文段。一般称携带SYN标志的TCP报文段称为“同步报文段”。在TCP三次握手中的第一个报文就是同步报文段,在连接建立时用来同步序号。对方若同意建立连接,则在响应报文中使ACK值为1。
- FIN:释放一个连接。当FIN的值为1时,表示此报文段的发送方的数据已经发送完毕,并要求释放TCP连接。
- RST:重置连接。当RST的值为1时,表示TCP连接中出现了严重错误,需要释放并重新建立连接。一般称携带RST标志值为1的TCP报文段为“复位报文段”。
- PSH:推送。当PSH的值为1时,表示该报文段是高优先级,接收方TCP应该尽快推送给接收应用程序,而不用等到整个TCP缓存都填满了后再交付。
三次握手
- 第一次握手:client端首先向server端发送一个报文,其中标识SYN=1,请求与server建立一个连接。
- 第二次握手:server端回复报文时将ACK值置为1,同时server端也向client发起一个建立连接的请求,将SYN值置为1。所以最终回复给client端的报文中,SYN和ACK值都被置为1。
- 第三次握手:client端收到回复后,再给server端发一个确认报文,设置ACK值为1。
四次挥手
- 第一次挥手:client端给server端发送一个FIN=1的请求报文。
- 第二次挥手:server端给client端回复一个ACK=1的响应报文。
- 第三次挥手:server端给client端发送一个FIN=1的请求报文。
- 第四次挥手:client端给server端回复一个ACK=1的响应报文。
为什么是三次握手,四次挥手
- 首先,TCP连接是全双工的,发送和接收是两个分开的通道。因此,连接的双方都需要发送一个建立连接的请求。然后,当server端收到一个SYN=1的请求报文后准备回复client端一个ACK=1的报文同时将自己的请求SYN也设置为1,这样不用单独发送一个建立连接的请求,所以只需要三次。
- 然而,在client端希望断开连接时发送FIN=1的报文给server端,由于此时server端还有没发送完成的报文,不能马上断开连接,只能回复一个ACK=1的报文。等待server端发送完数据报文后,server发起一个FIN=1的断开连接的报文,client端回复最终的ACK=1的报文。
参考
posted @
2019-08-24 00:51
情敌贝多芬
阅读(
177)
评论()
编辑
收藏
举报