JavaEE: 数据链路层的奇妙世界

news/2024/10/6 23:42:17 标签: java-ee, 网络, java

文章目录

  • 数据链路层
    • 以太网
      • 源地址和目的地址
      • 类型
      • 数据
        • 认识 MTU
    • 重要应用层协议 DNS


数据链路层

以太网

以太网的帧格式如下所示:
在这里插入图片描述

源地址和目的地址

源地址和目的地址是指网卡的硬件地址(也叫MAC地址).

mac 地址和 IP 地址的区别:

  1. mac 地址使用6个字节表示,IP 地址4个字节表示.
    一般一个网卡,在出厂的时候,mac 地址就已经被分配好了,就写死了(不能改).
  2. mac 地址使用在数据链路层,用来实现两个相邻设备之间的数据转发.(微观)
    IP地址使用在网络层,立足于整个转发流程,进行路径规划.(宏观)

理论上来说,搞一套地址,也能完成宏观和微观上层次的所有工作,IP地址和mac地址留一组就可以了.但是实际上两个都留了下来,分配了不同的任务.
IP地址和mac地址,是两伙人,同一个时间段,各自独立搞出来的,两边都觉得自己的东西好,于是就综合一下,你这个地址负责这块,你那个地址负责那块就可以了~

举个例子(不考虑 NAT )
我要从西安出发,去吉林省白城市安广镇.

  1. 第一步,路径规划(网络层).
    西安 -> 北京 -> 长春 -> 白城 -> 安广
  2. 第二步,实施.
    在这里插入图片描述
    以太网数据帧里面的 mac 地址,会随着转发的过程,时刻发生改变(每经过一个交换机/路由器都会变).

类型

在这里插入图片描述

类型: 描述了载荷中是啥样的数据.

ARP 数据报 / ARP协议: 可以视为是让当前设备,获取到周围 IP 地址和 mac 地址之间的映射关系.

在IP协议路由转发的过程中,路由器会根据目标IP地址查找路由表,以确定传输数据的下一个网络接口。然后,路由器将需要转发的数据包转发给与该网络接口相连的设备,这涉及到将IP地址转换为目标设备的MAC地址。

ARP 协议就是用来建立上述的映射关系的.

当设备接入网络时,它会发送一个ARP请求广播报文,该报文中包含设备的IP地址。收到该广播报文的其他设备会检查该IP地址是否与自己的IP地址匹配,如果匹配则会返回一个ARP响应报文,其中包含设备的IP地址和MAC地址。这样,设备就可以通过ARP响应报文获得其他设备的MAC地址,从而建立通信。

数据

在这里插入图片描述
我们可以看到,数据的长度为 46 ~ 1500字节.
这里不解释46是咋来的.主要关心1500.

认识 MTU

数据链路层数据帧 的最大载荷长度,1500字节,相当于 1.5 kb.这个数字,我们把它叫做MTU.

MTU和硬件直接相关,不同的硬件设备,就对应到了不同的数据链路层协议,也就对应到了不同的 MTU .(不同的硬件设备和协议可能有不同的MTU值,本文只是拿1500字节举个例子)

以太网,其实是挺短的,1.5非常小. IP/UDP 至少还是 64kb.

此处MTU的限制,就会对上层协议产生直接影响.

最典型的就是IP协议,IP协议能拆包组包,其实IP协议的拆包组包,不是应对IP的64kb,更多的是应对MTU的限制.
当一个IP数据报,达到 1500kb 以上的时候,就会自动拆包了.

重要应用层协议 DNS

DNS 可以认为是一个应用层协议,也可以认为是一套系统.

DNS 是一整套从域名映射到IP的系统.

域名和 IP 地址,存在对应关系,一般是一个域名对应一个或者多个IP,也有可能多个域名对应一个IP.

虽然已经把 IP 写作点分十进制了,但是仍然对于人类来说不是很友好,记一个 IP 地址是比较费劲的,你再把这个 IP 地址告诉别人,别人再把它记住,这些都很麻烦.

于是我们通过单词字符串来表示IP地址.

把域名转换成 IP 地址,这样的一套系统,就称为域名解析系统.

早期的域名解析系统做的非常简单,它是通过一个文件 hosts 来实现,这个文本文件就记录了 IP 地址和域名之间的对应关系.
现在已经不使用这个东西了(虽然仍然有效).

不使用这个东西的原因: 网站太多了,域名有很多, IP 地址也有很多,靠文件来维护,不现实,也不方便.

为了解决上述问题,我们就搭建了 DNS 服务器,把 hosts 文件放到 DNS 服务器里.
当某个电脑需要进行域名解析时,就访问DNS服务器.

全世界有这么多设备上网,每时每刻都在访问 DNS 服务器, DNS 服务器不会挂吗?
很简单,多搞一些 DNS 服务器就行,多搞出来的 DNS 服务器称为"镜像服务器".

实际上,全世界有数不清的镜像服务器,往往是一些运营商/互联网公司维护的.每个人上网的时候,都会就近访问 DNS 服务器.

有这么多 DNS 服务器,那数据变更了要咋办?
答: 一旦有数据变更,针对这种变更就需要约定以某个服务器的数据为基准.一旦数据有变更,就修改这个基准的服务器(根服务器),其他服务器从基准的服务器同步数据.


本文到这里就结束啦~

在这里插入图片描述


http://www.niftyadmin.cn/n/5692291.html

相关文章

Linux防火墙-常用命令

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们经过上小章节讲了Linux的部分进阶命令,我们接下来一章节来讲讲Linux防火墙。由于目前以云服务器为主&#x…

尝试从 http://pypi.doubanio.com/simple 这个索引源安装 webdriver 时出现了问题

问题如下: WARNING: The repository located at pypi.doubanio.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow …

原码、反码、补码极简理解

原码、反码、补码 1、概述 计算机里都是以补码的形式存储数据,单纯给我们补码形式的数据,我们是不认识的,只有把补码转换成原码,我们才能知道这份数据的意思 2、基本介绍 原码:最高位为符号位,0 代表正数…

go+redis基于tcp实现聊天室

goredis实现聊天室 基于tcp连接通过redis实现了消息的广播,命令改名,查询在线人数,查询用户活跃度 serverclinet server 聊天室服务端的流程可以分为几个主要部分:初始化、监听连接、处理每个连接以及消息的处理和转发 1. 初…

python的可迭代对象包含哪些?

可迭代对象(Iterable)指的是那些能够一次返回一个元素的对象,这样就可以在 for 循环或者在其他需要迭代的上下文中使用。以下是一些常见的可迭代对象类型: 列表(List):如 [a, b, c]。元组&…

SpringBoot框架下校园资料库的构建与优化

1系统概述 1.1 研究背景 如今互联网高速发展,网络遍布全球,通过互联网发布的消息能快而方便的传播到世界每个角落,并且互联网上能传播的信息也很广,比如文字、图片、声音、视频等。从而,这种种好处使得互联网成了信息传…

大学生就业招聘:Spring Boot系统的架构分析

大学生就业招聘系统的设计与实现 摘要 随着信息互联网信息的飞速发展,大学生就业成为一个难题,好多公司都舍不得培养人才,只想要一专多能之人才,不愿是承担社会的责任,针对这个问题开发一个专门适应大学生就业招聘的网…

Flet介绍:平替PyQt的好用跨平台Python UI框架

随着Python在各个领域的广泛应用,特别是在数据科学和Web开发领域,对于一个简单易用且功能强大的用户界面(UI)开发工具的需求日益增长。传统的Python GUI库如Tkinter、PyQt虽然功能强大,但在易用性和现代感方面略显不足…