日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TCP/IP文档阅读笔记-TCP Receive Window

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP/IP文档阅读笔记-TCP Receive Window 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。