网络热敏打印机的TCP拥塞控制 - xiaohao0576/odoo-doc GitHub Wiki

电脑主机的IP: 192.168.123.2

热敏打印机IP: 192.168.123.100

发送的图片数据,长 512像素, 宽350像素, 图片编码后共 512/8 * 350 =22400字节

打印图片的指令有8个字节 GS, 'v', 48, 0, xL, xH, yL, yH

切纸7个字节 GS, 'V', 0x42, 0x00, 0x0A, 0x0A, 0x00

共 22400 + 8 + 7 =22425字节

下面是Wireshark抓包的显示,从TCP三次握手到四次挥手结束

第二个数据包,是打印机给电脑主机的TCP握手信息, Win=1460表示让电脑发送1460字节后,等待打印机ACK确认才能再次发送。 MSS=1460表示每个TCP数据包最大携带1460字节的数据。两个数值加一起就是打印机告诉主机,每次最多给我发送1460字节的数据,等我处理完,给你回复ACK,你再发送。

打印机回复ACK时候,如果打印机很忙,不能继续接收处理更多数据,也有可能改变Win窗口的值,比如第21个包,显示 TCP ZeroWindow,表示打印机告诉电脑,我收到你刚才发的数据了,我只是给你反馈我收到了,但我现在很忙,所以把Win的大小设置为0,意思是让主机不要再发数据了,直到打印机再次发送TCP Window Update的ACK数据包,见下图第22个包

TCP的Win窗口机制,很好的保证了热敏打印机的顺利打印,不会因为电脑主机过快发送数据,让热敏打印机的缓冲区溢出或者出错。

TCP_Flow

继续 TCP_Flow2