计算机网络:网络层(上)

207 阅读3分钟

日新计划6月更文 Day 10

  网络层(Network Layer)位于数据链路层之上、传输层之下,是计算机网络五层中较为复杂的一层。在发送端,传输层的 Segment 被封装成数据报(Datagram),在接收端重新得到 Segment。在此过程中会经过路由器(Router)的路由(Route)与转发(Forward)。

  1. Routing:路由,是指由路由器计算出一个数据报从发送方到达接收方的路径
  2. Forwarding:转发,是指数据报从路由器的输入端移动到正确的输出端

  在网络层有两种主要的通信协议——ATM(Asynchronous Transfer Mode)协议与 IP(Internet Protocol)。接下来我们主要讨论 IP。

  IPv4 协议的报文格式如下:

IP 版本(4 bits) 首部长度(4 bits) Type Of Service(8 bits) lengtd(16 bits)
identifier(16 bits) Flags(3 bits) Fragrant Offset(13 bits)
Time To Live(TTL,8 bits) Upper Layer Protocol(8 bits) Header Checksum(16 bits)
Sourece Address(32 bits)
Destination Address(32 bits)
Options(32 bits * n)
Data(32 bits * n)

  使用 IP 地址标识一个网络中的每个主机与路由器,但这些设备是使用网络接口(Interface)接入这个网络的,一台设备可能有多个接口并各自接入不同的网络,因此 IP 地址其实标记的是一个接口。

  在 IPv4中,IP地址长度为32位,为便于书写,常分为四组,每组8位使用十进制数表示,各组间使用.分割,如我们熟悉的192.168.0.1

  为方便管理并提高 IP 地址使用率,有了“子网”(subnet)的概念。一个 IP 地址分为两部分:子网部分与主机部分,使用子网掩码来标识出子网部分:子网掩码值为 1 的位表示子网,值为 0 的位表示子网中的主机。

  也可以使用 CIDR(Classless InterDomain Routing)表示一个 IP 地址及其分段。格式为a.b.c.d/xx表示子网掩码1的数量。

  对于每一个子网,其主机部分全为 0 的 IP 用于表示这个子网;全为 1 的 IP 地址用于广播。

  可以由网络管理员手动为每台主机的每个接口配置 IP 地址,也可使用 DHCP(Dynamic Host Configuration Protocol)自动为网络内设备分配 IP 地址。

  IPv4 的地址分为 A、B、C、D、E五类:

  • A类:1.0.0.0/8 ~ 126.0.0.0/8
  • B 类:128.1.0.0/16 ~ 191.255.0.0/16
  • C 类:192.0.1.0/24 ~ 223.255.255.0/24
  • D 类:组播地址,224.0.0.0 ~ 239.255.255.255
  • E 类:试验地址,240.0.0.0 ~ 255.255.255.255

  为了提高提高 IP 地址使用率,常使用 NAT(Network Address Translator,网络地址转换)技术使内网所有设备对外表现为一个 IP 地址,内网各个设备使用内网地址(10.0.0.0/8,172.16.0.0/16 ~ 172.31.0.0/16,192.168.0.0/24 ~ 192.168.255.0/24)互相访问。

  一种非常常见的 NAT 方式为:接入公网的路由器将内网对外建立的连接的 IP 地址与端口修改为路由器公网 IP 和一个未使用的端口并记录该对应关系,完成后续通信。这称为 PAT、NAPT或 IP 伪装。

  进行 NPAT 后内网设备不对外暴露,提高了内网安全性,但如果要让内网设备对外提供服务就需要进行 NAT 穿透(内网穿透)。

  但是 NAT 这种做法是有争议的,如:

  • 地址短缺问题应由 IPv6 解决
  • 路由器应只处理三层
  • 应用设计者应考虑 NAT 的存在

  随着 IPv4 的一些问题逐渐暴露出来,有了新的网络层协议——IPv6,IPv6 使用 32 位地址标识网络接口、更改标头以优化对 QoS 的支持、禁止报文分片发送并将 IP 报文首部长度固定为 40 Bytes:

IP 版本(4 bits) Priority(8 bits) Flow Label(20 bits)
Payload Len(16 bits) next hdr(8 bits) hop limit(8 bits)
Sourece Address(128 bits)
Destination Address(128 bits)
Data(32 bits * n)