码迷,mamicode.com
首页 > 其他好文 > 详细

TCP三次握手和四次挥

时间:2020-05-14 15:31:35      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:tcp传输   一起   发送请求   其他   ima   请求   图片   需要   能力   

一、TCP报文格式

在了解三次握手和四次挥手之前,首先要知道TCP报文内部包含了哪些东西。

技术图片

报文主要段的含义:

序号[seq]:用来标记数据段的顺序,确保TCP传输有序。

确认序号[ack]:发送方期待接收的下一序列号<ack=seq+1>。只有ACK=1时才有效。

ACK[确认]:确认序号标志,ACK=1表示确认号字段有效,ACK=0表示确认序号无效。

SYN[同步]:连接请求序号标志,用于建立连接。
    SYN=1表示连接请求报文[SYN=1,ACK=0]或连接接受报文[SYN=1,ACK=1]。
    SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。    

FIN[终止]:结束标志,用于释放连接,FIN=1表示发送方的数据已经发送完毕,并要求释放运输连接。

PS:ACK、SYN和FIN这些大写的单词表示标志位[暂1bit],其值要么是1,要么是0;ack、seq小写的单词表示序号。
二、“三次握手”
2.1 三次握手过程

建立TCP连接时,需要客户端和服务器共发送3个包。

  • 第一次:客户端发送初始序号x和SYN=1请求标志

  • 第二次:服务器发送请求标志SYN,发送确认标志ACK,发送自己的序号seq=y,发送客户端的确认序号ack=x+1

  • 第三次:客户端发送ACK确认号,发送自己的序号seq=x+1,发送对方的确认号ack=y+1

技术图片

2.2 三次握手过程分析:
  • 第一次:客户端发送请求到服务器,服务器知道客户端发送,自己接收正常。SYN=1,seq=x
  • 第二次:服务器发给客户端,客户端知道自己发送、接收正常,服务器接收、发送正常。ACK=1,ack=x+1,SYN=1,seq=y
  • 第三次:客户端发给服务器:服务器知道客户端发送,接收正常,自己接收,发送也正常.seq=x+1,ACK=1,ack=y+1

上面分析过程可以看出,握手两次达不到让双方都得出自己、对方的接收、发送能力都正常的结论的。

三、 “四次挥手”
3.1 四次挥手过程
  • 第一次挥手:客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态
  • 第二次挥手:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态
  • 第三次挥手:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)
  • 第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态。

技术图片

3.2四次挥手过程分析
  • 第一次:客户端请求断开FIN,seq=u
  • 第二次:服务器确认客户端的断开请求ACK,ack=u+1,seq=v
  • 第三次:服务器请求断开FIN,seq=w,ACK,ack=u+1
  • 第四次:客户端确认服务器的断开ACK,ack=w+1,seq=u+1
四、其他问题
4.1为什么三次握手和四次挥手?
  • 三次握手时,服务器同时把ACK和SYN放在一起发送到了客户端那里
  • 四次挥手时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方 ACK 和 FIN 一般都会分开发送。
4.2为什么客户端最后还要等待2MSL?
  • 客户端需要保证最后一次发送的ACK报文到服务器,如果服务器未收到,可以请求客户端重发,这样客户端还有时间再发,重启2MSL计时。

TCP三次握手和四次挥

标签:tcp传输   一起   发送请求   其他   ima   请求   图片   需要   能力   

原文地址:https://www.cnblogs.com/Beavan/p/12888434.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!