【Linux Network】数据链路层

news2024/11/19 0:23:22

目录

认识以太网

以太网帧格式

认识MAC地址

对比理解MAC地址和IP地址

认识MTU

MTU对IP协议的影响

MTU对UDP协议的影响

MTU对于TCP协议的影响

MSS和MTU的关系:

查看硬件地址和MTU

ARP协议

ARP协议的作用

ARP协议的工作流程

ARP数据报的格式

DNS(Domain Name System)

DNS背景

域名简介

浏览器中输入url后, 发生的事情

ICMP协议

ICMP功能

 ICMP的报文格式

ping命令

traceroute命令

NAT技术

NAT技术背景

NAT IP转换过程

NAPT

NAT技术的缺陷

NAT和代理服务器

代购例子

翻墙的原理

总结

数据链路层

网络层

传输层

应用层



数据链路层🌷 

数据链路层:用于两个设备 ( 同一种数据链路节点 ) 之间进行传递;

认识以太网

  • "以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的;
  • 内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;
  • 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
  • 以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等;

以太网帧格式

以太网的帧格式如下所示:
  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
  • 帧末尾是CRC校验码;

认识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了,则需要对数据包进行分片(fragmentation);
  • 不同的数据链路层标准的MTU是不同的;

MTUIP协议的影响

由于数据链路层 MTU 的限制 , 对于较大的 IP 数据包要进行分包
  • 将较大的IP包分成多个小包, 并给每个小包打上标签;
  • 每个小包IP协议头的 16位标识(id) 都是相同的;
  • 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0);
  • 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
  • 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据;

MTUUDP协议的影响

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

MTU对于TCP协议的影响

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

MSSMTU的关系:

查看硬件地址和MTU

使用  ifconfifig  命令 , 即可查看 ip 地址 , mac 地址 , MTU;

ARP协议

虽然我们在这里介绍 ARP 协议 , 但是需要强调 , ARP 不是一个单纯的数据链路层的协议 , 而是一个介于数据链路层和网络层之间的协议;

ARP协议的作用

ARP 协议建立了主机 IP 地址 和 MAC 地址 的映射关系;
  • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
  • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
  • 因此在通讯前必须获得目的主机的硬件地址;

ARP协议的工作流程

  • 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
  • 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
  • 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址;

想一想 , 为什么要有缓存表 ? 为什么表项要有过期时间而不是一直有效 ?
再想一想 , 结合我们刚才讲的工作流程 , ARP 的数据报应该是一个什么样的格式 ?

ARP数据报的格式

  • 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的;
  • 硬件类型指链路层网络类型,1为以太网;
  • 协议类型指要转换的地址类型,0x0800为IP地址;
  • 硬件地址长度对于以太网地址为6字节;
  • 协议地址长度对于和IP地址为4字节;
  • op字段为1表示ARP请求,op字段为2表示ARP应答;

DNS(Domain Name System)

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

DNS背景

TCP/IP 中使用 IP 地址和端口号来确定网络上的一台主机的一个程序 . 但是 IP 地址不方便记忆
于是人们发明了一种叫主机名的东西 , 是一个字符串 , 并且使用 hosts 文件来描述主机名和 IP 地址的关系
最初 , 通过互连网信息中心 (SRI-NIC) 来管理这个 hosts 文件的
  • 如果一个新计算机要接入网络, 或者某个计算机IP变更, 都需要到信息中心申请变更hosts文件.
  • 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网;
这样就太麻烦了 , 于是产生了 DNS 系统;
  • 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系.
  • 如果新计算机接入网络, 将这个信息注册到数据库中;
  • 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址.
至今 , 我们的计算机上仍然保留了 hosts 文件 . 在域名解析的过程中仍然会优先查找 hosts 文件的内容
cat /etc/hosts

域名简介

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称:
www.baidu.com
域名使用 . 连接
  • com: 一级域名. 表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织) 等.
  • baidu: 二级域名, 公司名;
  • www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议;

浏览器中输入url, 发生的事情

这是一个经典的面试题 . 没有固定答案 , 越详细越好 . 可以参考 :
https://blog.csdn.net/wuhenliushui/article/details/20038819/

ICMP协议

ICMP 协议是一个 网络层协议
一个新搭建好的网络 , 往往需要先进行一个简单的测试 , 来验证网络是否畅通 ; 但是 IP 协议并不提供可靠传输 . 如果丢包了, IP 协议并不能通知传输层是否丢包以及丢包的原因

ICMP功能

ICMP 正是提供这种功能的协议 ; ICMP 主要功能包括 :
  • 确认IP包是否成功到达目标地址;
  • 通知在发送过程中IP包被丢弃的原因;
  • ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议;
  • ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6;

 ICMP的报文格式

关于报文格式 , 我们并不打算重点关注 , 大家稍微有个了解即可 .
ICMP 大概分为两类报文 :
  • 一类是通知出错原因
  • 一类是用于诊断查询

ping命令

  • 注意, 此处 ping 的是域名, 而不是url! 一个域名可以通过DNS解析成IP地址;
  • ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期);
  • ping命令会先发送一个 ICMP Echo Request给对端;
  • 对端接收到之后, 会返回一个ICMP Echo Reply;

一个值得注意的坑
有些面试官可能会问 : telnet 23 端口 , ssh 22 端口 , 那么 ping 是什么端口 ?
千万注意 !!! 这是面试官的圈套
ping命令基于ICMP, 是在网络层. 而端口号 , 是传输层的内容 . ICMP 中根本就不关注端口号这样的信息 .

traceroute命令

也是基于 ICMP 协议实现 , 能够打印出可执行程序主机 , 一直到目标主机之前经历多少路由器 .

NAT技术

NAT技术背景

之前我们讨论了 , IPv4 协议中 , IP 地址数量不充足的问题
NAT 技术当前解决 IP 地址不够用的主要手段 , 是路由器的一个重要功能 ;
  • NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法;
  • 很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
  • 全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的;

NAT IP转换过程

  • NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
  • NAT路由器收到外部的数据时, 又会把目标IP从202.244.174.37替换回10.0.0.10;
  • 在NAT路由器内部, 有一张自动生成的, 用于地址转换的表;
  • 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系;

NAPT

那么问题来了 , 如果局域网内 , 有多个主机都访问同一个外网服务器 , 那么对于服务器返回的数据中 , 目的 IP 都是相同的. 那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机 ?
这时候 NAPT 来解决这个问题了 . 使用 IP+port 来建立这个关联关系
这种关联关系也是由 NAT 路由器自动维护的 . 例如在 TCP 的情况下 , 建立连接时 , 就会生成这个表项 ; 在断开连接后 , 就会删除这个表项;

NAT技术的缺陷

由于 NAT 依赖这个转换表 , 所以有诸多限制 :
  • 无法从NAT外部向内部服务器建立连接;
  • 装换表的生成和销毁都需要额外开销;
  • 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开;
课外调研 : NAT 穿越

NAT和代理服务器

路由器往往都具备 NAT 设备的功能 , 通过 NAT 设备进行中转 , 完成子网设备和其他子网设备的通信过程 .
代理服务器看起来和 NAT 设备有一点像 . 客户端像代理服务器发送请求 , 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后 , 代理服务器又把结果回传给客户端 .
那么 NAT 和代理服务器的区别有哪些呢 ?
  • 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器;
  • 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.
  • 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网;
  • 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上;
代理服务器是一种应用比较广的技术 .
  • 翻墙: 广域网中的代理.
  • 负载均衡: 局域网中的代理.
代理服务器又分为正向代理和反向代理 .

代购例子

花王尿不湿是一个很经典的尿不湿品牌 , 产自日本 .
我自己去日本买尿不湿比较不方便 , 但是可以让我在日本工作的表姐去超市买了快递给我 . 此时超市看到的买家是我表姐, 我的表姐就是 " 正向代理 ";
后来找我表姐买尿不湿的人太多了 , 我表姐觉得天天去超市太麻烦 , 干脆去超市买了一大批尿不湿屯在家里 , 如果有人来找她代购, 就直接把屯在家里的货发出去 , 而不必再去超市 . 此时我表姐就是 " 反向代理 "’
正向代理用于请求的转发(例如借助代理绕过反爬虫).
有如下优点
  1. 身份认证;
  2. 加速内网服务;
  3. 可以对访问内网的请求进行筛选;
反向代理往往作为一个缓存.
有如下优点:
  1. 负载均衡:根据后端每台机器的负载情况,进行业务转发,较为均衡的将请求打散到每台主机上;
  2. 安全;

翻墙的原理

我们平常使用浏览器访问某个网页的话,这个http请求报文首先会发送给运营商,运营商对其进行检测看是否有非法访问请求(外网),如果没有的话,这个请求报文会被转递给Golle服务器,服务器发送http响应报文,这个报文由运营商转递给客户端浏览器;

如果我们是访问外网的话,我们首先在自己的主机上下载一个客户端软件工具,并且能够访问部署代理服务,这个部署代理服务一般设置在港台地区,能够被内网和外网共同访问的;我们在浏览器中发送了访问外网的http请求报文,这个报文首先被客户端软件工具拿到,客户端软件工具对其进行加密,并对其添加访问部署代理服务的http报头信息,运营商对其进行检测,没有非法访问;http请求信息被部署代理服务拿到后,部署代理服务首先对其进行去报头信息,并对正文信息进行解密,将真正的http请求信息发送给Goole服务器;Goole服务器发送http响应报文,部署代理服务对信息进行加密,并添加访问客户端软件工具的http报头信息,经过封装后的报文信息运营商是不会察觉到不对的,运营商将报文转递给客户端软件工具,客户端软件工具对报文信息去掉报头,并对正文信息进行解密,将解密结果响应给浏览器;

总结

数据链路层

  • 数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据
  • 以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑
  • 结构, 访问控制方式, 传输速率等;
  • 以太网帧格式
  • 理解mac地址
  • 理解arp协议
  • 理解MTU

网络层

  • 网络层的作用: 在复杂的网络环境中确定一个合适的路径.
  • 理解IP地址, 理解IP地址和MAC地址的区别.
  • 理解IP协议格式.
  • 了解网段划分方法
  • 理解如何解决IP数目不足的问题, 掌握网段划分的两种方案. 理解私有IP和公网IP
  • 理解网络层的IP地址路由过程. 理解一个数据包如何跨越网段到达最终目的地.
  • 理解IP数据包分包的原因.
  • 了解ICMP协议.
  • 了解NAT设备的工作原理.

传输层

  • 传输层的作用: 负责数据能够从发送端传输接收端.
  • 理解端口号的概念.
  • 认识UDP协议, 了解UDP协议的特点.
  • 认识TCP协议, 理解TCP协议的可靠性. 理解TCP协议的状态转化.
  • 掌握TCP的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延迟应答, 捎带应答特性.
  • 理解TCP面向字节流, 理解粘包问题和解决方案.
  • 能够基于UDP实现可靠传输.
  • 理解MTU对UDP/TCP的影响.

应用层

  • 应用层的作用: 满足我们日常需求的网络程序, 都是在应用层
  • 能够根据自己的需求, 设计应用层协议.
  • 了解HTTP协议.
  • 理解DNS的原理和工作流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/545107.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

近期要做填报报表,使用Spreadsheet还是Finereport?

又是忙碌的五月呀~~近期接到一个项目,是一家商贸公司需要去采集销售部门的销售业绩据, 以往他们使用Excel表格线下去做报表填报,传统的报表体系效率低,文件杂,汇总难。下级部门上传数据需要以多个表格来上报&#xff0…

Python3安装

依赖安装 gcc是一个用于linux系统下编程的编译器,由于python3需要编译安装,因此,需要首先安装gcc。先查看一下系统中,是否安装了gcc。 gcc --versions 发现没有安装,则需要安装。参数-y的作用是在安装过程中自动确认…

在 Python 中制作偶数列表

文章目录 开始什么是偶数在 Python 中使用 for 循环创建偶数列表在 Python 中使用 while 循环制作偶数列表使用列表理解在 Python 中制作偶数列表使用 Lambda 表达式在 Python 中创建偶数列表 开始 我们将通过示例介绍偶数列表以及在 Python 中创建偶数列表的不同方法。 什么是…

今天公司来了个拿 30K 出来的测试,算是见识到了基础的天花板

今天上班开早会就是新人见面仪式,听说来了个很厉害的大佬,年纪还不大,是上家公司离职过来的,薪资已经达到中高等水平,很多人都好奇不已,能拿到这个薪资应该人不简单,果然,自我介绍的…

韩国访问学者签证D-2-5材料准备及签证流程

韩国的签证种类很多,对于申请访问学者签证来说,较常见的签证种类是D-2-5签证和E-3签证,本篇知识人网小编先介绍D-2-5签证。 签证的材料准备 根据韩国大使馆2023年4月12日最新发布的“签证申请与准备材料指导”内容, D-2-5签证的签发对象及准…

一文带你了解电信终端指南(详细篇)

​ 电信入库认证周期: 常规为 4-6 周,我公司可加急完成认证,请拨打免费服务热线 400 626 0709 或联系 蒋先生 13823213584(微信同号)了解详情。 中国电信集团公司是我国特大型国有通信企业、上海世博会全球合作伙伴&a…

Yolov5轻量化:EMO,结合 CNN 和 Transformer 的现代倒残差移动模块设计,性能优于EdgeViT、Mobile-former等网络

论文: https://arxiv.org/pdf/2301.01146.pdf 🏆🏆🏆🏆🏆🏆Yolo轻量化模型🏆🏆🏆🏆🏆🏆 重新思考了 MobileNetv2 中高效的倒残差模块 Inverted Residual Block 和 ViT 中的有效 Transformer 的本质统一,归纳抽象了 MetaMobile Block 的一般概念。受这…

深度学习4 -- 卷积神经网络(代码实现篇+付详细流程文件)

引言 本文是使用pytorch对卷积神经网络(Convolutional Neural Network, CNN)的代码实现,作为之前介绍CNN原理的一个代码补充。本文代码相关介绍相对较为详细,也为自己的一个学习过程,有错误的地方欢迎指正。本人介绍CNN原理的链接:CNN原理介…

【Ai工具合集,一定有你需要的!】

花费了一天的时间测试了市面上各大Ai工具,然后帮大家整理总结出来了这些工具,一定记得点赞收藏保存,后面肯定会用到! 使用说明 1.部分Ai工具需要魔法上网,请自行解决;部分工具需要收费,可以尝…

图神经网络:(处理点云)PointNet++的实现

文章说明: 1)参考资料:PYG官方文档。超链。 2)博主水平不高,如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook和有关文献。超链。提取码8848。 文章目录 简单前置工作学习文献阅读PointNet的实现模型问题 简单前置工作…

convLSTM2D 层使用方法解析(Keras库)

最近在研究时序图像分类问题,需要用到convLSTM层提取特征,所以在此仔细分析一下keras.layers.ConvLSTM2D层的使用方法。深度学习框架是tensorflow 官方文档:recurrent/#convlstm2d - Keras 中文文档 下面这部分内容摘自官方文档 ConvLSTM2D…

Axure 轮播图如何制作

近来在学习axure,用的版本为Axure 9,给大家讲一下怎么使用轮播图,老规矩保姆式教学法 一、作图 1.创建新的页面,方便我们做图 2.在元件库搜索“动态面板”字样,设置一个动态面板,为什么要设置呢&#xff…

IIC总线通讯协议学习

​ IIC(最简单的总线通讯,简单意味着通用和普适性) iic通讯一般采用一主多从的方式.同一时间要么在发送信息,要么在读取信息(半双工通讯) ​​​​​​​​​​​​​​ ​​​​ ​​​ 标准的写数据帧(主机向从机写数据) 解释以上的写数据帧 S:起始信号(在SCL…

Linux学习---VMWare安装和CentOS7安装

1、 VMWare安装 1、VMware16安装包 链接:https://pan.baidu.com/s/1TKf5szN6k5Hk4HH4zqBgrg 提取码:zhm6 –来自百度网盘超级会员V1的分享 2、VMWare安装流程 (1)找到下载好的安装包,双击运行程序 (2&…

云贝餐饮连锁V2-2.7.7 【新增】外卖新订单提醒

独立版:云贝餐饮连锁V2、版本更新至2.7.7,小程序、公众号版本,全插件,包含微信公众号小程序;包更新,独立版; 带商家端,修复收银台、排队点餐、堂食点餐;最新版更新了&…

【pytorch损失函数(3)】nn.L1Loss()和nn.SmoothL1Loss()

文章目录 【回归损失函数】L1(MAE)、L2(MSE)、Smooth L1 Loss详解1. L1 Loss(Mean Absolute Error,MAE)1.1 数学定义1.2 、使用场景与问题1.3 、如何使用 2. L2 Loss(Mean Squared E…

最流行的开源 LLM (大语言模型)整理

本文对国内外公司、科研机构等组织开源的 LLM 进行了全面的整理。 Large Language Model (LLM) 即大规模语言模型,是一种基于深度学习的自然语言处理模型,它能够学习到自然语言的语法和语义,从而可以生成人类可读的文本。 所谓"语言模…

MTK平台的SWT异常的简单总结(1)——WatchDog

SWT系列资料很多来源于Google (1)概念相关 SWT是SoftWare Watchdog Timeout的缩写,在Android系统中,为了监控SystemServer是否处于正常运行状态,加入了SWT线程来监控SystemServer中重要线程和Service的运行情况。判断…

多线程-程序、进程、线程与并行、并发的概念

多线程 本章要学习的内容: 专题1:相关概念的理解专题2:多线程创建方式一:继承Thread类专题3:多线程创建方式二:实现Runnable接口专题4:Thread类的常用方法专题5:多线程的优点、使用…

合肥工业大学信息隐藏实验报告

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :信息隐藏实验报告 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台&#xff…