ssh连接每一次的键盘敲击意味着三个数据包: 发送到服务器, 服务器确认并回显, 客户端对回显的确认
如果客户端输入过快, 可能多个输入放在一个tcp数据包中.
一般ssh数据包每一个包都是PSH置位的, 意味着发送端发送缓存为空, 没有其他数据
Nagle算法
为了减少网络中存在的小型TCP包
策略:
在等到所有的ack前不发送数据, 在任意时刻只有一个网络包在传输中
弊端: 增大了延迟
如果一端启用了延时ACK, 一端启用了Nagle算法, 那么每一轮传输都有短暂的死锁
在要求低时延的程序中应该关闭Nagle算法
滑动窗口
零窗口
当产生0窗口的时候, 发送端持续探测, 发送了1字节的数据, 这样可以保证是可靠传输(0字节的包不是可靠传输)
糊涂窗口综合征
当接收方有一个小窗口就通告, 导致双方一直以一个很小的窗口传输数据, 导致传输的数据都是小包
解决方法: 窗口在大到一定程度前都不要再发送数据
自动调优
新版的系统会动态变化接受窗口(本地缓存)的大小, 如果能收到对方的包, 就增大自己的缓存, 否则缩小.(类似拥塞控制)
带外数据
使用TCP的URG指针来指明特殊数据, 这些数据应当被应用层额外的函数读取, 优先处理.
eg.
ssh中的Ctrl+C就应当被优先处理
网友评论