找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 271169|回复: 0

程序员经典面试题:为什么TCP建立连接是三次握手,多一次不行么 ...

[复制链接]

该用户从未签到

发表于 2021-2-21 17:13:19 | 显示全部楼层 |阅读模式

您需要 登录 才可以下载或查看,没有账号?立即注册

×
无论是前端程序员还是后台程序员,在面试中最常见的一个题目,便是为什么TCP需要三次握手?

一个非常通俗地解释便是,第一次握手是问对方能否听到,第二次握手是对方发出的我听到了,你是否听得到,第三次握手则是再次回应对方,我也听到了。这个解释虽然通俗易懂,但实际上并不是那么的专业。
举个简单的例子,假如在第一次握手之后,没有收到对方的回应,这个时候又发起第二次请求,这个时候收到了对方的回应。这个时候,这个相应是第一次的请求还是第二次的呢?
我们常说,TCP是可靠的连接,那么,什么是可靠的连接呢?在RFC793中,用于保证可靠性和流控制机制的信息,包括 Socket、序列号以及窗口大小叫做连接。
Socket是发送方与接收方的地址与端口号,窗口大小则是每次发送的数据窗口大小,用来做流量控制,序列号则是每个数据包的序列号。我们都知道,TCP的可靠性,很大一部分就是对每个数据包的应答与超时重传,用的正是这个序列号。
也就是说,TCP在三次握手的时候,就已经对这三个元素进行了确定。第一次握手的时候,发送方发起一次SYN操作,告诉对方自己的序列号。第二次握手的时候,接收方会回复一个ACK,同时也发起一次SYN操作,一个TCP包,同时包含了这两个消息。第三次握手的时候,发送方回复一个ACK,同时带上应用数据,发送给接收方。

这三次操作,缺一不可,少了任何一步,都不能保证双方都能确认对方的Seq信息正确。那么,能不能多一次呢?

例如可以把第二次握手拆分两步,分别发送ACK与SYN。只是没有必要,因为一个TCP包本身就能够包含两个消息,多一次握手意味着更多的开销。所以说TCP三次握手就可以,不需要四次。
回到最前面的问题,为什么通俗的解释不好,我认为,作为一个工程师,严谨是必须的,只有当你真正了解了TCP连接的真正目的,才能真正掌握技术的精髓。
回复

使用道具 举报

网站地图|页面地图|文字地图|Archiver|手机版|小黑屋|找资源 |网站地图

GMT+8, 2024-7-3 21:32

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表