linux 建立http连接失败,【linux】http请求建立连接的时候为啥是tcp三次握手,而不是二次或者四次?...
面试被问到这样的问题,求大神指教?
回答
我简单点说吧。
无论多少次握手都不能满足传输的绝对可靠。
TCP的核心思想:保证数据可靠传输
其次:保证传输效率。
那么,就可以开始回答了:
为什么要握手(为什么不是2次握手)?
**为了保证传输的可靠。**
第一次握手CLIENT告诉SERVER“我将要开始传输数据了”。
第二次握手SERVER告诉CLIENT“我已经知道你将要传输数据了,我已经做好准备”。
第三次握手CLIENT告诉SERVER“我已经知道你已经知道'我知道你已经做好准备'”,SERVER端收到这个信号,开始传输数据。
但是此时CLIENT并不知道SERVER已经知道“CLIENT 已经知道SERVER已经知道”(有点绕,可以忽略这一句)。
为什么是3次而不是4次?
**为了提高传输的效率**
总之不管多少次握手,总会有一方不知道对方已经知道。因此为了传输效率,只要3次握手就认为已经可以开始传输数据,三次握手之后,
CLIENT和SERVER就进入ESTABLISHED状态,开始数据传输。
为什么不是两次:
A->B: 洞幺洞幺,我是洞拐,收到请回复,Over。
B->A: 洞拐洞拐,洞幺收到,Over。
请问根据以上对话判断,
B是否能收到A的信息? (答案是肯定的)
A是否能收到B的信息? (你猜?)
为什么不是四次:
A->B: 洞幺洞幺,我是洞拐,收到请回复,Over。
B->A: 洞拐洞拐,洞幺收到,收到请回复,Over。
A->B: 洞幺洞幺,洞拐收到,收到请回复,Over。
B->A: 洞拐你是鱼吗。。。 (传说鱼只有7秒记忆。)
你问她 你喜欢吃什么
她告诉你我喜欢吃苹果
然后你知道了她喜欢吃苹果,回答了一句‘哦’。
女神在你说了‘哦’之后就不理你了,这个话题就终结了。
你说是不是这个道理?三次握手不就是这样的吗?(调侃向)
tcp/ip connect: tcp/ip的三次握手
syn握手信号
------------->
syn/ack确认字符
client
ack确认包
-------------->
哈,有意思的问题。
tcp三次握手,四次挥手。
我的理解是:
tcp是全双工双向通信,因此通信双方都要发送syn握手信号,而对方都要回复一个ack确认信号。
因此握手通常应该是2个syn+2个ack=4个信号包,tcp里服务端发送ack信号和发送syn信号,可以合并成一个包,所以可以减少一个包,因此就变成了3个包。
挥手也是4个信号包(2个fin+2个ack=4)哈,那能不能模仿握手合并信号包呢?答案是不能,因为ack信号后,可能有部分数据没有发送完,还要等待一段时机(比如发送某些数据后),才能发送fin信号。
简单理解就是,双向可靠通信,4个包,握手可以节省一个包,挥手不能节省包。
我的理解是这样的:
第一次握手:人群中有人向你向你喊了一声:草拟马!(syn=j)
第二次握手:然后你听到有人骂你找到那个人回复了一句:我(syn=k)听到有人骂我了是你(ask=j+1)喊的吗?
第三次握手:那个人回答你:是我(ask=k+1)。
开始交互数据: 开始打到一方逃跑为止。
上面那个说两次洞幺的,你没考虑到一个问题吗?
你用着呼叫机,你打电话给你朋友。开始第一次:你吃饭了吗?(你问)
第二次:还没吃(你朋友回到)
然后到这里,你就没声音了。你不在回一句朋友怎么知道你有没有听到?
电话打进来,问了一句就没消息,会不会觉得你消失了,或出事了?
建立连接过程中需要确定,双方都能收到消息。不然就是UDP了
http协议就是这么规定的,还想咋握手
linux 建立http连接失败,【linux】http请求建立连接的时候为啥是tcp三次握手,而不是二次或者四次?...相关推荐
- TCP三次握手(建立连接)/四次挥手(关闭连接)
相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试, ...
- 【Linux云计算架构:第三阶段-Linux高级运维架构】第26章——tcp三次握手四次挥手及在局域网中使用 awl伪装MAC地址进行多线程SYN攻击
25.1 tcp三次握手及tcp连接状态(含tcpdum抓包分析) 25.2 tcp四次挥手及tcp连接状态 25.3 实战:在局域网中使用 awl伪装MAC地址进行多线程SYN攻击 ssh 客户端: ...
- 深入理解 Linux 的 TCP 三次握手
在后端相关岗位的入职面试中,三次握手的出场频率非常的高,甚至说它是必考题也不为过.一般的答案都是说客户端如何发起 SYN 握手进入 SYN_SENT 状态,服务器响应 SYN 并回复 SYNACK,然 ...
- TCP三次握手(建立连接)
TCP FLAG 位由6个 bit 组成,分别代表 ACK. SYN. FIN. URG. PSH .RST ,都以置1 表示有效.我们重点关注 SYN, ACK FIN SYN ( Synchron ...
- TCP三次握手在linux内核中的实现
TCP三次握手在linux内核中的实现 以下基于linux内核2.4.0源码(转自www.yuanma.org/) 以前一直使用的网络通讯的函数都是工作在阻塞模式.在看connect实现源码时,突然想 ...
- TCP三次握手建立连接的过程
来源:TCP三次握手建立连接的过程 TCP 是面向连接的协议,所以每次发出的请求都需要对方进行确认.TCP 客户端与 TCP 服务器在通信之前需要完成三次握手才能建立连接. 下面详细讲解三次握手的过程 ...
- TCP三次握手建立连接
一.三次握手的过程 TCP需要三次握手才能建立连接,整个过程如下图所示: 假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程.最开始的时候两端的TCP进程都处于ClOSED(关闭)状态. 这 ...
- TCP传输连接--建立连接阶段(TCP三次握手)
目录 一.TCP相关概念: 二.TCP连接建立过程中要解决的问题: 三.TCP三次握手的过程: 四.可以两报文握手建立连接 五.总结: 一.TCP相关概念: 1.TCP是面向连接的协议. 2.TCP是 ...
- Wireshark抓包示范:TCP三次握手建立连接和四次握手断开连接
转载请标注: 披萨大叔的博客 http://blog.csdn.net/qq_27258799/article/details/51379508 如果您觉得这篇文章对您有帮助,请点下文章最下面的赞~ ...
最新文章
- matlab linprog应用示例
- 行为模式之Mediator模式
- S3C2440启动代码分析
- vue js 工具方法封装js 文件
- EaglePHP开源框架全新改版(v1.8)
- iPhone 或将告别 3D Touch ?
- 三、 复杂对象类型的WebService
- 程序员转行做运营,曾被逼得每天想离职,最后...
- 计算机组成原理实验 实验四:多周期CPU实验要求(源代码全)
- WIN10使用VEH+硬件断点实现不修改代码完成破解
- GPU设备架构全面解析(持续更新ing)
- java设计模式 建造模式_java设计模式(三)建造者模式
- 如何用计算机求特征值特征向量,利用QR算法求解矩阵的特征值和特征向量
- 给米钱包、买买分收取用户15%-20%“砍头息”,泸州银行为资金方
- android studio 读取网络图片
- 一个ppp帧的数据部分(用十六进制写出)是7D 5E FE 27 7D 5D 7D 5D 65 7D 5E。
- 【matplotlib】绘制简单二维、三维图像
- JS使用userAgent判断操作系统和浏览器类型
- 什么是跨境电商ERP?
- 哔哩哔哩html无法显示,哔哩哔哩视频显示在Github的Makedown博客页方法
热门文章
- 漫威系列-《复联4》
- 单因素模糊评价matlab,用matlab进行模糊综合评判
- 微软怎么设计Exchange 2003的体系结构
- [SPOJ IGAME Interesting Game]Nim 博弈+数位DP
- 面试经典算法-上楼梯问题
- 关于svn提交performing vcs refresh 卡住的解决办法
- 2018秋北京松松兄弟线下聚会干货分享
- 求购安霸Ambarella IONE这颗料的SDK开发工具包 Software Development Kit
- pl2303hxa串口线驱动_PL2303 USB转串口驱动64位(非认证线缆可用)_下载_热门驱动_驱动精灵...
- 基于声网 iOS SDK 实现视频直播应用