网络协议栈--数据链路层

目录

  • 对比理解“数据链路层”和“网络层”
  • 一、认识以太网
    • 1.1 以太网帧格式
    • 1.2 认识MAC地址
    • 1.3 对比理解MAC地址和IP地址
    • 1.4 认识MTU
    • 1.5 MTU对IP协议的影响
    • 1.6 MTU对UDP协议的影响
    • 1.7 MTU对于TCP协议的影响
    • 1.8 查看硬件地址和MTU
  • 二、ARP协议
    • 2.1 ARP协议的作用
    • 2.2 ARP协议的工作流程
    • 2.3 ARP数据帧的格式
  • 三、DNS(Domain Name System)
    • 3.1 DNS背景
    • 3.2 域名简介
    • 3.3 使用 dig 工具分析 DNS 过程
  • 四、浏览器中输入URL,发生的事情
  • 五、ICMP协议
    • 5.1 ICMP功能
    • 5.2 ICMP的报文格式
    • 5.3 ping命令
    • 5.4 一个值得注意的坑
    • 5.5 traceroute命令
  • 六、NAT技术
    • 6.1 NAT技术背景
    • 6.2 NAT IP转换过程
    • 6.3 NAT IP转换过程
    • 6.4 NAT技术的缺陷
    • 6.5 NAT和代理服务器
  • 七、整个网络协议栈的总结
    • 7.1 数据链路层
    • 7.2 网络层
    • 7.3 传输层
    • 7.4 应用层
  • 八、数据链路层所有内容一览图

对比理解“数据链路层”和“网络层”

一、认识以太网

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

1.1 以太网帧格式

在这里插入图片描述
1、源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;
2、帧协议类型字段有三种值,分别对应IP、ARP、RARP;
3、帧末尾是CRC校验码

1.2 认识MAC地址

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

1.3 对比理解MAC地址和IP地址

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

1.4 认识MTU

MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.(最大传输单元)

1、以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
2、最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
3、如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
4、不同的数据链路层标准的MTU是不同的;

1.5 MTU对IP协议的影响

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

1.6 MTU对UDP协议的影响

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

1.7 MTU对于TCP协议的影响

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

MSS和MTU的关系:
网图:
在这里插入图片描述

1.8 查看硬件地址和MTU

在这里插入图片描述

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

二、ARP协议

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

2.1 ARP协议的作用

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

2.2 ARP协议的工作流程

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

2.3 ARP数据帧的格式

在这里插入图片描述

三、DNS(Domain Name System)

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

3.1 DNS背景

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

cat /etc/hosts

3.2 域名简介

主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称.

www.qq.com

域名使用 “.”来连接。
1、com: 一级域名. 表示这是一个企业域名. 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等.
2、qq:二级域名, 公司名.
3、www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议。

3.3 使用 dig 工具分析 DNS 过程

安装 dig 工具:

yum install bind-utils

之后就可以使用 dig 指令查看域名解析过程了:

dig www.baidu.com

结果如下:
在这里插入图片描述
结果解释:

  1. 开头位置是 dig 指令的版本号
  2. 第二部分是服务器返回的详情, 重要的是 status 参数, NOERROR 表示查询成功
  3. QUESTION SECTION 表示要查询的域名是什么
  4. ANSWER SECTION 表示查询结果是什么,这个结果先将 www.baidu.com 查询成了 www.a.shifen.com, 再将www.a.shifen.com 查询成了两个 ip 地址.
  5. 最下面是一些结果统计, 包含查询时间和 DNS 服务器的地址等.

更多 dig 的使用方法, 参考以下这篇文章:
dig的使用方法

四、浏览器中输入URL,发生的事情

可以参考以下这篇文章:
浏览器中输入URL后,发生的事情

五、ICMP协议

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

5.1 ICMP功能

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

5.2 ICMP的报文格式

在这里插入图片描述
ICMP大概分为两类报文:
1、一类是通知出错原因
2、一类是用于诊断查询

在这里插入图片描述

5.3 ping命令

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

5.4 一个值得注意的坑

ping是什么端口? ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. 在ICMP中根本就不关注端口号这样的信息.

5.5 traceroute命令

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

六、NAT技术

6.1 NAT技术背景

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

6.2 NAT IP转换过程

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

6.3 NAT IP转换过程

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

6.4 NAT技术的缺陷

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

6.5 NAT和代理服务器

路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程.

代理服务器看起来和NAT设备有一点像. 客户端向代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户端.

那么NAT和代理服务器的区别有哪些呢?
1、从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行fq, 另外像迅游这样的加速器, 也是使用代理服务器。
2、从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层。
3、从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。
4、从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。

代理服务器是一种应用比较广的技术.
1、翻墙: 广域网中的代理.
2、负载均衡: 局域网中的代理.
代理服务器又分为正向代理和反向代理.
正向代理用于请求的转发
反向代理往往作为一个缓存

七、整个网络协议栈的总结

7.1 数据链路层

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

7.2 网络层

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

7.3 传输层

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

7.4 应用层

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

八、数据链路层所有内容一览图

在这里插入图片描述
以上就是今天想要跟大家分享的关于数据链路层的所有内容啦,你学会吗?如果感觉到有所帮助,那就点点小心心点点关注呗,后期还会持续更新Linux网络编程的相关知识哦,我们下期见!!!

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

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

相关文章

Springboot传参要求

传参的参数名称必须与Set方法的参数名字相同 ,不然会报错。

MacBook安装使用XMind

MacBook安装使用XMind XMind简介 官方地址: https://www.xmind.cn/ XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生。作为一款有效提升工作和生活效率的生产力工具,受到全球百千万用户的青睐。 XMind 是一款非常实用的商业思维导图软件,应用…

我认识的Git-史上最强的版本控制系统

大家好! 欢迎大家来一起交流Git使用心得,相信很多同事对Git都很熟悉了,如果下面说的有错误的“知识点”,欢迎批评指正。 初识Git 我认识Git已经很多年了(我在有道云笔记里面“Git”文件夹的创建时间是: …

树莓派部署yolov5实现目标检测(ubuntu22.04.3)

最近两天搞了一下树莓派部署yolov5,有点难搞(这个东西有点老,版本冲突有些包废弃了等等) 最后换到ubuntu系统弄了,下面是我的整体步骤: 1.烧完ubuntu镜像后,接显示器按系统流程进行系统部署(大于…

qt通过setProperty设置样式表笔记

在一个pushbutton里面嵌套两个label即可,左侧放置图片label,右侧放置文字label,就如上图所示; 但是这时的hover,press的伪状态是没有办法“传递”给里面的控件的,对btn的伪状态样式表的设置,是不…

STM32 can通信部分函数注释

-----CAN1_Mode_Init CAN模式初始化函数:u8 CAN1_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode) //CAN初始化 //tsjw:重新同步跳跃时间单元.范围:CAN_SJW_1tq~ CAN_SJW_4tq //tbs2:时间段2的时间单元. 范围:CAN_BS2_1tq~CAN_BS2_8tq; //tbs1:时间段1的时间单元. 范…

Codeforces Round 931 (Div. 2) ---- E. Weird LCM Operations ---- 题解

E. Weird LCM Operations: 题目大意: 思路解析: 这是一道构造题,那么观察这个构造有啥性质,观察到最多操作次数为 n/6 5,然后每次操作需要选择三个数,如果每次操作的三个数都不和之前的重复的…

3月造车新势力销量出炉:问界继续领跑,哪吒下滑,岚图抢眼

进入4月份,各大造车新势力们纷纷公布了3月份最新销量成绩,根据相关数据显示,问界再度超越理想,夺得造车新势力头名的位置。而零跑、蔚来、小鹏的销量也实现不错的增长,岚图汽车的表现同样十分亮眼。不过日前遭到周鸿祎…

Shell与Bash与POSIX与Linux间的关系

shell是什么? Shell的英语翻译是“壳”,其作用也跟名字差不多,为操作系统套个壳,人与操作系统的壳交互。与壳相对应的则是操作系统内核,一个“壳”一个“核”。核从1970年代开始就基本定型了,没什么大的改…

Windows 11安装kb5035853补丁时,提示错误0x800f0922,并且弹出“某些操作未按计划进行,不必担心,正在撤消更改。请不要关机”

Windows 11安装kb5035853补丁时,提示错误0x800f0922,并且还在重启后弹出“某些操作未按计划进行,不必担心,正在撤消更改。请不要关机”,按微软官方的作法是:https://learn.microsoft.com/zh-cn/windows/rel…

精准扶贫管理系统|基于Springboot的精准扶贫管理系统设计与实现(源码+数据库+文档)

精准扶贫管理系统目录 目录 基于Springboot的精准扶贫管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1)用户信息管理 (2)贫困户信息管理 (3)新闻类型管理 &a…

YooAssets 使用相关

## 使用 YooAssets 动态加载原生文件时候 > 原生文件:txt;json;等需要直接保存文件内string字符的文件 需要将打包方式设置成为,PackRawFile 并且加载时候使用 API : YooAssets.LoadRawFileSync()YooAssets.LoadRa…

腾讯云轻量4核8G12M应用服务器性能测评和优惠价格表

腾讯云4核8G服务器价格:轻量4核8G12M优惠价格646元15个月、CVM S5服务器4核8G配置1437元买1年送3个月。腾讯云4核8G服务器支持多少人同时在线?支持30个并发数,可容纳日均1万IP人数访问。腾讯云百科txybk.com整理4核8G服务器支持多少人同时在线…

16.springboot项目下使用事务(springboot-016-transaction)

事务是一个完整的功能&#xff0c;也叫作是一个完整的业务 事务只跟什么SQL语句有关&#xff1f;事务只跟DML语句有关系&#xff1a;增删改 DML,DQL,DDL,TCL,DCL 首先添加两个依赖以及MyBatis代码自动生成插件 <!--MySql驱动--><dependency><groupId>mysql…

腾讯云4核8g服务器承载量?4C8G能支持多少人?

腾讯云4核8G服务器多少钱&#xff1f;腾讯云4核8G轻量应用服务器12M带宽租用价格646元15个月&#xff0c;活动页面 txybk.com/go/txy 活动链接打开如下图所示&#xff1a; 腾讯云4核8G服务器优惠价格 这台4核8G服务器是轻量应用服务器&#xff0c;详细配置为&#xff1a;轻量4核…

Python快速入门系列-10(Python进阶与扩展)

第十章:Python进阶与扩展 10.1 Python与其他语言的整合10.1.1 使用Python的C API示例:使用C API创建一个简单的Python扩展10.1.2 使用Cython加速Python代码示例:使用Cython编写一个快速的矩阵乘法函数10.1.3 使用SWIG创建接口示例:使用SWIG为C++类生成Python接口10.2 Pytho…

Prisma ORM 5.12 发布,支持 Cloudflare D1 数据库

昨晚&#xff0c;Prisma ORM 发布了 5.12.0 稳定版本&#xff0c;在此版本中 Prisma ORM 新增了对 Cloudflare D1 的预览支持&#xff0c;现在我们可以选择将本地的 SQLite 数据库逐步迁移到 Cloudflare 上面&#xff0c;从而实现无需额外成本即可构建处理大量用户的应用程序。…

OpenKylin安装MySQL

在麒麟操作系统上安装MySQL&#xff0c;可以通过以下步骤进行&#xff1a; 1、更新系统包列表&#xff1a; sudo apt-get update2、安装MySQL服务 sudo apt-get install mysql-server3、进行安全设置&#xff0c;设置root密码和是否允许匿名登陆之类 sudo mysql_secure_ins…

Redis数据库②高可用+持久化+性能管理

目录 一.高可用 二.持久化 1.Redis 提供两种方式进行持久化 2.RDB 持久化 &#xff08;1&#xff09;手动触发 &#xff08;2&#xff09;自动触发 &#xff08;3&#xff09;执行流程 &#xff08;4&#xff09;启动时加载 3.AOF持久化 &#xff08;1&#xff09;开…

SpringBoot整合Flowable/Activiti

SpringBoot版本: 2.0.1.RELEASE Flowable版本: 6.3.1 Activiti版本: 6.0.0 一.添加pom依赖 因为之前我整合的时候有报错关于sqlsession的错误,后面查询文章才发现flowable要排除掉mybatis,又没说具体排除哪一个,所以我这干脆全部排除了 <!-- Flowable dependencies -->…