Java 网络原理 ⑤-DNS || 以太网
这里是Themberfue
在前面的学习中,我们学习了网络层中 IP 协议的一些知识。现在,我们将进入下一层——数据链路层、物理层的学习~~~
以太网
- 大家的电脑是怎么联网的呢?是通过网线还是 WIFI ?如果你是通过网线的话,那么你走的就是以太网协议,网线也称为以太网线。不知道大家是否还记得,网络层中活跃的设备是路由器;那么数据链路层和物理层活跃的是什么设备呢?没错,就是交换机;其实这么说并非准确,现在的交换机和路由器的功能都很多了,并非只活跃在某一层中。
- ✨以太网(Ethernet)是目前最主流的有线局域网(LAN)通信技术,使用 MAC 地址 进行设备识别,并采用 CSMA/CD 访问控制机制(早期使用,现在大多为全双工交换模式)。
- 以太网的标准为 IEEE 802.3。而 WIFI 的标准则为 IEEE 802.11(现今无线局域网通用的标准),虽然经常将 WIFI 和 IEEE 802.11 混为一谈,但二者并不相同,感兴趣的小伙伴可以去了解一下。
- 以太网的早期拓扑结构为 总线型(Bus),现在多为 星型(Star),主要依靠交换机(Switch)。其为数据链路层和物理层的协议:以太网数据帧格式。其介质主要为网线,现代网线中有 五类网线(Cat5)、超五类网线(Cat5e)、六类网线(Cat6)、超六类网线(Cat6a).....,以及最为快速的 光纤,快看看你家的网线是哪种类型吧~~~
- 五类网线只能供百兆网速使用,其传输频率为100MHz,而超五类网线则支持千兆网速,传输频率为 125MHz,如果你家有千兆宽带,但速度就是上不去,可以看看是不是网线的锅。网线通常有不同的传输速率:0 Mbps(10BASE-T)、100 Mbps(Fast Ethernet)、1 Gbps(Gigabit Ethernet)、10 Gbps、40 Gbps、100 Gbps(数据中心)。
以太网帧格式
- 以太网的数据包称为 帧(Frame),主要包括以下部分:
- MAC地址:我们可以看到 目的地址和 源地址,这里的地址指的是 MAC地址(物理地址),唯一标识网卡。MAC地址 的大小是 6 字节,也就是 48 位,相比较于 IPv4,其多了 2^16 倍;就目前情况来看,其地址的剩余数还绰绰有余。你电脑上的网卡也不止一个:有线网卡、无线网卡、虚拟网卡.....
- MAC 地址的格式为:XX-XX-XX-XX-XX-XX。其分配方式:前24位为厂商 OUI(组织唯一标识符),后24位为设备唯一号。MAC 地址可以在局域网内唯一标识设备,交换机可以根据 MAC 地址转发数据。我们可以通过 windows 的 cmd 的 ipconfig /all 来查看自己网卡的 MAC 地址。
- 既然有了 IP 地址,为何还要 MAC 地址?IP 地址是处在 网络层 的,而 MAC 地址则是处在数据链路层的。IP 地址关心的是这个数据包的起点和终点,关注于整个网络路径的转发传输过程,而 MAC 地址关心的是两个相邻节点的之间的转发,看似一样,其实还是有很大区别的。举个例子:你有个快递:源 IP 是北京,目的 IP 是深圳,通常快递不可能直接到深圳,而是需要经过其他城市进行中转。假设有这么一条路径:北京 - 河北 - 武汉 - 南昌 - 深圳。那么其源 MAC 地址就会从北京变为河北再变为武汉,最后变为南昌,而目的 MAC 地址则会从河北变为武汉再变为南昌,最后变为深圳。相信你已经理解其中的作用了~~~
- 类型:表示上层协议(IPv4、IPv6、ARP等)。
- CRC:校验和,检测传输错误。
- 数据:载荷,封装 IP 数据包。数据字段这里的大小为 1500字节,也就是 1kb 多一点,但是 IP 数据报的最大长度为 64 kb,所以 IP 数据报发送的拆包组包操作大多是数据链路层的限制。
- PAD:此字段为填充区,填充区占用的字节数根据需要而定。这个区域的功能是确保帧尺寸不少于64字节。当从MAC目的地址到帧校验区整个数据帧尺寸少于64字节时,利用该区域将帧尺寸填充到64字节。因为尺寸小于64字节的帧属于违法帧,在接收端会被自动丢弃。如果帧尺寸已经达到64字节,则该区域占用的字节数应为零;
ARP
- ✨ARP(Address Resolution Protocol,地址解析协议),ARP 主要用于通过 IP 地址获取 MAC 地址,工作在 网络层 和 数据链路层 之间。在以太网中,设备之间通过 MAC 地址 进行通信,但应用层、传输层和网络层通常使用 IP 地址。因此,当设备只知道目标 IP 地址时,需要一种方法来找到对应的 MAC 地址,这就是 ARP 的作用。
工作过程
- 主机 A 发送 ARP 请求(广播),目标 MAC 地址未知,A 发送一个广播帧,询问:谁的 IP 是 192.168.1.2?请告诉我你的 MAC 地址。与IP的广播地址类似,MAC的广播地址也全为 1, 所以目标 MAC:FF-FF-FF-FF-FF-FF(广播地址)。
主机 B 发送 ARP 响应(单播)目标主机 B 收到 ARP 请求后,检查 IP 地址是否匹配。如果匹配,则 B 发送 ARP 响应(单播)给 A,告诉它:我的 MAC 地址是 00:1A:2B:3C:4D:5E。
主机 A 记录 MAC 地址,A 记录 IP-MAC 映射 到本地的 ARP 缓存表(超时后删除)。
RARP
- RARP(Reverse Address Resolution Protocol,逆地址解析协议),RARP 的作用与 ARP 相反,用于 通过 MAC 地址获取 IP 地址。但由于 DHCP 更强大,RARP 已被淘汰。所以我这边就不做过多的讲解了~~~
DNS
- 域名,想必大家已经很熟悉了,就是我们平时输入的网址:www.baidu.com,输入这串网址,就可以进入百度的官网。通过之前的学习,我们是通过 IP 地址来定位到一台服务器从而获取其资源的。但现在输入的不是 IP 地址而是网址也可以直接直接进入网站了,这是怎么做到的,这便是 DNS 的作用了~~~
- ✨DNS(域名系统,Domain Name System),是 将域名转换为 IP 地址 的系统。它类似于 互联网的电话簿,让用户可以使用 人类易读的域名(如
www.google.com
)来访问网站,而无需记住复杂的 IP 地址(如142.250.190.14
)。- 如果我们还是通过输入 IP 地址进入官网的话,那么多网站你记得住这些毫无规律可言的 IP 地址吗?相反,如果是域名,相对来说还是非常好记的。所以,人类更容易记住
www.example.com
,而不是192.168.1.1
。而且,如果服务器更换 IP,但域名不变,用户无需手动更新 IP 地址。再者,一个域名可以解析到多个 IP 地址,分配流量,提高网站可用性。- 如果你发现浏览网页感觉好慢加载出资源来,经过排查发现不是网速慢的问题,通常就是 DNS 服务器出了问题,换一个 DNS 服务器或者自动分配就可以解决问题了。
解析流程
当你在浏览器输入
www.example.com
并按下回车时,DNS 解析会经历以下 递归查询过程:
- 浏览器缓存:先检查本地 DNS 缓存,是否已经解析过该域名。
- 操作系统缓存:如果浏览器没有缓存,检查操作系统的 DNS 缓存(
ipconfig /displaydns
)。- 本地域名服务器(ISP 提供):
- 若缓存中没有,就向 ISP(互联网服务提供商)的 DNS 服务器查询。
- 根 DNS 服务器:
- 若本地服务器没有答案,它会向 根 DNS 服务器 询问。
- 根服务器不会直接返回 IP 地址,而是告诉客户端去
.com
顶级域名服务器 查询。- 顶级域名(TLD)服务器:
.com
服务器返回 example.com 的 权威 DNS 服务器 地址。- 权威 DNS 服务器:
- 权威服务器 直接返回
www.example.com
的 IP 地址。- 返回给用户:
- ISP 服务器缓存结果,并返回给用户,用户的设备将该 IP 地址存入缓存,以便下次加快解析。
- 用户拿到 IP 地址后,在根据这个 IP 地址去向目标服务器发送请求等一系列操作。
DNS 服务器类型
根 DNS 服务器(Root DNS Server)
- 互联网的最高级别 DNS 服务器,全球共有 13 组(A~M),美国就独占 10 台服务器,而中国 1 台都没有。
- 例如:
198.41.0.4
是其中一个根服务器的 IP。顶级域名(TLD)服务器
- 管理
.com
、.org
、.cn
这样的顶级域名,例如:
.com
服务器:192.5.6.30
.cn
服务器:203.119.25.6
权威 DNS 服务器(Authoritative DNS Server)
- 负责管理特定域名(如
google.com
)。- 例如
ns1.google.com
可能是google.com
的权威服务器。递归解析 DNS 服务器(Recursive Resolver)
- 负责为客户端执行完整的 DNS 解析过程,通常由 ISP(中国电信、移动、联通)或公共 DNS(如 Google、Cloudflare)提供。
- 例如:
- Google DNS:
8.8.8.8
- Cloudflare DNS:
1.1.1.1
- OpenDNS:
208.67.222.222
DNS 问题
DNS 污染(DNS 投毒)
- 攻击者 伪造 DNS 响应,返回错误的 IP 地址,使用户访问到假网站(如钓鱼网站)。
- 常见于公共 WiFi、黑客攻击、部分国家的网络管制。
- 解决方案:
- 使用 加密 DNS(DoH/DoT),防止篡改。
- 使用 可信任的 DNS 服务器(如 Google 8.8.8.8)。
DNS 劫持
- ISP 或黑客劫持 DNS 查询请求,重定向用户到广告页面或恶意网站。
- 解决方案:
- 手动指定 可靠的 DNS(如 Cloudflare 1.1.1.1)。
- 使用 VPN,绕过 ISP 劫持。
DNS 缓存污染
- 某些恶意软件修改本地 DNS 缓存,使用户访问错误网站。
- 解决方案:
- 清空本地 DNS 缓存:
ipconfig /flushdns # Windows sudo systemd-resolve --flush-caches # Linux
- 重新配置 可信的 DNS 服务器。
- 网络的部分到这就完结了,下节我们将进入 JVM 的学习~~~
- 毕竟不知后事如何,且听下回分解
- ❤️❤️❤️❤️❤️❤️❤️