📚相关专栏:计算机网络那些事
一、以太网
以太网(Ethernet)主要用于在局域网(LAN)中进行数据传输。它定义了物理层和数据链路层的规范,允许连接到同一网络的设备之间进行通信。可以使用多种不同的物理介质来传输数据,包括双绞线、同轴电缆以及光纤等。
CSMA/CD(载波侦听多址/冲突检测)机制:
- 载波侦听(Carrier Sense):在发送数据之前,设备会侦听介质是否空闲。
- 多址接入(Multiple Access):多个设备可以同时尝试发送数据。
- 冲突检测(Collision Detection):如果两个设备同时发送数据,会产生冲突,设备会停止发送并发送干扰信号(Jam Signal)以通知其他设备。
帧格式:
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的
- 帧协议类型字段有三种值,分别对应IP,ARP,RARP
0080:IP数据报
0806:ARP 报文
0835:RARP 报文
- 帧末尾是CRC校验码
二、MAC地址
MAC地址(Media Access Control Address),也称为物理地址或硬件地址,是在数据链路层(OSI模型的第二层)中用来唯一标识网络设备的地址。
- MAC地址⽤来识别数据链路层中相连的节点
- ⻓度为48位,及6个字节。⼀般⽤16进制数字加上冒号的形式来表⽰(例如: 08:00:27:03:fb:19)
- 在⽹卡出⼚时就确定了,不能修改。mac地址通常是唯⼀的(虚拟机中的mac地址不是真实的mac地址,可能会冲突; 也有些⽹卡⽀持⽤⼾配置mac地址)
mac 地址和 IP 地址的区别:
1、mac 地址使用 6 个字节,IP 地址 4 个字节
空间范围比 IP 地址大了 6w 多倍
mac 地址当前仍然可以给每个设备都分配一个唯一的 mac 地址。一般一个网卡在出厂时,就会分配一个唯一的 mac 地址,不能修改
2、mac 地址使用在数据链路层,用来实现两个设备之间的数据转发------微观
IP 地址使用在网络层,立足于整个转发流程,进行路经规划 ------宏观
理论上来说,搞一套地址也能完成宏观和微观地址上的所有工作,IP 地址和 mac 地址留一组就可以了,但实际上两个都留下来了,分配了不同的任务(不是技术问题,而是历史遗留问题)。
IP 地址和 mac 地址是两伙人,在同一个时间段各自独立提出的。两伙人都觉得自己的东西好,于是大家就综合一下,你这个地址负责这块;你那块地址负责那块就可以了
举个栗子:从西安到吉林省白城市安广镇
第一步:路径规划(网络层)
西安--->北京--->长春--->白城--->安广
西安--->北京--->沈阳--->白城--->安广
西安--->长春--->白城--->安广
...
第二步:实施(选择第一条线路)
坐飞机
源 IP:西安;目的 IP:安广;
源 mac:西安;目的 mac:北京
坐高铁
源 IP:西安;目的 IP:安广
源 mac:北京;目的 mac:长春
坐大巴
源 IP:西安;目的 IP:安广
源 mac:长春;目的 mac:白城
坐出租车
源 IP:西安;目的 IP:安广
源 mac:白城;目的 mac:安广
.
上述场景不考虑 NAT,源 IP 和目的 IP 始终都是固定的。以太网数据帧里面的 mac 地址,会随着转发的过程,时刻发生改变(每经过一个交换机/路由器就会产生上述变化),牢牢抓住了下一个数据要往哪传输这样的要点
三、ARP协议
ARP(Address Resolution Protocol,地址解析协议)是一个在TCP/IP网络中使用的链路层协议,是一种用于将网络层的IP地址转换为物理层的MAC地址的协议。
ARP协议建⽴了主机 IP地址 和 MAC地址 的映射关系:
- 在⽹络通讯时,源主机的应⽤程序知道⽬的主机的IP地址和端⼝号,却不知道⽬的主机的硬件地址
- 数据包⾸先是被⽹卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃
- 因此在通讯前必须获得⽬的主机的硬件地址
ARP的工作原理:
-
ARP请求:
- 当主机需要发送数据给另一个主机,但它不知道目标主机的MAC地址时,它会发送一个ARP请求广播。这个广播包含发送者的IP地址、发送者的MAC地址以及目标主机的IP地址。
- ARP请求的格式如下:
- 源MAC地址:发送者的MAC地址。
- 目标MAC地址:全1广播地址(FF:FF:FF:FF:FF:FF)。
- 类型:ARP协议的类型(0x0806)。
- 操作码:1表示ARP请求。
-
ARP响应:
- 局域网内的所有主机都会接收到ARP请求广播,但只有目标主机(拥有请求中指定的IP地址)会回应。
- 目标主机会发送一个ARP响应,告诉请求者它的MAC地址。
- ARP响应的格式如下:
- 源MAC地址:目标主机的MAC地址。
- 目标MAC地址:请求者的MAC地址。
- 类型:ARP协议的类型(0x0806)。
- 操作码:2表示ARP响应。
-
缓存ARP映射:
- 请求者接收到ARP响应后,会将目标主机的IP地址和MAC地址添加到自己的ARP缓存表中,以便将来快速查找。
- ARP缓存表记录了IP地址到MAC地址的映射,这样在同一局域网内的后续通信就不需要再次发送ARP请求。
- 每台主机都维护⼀个ARP缓存表,可以⽤arp -a命令查看。缓存表中的表项有过期时间(⼀般为20分钟),如果20分钟内没有再次使⽤某个表项,则该表项失效,下次还要发ARP请求来获得⽬的主机的硬件地址
四、MTU
MTU(Maximum Transmission Unit,最大传输单元)是指在一个网络层协议中,可以通过物理层一次传输的最大数据报文大小。这个值不包括任何网络层或传输层的头部信息,仅指用户数据的最大长度。
一般和硬件直接相关。不同的硬件设备,对应到不同的数据链路层协议,其 MTU 也是不同的。
- 对于以太网而言,标准的MTU值是1500字节。这意味着在以太网中,除去以太网帧头和帧尾,最大的用户数据负载部分是1500字节。
这个长度是非常小的。UDP/IP至少都是 64KB。这就使得 MTU 的限制。会直接对上层协议产生影响。
比如 IP协议的拆包组包机制,事实上更多的就是为了应对 MTU 的限制,当一个 IP 数据包长度达到 1500 以上时就会自动拆包了。
- 将较⼤的IP包分成多个⼩包,并给每个⼩包打上标签
- 每个⼩包IP协议头的 16位标识(id) 都是相同的
- 每个⼩包的IP协议头的3位标志字段中,第2位置为0,表⽰允许分⽚,第3位来表⽰结束标记(当前是否是最后⼀个⼩包,是的话置为1,否则置为0)
- 到达对端时再将这些⼩包,会按顺序重组,拼装到⼀起返回给传输层
- ⼀旦这些⼩包中任意⼀个⼩包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数据
分片的标志位:
- MF(More Fragments)位:如果一个分片不是最后一个分片,MF位将被设置为1。当MF位为0时,表示这是最后一个分片。
- DF(Don't Fragment)位:如果DF位被设置为1,则路由器不能对该数据包进行进一步的分片。如果设置了DF位的数据包太大以至于不能被传输,那么该数据包将会被丢弃,并且可能向源发送ICMP消息(不可达消息)。
MTU的重要性:
-
避免分片:如果数据包的大小超过了MTU,那么这个数据包就需要被分割成更小的数据包片段。这增加了网络传输的开销,因为每个片段都需要有自己的头部信息,并且在目的地需要重新组装。
-
性能优化 :适当的MTU设置可以避免不必要的分片,提高网络传输效率。如果MTU设置得太小,会导致过多的分片,增加了网络负担;如果设置得过大,则可能导致数据包因超出链路的MTU而被丢弃。
-
兼容性:不同的网络技术和设备可能支持不同的MTU值。例如,以太网的标准MTU是1500字节,而点对点协议(PPP)的MTU通常为576字节。因此,在跨不同类型的网络连接时,需要考虑MTU的兼容性问题。
MTU的确定:
MTU的值通常由网络设备和链路层协议决定,并且在设备间建立连接时进行协商。在网络配置过程中,有时也需要手动设置MTU值,特别是在涉及不同类型的网络连接或使用隧道技术时。
MTU测试:
可以通过ping命令发送大于默认MTU大小的数据包来测试网络路径上的MTU。例如,在Windows系统中,可以使用命令 ping -f -l 1500 <destination>
来测试,其中 -f
表示禁止分片,-l
后跟要发送的数据包大小。如果数据包太大而无法通过网络路径,通常会收到ICMP不可达消息。
上图中我们设置的 1500字节的数据量就超过了网络路径上的MTU,导致数据包太大而无法通过网络路径,使得发出的四个包都发生了丢包
MTU与IPv4和IPv6:
-
IPv4:IPv4支持分片,并且分片通常在路由器中完成。如果一个数据包的大小超过了下一跳的MTU,路由器会将数据包分片。
-
IPv6:IPv6的设计倾向于避免分片,因为分片可能会导致性能下降和安全问题。因此,默认情况下,IPv6不允许路由器对数据包进行分片,而是依靠路径MTU发现(Path MTU Discovery)机制来确保数据包的大小适合整个路径。
路径MTU发现:
为了避免传输途中过多的分片影响传输效率,我们最好能确定到达目的地之间的网络路径上最小的 MTU,以便我们更合理地设置数据包的大小,避免由于数据包长度超过中间路径的MTU强制分包二降低效率。
- 路径MTU发现(Path MTU Discovery,简称 PMTU Discovery)就是一种网络技术,用于自动确定两个端点之间的最大传输单元(MTU)大小。目的是避免数据包因太大而需要分片的情况,从而提高网络性能和可靠性
总结来说,MTU是网络配置中的一个重要参数,它影响数据包的传输效率和网络的整体性能。合理设置MTU可以避免不必要的分片,提高网络的传输效率。
五、DNS应用层协议
DNS(Domain Name System,域名系统)是一种用于将人类可读的域名转换为计算机可识别的IP地址的分布式数据库系统。DNS协议的主要作用是在互联网上实现域名解析,即通过查询DNS服务器来获得特定域名对应的IP地址。
简单来说,TCP/IP 中使用 IP地址与端口号来确定网络上的一台主机的一个程序。但是 IP地址并不方便人类理解与记忆。于是⼈们发明了⼀种叫 主机名(域名) 的东西, 是⼀个字符串, 并且使⽤hosts⽂件来描述主机名和IP地址的关系
比如我们想要访问b站,并不需要在地址栏输入具体的 IP地址与端口号,只要输入对应域名 "www.bilibili.com" ,就会自动通过查询 DNS 服务器的方式获取对应的IP地址,从而实现对目标网站的访问
- 域名就是网址,域名代表了 IP 地址
DNS服务器类型
- 根域名服务器:顶级域名的权威服务器,如com、org等。
- 顶级域名服务器:负责特定顶级域名的服务器,如.com服务器。
- 权威名称服务器:负责特定域名的服务器,如example.com服务器。
- 递归DNS服务器:为用户提供全面查询服务的服务器,常见于ISP或企业内部。
镜像服务器
全世界有这么多的设备上网,每时每刻都在访问 DNS 服务器,DNS 服务器能顶住这么大的访问量吗?
- 多弄一些 DNS 服务器就可以了
- 多高出来的 DNS 服务器称为"镜像服务器"
- 事实上,世界上有数不清的镜像服务器,往往是一些运营商/互联网公司维护。每个人上网的时候,就会就近访问 DNS 服务器
一旦有数据变更,就需要约定以某个服务器的数据为基准,一旦有变更,就修改这个基准服务器的数据,其他服务器从基准的服务器同步数据,基准服务器称为"根服务器"
工作流程
客户端查询:
- 当用户试图访问一个网站时,例如在浏览器中输入网址
www.bilibili.com
,操作系统中的DNS客户端会向其配置的递归DNS服务器发起查询请求。递归DNS服务器:
- 递归DNS服务器负责帮助客户端查找域名对应的IP地址。如果递归服务器的缓存中有该域名的信息,则直接返回结果;如果没有,则递归服务器会向其他DNS服务器发起查询请求,直到找到答案为止。
权威DNS服务器:
- 如果递归DNS服务器没有缓存相关信息,则会向权威DNS服务器查询。权威DNS服务器是负责特定域名区域的服务器,它们存储了该区域内的所有域名记录。
- 根据查询的结果,权威DNS服务器会返回相应的A记录(IPv4地址)或AAAA记录(IPv6地址),或者其他类型的记录,如MX记录(邮件交换记录)、CNAME记录(别名记录)等。
根DNS服务器:
- 如果递归DNS服务器不知道哪个权威DNS服务器负责该域名,它会首先查询根DNS服务器。根DNS服务器会告诉递归DNS服务器去询问哪个顶级域(TLD)服务器。
- TLD服务器再告知递归DNS服务器去询问具体的权威DNS服务器。
缓存:
- 在整个过程中,递归DNS服务器会缓存查询结果,这样未来的相同查询可以更快地得到响应。
一旦把某个国家的域名的数据从根服务器中删除掉,就意味着这个国家的网络就会陷入瘫痪
总之,DNS协议是互联网基础设施的核心组件之一,它使得用户可以通过易于记忆的域名来访问网站和服务。
那么本篇文章就到此为止了,如果觉得这篇文章对你有帮助的话,可以点一下关注和点赞来支持作者哦。如果有什么讲的不对的地方欢迎在评论区指出,希望能够和你们一起进步✊