网络编程 - IP 路由
这篇文章主要是 Rust 网络编程的第一章阅读记录.
网络地址
需要通过 hosts 和 networks 来可靠地将 packet 传递到目的地.
以太网卡地址(MAC)
也叫做 Media Access Control address. 它是一个 48 bit 长度的唯一 ID, 内置于网络设备中, 用于在 network segment 中识别这个设备. 典型的 MAC 地址是 8 组 2 位的十六进制数, 比如: 01-23-45-67-89-ab-cd-ef
(或写作 01:23:45:67:89:ab:cd:ef
).
其中有一些位有特殊用途, 比如在 Ethernet frame 中如果需要实现多播, 可以将第一个十六进制数的最低位设置为 1
. 而如果是这位设置为 0, 则这个 frame 只会被发送给唯一接收者.
IP 地址
在 IP 网络中设备的唯一地址. IPv4 地址有 32 bit, IPv6 有 128 bit.
如果需要表示一组 IP 地址, 可以使用 CIDR 记法. 比如 192.168.1.0/24, 后面的 24 表示子网掩码的位数是 24, 即表示如下:
- 子网掩码:
255.255.255.0
- IP 起始:
192.168.1.0
- IP 结束:
192.168.1.255
- IP 段可拥有的总 Host 数:
256
个
Autonomous system number
较少遇到, 略.
网络通信及端口号
网络通信的两个 host 通常使用 端口号(port number) 来区分彼此间是哪些进程在通信.
当 host A
中有一个进程 ID 为 x
的进程被分配了端口号 p
, 则它会将 x
(pid) 和 p
(port number) 的对应关系记录下来, 当收到发送到该端口号的 IP packet 时, 系统就将数据发送给对应进程.
并且当收到数据时发现对应进程已退出时, 可以将连接关闭(在 TCP 的场景下)并丢弃此 IP packet.
系统中 0 到 1024 端口号被保留给系统自己使用(如果要用, 则需要 root 权限).