【javaEE】计算机网络数据链路层深度剖析与DNS域名系统


🎬 那我掉的头发算什么个人主页
🔥 个人专栏 : 《javaSE》《数据结构》《数据库》《javaEE》

⛺️待到苦尽甘来日


文章目录

数据链路层

以太网协议

以太网是一种数据链路层+物理层的协议,只要是通过网线进行上网,都会使用到以太网协议。

以太网数据帧格式


此处的地址,并不是指IP地址,而是mac地址。

mac地址与ip地址


对于我现在这台电脑来说,我的WIFI目前拥有的物理地址和IP地址如上。

mac地址是通过六个字节表示的,因此最大数量是2^32 * 2^16,大概在千万亿级别。所以目前来说mac地址是非常够用的,所以他没有使用NAT机制分配地址,而是每一个设备在出厂时就被内置了一个唯一的mac地址。它的作用其实和ip一样,都是为了唯一标识我们的设备。但是在实际使用中,二者的作用略有不同。

IP处于网络层,关注的是整个网络传输过程的路径,mac处于数据链路层,关注的是两个相互通信的设备之间的信息转发。

举个例子:

如图所示,我们假设一次信息传输中涉及到五个设备的名称以及地址如上。现在我们想要从A向E发送一个信息。

1.A-B

此时我们的数据包中报头部分的地址信息:

源ip:A

目的ip:E

源mac:A

目的mac:B

2.B-C

源ip:A

目的ip:E

源mac:B

目的mac:C

... ... ... ...

5.D-E

源ip:A

目的ip:E

源mac:D

目的mac:E

mac地址只会标识相邻节点的地址信息,因为它只能作用在数据链路层和物理层,受限制。ip地址标识整个传输过程中的起点和终点。


此处的类型表示的是载荷的类型,不同类型载荷数据格式不同。

帧尾四个字节表示校验和。

最大字节数1500。我们知道IP协议数据包最大长度是64KB,远大于数据链路层,理论上数据链路层根本承载不了IP数据包啊。

其实,IP在拆包的时候,并不是根据自身最大长度拆包的,而是根据以太网数据包的最大限制拆包,每个小包大小都在1500B以下,以此来避免数据缺失。

ARP协议

如果数据帧数据类型部分如上,则这个请求是一个ARP请求。

ARP请求传输的并非业务的逻辑,而是一些辅助功能,主要作用是根据IP地址找到MAC地址,以此来完成数据链路层的传输。

网络传输过程中,网络层是根据IP来转发数据的,数据链路层则需要MAC地址。但是IP协议数据包传下来的只有IP地址,我们仅仅拿到IP地址没法完成数据帧的转发。此时就需要ARP发挥作用:已知我们拥有下一个节点的IP地址,我们可以向下一个节点的本地网段的广播地址发送ARP请求,广播地址会把这个请求发给所有的设备,当有设备发现ARP请求包的目的IP与自己的一致,就发送一个ARP响应,告诉源主机自己的MAC地址。
(广播地址:同一个局域网中主机位全为一,如192.168.1.256或者10.256.256.256。像广播地址发送一个数据之后,会将这个数据转发给网络中的所有设备)

重要应用层协议

DNS

咱们都知道,每一个设备/服务器都拥有唯一的IP地址,我们在访问服务器时就是在访问这些IP地址。但是在日常搜索网站时,就比如百度,我们通常都是搜索www.baidu.com而并非xxx.xxx.xxx.xxx。这背后就是DNS的功劳,它能将域名映射成为机器可以识别的IP地址,让我们对于网站的地址记忆起来更加方便快捷。

在早期,网站很少,知名网站就那几个,大家完全可以把网站IP地址记忆下来,使用的时候输入即可。但是后来网站越来越多,根本记不住,于是有了DNS的概念。DNS开始时是使用本地的hosts文件来映射的,它会对我们输入的域名进行解析映射。后来因为网站越来越多并且hosts文件很难维护,所以hosts文件中的内容被提取出来,放到了一个DNS服务器上。我们每次访问域名时,先访问DNS服务器,把域名对应的IP拿到,再真正的访问服务器。
以上就是本博客全部内容!!

相关推荐
雪可问春风1 天前
docker环境部署
运维·docker·容器
lwx9148521 天前
Linux-Shell算术运算
linux·运维·服务器
翻斗包菜1 天前
PostgreSQL 日常维护完全指南:从基础操作到高级运维
运维·数据库·postgresql
somi71 天前
ARM-驱动-02-Linux 内核开发环境搭建与编译
linux·运维·arm开发
海的透彻1 天前
nginx启动进程对文件的权限掌控
运维·chrome·nginx
路溪非溪1 天前
Linux驱动开发中的常用接口总结(一)
linux·运维·驱动开发
此刻觐神1 天前
IMX6ULL开发板学习-01(Linux文件目录和目录相关命令)
linux·服务器·学习
航Hang*1 天前
第3章:Linux系统安全管理——第2节:部署代理服务
linux·运维·服务器·开发语言·笔记·系统安全
fengfuyao9851 天前
VC++基于服务器的点对点文件传输实例
服务器·开发语言·c++
favour_you___1 天前
epoll惊群问题与解决
服务器·网络·tcp/ip·epoll