为什么TCP一定要三次握手呢?

搬瓦工机场JMS

直接两次握手不行吗?
辽宁网友:
陕西网友:
青海网友:看了下楼主的这些回复,已经不想跟这种智障在这里扯了。
山西网友:TCP FAST OPEN 了解下
北京网友:
不应答就不应答呗,反正我服务端做了我该做的事,不是明显提高了效率吗? 再说了,你说的这种是少数情况,为了少数人抛弃大部分人,这种做法就很智障啊。而且我已经保证了你即使不应答,但我的数据已经下发了。非常可靠稳定。
湖南网友:https://www.zhihu.com/question/24853633/answer/254224088

为什么连接建立需要三次握手,而不是两次握手?
防止失效的连接请求报文段被服务端接收,从而产生错误。

PS:失效的连接请求:若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一个连接请求就是『失效的』。

若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。

多查一查总能找到,来论坛交流效率又低,真正搞这块的也没几个人
云南网友:1,客户端发起请求给服务端 -> 服务端确认客户端有发送的能力(第一次握手)
2,服务器发送请求给客户端 -> 客户端确认服务端有发送、接收能力 (第二次握手)
3,客户端发送请求给服务端 -> 服务端确认客户端有接收的能力(第三次握手)

经过三次握手之后确定这次传输的客户端和服务端具有收发的能力。才进行通信。
甘肃网友:
河北网友:1.1、3次握手过程

服务端的TCP进程先创建传输控制块TCB,准备接受客户端进程的连接请求,然后服务端进程处于LISTEN状态,等待客户端的连接请求,如有,则作出响应。
1、客户端的TCP进程也首先创建传输控制模块TCB,然后向服务端发出连接请求报文段,该报文段首部中的SYN=1,ACK=0,同时选择一个初始序号 seq=i。TCP规定,SYN=1的报文段不能携带数据,但要消耗掉一个序号。这时,TCP客户进程进入SYN—SENT(同步已发送)状态,这是 TCP连接的第一次握手。
2、服务端收到客户端发来的请求报文后,如果同意建立连接,则向客户端发送确认。确认报文中的SYN=1,ACK=1,确认号ack=i+1,同时为自己 选择一个初始序号seq=j。同样该报文段也是SYN=1的报文段,不能携带数据,但同样要消耗掉一个序号。这时,TCP服务端进入SYN—RCVD(同 步收到)状态,这是TCP连接的第二次握手。
3、TCP客户端进程收到服务端进程的确认后,还要向服务端给出确认。确认报文段的ACK=1,确认号ack=j+1,而自己的序号为seq=i+1。 TCP的标准规定,ACK报文段可以携带数据,但如果不携带数据则不消耗序号,因此,如果不携带数据,则下一个报文段的序号仍为seq=i+1。这 时,TCP连接已经建立,客户端进入ESTABLISHED(已建立连接)状态。这是TCP连接的第三次握手,可以看出第三次握手客户端已经可以发送携带 数据的报文段了。
当服务端收到确认后,也进入ESTABLISHED(已建立连接)状态。

1.2、关于第三次握手的解释

前俩比较容易理解,第三次握手看似多余其实不然,这主要是为了防止已失效的请求报文段突然又传送到了服务端而产生连接的误判
比如:客户端发送了一个连接请求报文段A到服务端,但是在某些网络节点上长时间滞留了,而后客户端又超时重发了一个连接请求报文段B该服务端,而后 正常建立连接,数据传输完毕,并释放了连接。但是请求报文段A延迟了一段时间后,又到了服务端,这本是一个早已失效的报文段,但是服务端收到后会误以为客户端又发出了一次连接请求,于是向客户端发出确认报文段,并同意建立连接。那么问题来了,假如这里没有三次握手,这时服务端只要发送了确认,新的连接就建立了,但由于客户端没有发出建立连接的请求,因此不会理会服务端的确认,也不会向服务端发送数据,而服务端却认为新的连接已经建立了,并在 一直等待客户端发送数据,这样服务端就会一直等待下去,直到超出保活计数器的设定值,而将客户端判定为出了问题,才会关闭这个连接。这样就浪费了很多服务 器的资源。而如果采用三次握手,客户端就不会向服务端发出确认,服务端由于收不到确认,就知道客户端没有要求建立连接,从而不建立该连接。
山东网友:不握手行不行
上海网友:那就换udp,不握手了,全给你
山东网友:三次握手是智障吗?
广西网友:因为不能握脚
青海网友:道理就像你去买东西,第一句肯定问多少钱,第二句是老板回答多少钱,第三句是你说买(或不买,扭头就走也视为不买)。
河北网友:
吉林网友:
河南网友:是啊,很可靠啊。我把数据发你了啊!
新疆网友:
广东网友:
重庆网友:
安徽网友:
所谓三次握手,只是一种简化的理论模型。你不需要在这些概念上花太多时间和精力,而应该跳出教材/教程,去看看现实世界运行的TCP是怎么样的,业界在网络协议上的最佳实践和最前沿成果。

四川网友:有点意思
天津网友:刚对TCP感兴趣。
新疆网友:看过某大佬写的关于富强工具的文章,好像有些就是2次握手的,具体记不清了
新疆网友:三次握手是有严格的数学证明的,只有三次握手才能建立稳定可靠的连接。简单理解其实就是楼上长文说的,没有第三次握手,服务端会由于各种原因多建立很多连接,实际是非常消耗服务器资源的。各种原因包括网络阻塞,还是非常常见的,不是极其少见的情况。
宁夏网友:三次握手是有严格的数学证明的,只有三次握手才能建立稳定可靠的连接。简单理解其实就是楼上长文说的,没有第三次握手,服务端会由于各种原因多建立很多连接,实际是非常消耗服务器资源的。各种原因包括网络阻塞,还是非常常见的,不是极其少见的情况。
吉林网友:小白一枚,只是看书,感觉太智障。有感而发。。。
浙江网友:应该和破墙没关系。。我的意思是TCP应该不是一定需要3次握手。。
河南网友:既然自称小白不懂就多查查资料,不要上来就喷智障设计。Tcp建立是为了稳定连接,有他的使用场景例如文件传输,观看视频为了保证每个字节的数据都准确的被接收。Udp是没有所谓的握手过程,所以延迟比较低,保证实时性,适用于游戏,直播,视频语音等场景。同时因为没有握手过程,所以数据是不稳定,可能出现丢包。
澳门网友:咋个稳定的啊?找不到有说服力的文章!才有此疑问
四川网友:你可以让他握脚
湖南网友:因为tcp有重传机制,就是握手失败的话,数据会重新传输,以保证数据的完整性。Udp就是一直发包,不管你收没收到。
台湾网友:
是啊,即然握手失败还重传,那我只要接到就传不就不用重传了吗?再次体现两次握手效率啊!
广东网友:看了下楼主的这些回复,已经不想跟这种智障在这里扯了。
甘肃网友:1,客户端发起请求给服务端 -> 服务端确认客户端有发送的能力(第一次握手)
2,服务器发送请求给客户端 -> 客户端确认服务端有发送、接收能力 (第二次握手)
3,客户端发送请求给服务端 -> 服务端确认客户端有接收的能力(第三次握手)

经过三次握手之后确定这次传输的客户端和服务端具有收发的能力。才进行通信。
台湾网友:1,客户端发起请求给服务端 -> 服务端确认客户端有发送的能力(第一次握手)
2,服务器发送请求给客户端 -> 客户端确认服务端有发送、接收能力 (第二次握手)
3,客户端发送请求给服务端 -> 服务端确认客户端有接收的能力(第三次握手)

经过三次握手之后确定这次传输的客户端和服务端具有收发的能力。才进行通信。
吉林网友:第一次就是客户端单纯的发,第二次是服务器确认收到,第三次是客户端确认收到,保证两端各自能发送和收到,这样就建立了可靠的连接,有可能因为网络原因任意一端只能发不能收到或者只能收不能发
宁夏网友:你上网有没有碰到502? 你发送了请求,但是主机关机了。他接收你请求了?别一口一个智障,显得自己水平低。
宁夏网友:你付钱,我发货?等你收到货,我发现钱没了。
天津网友:不需要知道对方是否关机,我发了,没应答,不损失啥,当大部分都是正常连接时,每次都三握,那才是效率低下。
浙江网友:大佬,下一代通信协议等你去设计了
湖北网友:TCP FAST OPEN 好像已经两握了。但我对TCP研究不深,需要深入学习一下。
云南网友:你说的这个功能,udp就已经具备了,tcp要的是数据的完整性,效率是其次,你说的

只要知道对方发来请求,那就发好了,管你啥能力呢?即使你没能力,但我发了,至少数据完整稳定

,只管发送,忽略了对方的接收能力,固然要损失掉一部分数据,就和你说的数据完整性矛盾了
浙江网友:数据发送和接收,中间是要经过网络设备的,网络设备的工作模式都是尽力而为,能送到就送到,送不到也不管
举个不恰当的例子,比如A寄快递B,网络设备就是中间的搬运工,搬运快递都是要消耗资源的,他每天送1000个快递,丢了你的1个,搬运工是不会管的
但是通信协议存在,就是为了防止丢快递,A检测到B没回应,就认为这个快递丢了,于是就重新再发1个,搬运工又要重新再给你搬一次
你家要是开搬运公司的,如果每天丢1w个快递,可能需要再多送2-3w次,导致整体送达速度低下,送久了公司就会倒闭
广西网友:当然行,UDP,我管你死活,我发就是了,你收不收不收得到不管我事。
天津网友:当然行,UDP,我管你死活,我发就是了,你收不收不收得到不管我事。
香港网友:
伪科学。
福建网友:为什么要有TCP,直接UDP就行了对吧。
上海网友:善用黑名单,屏蔽傻逼节约时间
/home.php?mod=space&do=friend&view=blacklist
陕西网友:tcp和udp各有其用,不能因为坦克威力大就不要步兵战车了
香港网友:1.因为他叫tcp
2.rfc标准
你要不想握手
1.取用udp
2.重新写一个标准,让全球各厂都用你的标准即可

未经允许不得转载:美国VPS_搬瓦工CN2 GIA VPS » 为什么TCP一定要三次握手呢?

赞 (0) 打赏

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

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

支付宝扫一扫打赏

微信扫一扫打赏