前言
在前面的文章里,我们讲解了现代网络分层模型的发展过程,以及从宏观层面上体现的系统工程思维。 那这篇文章就让我们来看看网络数据的传输过程。我们就以常见的家庭网络环境,说明网络是如何工作的,涉及到网络中的常见设备、设备如何接入网络以及数据包的传输方式。
网络中常见设备
在家庭网络中,最常见的设备包括交换机和路由器。
- 交换机: 负责局域网中将不同设备之间的数据转发。交换机依赖MAC地址来进行数据转发,通常它会维护一张 MAC 地址表,通过比对MAC地址来决定将数据包传给哪个接口。
- 路由器: 一般作为局域网的互联网接入口,主要用于将局域网与外部网络的数据包转发。
另外,通常来说,现代家用路由器是多功能的,它们统一集成了路由器、交换器、无线AP接入点、DHCP服务器的功能。
网络的常见参数
在家庭局域网中,通常会涉及到以下几个关键的网络组件:
- 网关(Gateway):通常是家用路由器的 IP 地址,它负责在局域网和外部网络之间转发数据包,充当出口。当数据包需要发送给一个局域网外的IP,则都需要先发送给网关,由网关决定下一跳。
- DNS 服务器(DNS Server):负责将域名解析为 IP 地址,访问网站时使用。
- 子网掩码(Netmask):用于确定一个设备的 IP 地址所在的子网范围,帮助设备判断其他设备是否位于同一子网内。
这些组件共同作用,使得局域网内的设备能够正常通信并与外部互联网进行交互。
设备接入网络
当一个新设备连接到家庭网络时,则首先需要获取上面提到的参数:IP 地址、网关和DNS服务器等信息。这个过程是由DHCP请求来完成的。 具体过程如下:
- 设备发送一个
DHCP Discover
广播请求,用于寻找网络中可用的 DHCP 服务器。 - 路由器(局域网中的 DHCP 服务器)收到该请求后,回复一个DHCP Offer,提供为其分配的 IP 地址和其他网络参数。
- 设备收到 DHCP Offer 后,发送
DHCP Request
,表示它接受分配的 IP 地址。 - 最后,DHCP服务器通过
DHCP Acknowledgment
确认该 IP 地址的分配,并提供网关和 DNS 等相关信息。
这样,设备便成功接入了网络,并拥有了唯一的 IP 地址,能够正常进行数据通信。
数据是如何传输
数据的分包
在网络中传输的数据通常需要进行分包,尤其是当数据量较大时,分包能够有效提高传输效率。这里的分包过程由传输层协议(如 TCP 或 UDP)来完成。通过分包,数据可以更加灵活地在网络中传输,适应不同的网络条件。
这里,我们先不去详细的讲TCP、UDP对数据的拆分和整合,只是先明确数据最终会被拆分成一个个小的数据包进行传输,而这里我们先关注这些数据包是如何在网络间传输的。
设置IP和MAC地址
在发送数据包时,首先要明确数据包发送参数:
- 目标IP地址。这是数据包的最终去向,它标识数据需要到达的目标设备。
- 直接转发的MAC地址。用于确定如何在当前子网内进行传输。 IP 地址用于标识网络层的目标,而MAC地址用于标识链路层在局域网内的传输路径。在同一局域网内,MAC地址用于确保数据包能够通过交换机正确转发到目标设备。
当设备A要向设备B发送数据时,数据包的发送过程会有所不同,具体取决于B设备是否在同一个子网内(通过子网掩码判断):
- 同一局域网内:如果A和B在同一个子网内,那么数据包的目标MAC地址就是B的MAC地址。数据包通过交换机进行定向传输,交换机会将数据包直接转发给B。
- 不同子网:如果B在外部网络中,A会将数据包的目标IP地址设置为B的IP,但MAC地址设置为网关(通常是路由器)的MAC地址,数据包会先发给路由器,由路由器负责将数据转发到外部网络。
ARP 协议
ARP协议在局域网中起到至关重要的作用,它将IP地址解析为MAC地址,从而实现数据链路层的传输。
通常每个设备都会维护一个IP-MAC
地址表(即ARP表),当设备第一次要向局域网内的某个IP发送数据包,此时会通过ARP协议来局域网内广播,请求目标IP设备的MAC地址。
得到响应回复后,则将MAC地址添加到地址表中保存起来,下次即可直接使用。
有线和无线网络
- 有线网络:在有线网络中,交换机负责将数据包定向传输到目标设备,数据只会被传输到匹配的目标端口,其他设备无法接收到该数据包。
- 无线网络:在无线网络中,数据包通过无线信道广播,所有设备都可以接收到广播的数据包,但只有目标设备会继续处理它。无线信道的竞争和冲突避免机制(如 CSMA/CA)确保了无线传输的可靠性。
NAT过程
NAT(Network Address Translation)是为了解决IPv4地址短缺问题,允许多个局域网设备共享一个公网IP地址。其工作流程可以分为以下几个步骤:
- 请求外部访问:局域网内的设备(如设备A)向互联网中的服务器发送请求时,设备A使用私有IP地址作为源地址。该请求首先被路由器接收到。
- 地址转换:路由器将设备A的私有IP地址转换为路由器的公网IP地址。为了跟踪多个设备的请求,路由器还会为每个转换记录一个唯一的端口号。路由器维护一个转换表,将局域网内设备的私有IP和端口号映射到公网IP和端口号。
- 数据返回:互联网中的服务器响应设备A的请求,并将响应数据包发送回路由器的公网IP地址。路由器根据转换表中的信息,找到对应的私有IP地址和端口号。
- 数据包转发:路由器将返回的数据包中的公网IP地址和端口号转换回设备A的私有IP地址和端口号。数据包被正确转发到设备A,完成整个通信过程。
比如在上图中,设备A则是在NAT机制下,和目标服务器完成了通讯。而在目标服务器眼里,和他交互的是74.125.68.102
这个IP,他并不知道A实际上是一个局域网内的机器。
接收端
- 目标IP地址检查: 路由器首先会查看数据包中的目标IP地址是否和自己匹配。如果数据包的目标IP地址匹配,路由器会继续处理;如果不匹配,数据包会被丢弃。
- NAT映射表查找: 路由器检查其NAT映射表。通过匹配数据包中的目标IP地址和目标端口,查找是否有相应的映射条目。
- 映射转换: 如果NAT映射表中存在匹配项,路由器会根据映射规则,将数据包的目标地址转换为内网设备的私有IP地址和端口。这个过程确保了数据包能够被正确转发到内网中相应的设备。
- 转发到内网设备: 路由器将数据包转发到局域网中指定的设备。通常,路由器会根据私有IP地址和端口号,在局域网内确定目标设备,并将数据包通过交换机或其他网络设备送到目标设备的网络接口。
总结
在本文中提到的各种设备和过程都可以在五层网络模型中找到它们的位置:
- 物理层:包括网络接口、网线、无线信号等,所有物理的通信介质和硬件传输。
- 数据链路层:交换机和MAC地址的传输工作,包括
ARP协议
,它用于在局域网内将IP地址解析为MAC地址,以便进行链路层的数据传输。 - 网络层:路由器的功能,以及IP地址的寻址和路由的过程,NAT的IP地址转换也属于网络层的内容。
所以,总结来看:物理层+数据链路层+网络层这三层实现了将数据包从源地址传输到目标地址的功能。