IP
IP 协议工作在计算机网络 OSI 模型的 3 层,工作在 TCP/IP 模型的 IP 层,目前的网络模型其实不是按照 OSI 的 7 层模型来构建的,因为这个模型对于实际用来说还是有点冗杂。
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
实现网络模型的部分是由操作系统来实现的,不同的操作系统对网络模型的实现是不同的。不过,在长期的工程实践中,操作系统的实现慢慢具有了一定的共性,这个共性可以被表述为 TCP/IP 模型,仅包含 4 层,应用层由应用程序自己实现,操作系统实现传输层、网络层、接入层,硬件层另说。
应用层
传输层
网络层
接入层
IP
IP 协议用于寻址,解决的问题是,在茫茫的网络海洋中,数据应当如何到达目的的问题,同时,IP 地址还结合了子网掩码进行划分,用于将地址进行分组管理,从而实现子网的概念,在一定程度上解决了 IP 地址不够用的问题。
在同一个子网中的设备,在物理上的很可能是直接连通的,至少从预期上是这样的。在同一个子网中的设备,可以只经过一跳 IP 进行访问,并且不需要路由器的参与,不过,它们可能会通过交换机或者集线器进行连通,然后经历交换机分发数据。而不再同一个子网中的设备,需要经历多个路由器的路由最终到达目标机器。
交换机,二层网络设备,用于同一子网中的流量转发。交换机的功能是负责透明转发 IP 层的数据,IP 层的逻辑对二层的转发无感知。IP 层知道自己想要向同一个子网中的某一个设备的接口发送流量,至于中间经历了怎样的二层转发,IP 层 并不关心。
网桥,二层网络设备,可以认为是一种交换机,只是当强调网桥的时候,更多的是强调它位于两个网络拓扑之间,用于将两个网络拓扑进行勾连。当然,也可以同时勾连多个网络拓扑。
路由器,三层网络设备,用于跨子网的通信和流量转发
操作系统协议栈
操作系统实现网络模型的模块是在协议栈。其工作流程是一个复杂的过程,但是,主要可以从 3 张表来看。路由表、ARP 表、MAC 表。
路由表
路由表是三层网络设备使用的。路由表中记录的信息用于在封装 ip 包的时候,根据目标 IP 决定下一跳的网段。通过将目标 IP 和掩码进行与运算,看是否能够匹配目标规则,也就是计算结果是否与 destination 相等,如果相等则匹配成功。
[root@VM_139_74_centos ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default gateway 0.0.0.0 UG 0 0 0 eth0
10.0.0.10 10.139.128.1 255.255.255.255 UGH 0 0 0 eth0
10.139.128.0 0.0.0.0 255.255.224.0 U 0 0 0 eth0
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0ab63c131848
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-bccbfb788da0
172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-7485db25f958
[root@VM_139_74_centos ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.139.128.1 0.0.0.0 UG 0 0 0 eth0
10.0.0.10 10.139.128.1 255.255.255.255 UGH 0 0 0 eth0
10.139.128.0 0.0.0.0 255.255.224.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0ab63c131848
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-bccbfb788da0
172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-7485db25f958
ARP 表
ARP 表是三层网络设备使用的。ARP 表记录了从 IP 地址到目标主机的 MAC 地址,用于根据下一跳的网路 IP,映射出下一跳的网络端口是多少,而从本机的哪个端口出去,其实已经由路由表决定了。ARP 表解决的问题是:已知一个机器的 IP 地址,但在实际网络的链路上传送数据帧时,最终还是要使用该主机的的上的网络端口的硬件地址,需要知道其网卡的 MAC 地址才能发送数据。
MAC 表
MAC 表是二层网络设备使用的。MAC 表记录了一个目标 MAC 地址到自己身上全部 MAC 接口的映射关系,用于交换机判断如何将从某个接口受到的数据从自身上的另一个接口,转发到目标 MAC 地址。