关于java:TCP-为什么三次握手而不是两次握手面试浅显口述版本

27次阅读

共计 731 个字符,预计需要花费 2 分钟才能阅读完成。

依照我的了解说一下 TCP 为什么三次握手而不是两次握手。
一步一步来。

1. TCP 是牢靠的

TCP 是牢靠的传输,握手指的是 TCP 建设链接,怎么才能够牢靠的建设链接呢?

2. 最简略的建设一个牢靠发送通道

A——–>B
A 要发送数据给 B,如果没有建设链接就间接发送,大概率杳无音信。所以至多要建设链接。
A 先发一个建设链接的申请,B 收到后通知 A:“我收到了”。所以须要 A 发送一次 B 发送一次来确保 A 发送给 B 是通的。
(这样真的牢靠吗?也有可能 B 通知 A“我收到了”后,这个通道不通了,接下来发送数据给 B,B 收不到,然而这种状况极少,TCP 有其余机制来得悉这种状况)

3.AB 相互建设链接须要发送多少个包

A——–>B
B——–>A
从 2 得悉,A 到 B 建设链接须要 A 给 B 发一次 B 给 A 发一次两个包,那么 AB 相互建设链接须要 4 次, 然而 ,B 通知 A 它收到了和 B 申请跟 A 建设链接这两个包能够合成一个,所以须要 3 次即可

4.AB 相互建设链接 2 个包能够吗?

从 2 和 3 晓得,两个包,两次握手只能确保单通道是牢靠的,TCP 是双工的,须要相互确认都能够发包和收包,所以不能两次握手。

5. 正式的过程

  1. A 向 B 申请建设链接,SYN 标记位标记,seq 填充为 x。
  2. B 收到 A 的建设申请,而后发送 SYN 标记位标记,ACK 标记,ack=x+1,seq=y 给 A
  3. A 收到 B 的收到包和建设申请包,而后发送 ACK 标记示意接管到 SYN 包,ack=y+1,seq=x+1

个人简介:高级开发工程师,趣味和畛域(Unity、Unreal、cocos creator、安卓终端开发、ios 终端开发、音视频开发、图形学),欢送加 W:wlxklyh 探讨问题。(欢送 star:https://github.com/wlxklyh/So…)

正文完
 0