“为什么是三次握手”与“为什么是三次握手,却是四次挥手”其实是不同的问题

这篇具有很好参考价值的文章主要介绍了“为什么是三次握手”与“为什么是三次握手,却是四次挥手”其实是不同的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

“为什么是三次握手?”

这个问题言下之意其实在问:“为什么不是0次、1次、2次、4次甚至更多次握手”。

确保双方的 发送能力 和 接收能力 都是好的
该回答下的一评论:其实很简单, 1.a->b, 这个时候没有任何状态, 2. b->a, b给a发东西, 说明收到了a的东西, 证明了a的发送能力是没问题的,同时证明了b的接收能力也是没有问题的。 如果到这里就结束了, 那么a的接收能力和b的发送能力就没办法保证了。如果再加上3. a->b , 证明了a收到了b的发送, 那么b的发送能力也是好的, a的接收能力也是好的。这样a和b的接收发送的能力都是好的, 就没必要再次证明了。 而楼主说的第三个包没有到的问题, 假设过程3里, a发出去了, 但是没到b。对于a来说, b收到了自己的发送并给自己做了回应,就可以认为b是正常的, a相信自己也是正常的, 所以这个时候对于a来说, tcp握手就结束了, 但是对于b来说, 在第二个包发出去的时候, a没有回应, 那么b就会认为a的接收能力是有问题的, b就会一直发, 直到a给了回应。不然b就永远不会认为tcp握手结束了。

双方都认为当前信道/数据的传输是可靠的
原评论:所以三次握手不是TCP本身的要求,而是为了满足“在不可靠信道上可靠地传输信息”这一需求所导致的。请注意这里的本质需求:信道不可靠,数据传输要可靠
这个问题的本质是, 通过一个不完全可靠的信道, 最少需要几次消息传输, 信道两边的人能够对一个问题达成一致. 对于TCP来说, 无论有没有初始序号的要求, 想要两边都同意开始传出数据, 就至少需要3次消息的交换:

  • 0次: 显然不行
  • 1次: A->B, A不知道B是否同意
  • 2次: A->B, B->A. B不知道A是否收到自己的消息, 因为信道不完全可靠
    这儿A已经可以确信信道是可靠的了,只是B不能确信而已,这儿你要是把信道当成TCP链接本身,也就是全双工,自然如此,但是像我这样把链路分成两个方向上的 信道的人来说,却不是如此。并且TCP确实可以建立半链接
  • 3次: A->B, B->A, A->B. 两边都收到了对方的ACK, 意味着各自都了解了对方的意图, 从而可以对是否开始通信这个最简单的问题

如果该问题细一点:“为什么是三次握手,不是2次握手?”,即在问第3次握手的作用。

TCP 为什么是三次握手,而不是两次或四次? - wuxinliulei的回答 - 知乎:
为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。

“为什么是三次握手,却是四次挥手?”

这个问题其实在问“四次挥手”中,服务端的ACK和FIN为什么不能同时发。因为在“为什么是三次握手”的回答中,看到有一个答案说的是:

  1. A 发送 同步信号 SYN + A’s seq
  2. B 确认 收到 A’s SYN,并记录 A’s seq,命名 B’s ACK
  3. B 发送 SYN + B’s seq
  4. A 确认 B’s SYN,并记录 B’s seq,命名 A’s ACK

很显然,步骤2、3可以合并,所以只需要3次握手。

但是我觉得这个回答是解释“为什么是三次握手,却是四次挥手?”这个问题的背景、由来,即:为什么四次挥手中,服务端的 ACK 和 SYN 要分开发?

一个比较合理的解释是:

这是因为服务端在LISTEN状态下,收到建立连接请求的 SYN 报文后,把 ACK 和 SYN 放在一个报文里发送给客户端。而关闭连接时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即 close,也可以发送一些数据给对方后,再发送 FIN 报文给对方来表示同意现在关闭连接,因此,己方 ACK 和 FIN 一般都会分开发送。文章来源地址https://www.toymoban.com/news/detail-499438.html

到了这里,关于“为什么是三次握手”与“为什么是三次握手,却是四次挥手”其实是不同的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 什么是三次握手与四次挥手( 一篇文章讲清楚TCP协议与UDP协议)

        关于TCP协议和UDP协议大家应该都有所耳闻,我们常用的网络通讯。比如浏览网页、软件聊天、以及你看到的这篇文章,都是通过这两种协议来进行数据传输的。 到底他们是如何工作的?这两种协议的区别又是什么呢?请随武汉海翎光电的小编一起耐心看完这篇文章,你一

    2024年02月09日
    浏览(46)
  • TCP为什么要三次握手,而不是两次或四次?

    TCP连接时用于保证可靠性和流量控制维护的某些状态信息,这些信息的组合,包括 Socket,序列号和窗口大小 称为连接。 以上三个方面分析三次握手原因: 首要原因为了防止旧的重复连接初始化造成混乱 网络堵塞情况下,如果一个旧的SYN报文比新的SYN报文早到达了服务端,

    2023年04月26日
    浏览(95)
  • TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以?

    TCP实现原理和为什么需要三次握手?两次握手不可以?四次握手不可以? 1. 什么是TCP协议? TCP:Transmission Control Protocol翻译过来就是传输控制协议,TCP协议是一个面向连接的、可靠的、基于字节流的传输层协议 RFC 793对TCP连接的定义 Connections: The reliability and flow control mechanisms descri

    2024年02月16日
    浏览(49)
  • TCP为什么需要三次握手进行连接,二次或四次不可以吗?

    为了确认双方具有接收和发送的能力。 1. 可以阻止重复历史连接的初始化(主要原因)。 2. 可以同步双方的初始序列号。 3. 可以避免资源的浪费。 1. 为了防止旧的重复连接初始化造成混乱。 当客户端发送了一个 SYN 报文后,突然宕机了,并且这个 SYN 报文还被网络阻塞了

    2024年02月16日
    浏览(59)
  • 什么是网络编程?Java如何实现?三次握手和四次挥手?

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 网络编程 : 网络编程,就是指在网络通信协议下,不同计算机运行的程序,进行的数据传输,即:计算机与

    2024年02月08日
    浏览(44)
  • 三次握手四次挥手

    TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。它通过三次握手来建立连接,通过四次挥手来断开连接。 所谓三次握手,是指建立一个TCP连接时,需要客户端和服务器总共发送3个报文。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双

    2024年02月09日
    浏览(38)
  • 4.23、TCP状态转换(为什么四次挥手)

    2MSL(Maximum Segment Lifetime) 主动断开连接的一方, 最后进入一个 TIME_WAIT状态, 这个状态会持续: 2msl msl : 官方建议: 2分钟 , 实际是 30s 当 TCP 连接主动关闭方接收到被动关闭方发送的 FIN 和最终的 ACK 后,连接的主动关闭方必须处于 TIME_WAIT 状态并持续 2MSL 时间。 这样就能够让 T

    2023年04月22日
    浏览(37)
  • TCP为什么三次握手?

    参考:公众号 小林coding 常见回答:三次握手保证双方都具有接受和发送数据的能力。 主要原因: 1. 防止重复历史连接的初始化 2.同步双方初始序列号 3.避免资源的浪费 序列号seq标记已发送数据的位置,确认号ack表示数据已接受,期望下一次数据序列号seq = ack 当因为网络拥

    2023年04月27日
    浏览(80)
  • TCP 三次握手:四次挥手

    TCP 三次握手/四次挥手 TCP 在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。 数据包说明 源端口号( 16 位):它(连同源主机 IP 地址)标识源主机的一个应用进程。 目的端口号( 16 位):它(连同目的主机

    2024年01月19日
    浏览(43)
  • tcp 为什么要三次握手,两次不行吗?为什么?

    TCP使用三次握手(Three-Way Handshake)的过程是为了确保双方建立起可靠的通信连接,并在连接的建立过程中协商必要的参数。两次握手是不够的,原因主要有以下几点: 防止已失效的连接请求被接受: 假设有A和B两台主机,A向B发送了一个连接请求,但由于某些原因导致连接建

    2024年02月20日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包