美文网首页
通过Python验证TCP接收缓冲区消息积压问题

通过Python验证TCP接收缓冲区消息积压问题

作者: 赵信信官属 | 来源:发表于2020-05-18 02:17 被阅读0次

本地实验目的
通过Python构建一个服务端和客户端通信,服务端向客户端发送数据,客户端接收数据,但是我们让客户端每次接收读取部分数据,通过ss命令观察客户端TCP接收缓冲区的大小变化.

环境
Ubuntu 5.3.0-51-generic

补充
使用命令ss可以观察TCP接收(Recv-Q)和发送(Send-Q)缓冲区

我们首先来编写服务端代码

$ python3
>>> import socket
>>> import sys
>>> server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
>>> server.bind(('127.0.0.1',8080))
>>> server.listen(5)
>>> cli,addr=server.accept()

此时服务端会阻塞,等待客户端连接

继续编写客户端代码

$ python3
>>> import socket
>>> import sys
>>> cli = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
>>> cli.connect(('127.0.0.1',8080))

客户端连接到服务端,我们通过ss命令查看

image.png

客户端与服务端建立了连接,客户端端口32796,服务端端口8080 .
其中第二列就是表示接收缓冲区, 第三列表示发送缓冲区

接下来我们在服务端向客户端发送数据

image.png

服务端向客户端发送了PythonTest这10个字符,这时候我们再通过ss命令查看下

image.png

我们发现,客户端的TCP接收缓冲区里面有10个字符,还没有读取.接下来客户端读取这10个字符

image.png

客户端使用1024大小的buf读取了TCP接收缓冲区里面的10个字符数据.
我们再通过ss命令查看下

image.png

发现客户端TCP接收缓冲区里面没有数据了,因为客户端已经读取了.

接下来服务端继续发送数据,但是客户端只读取部分数据情况

image.png

服务端发送了PythonNotAll这12个字符,我们在客户端只读取6个字符看一下会是什么情况

image.png

这一次客户端只读取了6个字符,也成功读取到了.我们通过ss命令再看下客户端TCP接收缓冲区的情况

image.png

我们发现,显示了6,这个6的含义是,客户端还有6个字节没有读取,还在TCP接收缓冲区待着呢

接下来客户端继续读取

image.png

我们发现,客户端已经把剩下的数据也读取到了,这个时候,再通过ss命令观察下

image.png

之前的数字6不存在了,毕竟客户端已经读取走了.

相关文章

  • 通过Python验证TCP接收缓冲区消息积压问题

    本地实验目的通过Python构建一个服务端和客户端通信,服务端向客户端发送数据,客户端接收数据,但是我们让客户端每...

  • netty学习系列一:Java NIO预备知识

    一、TCP发送缓冲区/TCP接收缓冲区 在传输层,每个socket对应的TCP连接都拥有自己的接收缓冲区和发送缓冲...

  • TCP拥塞控制

    TCP拥塞控制 我们看到TCP连接的双方都包含一个接收缓冲区,一个发送缓冲区和几个变量(LastByteRead,...

  • TCP PSH+ACK攻击是什么意思?PSH+ACK攻击原理

    在TCP协议中,到达目的地的报文将进入TCP栈的缓冲区,直到缓冲区满了,报文才被转送给接收系统。此举是为了使系统清...

  • 7.tcp粘包处理1

    1.什么是 TCP 粘包?TCP 粘包是指发送方发送的若干包数据 到 接收方接收时粘成一包,从接收缓冲区看,后一包...

  • TCP传输超时

    TCP的接收和传输都有缓冲区,SO_RCVBUF和SO_SNDBUF。调用发送函数所耗费的时间和这两个缓冲区有很大...

  • TCP流量控制

    TCP流量控制 如果应用程序读取数据的速度相对较慢,则发送者很容易通过过快的发送数据使连接的接收缓冲区溢出。 流量...

  • TCP-重传机制(分享)

    一、概述 在TCP中,当发送端的数据到达接收主机时,接收端主机会返回一个确认应答消息,表示已收到消息,这是TCP实...

  • Storm从入门到精通10:Storm的内部通信机制

    Storm集群工作时,内部通信机制如下图所示: (1)接收线程从网络上接收消息放到接收缓冲区,并发送到接收队列。 ...

  • TCP 半包粘包问题

    什么是粘包现象 TCP 粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着...

网友评论

      本文标题:通过Python验证TCP接收缓冲区消息积压问题

      本文链接:https://www.haomeiwen.com/subject/unlyohtx.html