当前位置: 首页 > Linux

KernelTCP-removeper-destinationtimestampcache

时间:2023-04-06 02:47:28 Linux

2017年3月,内核主线将时间戳缓存在TCPMetrics条目中。有关补丁,请参见补丁---tcp:删除每个目标时间戳缓存structtcp_metrics_block{structinetpeer_addrtcpm_saddr;结构inetpeer_addrtcpm_daddr;无符号长tcpm_stamp;-u32tcpm_ts;-u32tcpm_ts_stamp;u32tcpm_lock;u32tcpm_vals[TCP_METRIC_MAX_KERNEL+1];tcp_tw_recycle机制被内核用来快速回收处于TIME_WAIT状态的套接字。但是,当网络中存在NAT设备时,这种机制可能会导致NAT设备后面的客户端难以连接到服务器。像这样的问题太多了!在Internet上随机搜索显示启用时间戳时对某些SYN数据包无响应ack-直到八个同步信号到达之后?出现这些问题的原因是服务器收到的SYN报文中携带的时间戳早于之前收到的FIN报文的时间戳,所以服务器认为这个SYN报文是由于网络阻塞了重传SYN报文造成的旧连接的延迟,因此它拒绝恢复SYN-ACK。出现这种情况的原因是传输链路上有NAT设备。用于缓存FIN消息时间戳的TCPMetrics是Per-Destination。在有NAT的环境中,服务器看到的Destination就是NAT设备。它看不到NAT设备后面有多少内部网络。无法保证SYN消息的时间戳会在每个主机上递增。当然,如果你像我一样无法升级内核,那么不开启tcp_tw_recycle也是一种选择。tcp_tw_recycle(布尔值;默认值:禁用;自Linux2.4起)启用TIME_WAIT套接字的快速回收。对于与一般Internet通信或使用NAT(网络地址转换)的设备,不建议启用此选项。由于一些NAT网关传递IP时间戳值,因此一个IP可能看起来具有不增加的时间戳。请参阅RFC1323(PAWS)、RFC6191。