经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
TCP 为什么三次握手而不是两次握手(面试浅显口述版本)
来源:cnblogs  作者:wlxklyh  时间:2020/12/21 14:45:50  对本文有异议

按照我的理解说一下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/SoftRenderer)

原文链接:http://www.cnblogs.com/wlxklyh/p/14140826.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号