TCP的三次握手和四次挥手

TCP的三次握手和四次挥手实质是TCP通信的连接和断开

三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤销联系,并建立虚连接
四次挥手:终止TCP连接,端开连接时,需要客户端和服务端同发送4个包已确认连接的断开

三次握手

  • 第一次握手:发送一个带SYN标志的数据包给服务端
  • 第二次握手:服务端接收成功后,回传一个带SYN/ACK标志的数据包传递确认信息,标识接收到了
  • 第三次握手:客户端再回传一个带有ACK标志的数据包,标识我知道了,握手结束

SYN(Synchronized):当置1时,表示当前通信正处于建立连接的状态

过程详细说明

  • 客户端向服务器第一次握手:发送建立TCP连接请求的报文,其中报文包含seq序列号,是由发送端随机生成的,并且将报文中的SYN置1,表示建立连接(SYN=1,seq=x)
  • 服务端发送回应第二次握手:服务器回复客户端发送的TCP连接请求报文,其中包括seq序列号,是由服务端随机生成的,并且将报文中SYN置1,而且还会产生ACK字段,ACK字段数值是再客户端发送过来的序列号seq的基础上加1进行回复(SYN=1,seq=y,ack=x+1)ack可以理解为是与哪个客户端建立连接
  • 客户端向服务器第三次握手:客户端收到服务器发送的TCP建立连接验证请求后,会使自己的序列号加1表示,并且再次回复ACK,再服务端发送的seq上加1进行恢复(SYN=1,seq=x+1,ACK=y+1)

四次挥手

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭,这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭

  • 第一次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态
  • 第二次挥手:服务端接收FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务端进入(、CLOSE_WAIT状态
  • 第三次挥手:服务端发送一个FIN,用来关闭服务器到客户端的数据传送,服务端进入LAST_ACK状态
  • 第四次挥手:客户端接收FIN之后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务端,确认序号为收到序号加1,服务端进入CLOSE状态,完成四次挥手

FIN置1,表示进入断开TCP连接

过程详细说明

  • 客户端向服务端发送第一次挥手,报文包含seq序列号,是客户端随机生成的,并且将报文中的FIN字段置1,表示需要断开TCP连接(FIN=1,seq=x)
  • 服务端向客户端发送第二次挥手,报文包含seq序列号,是服务端随机生成的,并且将报文中的FIN字段置1,以及ACK为客户端发送的seq加1,告知客户端,服务端的TCP断开请求已得到验证(FIN=1,ACK=x+1,seq=y)
  • 服务端在回复完客户端之后,不会马上进行TCP连接的断开,服务端会先确保断开前,所有传输的数据是否都已经传输完毕,一旦确认传输数据完毕,就会将回复的报文的FIN置1,并随机生成seq(FIN=1,ACK=x+1,seq=z)
  • 客户端收到服务端的TCP断开请求后,会恢复服务端的断开请求,包含随机生成的seq,ACK为服务器发送的z加1,以及FIN字段置1(FIN=1,ACK=z+1,seq=h)
如果您觉得这篇文章不错,且手里较为宽裕,可以支持一下博主,一分也是缘分😊
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇