TCP Receive Window

TCP接收窗口,TCP接收数据到缓冲,应用程序还未处理的那块数据。

TCP Receive Window大小,在TCP三次握手时就已经商量好了。并且还确定了数据包的最大字节数。这个最大字节数被称为最大消息长度(Maximum Segment Size,MSS)。当要发送的数据超过该值,就需要将数据分为多个包,依次发送,该操作称为数据分片,如下:

如上TCP上次握手时,商量了MSS为1460.

过程如下:

上面的例图中,Win为windows是窗口大小,客户端的大小为65535,服务端的窗口大小为5840。另一个例子:

客户端的窗口大小从65535减少到59695,因为客户端不能快速处理数据。

TCP窗口为2个字节,也就是最大65535

TCP窗口为0的情况。

当TCP的缓存接收区(TCB)里面满了,就会为0(死机,被其他程序影响等等)

下面来举个例子:

客户端:192.168.1.102

服务端:192.168.1.1

服务端代码:

#include <QCoreApplication>
#include <QTcpServer>
#include <QDebug>
#include <QTcpSocket>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QTcpServer server;server.listen(QHostAddress::Any, 8888);QTcpSocket *peer = nullptr;QObject::connect(&server, &QTcpServer::newConnection, [&](){QTcpSocket *peer = server.nextPendingConnection();qDebug() << "IP:" << peer->peerAddress() << "已连接服务";});return a.exec();
}

客户端代码:

#include <QCoreApplication>
#include <QTcpServer>
#include <QDebug>
#include <QTcpSocket>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QTcpSocket testSocket;testSocket.connectToHost("192.168.1.1", 8888);if(testSocket.waitForConnected()){QString msg = "";for(int i = 0; i < 999; i++){msg += QString::number(i) + " Hello World";}testSocket.write(msg.toUtf8());qDebug() << "sendOver";testSocket.close();}return a.exec();
}

抓包如下:

上面3个,和最后4个,就不再说明了。

看下中间:

包的总大小是1514其中数据大小是1460。

滑动窗口为2,每次发2个包,服务端回一个ack。这个ack的值为seq最后一个值。

TCP/IP文档阅读笔记-TCP Receive Window相关推荐

  1. Wireshark文档阅读笔记-TCP 4 times close解析与实例

    先介绍一个知识点: 当TCP最后一次握手结束后,也就是客户端发送ACK后,客户端不会立即释放资源.会先将状态转换为TIME-WAIT然后等到2-MSL(Maximum Segment Lifetime ...

  2. Wireshark文档阅读笔记-TCP 3 way handshaking解析与实例

    这里先介绍2个概念: TCB:Transmission Control Block,传输控制块,这个和PCB(进程控制块)类似,存储了很多重要的内容.如TCP连接表,发送缓存指针和接收缓存指针,重发队 ...

  3. FreeRTOS官方指导文档阅读笔记

    FreeRTOS官方指导文档阅读笔记 基于 161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide.pdf,可 ...

  4. Qt文档阅读笔记-共享库的创建与调用

    使用共享库的符号 这个符号可以作用在变量.类.函数中,并且这些都可以被调用端使用. 在编译共享库中,需要使用export符号.在使用端调用的时候使用import符号. 这里是本人从文档中记录的笔记,大 ...

  5. Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图

    Qt文档阅读笔记-加载HeightMap(高度图)构造3D地形图 QHeightMapSurfaceDataProxy:是Q3DSurface的一个基本代理类. 他是专门加载高度图. 高度图是没有X, ...

  6. Qt文档阅读笔记-Rotations Example相关

    Rotations Example文档阅读笔记 使用这种方式,对y轴和z轴进行旋转. QQuaternion yRotation = QQuaternion::fromAxisAndAngle(0.0 ...

  7. Blockly学习之文档阅读笔记

    文档阅读来源--谷歌官网介绍: https://developers.google.com/blockly/guides/overview 概述 一个用于Web.Android.iOS的可视化代码编辑 ...

  8. TCP/IP详解阅读笔记(一):TCP协议

    作者: remcarpediem 联系方式:segmentfault,csdn,简书 本文转载请注明作者.文章来源,链接,版权归作者所有.  前段时间提交了本科毕业论文,这段时间特别空闲,于是希望研究 ...

  9. Lifewire文档阅读笔记-如何使用IP地址找对应的MAC地址

    逻辑: ①使用ping命令,ping相关的IP地址. ②使用arp命令,查看刚刚ping的ip地址对应的mac地址. 在Windows.Linux和其他操作系统中,可以输入arp(Address Re ...

最新文章

  1. Xbox One 游戏欣赏: Xbox Fitness 太极拳游戏
  2. C#为什么多线程控制winform需要用委托?
  3. python元组 字符串 字典 习题+总结
  4. 理解A*寻路算法具体过程
  5. Http Invoker的Spring Remoting支持
  6. SP2010开发和VS2010专家食谱--第二章节--工作流
  7. Redis(十二):Redis事务的基本操作
  8. redis入门——安装篇
  9. Android基础——数据存储
  10. Neural Motifs: Scene Graph Parsing with Global Contex
  11. java代码做一个电子表
  12. 云服务器能否部署聊天系统,实现外网通讯?
  13. 前程无忧岗位数据爬取+Tableau可视化分析
  14. 员工人事档案包括哪些内容?
  15. NetKeeper720,能上QQ不能上网
  16. FS2711代替松翰2711国产单片机
  17. docker.socks vul
  18. java基于ssm房屋出售租赁管理系统
  19. python编程比赛初赛 组成最小罗马数字_leetcode 题解 12python3@ 通过使用罗马数字的最单元位来构造数组 + 构造数字算法...
  20. Transformer for image quality assessment阅读笔记

热门文章

  1. 互联网组织的未来:剖析GitHub员工的任性之源
  2. 研究生如何选定课题方向 如何变学神
  3. Converter Tutorial
  4. Qt Creator 的 wxWidgets 模板包 (Linux下测试通过)
  5. SQL Server 2000/2005 数据库分页
  6. 如何配置三层交换机创建VLAN 7
  7. 如何利用Python播放和录制声音
  8. BlueCatTools 批量查询网站的百度收录量,快照和外链的工具
  9. I-EIM分享一套局域网通讯源码
  10. 到了姥姥家我在小点点c++