有没想过TCP为什么要先握手再发送数据

栏目: 服务器 · 发布时间: 6年前

内容简介:再看计算机网络的时候,始终有一个问题总是弄不明白,那就是TCP为什么要先三次握手,然后再是发送数据,最后在断开。注意这里的问题是为什么要先,再次强调的是先三次握手在发数据的疑问,而不是把“TCP为什么要先三次握手”放在百度上百度后出现的“TCP为什么不是2或者4次握手的问题”,有时候还真的是不得不吐槽百度的算法还真不如google,下图为证:额。。。至于google的搜索由于要用到翻墙的软件,影响不好就不贴图了。。。继续我们得话题,回答一下这个问题吧,当然这是我的感悟,还是那句话“若是有问题,还是请到评论

再看计算机网络的时候,始终有一个问题总是弄不明白,那就是TCP为什么要先三次握手,然后再是发送数据,最后在断开。注意这里的问题是为什么要先,再次强调的是先三次握手在发数据的疑问,而不是把“TCP为什么要先三次握手”放在百度上百度后出现的“TCP为什么不是2或者4次握手的问题”,有时候还真的是不得不吐槽百度的算法还真不如google,下图为证:

有没想过TCP为什么要先握手再发送数据

额。。。至于google的搜索由于要用到翻墙的软件,影响不好就不贴图了。。。继续我们得话题,回答一下这个问题吧,当然这是我的感悟,还是那句话“若是有问题,还是请到评论区写出自己的见解,以免误人子弟哈”。

要回答这个问题首先得知道TCP报文段的结构,如下图:

有没想过TCP为什么要先握手再发送数据

要说的就是TCP报文段中的窗口这16位字段部分,这里窗口的作用就是为了实现流量的控制,为什么会有流量的控制的引入???它是这样来的:若是发送方发送数据的速度大于了接收方应用程序取数据的速度(假设数据传输过程不拥塞)那么,接收方就会出现失贞的现象,也就是把数据覆盖了,所以数据的发送就要得到控制,就引入了窗口这16位。怎么引入的??

是这样的:发送方和接收方都有一个缓存区(用来接收从网络传来的数据,并提交给应用程序),对于接收方来说,它要维护两个变量值,一个是应用程序从缓存读出去的数据(out来表示);另一个是从网络接收的数据(in来表示),那么在接收方一个缓存里面剩余的空间就是Buffer-(in - out) = window(假设Buffer表示缓存的数量个数,in - out 表示应用程序没读的个数,也就是缓存被占用的个数,总的减去占用的就是可以利用的空间的个数用window来表示),那么这个window就是窗口所要写入的值,接受方会把这个值传递给发送方表示我还有多少空间可以利用。

同样发送方也会有一个缓存,同样要维持两个变量值:一个是已经发送的数据个数(send);另一个是已经得到确认的数据个数(acked),那么send - acked就表示已经发送出去了,但是还没有得到确认的数据的个数,换句话就是正在传输的数据(这样理解好点,但是有点不对),那么要让接收方缓存数据不被覆盖,那么正在发送的数据要小于接收方的窗口(send - acked < window)。

写以上这些是为了深入理解窗口的概念!!!!仅此而已为理解TCP为什么要握手做准备!!!

在简单说一下三次握手的过程:

  • 第一次,客户机发送TCP短报文。
  • 第二次,服务器发送应答,并建立缓存和变量。
  • 第三次,客户机发送应答,并建立缓存和变量。

注意也就是在三次握手时就建立了缓存,那么也就是说,A与B要通信,两者之间必须先约定好一些参数,比如这里的缓存,那么依据上面的理论来说,建立缓存的目的就是为了避免不可靠的传输数据(也就是为了避免数据被覆盖),所以在传输数据之前,两者之间先做一些约定,换句话就是在做交易时先谈好地点和时间,在做交易。

那么,总的来说,所谓的链接就是为了分配内存等资源,然后避免不可靠的传输,以免污了TCP可靠传输的名头!!!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

程序员的英语

程序员的英语

[韩]朴栽浒、[韩]李海永 / 颜廷连 / 人民邮电出版社 / 2018-2 / 49.00元

高考以后就把英语都还给老师了? 写代码特顺溜,一到英语就卡壳? 常见的语法书太枯燥,单词书又太宽泛? 不用急,快来加入针对开发人员的英语读解能力训练项目! - 安全与黑客攻击、无人机与机器人、大数据、物联网、云计算,顺应新技术潮流! - 语法、单词、完形填空、阅读理解、翻译,多角度提升读解能力! - 英语母语技术人员审校,提供“语言和技术”双保险!一起来看看 《程序员的英语》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具