Linux 网络杂记

1. 前言

不知道什么时候看过一些说法,Linux 这样的网络操作系统......
网络确实是Linux一个非常突出的优势,支持各种各样的网络架构、虚拟接口、软件协议,实在是令人惊叹。个人对于 Linux 网络的探索也是间歇性地进行,各种知识碎片杂乱无章。 深知知识体系的重要性,但目前积累尚浅,亦不可囫囵吞枣,遂在此记录日常经验,以备日后查阅。

2. 路由与流控

2.1 TC 流量控制

TODO

2.2 策略路由 (rule)

TODO

2.3 路由 (route)

TODO

2.4 Netfilter

2.4.1 iptables

TODO

2.4.2 nftables

TODO

2.5 BPF 包过滤

2.5.1 BPF vs ePBF

TODO

2.5.2 BPF with socket

TODO

2.5.3 BPF with netfilter

TODO

2.5.4 BPFilter

TODO

2.6 硬件NAT (HNAT)

2.6.1 offload 相关

TODO

2.6.2 CTF( Cut Through Forward)

TODO

2.6.3 FastPath(SFE)

TODO

3. 网络接口与地址

3.1 IP 别名(IP Alias)

用途:给一块网卡(接口)配置多个IP地址

示例
方案1:iproute2

方案2: ifconfig

备注:无论是使用来自 iproute2 的 ip,还是 net-tools 里面的 ifconfig 工具,都能够完成一样的工作,只是 iconfig 的风格是增加一个新的别名接口,而ip根本不会增加新的虚拟接口。(此论点有待考证)

3.2 虚拟局域网(VLAN)

用途:给某接口配置 VLAN tagging

示例
方案1:iproute2

方案2:vconfig

备注:
1. vlan 可以嵌套
2. 使用 iproute2 能够自定义 vlan 接口名称

3.3 可扩展虚拟局域网(VxLAN)

TODO

3.4 bridge 接口

TODO

3.5 bond 接口

用途:配置多网卡/接口绑定,实现负载均衡、冗余、增加带宽等功能

示例:(以bond0为例)

备注
1. 只有 bond0 能使单个 TCP/IP 连接的包从多个端口转发出去,因此只有bond0能够让单个 TCP/IP 连接使用大于一个接口的带宽。 但是这样会造成较多数据包 out of order,导致乱序冲传,因此最终有效带宽可能达不到多个接口带宽之和,甚至低于某个接口带宽
2. 内核文档表示 bond0 需要交换机将对应的端口配置好 portchannel/etherchannel/trunking 功能,实际上使用无此功能的二层交换机,bond0也能工作。(有机会找个高端交换机对比一下结果)
3. bond4,即 802.3ad 链路聚合,或者又称 LACP,需要交换机支持,但是不能使单个 TCP/IP 连接使用大于一个接口的带宽,大概工业标准更多地考虑了效率和稳定性。

参考:
https://www.kernel.org/doc/Documentation/networking/bonding.txt

3.6 team 接口

TODO

3.7 TAP 与 TUN

TODO

3.8 veth 接口

TODO

3.9 macvlan 接口

TODO

3.10 macvtap 接口

TODO

3.11 其他接口

gre、ipip、sit、ipvlan....

4. 软件协议

4.1 iproute2

TODO

发表评论

电子邮件地址不会被公开。 必填项已用*标注