网络

1流量控制

如果发送端发送的速度较快,接收端接收到数据后处理的速度较慢,而接收缓冲区的大小是固定的,就会丢失数据。TCP协议通过'''滑动窗口(SlidingWindow)'''来进行流量控制


image.png

-1. 发送端发起连接,声明最大段尺寸是1460,初始序号是0,窗口大小是4K,表示“我的接收缓冲区还有4K字节空闲,你发的数据不要超过4K”。接收端应答连接请求,声明最大段尺寸是1024,初始序号是8000,窗口大小是6K。发送端应答,三方握手结束。(两套序号两种窗口)

-2. 发送端发出段4-9,每个段带1K的数据,发送端根据窗口大小知道接收端的缓冲区满了(由接收端的应答中窗口6k的大小知道,发送端设置发送端的窗口总大小6k,窗口右移6次,每次1k,而接收端的窗口则由发送端发过来的信息确定设置),因此停止发送数据。

-3. 接收端的应用程序提走2K数据,接收缓冲区又有了2K空闲,接收端发出段10,在应答已收到6K数据的同时声明窗口大小为2K。(与1比较可知,窗口的大小可变,且根据自身缓存区的大小实时决定)
- 4. 接收端的应用程序又提走2K数据,接收缓冲区有4K空闲,接收端发出段11,重新声明窗口大小为4K。
- 5. 发送端发出段12-13,每个段带2K数据,段13同时还包含FIN位。
-6. 接收端应答接收到的2K数据(6145-8192),再加上FIN位占一个序号8193,因此应答序号是8194,连接处于半关闭状态,接收端同时声明窗口大小为2K。
-7. 接收端的应用程序提走2K数据,接收端重新声明窗口大小为4K。
-8. 接收端的应用程序提走剩下的2K数据,接收缓冲区全空,接收端重新声明窗口大小为6K。
-9. 接收端的应用程序在提走全部数据后,决定关闭连接,发出段17包含FIN位,发送端应答,连接完全关闭。
上图在接收端用小方块表示1K数据,实心的小方块表示已接收到的数据,虚线框表示接收缓冲区,因此套在虚线框中的空心小方块表示窗口大小,从图中可以看出,随着应用程序提走数据,虚线框是向右滑动的,因此称为滑动窗口。
从这个例子还可以看出,发送端是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),在底层通讯中这些数据可能被拆成很多数据包来发送,但是一个数据包有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议。而UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消息为单位提取数据,不能一次提取任意字节的数据,这一点和TCP是很不同的。
转自https://blog.csdn.net/u012861978/article/details/53257773

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • OSI 7层模型 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 TCP/IP协议 4层模型 应用层 ...
    whupenger阅读 3,199评论 1 1
  • 文章首发于个人blog欢迎指正补充,可联系lionsom_lin@qq.com原文地址:《网络是怎样连接的》阅读整...
    Lucus_Linx阅读 14,827评论 6 31
  • 一 基本概念 1,HTTP 超文本传输协议 访问远程的网络资源,规定了客户端和服务端的数据传输格式。格式http:...
    Gintok阅读 4,402评论 2 1
  • 1.三次握手和四次挥手 三次握手 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数...
    GoldenCrow阅读 4,216评论 0 1
  • 昨晚做了一个梦。 梦里,未来的自己语重心长的对现在的我说, 年轻时和别人产生的差距就要努力地去弥补, 随着时间的推...
    像在水里呼吸一样渴望空气阅读 1,360评论 0 0

友情链接更多精彩内容