58 TCP/IP 网络基础
多宿主机(Multihomed host)指拥有多个网络接口的主机(可以是个人计算机,也可以是路由器)。
在网络层中,IPv4 为 IP 头提供了校验和,这样就能检测出头中的错误,但是 IPv4 并没有为包的内容提供校验。IPv6 则没有为 IP 头提供校验和。在传输层中,UDP 校验和在 IPv4 上可选、在 IPv6 上强制;TCP 校验和总是强制的。
常量 INADDR_ANY
就是所谓的 IPv4 通配地址,大多数实现将其定义成了 0.0.0.0。使用通配地址,多宿主机可以接收任意一个主机 IP 地址的数据。
IPv6 的环回地址为 ::1
,通配地址为 0::0
或者 ::
(同一个值的两种写法而已)。IPv6 还提供了“IPv4 映射的 IPv6 地址”,这样的 IPv6 地址是在 IPv4 地址前面加上 ffff(两个字节的全 1),然后再加上一堆 0 形成的。与 204.152.189.116 等 价 的 IPv4 映 射 的 IPv6 地 址 是 ::FFFF:204.152.189.116。
端口号:0-1023 被保留。1024-41951 是注册端口,需要向 IANA 注册(但不是已经全都注册满了)。IANA 将位于 41952 到 65535 之间的端口称为动态或私有端口(书上写的不是 41952,怀疑写错了),这表示这些端口可供本地应用程序使用或作为临时端口分配,但不同实现的分配范围可能不同,比如 Linux 通过 /proc/sys/net/ipv4/ip_local_port_range 表示端口分配范围,在我本地看是 32768 和 60999 两个数字。
UDP 的功能很少,只是在 IP 的基础上加了端口号和整个包的校验和。