php - http请求建立连接的时候为啥是tcp三次握手,而不是二次或者四次?
PHPz
PHPz 2017-04-11 10:11:04
[PHP讨论组]

面试被问到这样的问题,求大神指教?

PHPz
PHPz

学习是最好的投资!

全部回复(5)
迷茫

我简单点说吧。

首先给出结论:
无论多少次握手都不能满足传输的绝对可靠。
TCP的核心思想:保证数据可靠传输
其次:保证传输效率。

那么,就可以开始回答了:

为什么要握手(为什么不是2次握手)?

**为了保证传输的可靠。**
第一次握手CLIENT告诉SERVER“我将要开始传输数据了”。
第二次握手SERVER告诉CLIENT“我已经知道你将要传输数据了,我已经做好准备”。
第三次握手CLIENT告诉SERVER“我已经知道你已经知道'我知道你已经做好准备'”,SERVER端收到这个信号,开始传输数据。
但是此时CLIENT并不知道SERVER已经知道“CLIENT 已经知道SERVER已经知道”(有点绕,可以忽略这一句)。

为什么是3次而不是4次?

**为了提高传输的效率**
总之不管多少次握手,总会有一方不知道对方已经知道。因此为了传输效率,只要3次握手就认为已经可以开始传输数据,三次握手之后,
CLIENT和SERVER就进入ESTABLISHED状态,开始数据传输。

详情可以查看这篇博客:计算机网络五层协议——TCP协议实例图解

巴扎黑

你问她 你喜欢吃什么
她告诉你我喜欢吃苹果
然后你知道了她喜欢吃苹果,回答了一句‘哦’。

女神在你说了‘哦’之后就不理你了,这个话题就终结了。

你说是不是这个道理?三次握手不就是这样的吗?(调侃向)

阿神

为什么不是两次:

  • A->B: 洞幺洞幺,我是洞拐,收到请回复,Over。

  • B->A: 洞拐洞拐,洞幺收到,Over。

请问根据以上对话判断,

  1. B是否能收到A的信息? (答案是肯定的)

  2. A是否能收到B的信息? (你猜?)

为什么不是四次:

  • A->B: 洞幺洞幺,我是洞拐,收到请回复,Over。

  • B->A: 洞拐洞拐,洞幺收到,收到请回复,Over。

  • A->B: 洞幺洞幺,洞拐收到,收到请回复,Over。

  • B->A: 洞拐你是鱼吗。。。 (传说鱼只有7秒记忆。)

ringa_lee
tcp/ip connect: tcp/ip的三次握手
                  syn握手信号
                  ------------->
                  syn/ack确认字符
          client  <-------------  server
                  ack确认包
                  -------------->
ringa_lee

http协议就是这么规定的,还想咋握手

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号