家庭网络通信

tim-qtp...大约 11 分钟计网路由器交换机DHCP DNS ARP

1. 家庭网络的基本设置

你在运营商拉了一条宽带,运营商会给你分配一个光猫。你通常会单独再买一台路由器,使用网线将路由器的 WAN 口与光猫相连。通常情况下,颜色不一样的接口就是路由器的WAN口。路由器通过 PPPoE 拨号获取运营商分配的公网 IP(假设为 2.2.2.2),或者光猫负责拨号,路由器获取内网 IP(如 192.168.0.2)。

总之不管怎样,你的路由器WAN口会获取到一个IP。

除了WAN口,路由器还有多个颜色一样的LAN口,为了思路清晰,我这里直接单独提取出这4个LAN口,把它当做一台交换机,并且和路由器这个虚拟的网口LAN建立了连接,路由器连接交换机的这个网口有一个IP地址,假设为192.168.1.1,这个是路由器的内网IP。

访问这个IP可以进入路由器的管理页面,同时也是你家里整个局域网的网关,你家里所有的网络设备,都会通过网线或者WIFI的方式,连接到这台交换机,这是大部分家庭的网络拓扑,装宽带的师傅会帮你配置好,确保你能正常上网。

路由器的虚拟LAN口连接交换机,交换机连接家中的其他设备(如电脑、手机等)。路由器的内网 IP 通常是 192.168.1.1,这是局域网的网关。


2. 电脑获取 IP 地址(DHCP 协议)

当电脑通过网线或 Wi-Fi 连接到网络时,会通过 DHCP(动态主机配置协议)自动获取 IP 地址。

电脑的 DHCP 客户端(操作系统内置了)会发起一个 DHCP 请求,找DHCP服务器获取IP地址,这个请求会被一层层的封装。

以TCP/IP四层网络模型为例,每一层都有其特定的任务。

  • 传输层管端口
  • 网络层管IP
  • 网络接口层管MAC

数据来到传输层,传输层会指定这个DHCP请求-通过什么传输协议发往什么端口。DHCP规定客户端默认使用68号UDP端口,服务端默认使用67号UDP端口,使用UDP的方式传输,这些都是规定好的。

接着数据来到网络层,网络层需要确定,数据包发给哪个网络设备,也就是负责封装IP地址。电脑现在的目的,是找DHCP服务器要IP地址,但他并不知道现在谁是DHCP服务器,不知道该发给谁,所以干脆一不做二不休,直接发给这个网络里的所有设备,所以目标IP是一个广播IP,255.255.255.255,同时接收方也需要知道是谁发给他的数据,所以还需要加上源IP但是电脑现在还没有IP,于是会直接用0.0.0.0这个未指定的IP。

接着数据会继续向下

来到网络接口层,这一层会封装MAC地址,每个网卡都有唯一的MAC地址,也叫物理地址,源MAC是你电脑网卡的MAC地址,这里假设CC:CC:CC:CC:CC:CC,同样由于不知道数据该发给谁,所以目标MAC是一个全F的广播MAC地址,然后这个经过层层封装的数据包,会从电脑的网卡接口发出。

顺着网线来到了交换机的1号接口,普通的家用交换机是一个只能解析网络接口层数据的设备,也就是说他只能看懂MAC地址,里面的IP和端口等信息,对他来说就是一堆无规则的数据,他看不懂也没必要看懂,交换机内部有一个MAC地址映射表,他会根据MAC地址对数据进行转发,至于你转发的什么内容,它并不关心。

交换机从LAN1收到数据后,会将LAN1对应的MAC地址保存到映射表中,然后查看目标MAC,发现是全F的广播MAC地址,于是交换机会将电脑的数据,给每一个连接的LAN口(Wifi也算)发送一份。

image-20250120134409726
image-20250120134409726

当这台电脑收到数据包的时候,会根据网络模型一层一层的解封装,首先网络接口层会查看目标MAC地址是不是发给自己的,发现是全F,虽然不是自己的MAC地址DD,但这是一个广播MAC地址,所以会接受它。继续向上来到网络层,查看目标IP是全255,虽然不是自己的IP,但这是一个广播IP,广播就类似学校的广播,当广播里说全体注意的时候,你肯定要听一下广播里他在讲啥,所以电脑为了看里面的内容,也会接受这个数据包。

来到传输层,发现是通过UDP的方式发给67号端口,由于这台电脑没有运行DHCP服务,所以并没有监听67号端口,于是会将这个数据包丢弃

同样的数据来到路由器,一般的家用路由器会提供很多服务,比如DHCP DNS DDNS Qos UPnP DMZ 端口转发 防火墙等等,接口层会接受这个目标MAC全F的广播,同样网络层会接受这个目标IP是全255的广播,向上来到传输层,发现目标端口是UDP的67,一般情况下路由器默认就开启了DHCP服务,而DHCP默认的监听端口就是UDP的67,于是这个数据包将会交给DHCP服务,DHCP服务收到数据后,将会从自己的IP地址池中,选择一个未被占用的IP地址。

假设为192.168.1.3,除了IP地址,还会包含子网掩码 网关 DNS服务器租约等信息。假设租约为12个小时,然后重新封装数据包,源端口是本机的DHCP服务67端口,目标端口是对方发过来的端口也就是68,并且通过UDP传输,网络层封装源IP地址为路由器自己的IP,也就是192.168.1.1,由于对方没有IP,所以目标IP还是全255的广播IP。

来到网络接口层,源MAC是路由器LAN口的MAC地址,路由器从刚才电脑发过来的数据包中,已经知道了电脑的MAC地址,所以目标MAC是电脑的MAC地址,数据来到交换机,刚才说过交换机只能解析MAC地址,当他看到目标MAC是CC的时候,会查看自己的MAC地址映射表,发现CC插在接口1上,于是会将这个数据包从接口1发送出去。电脑收到数据后会一层层的解封装。接口层发现目标MAC是自己。

于是接受该数据。网络层发现目标IP是广播IP,同样也接受了,传输层发现是发往UDP的68号端口,而DHCP客户端监听了该端口,于是数据将会由DHCP应用程序处理,DHCP会拿着这些信息,给电脑进行相关配置,于是我们的电脑就有了IP地址 网关DNS等信息了,并且在6个小时之后,也就是租约的1/2,会再次发起DHCP请求续约IP地址,续约成功的话,租期就会再次变成12个小时。

如果DHCP服务器没有回应的话。会在时间剩余1/4 1/8的时候,再尝试发送续约请求,如果续约成功,将会再次变成12个小时。如果失败了。说明路由器提供的DHCP服务挂了。等到租约到期之后。将会自动释放IP。然后重新发起DHCP获取IP的广播请求。

但是由于这个局域网内,唯一的DHCP服务器挂了,所以电脑永远也得不到DHCP回应,当尝试多次都没有收到回复之后,DHCP客户端会给电脑,自动分配一个全球统一的网段,IP地址为169.254.X.X,确保和局域网的其他设备还能正常通信,所以当你发现电脑获取到了169.254开头的IP,说明你家里的局域网中,没有提供DHCP服务的设备,建议检查网络。

除了一台都没有的情况,还有可能配置不当,导致整个局域网中,存在多台DHCP服务器的情况,这也会出现网络问题,这里存在DHCP攻击

如果电脑关机了,没有再次发送续约请求,租约到期后,路由器的DHCP服务就会释放掉这个IP,重新放回地址池,再分配给其他有需要的人,所以像是机场或者商场之类的公共场所,WIFI设置的DHCP租期都会比较短,一般十来分钟,确保你人走后,IP能够尽快的释放出来给别人用,防止地址池被占满,家庭网络的话可以设置的久一点,一般默认是720分钟,也就是12个小时,这就是DHCP的整个执行流程。

实际的DHCP要更复杂。

所以简单一点流程就是:广播(目标 IP 为 255.255.255.255,目标 MAC 为 FF:FF:FF:FF:FF:FF)。路由器收到请求后,从 IP 地址池中分配一个 IP(如 192.168.1.3)给电脑,并附带子网掩码、网关和 DNS 信息。DHCP 分配的 IP 有租期(通常为 12 小时),电脑会在租期过半时尝试续约。如果续约失败,IP 会被释放,电脑会重新发起 DHCP 请求。

除了DHCP分配IP,还可以手动配置IP,但需要提前知道家里的局域网是在哪个网段,比如路由器的地址为192.168.1.1,那你的设备就要在192.168.1.2192.168.1.254之间,子网掩码默认为255.255.255.0,网关和DNS一般设置为路由器的IP,这样就不需要DHCP分配,保证IP地址固定不变。

DHCP也可以通过绑定MAC地址实现每次都给电脑分配同样的IP,路由器都有这个功能,叫做DHCP静态IP分配。


3. 域名解析(DNS 协议)

当你在浏览器输入 baidu.com 时,浏览器需要将域名转换为 IP 地址。电脑向路由器的 DNS 服务发送 DNS 请求(目标端口为 UDP 53)。路由器作为 DNS 中继,将请求转发给运营商提供的上游 DNS 服务器。上游 DNS 服务器返回 baidu.com 的 IP 地址(如 220.181.38.148)。路由器将 IP 地址缓存一段时间,局域网内的其他设备再次访问 baidu.com 时,可以直接从缓存中获取 IP。


4. 地址解析协议(ARP 协议)

ARP协议就是根据IP地址查询Mac地址的协议

我是192.168.1.3

谁是192.168.1.1

这里贴一个YouTube地址,讲的非常好,

https://www.youtube.com/watch?v=P38FmPAq09E&t=183sopen in new window


5. 访问百度服务器(HTTP 请求)

拿到百度服务器的 IP 地址后,浏览器向这个IP发起一条 HTTP 请求(目标端口为 TCP 80)。电脑发现目标 IP 不在同一网段(通过子网掩码判断),于是将数据包发送给默认网关(路由器)。路由器通过 NAT(Network Address Translation网络地址转换)将内网 IP(192.168.1.3)转换为路由器WAN口公网 IP(2.2.2.2),并随机选择一个空闲端口,替换掉源端口,假设将9526->4134,然后将修改前后的对应关系保存到路由器的NAT映射表中,并记录端口映射,此时数据就可以在公网上路由了。

转换叫做NAT(Network Address Translation 网络地址转换)。

接着封装MAC地址,源MAC是路由器WAN的MAC地址,目标MAC是吓一跳某个路由设备的MAC,然后数据从WAN口发送到了互联网,经过十几个路由设备转发,最终到达百度服务器。百度服务器处理请求后,将网页数据返回给路由器,路由器通过 NAT 将数据转发给电脑。


6. 关键技术与协议

  • DHCP:动态分配 IP 地址,简化网络配置。
  • DNS:将域名转换为 IP 地址,方便用户访问网站。
  • NAT:将内网 IP 转换为公网 IP,实现多设备共享公网 IP。
  • ARP:通过广播获取目标设备的 MAC 地址。