有没想过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可靠传输的名头!!!


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

查看所有标签

猜你喜欢:

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

跨越鸿沟

跨越鸿沟

[美] 杰弗里·摩尔(Geoffrey A. Moore) / 赵娅 / 机械工业出版社 / 2009-1 / 36.00元

在真正涉足高科技领域之前,你有必要读一读这本书——在这个节奏飞快、竞争激烈的技术竞技场上,这本书绝对能够帮助你更容易地获得成功。 ——威廉姆·劳森 罗盛软件公司董事会主席兼CEO 最近40年来,本书对高科技营销各个方面所做出的贡献远远超过了其他任何相关书籍。如今已经有无数企业和大学分别在自己的运营和教学过程中引入了鸿沟思想,如果你还不是这些企业或大学中的一员,你可能就要担心自己的未来了......一起来看看 《跨越鸿沟》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

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

在线XML、JSON转换工具