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

本地实验目的
通过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命令查看

在这里插入图片描述
客户端与服务端建立了连接,客户端端口32796,服务端端口8080 .
其中第二列就是表示接收缓冲区, 第三列表示发送缓冲区

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

在这里插入图片描述
服务端向客户端发送了PythonTest这10个字符,这时候我们再通过ss命令查看下

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

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

在这里插入图片描述
发现客户端TCP接收缓冲区里面没有数据了,因为客户端已经读取了.

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

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

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

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

接下来客户端继续读取

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

在这里插入图片描述
之前的数字6不存在了,毕竟客户端已经读取走了.


    个人网站
微信公众号

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值