【Linux篇】网络层与数据链路层详解

📌 个人主页: 孙同学_

🔧 文章专栏: Liunx

💡 关注我,分享经验,助你少走弯路!

文章目录

网络层

在复杂的网络环境中确定一个合适的路径

IP 协议


IP协议: 提供一种能力,有较大概率,能把数据从A主机跨网络发送到B主机

TCP/IP协议: 把数据100%可靠的,从主机A跨网络发送到主机B

IP协议:解决的是主机对主机的问题

TCP协议:解决的是进程到进程之间通信的问题,有端口号

ip协议解决的是主机到主机的问题,但是网络中的主机太多了,因此就要表示网络的唯一性

为了保证唯一性,每台主机就必须设置IP地址。

IP = 目标网络 + 目标主机

路由的本质理解:在路上传递的时候,本质是从一个子网,进入到另一个子网

基本概念

主机: 配有 IP 地址, 但是不进行路由控制的设备

路由器: 即配有 IP 地址, 又能进行路由控制

节点: 主机和路由器的统称

补充:

当代路由器,已经是一台小型计算机了,是可以工作在应用层的

IP协议头格式


8位协议字段: 表明有效载荷是UDP数据还是TCP数据
4位版本: IPV4

子网划分

为什么要子网划分?

未来在查找目标主机,先必须查找目标网络(本质就是可以淘汰其他网络,可以在全网中提高查找目标主机的效率)

可以保证每台主机的IP地址都不同
路由器至少有两个IP地址

我们自己电脑上面的IP地址是怎么来的?

当我们的电脑没有联网的时候,我们的电脑是没有IP地址的

我们的电脑不管是连接上wifi还是网线,都是由路由器给我们的电脑来分配IP地址的(内网)

这种由路由器给我们的电脑动态分配IP的做法叫做DHCP协议

所以路由器不仅有路由的功能,也有构建子网的功能

路由器是工作在应用层的设备

IP = 网络号 + 主机号
子网划分的本质: 把32位比特位进行划分,确定网络号有多少位.

分类划分法:

子网掩码存在的意义:可以把分类划分的网络IP资源得到充分的利用。

特殊的IP地址

  • 将 IP 地址中的主机地址全部设为 0, 就成为了网络号, 代表这个局域网;
  • 将 IP 地址中的主机地址全部设为 1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1

内网IP是不会出现在公网上的

如果路由器的WAN口直接配的是公网IP,那么这个路由器就叫做公网的出入口路由器

内网IP可能重复,所以内网IP不能出现在公网上,就会导致发出去的消息回不来

家用路由器收到了我们的报文,把我们报文中的源IP地址,用家用路由器自己的WAN口IP进行替换,每经过一个内网路由器,就进行一次srcip的替换,替换成为当前路由器的WAN口IP,WAN口IP都是对外的。

我们把内网IP经过路由器WAN口IP替换的技术叫做NAT

在内网内,内网ip会重复,并且有NAT技术,不影响内网向外网通信,所以NAT可以解决IP地址不足的问题。

运营商可以控制我们的报文是否能发送到公网。

结论一: 公网路由器的路由表算法和内网的路由表算法是不同的

数据链路层,从上层接收下来的完整报文,大小不能超过MTU,最大传输单元1500字节

如果超过了,报文就要在网络层进行分片

结论二: IP报文可能要进行分片与组装

分片的坏处:

  • 任何一个分片丢失,都表示该报文整体丢失
  • 如果上层是TCP就会触发TCP丢包重传,如果是UDP就真的丢了

结论三: 网络分片的过程中,如果过多分片,就会导致丢包概率增大

实际中要尽可能的减少分片,减少分片的本质在传输层,让每次发送的报文长度不超过1500字节就不会发生分片了

1500字节减去IP层的标准字段20字节,减去传输层的标准字段20字节,就剩下1460字节,我们把这1460字节叫做MSS,最大段尺寸

3个标志位

16位标识符

每一个IP报文都有自己唯一的标识符,叫做16位标识,一个报文只有自己一个分片,标识就是自己,相同报文被分成了10片,标识相同

3位标志

第一位保留(保留的意思就是现在不同,但是现在还没想好,说不定以后会用)第二个位置为0,表示允许分片,为1,表示禁止分片,如果这时候的报文超过了MTU,IP模块就会将报文丢弃,第三位表示"更多分片",如果分片了话,最后一个分片为0,其他片为1,类似于c语言中的/0结尾。

13位片偏移

代表我当前的报文在原始报文的什么位置

如何分片和组装呢?

  1. 甄别出来特定报文是否被分片了?

a.查看3位标志中的更对分片标志位是否为1

b.更多分片虽然是0,但是片偏移大于0

条件a,b的反面是:更多分片是0 && 片偏移为0

  1. 怎么保证自己把分片拿全了?

a.16位标识,相同的标识分片,聚合在一起

b.如何保证收全了?

收不全的情况:

第一片丢失 -> 没有收到片偏移为0的报文

中间丢失 -> 把收到的所有分片,按照片偏移进行升序排序。片偏移 + 自身报文长度 = 下一个分片的起始偏移

结尾丢失 -> 没有更多分片是0的分片

  1. 组装分片

传输层解决的问题:解决传输相关的问题,比如可靠性

数据链路层解决的是:子网(局域网)通信的问题 -> B-F 为什么?

传输层解决的是:长距离传输,路径选择的问题 ->B-F 怎么办?

数据链路层

用于两个设备进行信息传递的问题

认识以太网

以太网帧格式

如何分离?

固定长度的协议

如何分用?

帧类型

认识 MAC 地址

  • MAC 地址用来识别数据链路层中相连的节点;
  • 长度为 48 位, 及 6 个字节. 一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac 地址通常是唯一的(虚拟机中的 mac 地址不是真实的 mac 地址, 可能会冲突; 也有些网卡支持用户配置 mac 地址).

对比mac地址和IP地址

  • IP地址描述的是路途总体起点终点
  • MAC地址描述的是路途上的每一个区间的起点和终点

认识MTU

MTU相当于发快递时,对快递包裹大小的限制,这个限制是不同的数据链路对应的物理层的限制。

  • 以太网中数据规定最小为46字节,最大1500字节,ARP数据包的长度不够46字节,就要后面补填充位。
  • 最大传输1500字节称为以太网的最大传输单元,不同的网络类型有不同的MTU
  • 如果一个数据包从以太网路由到拨号链路上,数据包大于数据链路的MTU,就要对数据包进行分片。
  • 不同的数据链路层标准的MTU是不同的。

MTU对IP协议的影响

由于数据链路层MTU的限制,较大的IP的数据包要进行分片

  • 对于较大的IP数据报,要进行分片,每一片都打上对应的标签
  • 对于同一块的IP报文的每块小片的16位标志位是相同的。
  • 每个小片的IP协议头中的3位标志字段中,第二个位置为0表示允许分片,为1表示不允许分片。第三位用来表示结束标记(当前是否是最后一片,是的话为0,不是的话为1)。
  • 当到达对端时,会将这些小片进行重组,拼装在一起,返回给传输层
  • 一旦这些小片中的任意一片丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据,最终由传输层来负责重传。

MTU对UDP的影响

  • 一旦UDP携带的报文超过了1472(1500 - 20(IP首部)- 8 (UDP)首部),那么就会在网络层分成多个IP数据报
  • 这多个数据报有任意一个丢失,都会引起接收端网络重组失败,那么这就意味着,如果UDP数据报在网络层被分片,整个数据丢失的概率就大大增加了。

MTU对TCP的影响

  • TCP数据报的报文也不能无限的大,还是受限于MTU,TCP的单个数据报的消息的最大长度,称为MSS
  • TCP双方在建立连接的时候,双方会进行MSS的协商
  • 最理想的情况下,MSS的值正好是IP不会被分片处理的最大长度(这个长度是仍然受限于数据链路层的MTU的)
  • 双方在SYN的时候,会在自己的TCP头部写入自己能支持的MSS值
  • 然后上方得知对方的MSS值后,选择较小的一个作为最终的MSS
  • MSS 的值就是在 TCP 首部的 40 字节变长选项中(kind=2)

MTU和MSS的关系

局域网本身就是一个碰撞域,一个时刻,只能发送一个数据帧。

问题:主机A要把数据发送给主机B,主机A就要封装MAC帧,主机A怎么知道和它处在同一个局域网中的主机B的MAC地址呢?

所以就需要一种局域网协议,把IP地址转化成为对应的mac地址 --- ARP协议!地址解析协议

真正在网络层流动的数据 --- 其实是数据帧

ARP协议

ARP不是一个单纯的数据链路层协议,而是介于数据链路层和网络层之间。

ARP协议的作用

ARP协议建立了主机IP和MAC地址之间的映射关系

在网络通信中,源主机的应用程序知道目的主机的IP和端口号,却不知道目的主机的硬件地址。

数据包首先是被网卡接收到的,然后再去处理上层协议,如果接收到的数据报的硬件地址与本机不匹配,则直接丢弃。

因此在通信之前,必须获取到目的主机的硬件地址。

ARP的简易过程:

1.拿着目标主机的IP在群里广播

2.目标主机收到,然后进行应答 ,MAC地址一对一

在局域网中,任何主机可能收到ARP请求,也可能收到ARP应答

ARP的具体过程:

发送ARP的时候,其他主机收到ARP请求时,是在ARP层丢弃请求报文的;

应答ARP的时候,其他主机收到ARP应答时,是在MAC帧层丢弃应答报文的;

处理任何ARP(请求/应答),最先看的是OP字段

细节一:主机都会在一段时间内,记录下来局域网中,各个IP对应的MAC地址的映射关系!

为什么只在一段时间内记录下来,永久记录下来不好吗?

答案是:没必要,换笔记本或者改变网卡都会更新MAC地址。

ARP的数据帧格式

  • 硬件类型指的是以太网类型,1为以太网
  • 协议类型指要转化的地址类型,0x0800为IP地址
  • 硬件地址长度对于以太网地址为6字节
  • 协议地址长度为4字节
  • OP字段为1表示ARP请求,为2表示ARP应答

👍 如果对你有帮助,欢迎:

  • 点赞 ⭐️
  • 收藏 📌
  • 关注 🔔
相关推荐
youngerwang1 小时前
【智能体互联网的基石:AI操作系统架构、Agent通信协议与演进路径综述】
网络·ai智能体·aios
拾光Ծ2 小时前
【Linux系统】进程信号(上)
linux·运维·服务器·面试·信号处理
咖喱o2 小时前
网络-堆叠
linux·运维·服务器·网络
Java面试题总结2 小时前
一文搞定 Linux Nginx 从安装、启动到 nginx.conf 全配置详解(新手也能看懂)
linux·运维·nginx
clear sky .2 小时前
【TCP】TCP数据粘包/分包问题
java·服务器·网络
羽翼未丰的啊博2 小时前
Can_Chart上位机
网络·qt·汽车
齐齐大魔王8 小时前
linux-僵死进程处理
linux·运维·服务器
wuminyu11 小时前
专家视角看Java字节码加载与存储指令机制
java·linux·c语言·jvm·c++
其实防守也摸鱼12 小时前
CTF密码学综合教学指南--第五章
开发语言·网络·笔记·python·安全·网络安全·密码学