持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情
前言
在计网学习中,网络层经常同IP打交道,所以今天来学习一下计算机网络网络层的IPv4协议与相关知识。
IPv4
IPv4分组
IPv4 是现在普遍使用的 IP协议。 IP协议定义了数据传送的基本单元为 IP分组及其确切的数据格式。 IP 协议也包括一套规则:指明分组如何处理、错误怎样控制。
分组格式
一个 IP分组 由首部和数据部分组成。首部前一部分的长度固定,共20Bytes,是所有IP分组必须具有的。首部的后面是一些可选字段,其长度可变,用来提供错误检测及安全机制等。P数据报 的格式如图
IP 数据报分片
一个链路层数据报能承载的最大数据量称为最大传送单元 (MTU,Max Transform Unit) 。因为 IP 数据报被封装在链路层数据报中,因此链路层的 MTU 严格地限制着 IP 数据报的长度。并且在 IP 数据报的源与目的地路径上的各段链路可能使用不同的链路层协议,有不同的 MTU 。例如,以太网链路层的 MTU为 1500B,而许多广域网的 MTU 不超过 576B 。当 IP 数据报的总长度大于链路 MTU 时,就需要将 IP 数据报中的数据分装在多个较小的 IP 数据报中,这些较小的数据报称为片。
片在目的地的网络层被重新组装。 创建一个 IP 数据报时,源主机为该数据报加上一个标识号。当一个路由器需要将一个数据报分片时,形成的每个子数据报(片)都具有原始数据报的标识号。当目的主机收到来自同一发送主机的一批数据报时,它可以通过检查数据报的标识号来确定哪些数据报属于同一个原始数据报的片。
IPv4地址层次结构
连接到因特网上的每台网络设备都分配一个 32bits 的全球唯一标识符,即 IP 地址。 IP 地址由互联网名字和数字地址分配机构 ICANN 进行分配。
IP分类
早期采用分类的IP地址,将IP地址分成了A、B、C、D、E五类:
- Class A:126个网络号,减去了网络号全0和127环回地址。
- Class B:16382个网络号,64000个主机。一般用于公司内部。
- Class C:200万个网络号,254个主机。
- Class D:多播地址。
- Class E:预留地址。
因此,IP地址::={<网络号>,<主机号>}。 其中网络号标志设备所连接到的网络。主机号是该设备在该网络中的标志。IP地址是唯一的。
特殊IP地址
- 主机号全为 0 表示在本网络中的本身。
- 主机号全为 1 表示在本网络内的广播地址,又称直接广播地址。
- 32位全为 0 表示本主机。
- 32位全为 1 表示整个TCP/IP网络的广播地址。但由于路由器会隔离广播域,实际上还是本网络内部的广播地址。
- 127.x.x.x 保留为回环自检(Loopback Test)地址,此地址表示任意主机本身。又称受限广播地址。
内网IP
地址空间的一部分供专用地址使用,不会被当作公用地址来分配,不会与共用地址重复。路由器不对目标是专用地址的分组进行转发。比如:
- 10.0.0.0 - 10.255.255.255 (Mask:255.0.0.0)
- 172.16.0.0 - 172.31.255.255(Mask:255.255.0.0)
-
192.168.0.0 - 192.168.255.255(Mask:255.255.255.0)
IP地址的特点
-
每个IP地址都由网络号和主机号两部分组成,因此IP地址是一种分等级的地址结构:
- IP地址管理机构在分配IP地址时只分配网络号,而主机号则由得到该网络内部自行分配,方便IP地址的管理;
- 路由器仅根据目的主机的网络号来转发分组,从而减小了路由表所占的存储规模。
- IP地址是标志一台网络设备和一条链路的接口。因此路由器至少有两个IP,路由器的每个端口都对应着一个IP地址。
-
在同一个局域网上的主机或路由器的IP地址中的网络号必定相同。
网络地址转换NAT
网络地址转换(Network Address Transform)是指将专用网络地址转换为网络中的公用地址,从而对外隐藏内部管理的IP地址。它使得整个专用网只需要一个全球 IP 地址就可以与因特网连通。其实就是我们所说的内网:
- 由于专用网本地 IP 地址是可重用的,所以 NAT 大大节省了 IP 地址的消耗。
-
同时,它隐藏了内部网络结构,从而降低了内部网络受到攻击的风险。
私有 IP 地址不能直接用于Internet,必须通过网关(Gateway)利用 NAT 把私有 IP 地址转换为 Interne 中合法的 IP 地址后才能用于 Internet。私有 IP 地址的就是刚才我们说的内网 IP:
- Class A:1个A类网段,10.0.0.0 - 10.255.255.255 (Mask:255.0.0.0)
- Class B:16个B类网段,172.16.0.0 - 172.31.255.255(Mask:255.255.0.0)
-
Class C:256个C类网段,192.168.0.0 - 192.168.255.255(Mask:255.255.255.0)
NAT 实现将 公网{IP:PORT} 映射成 内网{IP:PORT}
💡 使用 NAT 时需要在专用网(内网)连接到因特网(公网)的路由器上安装 NAT 软件, NAT 路由器至少有一个有效的外部全球 IP 地址(公网IP)。
转换过程:
内网某台设备发出 IP 数据报时,具有 NAT 的路由器会记录下发送源的 {IP:PORT} ,将之与本路由器所拥有的公网IP和某个空闲PORT绑定,放入一个 NAT转换表 中。然后修改源IP地址为路由器的公网IP地址,修改端口号为绑定的端口号。之后目标端发到内网一个 IP 数据报,该路由会取出目标IP和端口号,拿它去 NAT转换表 中查找,然后发送到对应主机。
💡 我们注意到,NAT路由器能够看到端口号。因此 NAT 是运行在传输层的。
总结
本节我们介绍了 IPv4 的分组以及层次结构,还介绍了NAT网络地址转换。我们注意到传统的IPv4是分类的,同样的IP地址还是具有层次结构的。
正是因为IP具有层次结构,我们可以利用网络号来划分子网(subnet),在网络层传输只需定位到IP所在的子网就行,剩下的就交由网关路由器,通过子网内部数据链路层的MAC地址来寻址,完成到目标主机的最后一跳。这大大节省了路由表的大小,减小了路由寻路算法的规模。
明天我们讲一下CIDR和三个协议:地址解析协议ARP、动态主机配置协议DHCP和网际控制报文协议ICMP。