跳转至

网络层

Internet Protocol 互联网协议

操作系统启动的时候,DHCP协议会配置本机IP地址和默认网关IP地址

本地主机先通过子网掩码来判断目标IP是本地IP还是公网IP,如果是同一子网,直接发送给对方,否则发给本子网的默认网关,默认网关如果不能路由,则通过ARP协议(Address Resolution Protocol)获取网关MAC地址,交给能进行路由的网关,即路由器,如果找不到则丢弃,如果找到且恰巧路由器是目标子网的网关,则将数据包交给它然后结束路由,否则会通过路由协议(常用的有 OSPF 和 BGP)按路由表将数据包继续给到下一个路由,如果转发 TTL(Time To Live) 次之后都没有找到,则最终被丢弃。

20210729232759

DHCP

DHCP(Dynamic Host Configuration Protocol) 动态主机配置协议

  • Static(静态) IP:手工给设备设置 IP 地址
  • Dynamic(动态) IP:设备向 DHCP 服务器(主机或路由器)发送一个请求,获取 IP 地址

DHCP 服务器上记录着可以被分配到 LAN 内计算机的 IP 地址范围和子网掩码的值,计算机在启动时从 DHCP 服务器获取它们,并自动地配置

配置项:IP、子网掩码、默认网关、DNS

分配地址的时候会设定租期,当租期过去 50% 时会向 DHCP 服务器发送续约请求,如果没有发则 IP 将被收回

此外,像打印机、服务器、路由器等这些 IP 不应该经常变化的设备,还可以在 DHCP 配置中根据 MAC 地址预留固定 IP

路由表

静态全局路由表

互联网诞生初期,全球的主机很少,只需要每个路由器各自维护一张包含全球全局路由表即可,当有新的路由器出现,需要各自手动更新路由表

动态全局路由表

随着互联网规模增长,改为自动更新全局路由表

动态分级路由表

互联网流量暴涨,全局路由表越来越大,更新与查询越来越频繁,越来越慢,于是引入分级路由,将互联网按区域大小用树状层次结构划分,每个路由器只需要维护所在区域的路由表即可

路由协议

  • BGP协议:基于TCP协议,根据距离矢量路由算法(Bellman-Ford),找到最短路径,主要用于内网
  • OSPF协议,基于IP协议,根据链路状态路由算法(Dijkstra),找到最佳路径,主要用于外网

IPv4

IPv4 由 32bits 连续的二进制数字组成,共 4Bytes,为方便书写,每字节为一组,采用点分十进制来显示和使用

20210725152948

IP 地址由互联网机构 ICANN 分配

分类编址

根据网络规模大小,分成5类

20210725153815

  • A~C 类为单播地址,分配给相应规模的地址
  • D类为多播地址,向这个IP发送消息,组下的主机都可以收到

20210726230202

最初由 网络号 + 主机号 两级组成,不同分类下网络号的位数和起始位,以及主机号位数都是固定的

这种两级IP利用率较低且不够灵活,于是将主机号又划分出一部分作为 子网号

当数据到达路由器后,通过子网掩码计算出子网号,先发给子网,然后再转发给对应主机

子网掩码 与 IP 的位数和格式一样,只是主机号部分用 0 表示,前面的网络号和子网号都用 1 表示

20230520183936

然后将IP地址与子网掩码逐位相与(AND),即可得出子网的地址

无分类编址 CIDR

随着互联网增长,IPv4 地址很容易被耗尽,于是研究出新的编址方法:无分类域间路由选择(CIDR, Classless Inter Domain Routing)

即地址不再分类,改为:网络前缀 + 主机号 / 前缀长度

网络前缀相同的地址,称之为CIDR地址块,前缀长度由后面的 /n 决定,可以通过地址掩码来算出地址块

地址掩码,类似于或者说仍可称之为子网掩码,即前 n 位都是1,剩余都是0,然后与地址按位与运算

前缀长度小于13或大于27的比较少用,最常见的为 /16/24,比如:192.168.1.x/24,二进制为:11000000.10101000.00000001.x

前24位为网络号,后8位为主机号,网络号部分用1表示,主机号部分用0表示,即地址掩码为:11111111.11111111.11111111.00000000,转换为10进制为:255.255.255.0

然后将二进制的IP和子网掩码按位逻辑与运算,即可得到地址块中的最小地址:11000000.10101000.00000001.00000000,即:192.168.1.0

  • 192.168.1.x/24 IP地址
  • 255.255.255.0 地址/子网掩码
  • 192.168.1.1 通常为默认网关(即路由器)
  • 192.168.1.255 广播地址(向这个地址发送消息所有主机都可以收到)

一个路由器可能有多个不同前缀长度的路由表,通常选择最长前缀匹配,因为前缀越长,地址数越少,路由越具体

8 位主机号可分配 2^8=256 个地址,地址块的最小地址(主机号全是0)和最大地址(全是1)为特殊地址,一般不使用,还要预留一个给默认网关,所以可分配 256-3=253 个地址

知道了这个规则之后,便可以通过主机数倒推子网掩码来规划网络

比如有10台主机,则至少需要 10+3=13 个IP
因为 2^4=16 > 13,所以主机号至少要4位
即子网掩码为:11111111.11111111.11111111.11110000,十进制为:255.255.255.240

NAT

2011年2月3日,IANA宣布IPv4地址已经耗尽,为了节约IP地址数,有时只需要给网关分配一个公有IP,而连接网关的主机则使用本地IP即可

RFC 6890 规定了一些可重用地址仅用于本地专用网

10.0.0.0/8 这些原本是分配ARPANET的,但其已经关停,所以被用作专用地址
172.16.0.0/12
192.168.0.0/16

跨网通信时,通过 Network Address Translation 协议将私有IP转换为公有IP,同一IP还可以使用端口号来区分不同的网络进程

20210725151352

如果某公司分布式办公,又需要内部通信,可以使用虚拟专用网(VPN, Virtual Private Network)加密通信

20230520204518

VPN 会虚拟出一个网卡

VPN 的种类很多,技术各不相同,涉及OSI的1~6层,比如有些使用隧道协议实现

https://en.wikipedia.org/wiki/Virtual_private_network

20230519135014

IPv6

为了长远考虑,创造出了 IPv6 协议

IPv6 由128位二进制数组成,通常分割成8组,每组16位(以十六进制数表示)

地址数足够分配给地球每一粒沙子,但它不兼容 IPv4,需要 NAT 转换和映射才能数据互通,因此普及较缓慢

20210725152103

参考

极客时间专栏:《趣谈网络协议》