TCP的三次握手和四次挥手

三次握手

在这里插入图片描述
TCP在建立连接的时候,需要三次握手。三次握手就是上面的一个过程,图源《图解HTTP》。
发送端–发送带有 SYN 标志的数据包––一次握手––接收端
接收端–发送带有 SYN/ACK 标志的数据包––二次握手––发送端
发送端–发送带有带有 ACK 标志的数据包––三次握手––接收端

相当于这个对话:
A:我给你发了个消息
B:我收到你的消息了
A:我收到你收到消息的消息了

为什么要三次握手?

三次握手的目的是建立可靠的通信信道。三次握手就是为了通讯双方确认四个状态:自己接收正常、自己发送正常、对方接受正常、对方发送正常。

  • 第一次握手:发送端什么都不能确认;接受端确认了自己接收正常、发送端发送正常;
  • 第二次握手:发送端确认自己接收正常、发送正常、接收端接收正常、发送正常;接收端依然只能确认自己接收正常、发送端发送正常;
  • 第三次握手:发送端确认自己接收正常、发送正常、接收端接收正常、发送正常;接收端确认自己接收正常、发送正常、发送端发送正常、接收正常。

为什么要回传SYN

TCP是面向连接的,可靠的传输层协议。如果接收端在二次握手过程中,不回传SYN,传输端怎么判断接收端是不是在响应自己发送的建立连接请求呢?所以,为了面向连接,为了实现可靠传输,接收端应该回传SYN。

回传了SYN,为什么还要传ACK呢?

还是TCP是面向连接的,可靠的传输层协议。接收端响应了发送端的连接建立请求,如果不发ACK给发送端,接收端在第三次握手的过程中,怎么确认发送端是在确认自己的确认呢?也就是,第三次握手过程中,发送端是发ACK给接收端,他们来了一个角色互换。

四次挥手

在这里插入图片描述
TCP在断开连接时,需要进行如上图所示的四次挥手。
第一次挥手:发送端发送FIN给接收端,请求断开连接
第二次挥手:接收端发送ACK给发送端,同意断开连接
第三次挥手:接收端发送FIN给发送端,请求断开连接
第四次挥手:发送端发送ACK给接收端,同意断开连接

相当于这个对话:
A:我要和你断开连接
B:好的,同意
B:我也要和你断开连接
A:行

为什么要四次挥手?

举个例子:女朋友要和你分手,当她提出分手请求的时候,你得确认你确实听到她这个请求了,但是你还可以选择挽不挽留,在你思考的时候,这个属于半分手状态。最终当你觉得不堪重负,同意她的分手请求时,你告诉他,好,分手,女朋友礼貌地回你:那祝你前程似锦。你们的整个分手流程就完成了。如果女朋友提完分手之后就把你联系方式删了,你说她礼不礼貌吗?优雅!我们要优雅!

四次挥手中的第二次和第三次能合并嘛?

因为,在接收端收到关闭连接请求之后,接收端可能还会有很多数据要发送给发送端,接收端需要把手头的工作完成了,在决定要断开连接。

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值