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
网络协议从入门到底层原理。
为了更好地促进互联网络的研究和发展,国际标准化组织 ISO 在 1985 年制定了网络互连模型:OSI 参考模型(Open System Interconnect Reference Model)。



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



局域网通信模型:

广域网通信模型:

网线一般不能超过 100 米;数字信号适用于短距离传输。
信道(Channel):信息传输的通道,一条传输介质上(比如网线)上可以有多条信道。
数据链路层(Data Link)。
链路:从 1 个节点到相邻节点的一段物理线路(有线或无线),中间没有其他交换节点。

数据链路:在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输。
不同类型的数据链路,所用的通信协议可能是不同的。
数据链路层的 3 个基本问题:



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

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

目标 MAC + 源 MAC + 网络类型首部 + 数据 + FCS64 - 6 - 6 - 2 - 4 = 46 字节Ethernet V2 标准:

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

0x7E0xFF,形同虚设,点到点信道不需要源 MAC、目标 MAC0x03,目前没有什么作用字节填充:

0x7E 替换成 0x7D5E0x7D 替换成 0x7D5D网卡工作在数据链路层和物理层。

网络层(Network)。

网络层数据包(IP 数据包,Packet)由首部、数据两部分组成。
数据部分:很多时候是传输层传递下来的数据段(Segment)。
版本(Version)
0b0100:IPv40b0110:IPv6首部长度(Header Length)
0b0101:20(最小值)0b1111:60(最大值)区分服务(Differentiated Services Field)
总长度(Total Length)

由于帧的数据不能超过 1500 字节,所以过大的 IP 数据包需要分片(fragments)传输给数据链路层,每一片都有自己的网络层首部(IP 首部)
标识(Identification)
标志(Flags)
片偏移(Fragment Offset)

生存时间(Time To Live,TTL)
ping 命令后的 TTL,能够推测出对方的操作系统、中间经过了多少个路由器| 操作系统 | 默认 TTL |
|---|---|
| Windows | 128 |
| Unix / Linux | 64 或 255 |
| Mac OS | 60 或 64 |
协议(Protocol)

首部校验和(Header Checksum)
下面介绍几个 Windows 下 ping 命令的用法。
查看帮助:
ping /?
发送指定大小的数据包(单位:字节):
ping
示例:
ping ke.qq.com -l 4000
不允许网络层分块:
ping
示例:
ping www.baidu.com -l 2000 -f
设置 TTL 值:
ping
可以通过 ping 改变 TTL 的值来追踪路由器。
更方便的命令:
tracert
pathping

山泉散漫绕阶流,万树桃花映小楼。
——《离思五首》(唐)元稹