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

回答

我简单点说吧。

无论多少次握手都不能满足传输的绝对可靠。

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三次握手,而不是二次或者四次?...相关推荐

  1. TCP三次握手(建立连接)/四次挥手(关闭连接)

    相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试, ...

  2. 【Linux云计算架构:第三阶段-Linux高级运维架构】第26章——tcp三次握手四次挥手及在局域网中使用 awl伪装MAC地址进行多线程SYN攻击

    25.1 tcp三次握手及tcp连接状态(含tcpdum抓包分析) 25.2 tcp四次挥手及tcp连接状态 25.3 实战:在局域网中使用 awl伪装MAC地址进行多线程SYN攻击 ssh 客户端: ...

  3. 深入理解 Linux 的 TCP 三次握手

    在后端相关岗位的入职面试中,三次握手的出场频率非常的高,甚至说它是必考题也不为过.一般的答案都是说客户端如何发起 SYN 握手进入 SYN_SENT 状态,服务器响应 SYN 并回复 SYNACK,然 ...

  4. TCP三次握手(建立连接)

    TCP FLAG 位由6个 bit 组成,分别代表 ACK. SYN. FIN. URG. PSH .RST ,都以置1 表示有效.我们重点关注 SYN, ACK FIN SYN ( Synchron ...

  5. TCP三次握手在linux内核中的实现

    TCP三次握手在linux内核中的实现 以下基于linux内核2.4.0源码(转自www.yuanma.org/) 以前一直使用的网络通讯的函数都是工作在阻塞模式.在看connect实现源码时,突然想 ...

  6. TCP三次握手建立连接的过程

    来源:TCP三次握手建立连接的过程 TCP 是面向连接的协议,所以每次发出的请求都需要对方进行确认.TCP 客户端与 TCP 服务器在通信之前需要完成三次握手才能建立连接. 下面详细讲解三次握手的过程 ...

  7. TCP三次握手建立连接

    一.三次握手的过程 TCP需要三次握手才能建立连接,整个过程如下图所示: 假设A运行的是TCP客户端进程,而B运行的是TCP服务端进程.最开始的时候两端的TCP进程都处于ClOSED(关闭)状态. 这 ...

  8. TCP传输连接--建立连接阶段(TCP三次握手)

    目录 一.TCP相关概念: 二.TCP连接建立过程中要解决的问题: 三.TCP三次握手的过程: 四.可以两报文握手建立连接 五.总结: 一.TCP相关概念: 1.TCP是面向连接的协议. 2.TCP是 ...

  9. Wireshark抓包示范:TCP三次握手建立连接和四次握手断开连接

    转载请标注: 披萨大叔的博客 http://blog.csdn.net/qq_27258799/article/details/51379508 如果您觉得这篇文章对您有帮助,请点下文章最下面的赞~ ...

最新文章

  1. matlab linprog应用示例
  2. 行为模式之Mediator模式
  3. S3C2440启动代码分析
  4. vue js 工具方法封装js 文件
  5. EaglePHP开源框架全新改版(v1.8)
  6. iPhone 或将告别 3D Touch ?
  7. 三、 复杂对象类型的WebService
  8. 程序员转行做运营,曾被逼得每天想离职,最后...
  9. 计算机组成原理实验 实验四:多周期CPU实验要求(源代码全)
  10. WIN10使用VEH+硬件断点实现不修改代码完成破解
  11. GPU设备架构全面解析(持续更新ing)
  12. java设计模式 建造模式_java设计模式(三)建造者模式
  13. 如何用计算机求特征值特征向量,利用QR算法求解矩阵的特征值和特征向量
  14. 给米钱包、买买分收取用户15%-20%“砍头息”,泸州银行为资金方
  15. android studio 读取网络图片
  16. 一个ppp帧的数据部分(用十六进制写出)是7D 5E FE 27 7D 5D 7D 5D 65 7D 5E。
  17. 【matplotlib】绘制简单二维、三维图像
  18. JS使用userAgent判断操作系统和浏览器类型
  19. 什么是跨境电商ERP?
  20. 哔哩哔哩html无法显示,哔哩哔哩视频显示在Github的Makedown博客页方法

热门文章

  1. 漫威系列-《复联4》
  2. 单因素模糊评价matlab,用matlab进行模糊综合评判
  3. 微软怎么设计Exchange 2003的体系结构
  4. [SPOJ IGAME Interesting Game]Nim 博弈+数位DP
  5. 面试经典算法-上楼梯问题
  6. 关于svn提交performing vcs refresh 卡住的解决办法
  7. 2018秋北京松松兄弟线下聚会干货分享
  8. 求购安霸Ambarella IONE这颗料的SDK开发工具包 Software Development Kit
  9. pl2303hxa串口线驱动_PL2303 USB转串口驱动64位(非认证线缆可用)_下载_热门驱动_驱动精灵...
  10. 基于声网 iOS SDK 实现视频直播应用