《网络协议》02. 物理层 · 数据链路层 · 网络层
title: 《网络协议》02. 物理层 · 数据链路层 · 网络层
date: 2022-08-31 22:26:48
updated: 2023-11-08 06:58:52
categories: 学习记录:网络协议
excerpt: 物理层(数据通信模型,信道)、数据链路层(封装成帧,透明传输,差错检验,CSMA/CD 协议,Ethernet V2 帧,以太网,PPP 协议)、网络层。
comments: false
tags:
top_image: /images/backimg/SunsetClimbing.png
网络协议
- 1:网络互连模型
- 1.1:请求过程
- 1.2:网络分层
- 2:物理层
- 2.1:数字信号 & 模拟信号
- 2.2:数据通信模型
- 2.3:信道
- 3:数据链路层
- 3.1:封装成帧
- 3.2:透明传输
- 3.3:差错检验
- 3.4:CSMA/CD 协议
- 3.4.1:Ethernet V2 帧
- 3.5:PPP 协议
- 3.6:网卡
- 4:网络层
- 4.1:首部
- 4.1.1:版本
- 4.1.2:首部长度
- 4.1.3:区分服务
- 4.1.4:总长度
- 4.1.5:标识
- 4.1.6:标志
- 4.1.7:片偏移
- 4.1.8:生存时间
- 4.1.9:协议
- 4.1.10:首部校验和
- 5:实例
- 5.1:ping 的几个用法
- 5.2:追踪经过的路由器
- 5.3:Wireshark 完整网络层首部
网络协议从入门到底层原理。
1:网络互连模型
为了更好地促进互联网络的研究和发展,国际标准化组织 ISO 在 1985 年制定了网络互连模型:OSI 参考模型(Open System Interconnect Reference Model)。
- 国际标准:OSI 参考模型(7层)
- 实际应用:TCP/IP 协议(4层)
- 学习研究:(5层)

1.1:请求过程

1.2:网络分层

2:物理层
物理层(Physical)定义了接口标准、线缆标准、传输速率、传输方式等。

2.1:数字信号 & 模拟信号

- 模拟信号(Analog Signal)
- 连续的信号,适合长距离传输
- 抗干扰能力差,受到干扰时波形变形很难纠正

- 数字信号(Digital Signal)
- 离散的信号,不适合长距离传输
- 抗干扰能力强,受到干扰时波形失真可以修复
2.2:数据通信模型
局域网通信模型:

广域网通信模型:

网线一般不能超过 100 米;数字信号适用于短距离传输。
2.3:信道
信道(Channel):信息传输的通道,一条传输介质上(比如网线)上可以有多条信道。
- 单工通信
- 信号只能往一个方向传输,任何时候都不能改变信号的传输方向
- 比如无线电广播、有线电视广播
- 半双工通信
- 信号可以双向传输,但必须是交替进行,同一时间只能往一个方向传输
- 比如对讲机
- 全双工通信
- 信号可以同时双向传输
- 比如手机(打电话,听说同时进行)
3:数据链路层
数据链路层(Data Link)。
链路:从 1 个节点到相邻节点的一段物理线路(有线或无线),中间没有其他交换节点。

数据链路:在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输。
不同类型的数据链路,所用的通信协议可能是不同的。
- 广播信道:CSMA/CD 协议(比如同轴电缆、集线器等组成的网络)
- 点对点信道:PPP 协议(比如 2 个路由器之间的信道)
数据链路层的 3 个基本问题:
- 封装成帧
- 透明传输
- 差错检验
3.1:封装成帧

- 帧(Frame)的数据部分:
- 就是网络层传递下来的数据包(IP 数据包,Packet)
- MTU(Maximum Transfer Unit,最大传输单元):
- 每一种数据链路层协议都规定了所能够传送的帧的数据长度上限
- 以太网的 MTU 为 1500 个字节
3.2:透明传输
- 使用 SOH(Start Of Header)作为帧开始符
- 使用 EOT(End Of Transmission)作为帧结束符

- 数据部分一旦出现 SOH、EOT,就需要进行转义。

3.3:差错检验
根据数据部分 + 首部计算得出 FCS。数据传输前和传输后都会计算 FCS 用来检验数据是否出错。

3.4:CSMA/CD 协议
CSMA/CD(Carrier Sense Multiple Access with Collision Detectio,载波侦听多路访问/冲突检测)
以太网(Ethernet):
- 使用了 CSMA/CD 的网络可以称为是以太网,它传输的是以太网帧。
- 用交换机组建的网络,也可以叫做以太网。
以太网帧的格式有:Ethernet V2 标准、IEEE 的 802.3 标准。
使用最多的是:Ethernet V2 标准。
为了能够检测正在发送的帧是否产生了冲突,以太网的帧至少要 64 字节。
用交换机组建的网络,已经支持全双工通信,不需要再使用 CSMA/CD,但它传输的帧依然是以太网帧。所以,用交换机组建的网络,依然可以叫做以太网。
3.4.1:Ethernet V2 帧
Ethernet V2 帧的格式:

- 首部:
目标 MAC + 源 MAC + 网络类型 - 以太网帧:
首部 + 数据 + FCS - 数据的长度至少:
64 - 6 - 6 - 2 - 4 = 46 字节
Ethernet V2 标准:
- 当数据部分的长度小于 46 字节时,数据链路层会在数据的后面加入一些字节填充。
- 接收端会将添加的字节去掉。

长度总结:
- 以太网帧的数据长度:46 ~ 1500 字节
46 字节 = 64 - 目标 MAC(6)- 源 MAC(6)- 类型(2)- FCS(4)以太网的 MTU 为 1500 个字节
- 以太网帧的长度:64 ~ 1518 字节
为了能够检测正在发送的帧是否产生了冲突,以太网的帧至少要 64 字节1518 字节 = 目标 MAC(6)+ 源 MAC(6)+ 网络类型(2)+ FCS(4)+ MTU(1500)
3.5:PPP 协议
PPP 协议(Point to Point Protocol)。

- 帧开始符、帧结束符:
0x7E - Address 字段:图中的值是
0xFF,形同虚设,点到点信道不需要源 MAC、目标 MAC - Control 字段:图中的值是
0x03,目前没有什么作用 - Protocol 字段:内部用到的协议类型
字节填充:

- 将
0x7E替换成0x7D5E - 将
0x7D替换成0x7D5D
3.6:网卡
网卡工作在数据链路层和物理层。

- 网卡接收到一个帧,首先会进行差错校验,如果校验通过则接收,否则丢弃
- Wireshark 抓到的帧没有 FCS,因为它抓到的是差错校验通过的帧(帧尾的 FCS 会被硬件去掉)
- Wireshark 抓不到差错校验失败的帧
4:网络层
网络层(Network)。

网络层数据包(IP 数据包,Packet)由首部、数据两部分组成。
数据部分:很多时候是传输层传递下来的数据段(Segment)。
4.1:首部
4.1.1:版本
版本(Version)
- 占 4 位
0b0100:IPv40b0110:IPv6
4.1.2:首部长度
首部长度(Header Length)
- 占 4 位,二进制乘以 4 才是最终长度
0b0101:20(最小值)0b1111:60(最大值)
4.1.3:区分服务
区分服务(Differentiated Services Field)
- 占 8 位
- 可以用于提高网络的服务质量(QoS,Quality of Service)
4.1.4:总长度
总长度(Total Length)
- 占 16 位
- 首部 + 数据的长度之和,最大值是 65535

由于帧的数据不能超过 1500 字节,所以过大的 IP 数据包需要分片(fragments)传输给数据链路层,每一片都有自己的网络层首部(IP 首部)
4.1.5:标识
标识(Identification)
- 占 16 位
- 数据包的 ID。当数据包过大进行分片时,同一个数据包的所有片的标识都是一样的
- 有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1
4.1.6:标志
标志(Flags)
- 占 3 位
- 第 1 位(Reserved Bit):保留
- 第 2 位(Don’t Fragment):1 代表不允许分片,0 代表允许分片
- 第 3 位(More Fragments):1 代表不是最后一片,0 代表是最后一片
4.1.7:片偏移
片偏移(Fragment Offset)
- 占 13 位
- 片偏移乘以 8:字节偏移
- 每一片的长度一定是 8 的整数倍

4.1.8:生存时间
生存时间(Time To Live,TTL)
- 占 8 位
- 每个路由器在转发之前会将 TTL 减 1,一旦发现 TTL 减为 0,路由器会返回错误报告
- 观察使用
ping命令后的 TTL,能够推测出对方的操作系统、中间经过了多少个路由器
| 操作系统 | 默认 TTL |
|---|---|
| Windows | 128 |
| Unix / Linux | 64 或 255 |
| Mac OS | 60 或 64 |
4.1.9:协议
协议(Protocol)
- 占 8 位
- 表明所封装的数据是使用了什么协议

4.1.10:首部校验和
首部校验和(Header Checksum)
- 用于检查首部是否有错误
5:实例
5.1:ping 的几个用法
下面介绍几个 Windows 下 ping 命令的用法。
查看帮助:
ping /?
发送指定大小的数据包(单位:字节):
ping <target> -l <num>
示例:
ping ke.qq.com -l 4000
不允许网络层分块:
ping <target> -f
示例:
ping www.baidu.com -l 2000 -f
设置 TTL 值:
ping <target> -i <num>
5.2:追踪经过的路由器
可以通过 ping <target> -i <num> 改变 TTL 的值来追踪路由器。
更方便的命令:
tracert <target>
pathping <target>
5.3:Wireshark 完整网络层首部

山泉散漫绕阶流,万树桃花映小楼。
——《离思五首》(唐)元稹
相关文章:
《网络协议》02. 物理层 · 数据链路层 · 网络层
title: 《网络协议》02. 物理层 数据链路层 网络层 date: 2022-08-31 22:26:48 updated: 2023-11-08 06:58:52 categories: 学习记录:网络协议 excerpt: 物理层(数据通信模型,信道)、数据链路层(封装成帧,…...
【chatgpt问答记录】双端队列、栈和函数调用栈
collections.deque和queue.Queue的区别 Q:collections.deque()跟queue.Queue()有什么区别? collections.deque() 和 queue.Queue 是两种不同的数据结构,它们有一些区别: 实现方式: collections.deque() 是 Python 标…...
另辟蹊径者 PoseiSwap:背靠潜力叙事,构建 DeFi 理想国
前不久,灰度在与 SEC 就关于 ETF 受理的诉讼案件中,以灰度胜诉告终。灰度的胜利,也被加密行业看做是加密 ETF 在北美地区阶段性的胜利, 该事件也带动了加密市场的新一轮复苏。 此前,Nason Smart Money 曾对加密市场在 …...
如何查看笔记本电脑电池损耗
1.下载图吧工具箱 在官网下,不要下错了,不然会有很多垃圾捆绑软件,我放一个百度云链接,安装包上传上去了 链接:https://pan.baidu.com/s/18dguF5OGktbPkW7EszZZqA 提取码:1024 2.安装打开后点击主办工具-…...
一键批量视频剪辑、合并,省时省力,制作专业视频
在当今数字化的时代,视频制作的需求日益增长。无论是个人用户还是专业人士,都需要能够快速、高效地处理视频,以适应不同的需求。但是,视频剪辑和合并往往是一个耗时且需要专业技能的过程。有没有一种方法可以简化这个过程…...
使用R语言构建HTTP爬虫:IP管理与策略
目录 摘要 一、HTTP爬虫与IP管理概述 二、使用R语言进行IP管理 三、爬虫的伦理与合规性 四、注意事项 结论 摘要 本文深入探讨了使用R语言构建HTTP爬虫时如何有效管理IP地址。由于网络爬虫高频、大量的请求可能导致IP被封禁,因此合理的IP管理策略显得尤为重要…...
Stable Diffusion源码调试(二)
Stable Diffusion源码调试(二) 个人模型主页:https://liblib.ai/userpage/369b11c9952245e28ea8d107ed9c2746/model Stable Diffusion版本:https://github.com/AUTOMATIC1111/stable-diffusion-webui/releases/tag/v1.4.1 分析S…...
网络安全(黑客)-零基础自学
想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全…...
在线CRM系统的安全性高吗?企业该如何选择?
在线CRM系统具备门槛低、功能不打折扣、部署周期短等优点,相比本地化部署更加适合中小企业。但很多企业在选型软件时会顾虑在线CRM系统的安全性高吗? 通常情况下厂商会比中小企业更有实力保证数据安全,从技术手段保护企业隐私不被盗用。 数…...
R-install_miniconda()卸载 | conda命令行报错及解决方法
运行以下代码,突然报错: C:\Users\hp>conda info-e >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<&…...
leaflet:利用Leaflet-Geoman绘制多种图形,导出为geojson文件(135)
第135个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中利用Leaflet-Geoman绘制多种图形,导出为geojson文件。 灵活地配置Leaflet-Geoman的属性,可以产生各种美妙的绘图效果。利用FileSaver可以导出geojson文件。 直接复制下面的 vue+leaflet源代码,操作2分钟…...
【C语言基础】第02章_变量与进制
讲师:康师傅 视频:https://www.bilibili.com/video/BV1Bh4y1q7Nt?p1&vd_source3eaa9d17f2454e1ae80abc50d16e66b5 文章目录 本章专题脉络1关键字(keyword)2标识符(Identifier)3变量(variable)3.1 为什么需要变量3.2 初识变量3.3 变量的声明与赋值步…...
【案例教程】基于AERMOD模型在大气环境影响评价中的实践技术应用
大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因素是控制大气污染的关键自然因素。大气污染问题既是局部、当地的,也是区域的,甚至是全球的。本地的污染物排放除了对当地造成严重影响外,同时还会在…...
【C语言从入门到放弃 4】字符串,结构体,共用体,位域,typedef详解
C语言是一种广泛应用于系统编程和嵌入式开发的高效编程语言。在本文中,我们将介绍C语言中的一些重要概念,包括字符串、结构体、共用体、位域和typedef,并提供简单的示例代码。 字符串 在C语言中,字符串是以空字符(\0…...
Linux学习第34天:Linux LCD 驱动实验(一):星星之火可以燎原
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 LCD显示屏是由一个一个的像素点构成的。当你能控制一个像素点的亮暗及颜色变化的时候,你就能让LCD显示瓶显示五颜六色的整幅图案。甚至可以让LCD屏幕…...
Flink SQL Window TopN 详解
Window TopN 定义(⽀持 Streaming): Window TopN 是特殊的 TopN,返回结果是每⼀个窗⼝内的 N 个最⼩值或者最⼤值。 应⽤场景: TopN 会出现中间结果,出现回撤数据,Window TopN 不会出现回撤数据…...
leetcode做题笔记216. 组合总和 III
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k 3, n 7 输出: [[1,2,4]] 解释…...
Redis系列-Redis数据类型【3】
目录 Redis系列-Redis数据类型【3】字符串类型(String)SDS (simple dynamic string) 哈希类型(Hash)列表类型(List)集合类型(Set)有序集合类型(ZSet)字符串类…...
机器学习 - 决策树:技术全解与案例实战
目录 一、引言二、决策树基础决策树模型概述构建决策树的关键概念特征选择决策树的生成 决策树的剪枝 三、算法研究进阶提升树和随机森林提升树(Boosted Trees)随机森林(Random Forests) 进化算法与决策树决策树结构的进化 多目标…...
Opus 1.4 编译脚本
Opus 1.4 编译脚本 官网地址:https://www.opus-codec.org/ 仓库地址:https://gitlab.xiph.org/xiph/opus #!/bin/bash# 每次编译删除原来的编译文件 rm build -rf rm install -rf # 创建临时编译目录,避免污染源文件 mkdir build # 定义一…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
