网络原理(九):数据链路层 - 以太网协议 & 应用层 - DNS 协议
目录
1. 数据链路层
数据链路层, 是一个底层的层次, 主要用于交换机开发, 对于 Java 开发简单了解即可, 本篇也仅做简单介绍.
1.1 以太网协议
以太网协议, 是数据链路层的核心协议. (严谨来说, 是物理层 + 数据链路层的协议)
我们平时说的网线, 其实就是以太网线. 只要电脑是通过网线的方式来上网的, 那么走的就是以太网协议.
当然, 除了插网线, 还有其他的联网方式:
- WiFi => 走 802.11 协议
- 5G => 走的另外的非 TCP/IP 协议体系
在以太网中, 基本数据单位称为 以太网数据帧.
数据格式名称:
- 包 Packet => IP
- 段 Segment => TCP
- 报 Datagram => UDP
- 帧 frame => 以太网/数据链路层
1.1.1 以太网帧格式
以太网帧格式如下:
1.2 mac 地址
以太网帧中的源地址和目的地址, 指的是 mac 地址, 并非网络层的 IP 地址.
mac 地址, 又称为物理地址, 占 6 个字节, 可表示 2 ^ 16 个地址量, 是 IPv4 的 6w 多倍, 虽然 IP 地址短缺, 但是 mac 地址是很充裕的~
由于 mac 地址量很充裕, 因此每个网卡都有一个唯一的 mac 地址.
并且, 网卡的 mac 地址在网卡出厂的时就已经写死了, 因此 mac 地址可以作为电脑的身份的唯一标识.
一台电脑上可能有多个网卡(无线网卡, 有线网卡, 虚拟机), 有多个 mac 地址, 但是每个 mac 地址都是唯一的, 都可以作为电脑的身份标识.
1.2.1 IP 地址和 mac 地址的区别
- IP 地址是专门给网络层使用的, 关注的是整个网络路径的转发传输过程.
- mac 地址是专门给数据链路层使用的, 关注的是相邻设备之间的转发, 更关注转发细节.
当设备 A 要向设备 B 发送数据时, 这个数据报中的源 IP 和目的 IP 是一直不变的, 永远是整个通信路线的起点和终点, 即 A 的IP 和 B 的IP.
但是, 源 mac 和目的 mac 记录的只是相邻的两个节点的 mac 地址, 记录了当前这一小段路从哪到哪. 是会随着传输路程的改变的改变的.
举个例子, 假设我从邢台要到长春, 走以下路线:
- 邢台 --> 石家庄 --> 北京 --> 长春
那么, 共有三个小步骤:
1. 步骤一: 邢台 --> 石家庄, 此时的源/目的 IP, 源/目的 mac 如下:
- 源 IP: 邢台
- 目的 IP: 长春
- 源 mac: 邢台
- 目的 mac: 石家庄
2.步骤二: 石家庄 --> 北京, 此时的源/目的 IP, 源/目的 mac 如下:
- 源 IP: 邢台
- 目的 IP: 长春
- 源 mac: 石家庄
- 目的 mac: 北京
2.步骤三: 北京 --> 长春, 此时的源/目的 IP, 源/目的 mac 如下:
- 源 IP: 邢台
- 目的 IP: 长春
- 源 mac: 北京
- 目的 mac: 长春
通过上述的例子可知, 源 mac 和目的 mac 记录的只是相邻两个节点之间的 mac 地址.
1.3 帧中的类型字段
以太网数据帧中类型字段为 2 个字节, 当类型字段的值不同时, 载荷的数据格式就不同:
- 0800(十六进制): 载荷为 IP 数据报
- 0806(十六进制): 载荷为 ARP 数据报
- 8035(十六进制): 载荷为 RARP 数据报
1.3.1 MTU - 最长载荷长度
MTU: 描述了一个数据帧的载荷部分, 最多能承载多少数据. MTU 的值, 和通信的硬件结构相关.
当以太网帧的载荷为 IP 数据报时, 载荷中最多只能传输 1500 个字节的数据.(使用网线进行通信时)
使用以太网线进行通信时, MTU 就为 1500. (这里是使用以太网(网线)来通信的, 如果换成光纤, wifi ... 等等, MTU 的值就变了)
也就是说, 使用以太网时, 一个 IP 数据报的最多只能是 1500 Byte.
而我们之前学习到, 一个 IP 数据报最大长度为 64KB(总长度为 16 位, 2^16 = 64KB), 而在数据链路层这里最多为 1KB 多点.
- 所以, 数据链路层的以太网对 IP 数据报的长度再次做出了限制, 并且限制的更多了.
- 因此, IP 数据报的拆包组包操作, 大多是由于数据链路层对 IP 数据报的长度限制而产生的.
1.3.2 ARP 协议
ARP 协议是介于数据链路层和网络层之间的协议.
当以太网帧中的服务字段为 0806 时, 帧中的载荷为 ARP 数据报.
ARP 协议不传输业务数据, 而是一个 "辅助型" 协议, 可以根据一个设备的 IP 地址, 得到该设备的 mac 地址.(获取 IP 地址 和 mac 地址的映射关系)
在数据传输时, 我们肯定是知道源 IP 和目的 IP 的, 路由器就会根据目的 IP 查路由表, 得知从哪个接口转发出去, 转给谁.
也就是说, 路由器是知道下个节点的 IP 地址的, 但是不知道下个节点的 mac 地址.(需要明确目的 mac 才能填写以太网数据帧)
此时, 就可以向周围设备发送 ARP 广播数据报, 询问周围设备的 IP 和 mac 是啥. 其中, ARP 请求中的目的 IP 地址是相邻节点的 IP(已知), 目的 mac 地址是广播地址(FF:FF:FF:FF:FF:FF).
周围的设备收到 ARP 请求后, 就会返回 ARP 响应, 这个响应中就包含了这些设备 IP 和 mac 地址的信息.
路由器收到 ARP 响应后, 就会构造出一个类似 哈希表 的结构, 保存 IP 和 mac 的映射关系. ARP 就是辅助路由器将这张 IP 和 mac 映射关系的表建立起来.
这样, 路由器就可以根据下个节点的 IP 查表来获取下个节点的 mac, 并填写到帧中了.
路由器中通过 ARP 建立的 IP 和 mac 映射关系的表, 并不是转发数据的时候才开始建立的, 而是在路由器插上线的时候就建立好了, 并且定期进行更新维护
2. DNS 协议
DNS, 即域名解析系统.
我们可以将 DNS 认为是一个应用层协议, 也可以认为是一套服务器系统.
网络上的服务器, 都是有 IP 的地址的, 并且又在 IP 地址的基础上引入了域名.
所谓域名, 就是一个字符串, 每个服务器的 IP 和域名都是一一对应的.
域名就是我们平时所说的网址.
至于为啥要引入域名呢?? 有以下两点原因:
- IP 是 4 个字节, 32 个整数, 即使采用点分十进制的方式, 也是不易记忆的. 而域名仅仅是一串单词, 可读性高, 方便记忆.
- 若服务器发生迁移了(IP 发生改变), 那么只需服务器的维护人员将域名映射的 IP 修改一下即可, 域名不用修改. 于是用户就感知不到 IP 的变化, 仍然可以使用原来的域名去访问服务器.
最初, DNS 是通过 hosts 文件来存储域名和 IP 的映射关系的.
后来, 由于服务器越来越多,映射越来越多, hosts 文件难以维护.
于是, 就将这些域名和 IP 的映射关系放到一个单独的服务器上, 这些服务器称为 DNS 服务器.
当用户在网址栏上输入要访问的服务器的域名时, 计算机会先去查询 DNS 服务器, 将这个域名转化为对应的 IP 地址, 再真正的去访问服务器.
既然 DNS 会根据域名返回对应服务器的 IP 地址, 那么问题来了, 全世界那么多人, 如果每次发起网络请求, 都需要经过 DNS 的解析的话, DNS 就会承担海量的高并发, 那 DNS 不会挂吗??
答: 不会挂. 原因如下:
- 缓存. 我们的电脑不会在每次发动请求时, 都会访问 DNS. 电脑会将之前进行 DNS 解析过的 IP 缓存起来, 当下次再访问时, 直接去缓存里去拿就可以了, 不需要再次访问 DNS.
- DNS 服务器不止一个, 会有很多个.
对于原因 2, 这里进行简单说明:
全世界只有 11 个 DNS 根服务器(存储原始数据的 DNS 服务器).
而各种网络运营商会根据 DNS 根服务器搭建 "DNS 镜像服务器", 因此全球各地都有 DNS 服务器.
DNS 根服务在美国人手中, 他们拥有决定的掌握权. 而 IPv6 需要搭建新的 DNSv6 服务器, 可以防止美国卡脖子. 这也是我们国家发展 IPv6 的原因之一.
END
原文地址:https://blog.csdn.net/2401_83595513/article/details/145141622
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!