内容提要
本文介绍Linux运维接入层与网络基础,涵盖MTU默认1500字节、MSS为1460字节;TIME_WAIT由主动关闭方产生,CLOSE_WAIT由被动关闭方产生;netstat可查看和统计TCP连接。还包括IP包头20字节、域名层级、递归与迭代解析、X-Forwarded-For与remote_addr的区别、IPv4分类与子网计算、IPv6格式缩写、LVS三种模式、tcpdump参数、iptables三表五链及实例、常见加密算法,以及nginx负载与location匹配规则。
延伸解读
TIME_WAIT 与 CLOSE_WAIT:从状态看连接问题
文章指出 TIME_WAIT 由主动关闭方产生,CLOSE_WAIT 由被动关闭方产生。这意味着排查连接堆积时,先看状态就能定位方向:若客户端高并发短连接且未用会话或线程池,可能本地端口耗尽并出现大量 TIME_WAIT;若服务端出现 CLOSE_WAIT,则往往与被动断开后未及时关闭有关,文中以 Netty I/O 线程内做阻塞操作为例。
X-Forwarded-For 与 remote_addr:代理场景下的地址判断
文章说明 X-Forwarded-For 会依次记录经过的代理 IP,最左端是原始客户端,最右端是最近通过的代理;remote_addr 则是与服务器实际建立 TCP 通信的客户端 IP。由于 XFF 容易被伪造,文章提醒应谨慎使用,并指出正常情况下 XFF 中最后一个 IP 是最后一个代理服务器的地址,这为判断真实来源提供了参照。
子网计算:以 /26 为例理解网络号与广播地址
文章用 192.168.2.47/26 演示子网划分:32 减 26 得 6,2 的 6 次方为 64,因此每 64 个 IP 为一个子网;47 落在 0 到 63 区间,所以网络号是 192.168.2.0,可用 IP 为 192.168.2.1 至 192.168.2.62,192.168.2.63 是广播地址。这一算法可推广到其他掩码长度,帮助快速判断地址归属。
iptables 规则顺序与持久化:两个容易忽略的细节
文章给出的 iptables 示例中,先插入允许内网访问 7001 至 7003 端口的规则,再插入拒绝规则,体现了规则顺序会影响匹配结果。另一个细节是持久化:任何改动前先备份 /etc/sysconfig/iptables,再用 iptables-save 写入该文件,否则重启后规则可能丢失。这两点对实际运维配置有直接参考价值。
Q&A
MTU和MSS默认值分别是多少?它们之间有什么关系?
标准以太网接口的MTU默认是1500字节,MSS默认是1460字节。MSS等于MTU减去20字节IP包头和20字节TCP包头。
TIME_WAIT和CLOSE_WAIT状态分别由哪一方产生?可能引发什么问题?
TIME_WAIT由主动关闭连接的一方产生,若客户端高并发访问HTTP接口且未使用会话或线程池机制,可能导致本地端口耗尽。CLOSE_WAIT出现在被动断开连接时,常见于Server端,例如在Netty的I/O线程里做DB读写、日志记录等阻塞行为,可能引发客户端超时。
如何查看机器上所有的TCP连接?如何统计TIME_WAIT状态的连接数?
查看所有TCP连接可以使用netstat -ant或netstat -antp。统计TIME_WAIT状态的连接数可以使用命令:netstat -antp|grep TIME_WAIT|wc -l。
X-Forwarded-For和remote_addr有什么区别?使用X-Forwarded-For时需要注意什么?
X-Forwarded-For是一个HTTP头字段,格式为client1, proxy1, proxy2,最左端是原始客户端IP,最右端是最近通过的代理服务器IP。remote_addr是通讯客户端与服务器实际进行TCP通信的IP。由于X-Forwarded-For容易被伪造,应谨慎使用;正常情况下XFF中最后一个IP地址是最后一个代理服务器的IP地址。
192.168.2.47/26这个子网的网络号、可用IP范围和广播地址是什么?
子网掩码为26位,每个子网有2^(32-26)=64个IP。47落在0-63这个子网,因此网络号是192.168.2.0,可用IP范围是192.168.2.1~192.168.2.62,广播地址是192.168.2.63。
iptables的三表五链分别是什么?如何设置只允许内网IP 10.142.31.1访问本机的7001-7003端口?
三表:filter(定义允许或不允许,作用于INPUT、FORWARD、OUTPUT链)、nat(定义地址转换,作用于PREROUTING、OUTPUT、POSTROUTING链)、mangle(修改报文原数据,作用于所有5个链)。五链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING。设置只允许10.142.31.1访问7001-7003端口的命令:iptables -I INPUT -p tcp --dport 7001:7003 -s 10.142.31.1 -j ACCEPT 和 iptables -I INPUT -p tcp --dport 7001:7003 -j DROP。