UNIX/Linux系统管理技术手册-读书笔记-第十三章
《UNIX/Linux系统管理技术手册-读书笔记-第十三章
TCP/IP连网
1. TCP/IP与Internet基础
1.1 核心管理组织
| 组织 | 职责 |
|---|---|
| ICANN | Internet名称与数字地址分配,全球IP地址和域名管理(唯一有实际强制力) |
| ISOC | Internet协会,监督IETF技术工作 |
| IETF | Internet工程任务组,制定技术标准(RFC) |
| IGF | 联合国下设,国际性政策讨论 |
1.2 RFC(请求评议)文档
| 类型 | 说明 |
|---|---|
| RFC | 协议标准、修改提议、信息公告,顺序编号,一经发布永不修改 |
| FYI | 面向大众的介绍性文档(如RFC1713同时也是FYI27) |
| BCP | 最佳当前实践,含管理建议(对系统管理员最有价值) |
| STD | 已正式采纳为标准的协议 |
阅读RFC不要被技术细节吓跑,简介和原理阐述对管理员也很有用。
2. TCP/IP协议栈
5层模型:物理层 → 链路层 → 网络层(IP) → 传输层(TCP/UDP) → 应用层(HTTP/SSH/DNS)
| 协议 | 层 | 功能 |
|---|---|---|
| IP | 网络层 | 分组路由(RFC791) |
| ICMP | 网络层 | 错误消息、路由协助、调试(RFC792)——ping和traceroute的基础 |
| ARP | 链路层 | IP→MAC地址转换(IPv4) |
| ND | 链路层 | IP→MAC地址转换(IPv6),RFC4861 |
| UDP | 传输层 | 无连接、不可靠、快速(RFC768)——DNS查询常用 |
| TCP | 传输层 | 面向连接、可靠、流量控制(RFC793)——HTTP/SSH/数据库连接 |
2.1 IPv4 vs IPv6
| 对比 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32位(4字节) | 128位(16字节) |
| 地址数量 | ~43亿 | 3.4×10³⁸ |
| 子网划分 | 可变掩码(CIDR) | 固定/64主机部分 |
| NAT | 常用(缓解地址枯竭) | 不需要(地址充足) |
| 广播 | 支持 | 无广播,使用多播 |
| 现状 | 全球主流 | 覆盖率~14%(2017),仍需同时支持 |
现实建议:目前必须同时支持IPv4和IPv6(双栈)。纯IPv6服务仍不现实,因为大量主流站点(Amazon、Twitter、Apple等)2017年仍不支持IPv6。
3. IPv4寻址(核心技能)
3.1 地址格式与分类
IPv4地址 = 网络部分 + 主机部分,点分十进制:192.168.1.100
| 分类 | 第一个字节范围 | 默认掩码 | 主机数 | 说明 |
|---|---|---|---|---|
| A类 | 1–127 | /8 (255.0.0.0) | 16,777,214 | 大型网络,已耗尽 |
| B类 | 128–191 | /16 (255.255.0.0) | 65,534 | 中型网络,稀缺 |
| C类 | 192–223 | /24 (255.255.255.0) | 254 | 小型网络,易获得 |
| D类 | 224–239 | — | — | 多播地址 |
| E类 | 240–255 | — | — | 实验地址 |
特殊地址:
127.0.0.1= localhost(环回),0.0.0.0= 任意地址,全0主机部分=网络地址,全1主机部分=广播地址。
3.2 子网划分与CIDR(超网)
子网掩码:32位,1=网络部分,0=主机部分,必须从左边连续。
CIDR记法:192.168.1.0/24 等价于掩码 255.255.255.0(前24位为网络部分)
计算技巧:
- 主机数 = 2^(32-掩码位数) - 2(网络地址和广播地址)
- 块大小 =
256 − 掩码发生变化那一字节的掩码值 - 掩码最后一个字节 = 256 - 主机数
- 广播地址 = 本子网网络地址 + 块大小 − 1
- 网络地址 = IP & 子网掩码(万能公式)
- 网络地址在变化的那个字节,一定可以被【块大小】整除
示例:128.138.243.100/26(掩码255.255.255.192)
- 网络地址:
IP & 掩码→128.138.243.64 - 广播地址:
64 + 64‑1 =127→128.138.243.127 - 可用主机:
65–126(62台) - 块大小:
256‑192 = 64 - 网络地址变化字节(第 4 字节)
64,64 % 64 =0,可以被块大小整除
备注:掩码发生变化那一字节的掩码值,既前面一串字节都是 255,直到某一个字节不再是 255,这个字节,就是掩码发生变化那一字节
实用工具:
3.3 私有地址(RFC1918)与NAT
| 地址范围 | CIDR | 说明 |
|---|---|---|
| 10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 | A类私有(最常用) |
| 172.16.0.0 – 172.31.255.255 | 172.16.0.0/12 | B类私有 |
| 192.168.0.0 – 192.168.255.255 | 192.168.0.0/16 | C类私有(家用路由器默认) |
NAT(网络地址转换):
- 私有地址 → 公网地址转换,多个主机共享单个公网IP
- 隐藏内部结构,但不是真正的安全措施
- NAT会破坏某些嵌入IP地址的应用(如FTP、SIP)
- 可配合PAT(端口地址转换)复用端口
3.4 IPv6寻址要点
格式:8组16位,冒号分隔,十六进制
2607:f8b0:000a:0806:0000:0000:0000:200e
简化规则(RFC5952):
- 前导0可省略:
000a→a,0806→806 - 连续0组用
::替换(仅一次):2607:f8b0:a:806::200e - 字母用小写
特殊地址:
::1= IPv6环回地址(等价于127.0.0.1)fe80::/64= 本地链路地址(不路由)
主机自动编号(SLAAC):
- 从MAC地址自动生成64位主机ID(EUI-64算法)
- 路由器通告(RA)提供网络前缀
- 无需DHCP即可获得IP地址(但DNS仍需DHCPv6)
4. 路由基础
4.1 路由表查看
路由表字段:
Destination:目标网络Gateway:下一跳网关(必须相邻)Genmask:网络掩码Iface:出口接口UG标志:U=Up,G=Gateway(默认路由)
4.2 路由操作命令
| 操作 | Linux (ip) | FreeBSD (route) |
|---|---|---|
| 添加默认路由 | ip route add default via 192.168.1.1 dev eth0 |
route add default gw 192.168.1.1 |
| 添加静态路由 | ip route add 10.0.0.0/8 via 192.168.1.254 dev eth1 |
route add -net 10.0.0.0/8 192.168.1.254 |
| 删除路由 | ip route del 10.0.0.0/8 |
route del -net 10.0.0.0/8 |
| 刷新路由表 | ip route flush |
route flush |
4.3 ICMP重定向
- 路由器通知主机:”你应该用另一个网关,而不是我“
- 安全风险:可被恶意利用篡改路由
- 建议在路由器上禁用:Linux
accept_redirects=0,FreeBSDnet.inet.icmp.drop_redirect=1
5. ARP与邻居发现
| 协议 | 功能 | 查看命令 |
|---|---|---|
| ARP(IPv4) | IP→MAC地址映射 | ip neigh show(Linux),arp -a(FreeBSD) |
| ND(IPv6) | IP→MAC地址映射 | ip neigh show,ndp -a(FreeBSD) |
安全警告:ARP欺骗/ARP缓存投毒可劫持流量,需警惕局域网内攻击。
6. DHCP(动态主机配置协议)
| 概念 | 说明 |
|---|---|
| 功能 | 自动分配IP地址、掩码、网关、DNS、NTP等参数 |
| 租约 | 定期续租,过期回收 |
| 推荐实现 | ISC DHCP(开源参考实现,跨平台一致) |
| 备选 | Dnsmasq(轻量级DHCP+DNS转发) |
ISC DHCP服务器配置(/etc/dhcp/dhcpd.conf):
option domain-name "example.com";
option domain-name-servers 192.168.1.1;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.51 192.168.1.60;
option routers 192.168.1.254;
}
host fixed-host {
hardware ethernet 08:00:07:12:34:56;
fixed-address 192.168.1.10;
}
7. 网络安全相关IP特性
| 特性 | 风险 | 建议配置 |
|---|---|---|
| IP转发 | 可作为路由器转发第三方流量 | 仅路由器启用,其他关闭 |
| ICMP重定向 | 可被恶意篡改路由表 | 路由器忽略并记录 |
| 源路由 | 可绕过防火墙过滤 | 禁用(IPv6已废除) |
| 广播ping | Smurf攻击(反射放大) | 忽略广播ping |
| IP欺骗 | 伪造源地址发起攻击 | 边界路由器过滤出站源地址 |
| uRPF | 检查入站分组源地址合理性 | 单出口网络启用(多出口需评估) |
Linux安全参数(/proc/sys/net/ipv4/):
FreeBSD安全参数(/etc/sysctl.conf):
net.inet.ip.forwarding=0
net.inet.icmp.drop_redirect=1
net.inet.ip.accept_sourceroute=0
8. 网络接口配置(Linux/FreeBSD)
8.1 Linux(iproute2)
| 操作 | 命令 |
|---|---|
| 查看接口 | ip link show,ip address show |
| 配置IP | ip address add 192.168.1.13/26 dev eth0 |
| 启用/禁用 | ip link set eth0 up/down |
| 查看路由 | ip route show |
| 查看套接字 | ss -tulpn(替代netstat) |
Debian/Ubuntu配置文件(/etc/network/interfaces):
auto lo eth0
iface lo inet loopback
iface eth0 inet static
address 192.168.1.102
netmask 255.255.255.0
gateway 192.168.1.254
# DHCP版本
iface eth0 inet dhcp
RedHat/CentOS配置文件(/etc/sysconfig/network-scripts/ifcfg-eth0):
DEVICE=eth0
IPADDR=192.168.1.13
NETMASK=255.255.255.0
GATEWAY=192.168.1.254
ONBOOT=yes
BOOTPROTO=static # 或 dhcp
8.2 FreeBSD(ifconfig)
配置文件(/etc/rc.conf):
hostname="freebeer"
ifconfig_em0="inet 192.168.0.48 netmask 255.255.255.0"
defaultrouter="192.168.0.1"
# DHCP版本
ifconfig_em0="DHCP"
手动配置:
8.3 硬件参数调整(ethtool - Linux)
| 命令 | 功能 |
|---|---|
ethtool eth0 |
查看链路状态、速率、双工、自动协商 |
ethtool -s eth0 speed 100 duplex full |
强制100M全双工(关闭自动协商) |
ethtool -r eth0 |
强制重新协商 |
ethtool -k eth0 |
查看硬件分担(校验和、TCP分段) |
ethtool -K eth0 tx off |
关闭发送校验和分担 |
9. 网络故障诊断工具
9.1 ping:检查主机可达性
解读:
- 序列号中断 = 分组丢失
- RTT变化大 = 网络拥塞或路径变化
- 全部丢包 = 网络不通或防火墙拦截ICMP
9.2 traceroute:跟踪路径
输出符号:
* * *= 无响应(可能防火墙丢弃ICMP)!N= 网络不可达,!H= 主机不可达- 星号偶尔出现 = 正常(路由器低优先级处理ICMP)
9.3 tcpdump:分组嗅探
安全警告:tcpdump可看到明文密码,仅root可运行。
9.4 Wireshark / TShark
- 图形化分组分析,内置大量协议解析器
- 可重组TCP流查看完整会话
- 支持多种跟踪文件格式
10. 防火墙(iptables / IPFilter)
10.1 Linux iptables(Netfilter)
表与链:
filter表(默认):INPUT(入站)、OUTPUT(出站)、FORWARD(转发)nat表:PREROUTING(目标NAT)、POSTROUTING(源NAT)mangle表:修改分组内容
常用目标:ACCEPT(允许)、DROP(丢弃,静默)、REJECT(丢弃+返回ICMP)、LOG(记录)
规则管理:
防欺骗规则(放在nat表PREROUTING):
保存与恢复:
10.2 FreeBSD IPFilter
配置文件:/etc/ipf/ipf.conf
规则语法:
# 默认行为
block in quick all
pass out quick all
# 允许特定服务
pass in quick proto tcp from any to 10.0.0.0/24 port = 80 keep state
pass in quick proto tcp from any to 10.0.0.0/24 port = 443 keep state
# NAT(map关键字)
map em0 10.0.0.0/24 -> 0/32
管理命令:
11. 云联网(AWS VPC重点)
11.1 AWS VPC核心概念
| 组件 | 说明 |
|---|---|
| VPC | 私有虚拟网络(RFC1918地址),地域级 |
| 子网 | VPC内的网段,可用区级(需跨AZ部署实现高可用) |
| Internet网关(IGW) | VPC连接到Internet |
| NAT网关 | 私有子网访问Internet(出站) |
| 安全组 | 实例级防火墙(有状态)——默认拒绝所有 |
| NACL | 子网级防火墙(无状态)——默认允许所有 |
| 路由表 | 子网关联,决定流量走向 |
| VPC对等连接 | 两个VPC间私有路由(同地域) |
公共子网 vs 私有子网判断:
- 默认路由
0.0.0.0/0指向igw-xxx= 公共子网 - 默认路由指向
nat-xxx或i-xxx= 私有子网
11.2 典型安全组规则
| 方向 | 协议 | 端口 | 源 | 说明 |
|---|---|---|---|---|
| 入站 | TCP | 22 | 10.110.0.0/16 | 内网SSH |
| 入站 | TCP | 80 | 0.0.0.0/0 | HTTP(公网) |
| 入站 | TCP | 443 | 0.0.0.0/0 | HTTPS(公网) |
| 入站 | ICMP | type 3/4 | 0.0.0.0/0 | 必须允许(路径MTU发现) |
| 出站 | ALL | ALL | 0.0.0.0/0 | 全部允许(最简单) |
11.3 Terraform创建VPC
|
|
11.4 GCP VPC
- 全局VPC,子网地域级
- 默认防火墙允许ICMP、SSH、RDP,内部所有流量
- 最小特权建议:限制SSH源IP为自己,关闭RDP
11.5 DigitalOcean
- 无私有网络概念,同一地域droplet间有私有接口但共享给所有客户
- IPv4和IPv6直接分配给
eth0,无NAT转换 - 适合小规模/开发环境
12. 本章核心命令速查表
| 命令 | 功能 |
|---|---|
ip address show |
查看IP地址(Linux) |
ip link set eth0 up/down |
启用/禁用接口(Linux) |
ifconfig -a |
查看所有接口(FreeBSD) |
netstat -rn |
查看路由表(全平台) |
ip route show |
查看路由表(Linux) |
ethtool eth0 |
查看链路参数(Linux) |
ping -c 5 8.8.8.8 |
测试连通性 |
traceroute -n google.com |
跟踪路由(不解析DNS) |
mtr google.com |
实时路由+延迟(推荐) |
tcpdump -i eth0 host 1.2.3.4 |
捕获特定主机流量 |
iptables -L -v |
查看防火墙规则(Linux) |
iptables -F |
清空规则(谨慎) |
ipf -Fa -f /etc/ipf.conf |
加载IPFilter规则(FreeBSD) |
terraform apply/destroy |
创建/销毁云资源 |
ipcalc 192.168.1.100/24 |
子网计算 |
DBA视角补充:
- 数据库监听端口:Oracle 1521、MySQL 3306、PostgreSQL 5432均需在防火墙/安全组中开放(仅限应用服务器IP,绝不对公网开放)。云环境安全组规则应限制源IP为应用子网。
- 私有子网部署数据库:生产数据库应部署在私有子网,无公网IP,通过应用服务器或跳板机访问。AWS RDS默认就在VPC内,安全组控制访问。
- 网络性能诊断:数据库连接慢可能是网络延迟或丢包。用
ping测延迟/RTT,用traceroute看路径,用mtr持续监控。跨AZ部署数据库需考虑区间网络延迟(通常<1ms,但仍有影响)。- MTU问题:数据库服务器若出现“packet too large”错误,检查MTU设置。VPN隧道场景需降低MTU(如1400)避免分片。
- 端口耗尽:高并发数据库连接池可能耗尽本地端口,需调大
net.ipv4.ip_local_port_range并降低tcp_fin_timeout。- 云VPC设计:多AZ部署数据库(如AWS RDS Multi-AZ)需在每个AZ创建子网,跨AZ复制流量会产生网络费用,需纳入成本评估。数据库备份流量(如跨区域复制)同样会产生费用。
- 安全审计:数据库服务器入站规则应仅允许应用服务器IP和特定端口,定期审查安全组规则,移除“0.0.0.0/0”等过度开放配置。
文章作者 会写代码的小郎中
上次更新 2011-06-24
许可协议 CC BY-NC-ND 4.0