一、OSI七层参考模型
OSI七层模型是一个理论框架,它将复杂的网络通信过程分解成七个独立的、各司其职的层次。 每一层都为它的上一层提供服务,并使用它下一层提供的服务。这样设计的好处是,只要层与层之间的接口不变,任何一层的技术变化都不会影响其他层,极大地促进了网络技术的标准化和发展。




物理层
物理层是OSI模型中的第一层,也是最底层。它为数据链路层提供传输比特流的服务,建立了、维持和断开物理连接。
传输介质:

双工模式:
半双工 --- 同一时刻,只能发送或接收。通信是单向的,就像单行道。一方固定为发送方,另一方固定为接收方。数据只能从一个方向流向另一个方向,永远不能反向。
全双工 --- 同时可以发送和接收。通信是双向的 ,但不能同时进行。就像一条单车道桥,车可以从两边过,但同一时间只能有一个方向的车流。通信双方都可以发送和接收,但必须轮流进行。
线序:橙白、橙、绿白、蓝、蓝白、绿、棕白、棕
数据链路层
数据链路层是计算机网络OSI模型中的第二层,也是TCP/IP模型中的网络接口层的一部分。它在物理层提供的比特流服务基础上,在相邻节点(直接相连的两个设备)之间建立可靠的数据传输通道。
1.核心---以太网
以太网是当今局域网 技术中绝对的主流和标准。我们日常生活中接触到的有线网络(比如通过网线上网)几乎都是以太网。
2.链路类型与MAC地址的由来
早期的以太网使用一根同轴电缆,所有电脑都接在这根总线上。这就好比在一个大房间里,所有人都在同一个频道上说话。当A电脑发出一段信息,房间里的所有电脑(B、C、D...)都能"听"到。那么问题来了,它们怎么知道这段话是跟自己说的,还是跟别人说的?为了解决这个问题,就给房间里的每个人(每个网络设备)分配一个全球唯一的、刻在"身份证"上的物理地址 ,这就是MAC地址。A电脑发送信息时,会在信息前面写上:"这段话是给MAC地址为XX:XX:XX:XX:XX:XX的",其他电脑"听"到后,会核对目标地址是不是自己,如果不是就忽略。
所以,正是因为以太网允许多个节点接入同一个"广播域",才需要MAC地址来进行精准的"点名"。
3.MAC地址详解
-
MAC地址由48个二进制位组成。
-
前24位 :称为 OUI 。由IEEE统一分配給特定的网络设备制造商。比如, Cisco、Intel、Apple都有自己的OUI范围。通过OUI,你就可以知道这个网卡是哪个公司生产的。
-
后24位 :由制造商自行分配給他们生产的每一块网络设备(如网卡)。这保证了世界上每一块网卡的MAC地址都是唯一的。
-
表示形式 :为了方便阅读,我们将48位二进制数分成6组,每组8位(即1个字节),然后每组转换成两个十六进制数,并用冒号
:或连字符-分隔。- 例如:
00-1A-2B-3C-4D-5E或00:1A:2B:3C:4D:5E
- 例如:
4. 以太网数据帧格式
以太网存在两种数据帧格式:以太网2****格式,IEEE802.3格式

| 字段 | 长度 | 含义与作用 |
|---|---|---|
| 目的MAC地址 | 6字节 | 数据帧要发给谁。这是帧在局域网内转发的依据。 |
| 源MAC地址 | 6字节 | 数据帧是谁发出的。接收方需要知道是谁发来的,以便回复。 |
| 类型 | 2字节 | 一个至关重要的"标签" 。它告诉接收方,数据部分封装的是什么协议的数据。 |
| 数据 | 46-1500字节 | 载荷。这是从上层(通常是网络层)传下来的数据包,比如一个IP数据包。 |
| FCS | 4字节 | 帧检验序列 。用于差错检测。发送方会根据帧头和数据计算一个CRC值放在这里,接收方重新计算并比对。如果不同,就说明传输过程中比特出错了,该帧会被丢弃。 |
为什么数据长度是46-1500字节?
-
最大1500字节 :这是以太网的最大传输单元 。如果上层的数据包太大,网络层就需要将其分片。
-
最小46字节:这是为了确保帧足够长,以满足早期CSMA/CD机制的要求。如果数据本身不足46字节,需要填充到46字节。
5.数据帧的发送方式
| 方式 | 目的MAC地址特征 | 比喻 | 应用场景 |
|---|---|---|---|
| 单播 | 一个特定的MAC地址 | 一对一私信 | 绝大多数正常通信,如你访问一个网站、传输一个文件。 |
| 广播 | FF-FF-FF-FF-FF-FF |
在群里@全体成员 | ARP请求 ("谁的IP是192.168.1.1?请告诉我你的MAC地址");某些路由协议。广播帧会被局域网内所有主机接收和处理,因此不能滥用。 |
| 组播 | 以01-00-5E开头的特定地址 |
建立一个讨论组,只在组内发言 | 视频会议、网络电视等流媒体应用。只有加入了特定组播组的主机才会接收和处理该帧,效率高于广播。 |
网络层
1.IP地址分类与结构
P地址的分类(A, B, C, D, E)
IP地址是一个32位的二进制数,为了便于阅读,我们将其分为4个8位组,用点分十进制表示(如 192.168.1.1)。分类由地址的前几个比特决定。
| 类别 | 地址范围 | 固定前缀 | 网络位/主机位 | 用途与解释 |
|---|---|---|---|---|
| A类 | 0.0.0.0 - 127.255.255.255 | 0 |
网络位(8bit) / 主机位(24bit) | 大型网络。只有126个A类网(0和127保留),但每个网络能容纳约1677万台主机。 |
| B类 | 128.0.0.0 - 191.255.255.255 | 10 |
网络位(16bit) / 主机位(16bit) | 中型网络。如大型企业、高校。每个网络能容纳约6.5万台主机。 |
| C类 | 192.0.0.0 - 223.255.255.255 | 110 |
网络位(24bit) / 主机位(8bit) | 小型网络。最常见,如家庭、小公司网络。每个网络只能容纳254台主机。 |
| D类 | 224.0.0.0 - 239.255.255.255 | 1110 |
无网络/主机位之分 | 组播地址。用于"一组"设备,而非某一台。如视频会议。 |
| E类 | 240.0.0.0 - 255.255.255.255 | 1111 |
- | 保留地址。用于科学研究。 |
A、B、C三类地址被称为单播地址,掩码分别为8、16、24,这些地址是可以作为源地址使用的。
2.特殊IP地址与私网地址
特殊IP地址:
这些地址有特殊含义,不能分配给具体设备。
| 地址 | 含义与用途 |
|---|---|
| 0.0.0.0 | 1. 默认路由 :在路由表中,代表"所有未知网络"。 2. 无效地址:代表一个无效或未知的地址。 |
| 127.0.0.1 (及整个127.x.x.x网段) | 环回地址 。数据包不会发到网络上去,而是直接返回给本机的网络协议栈。用于测试本机的网络服务是否正常 (如 ping 127.0.0.1)。 |
主机位全0 (如 192.168.1.0/24) |
网络地址 或网段地址 。它代表整个网络本身,而不是某台设备。 |
主机位全1 (如 192.168.1.255/24) |
定向广播地址 。发送到这个地址的数据包,会被投递到指定网络中的所有主机。 |
| 255.255.255.255 | 受限广播地址 。这个数据包会被发送到本网络内的所有主机,路由器通常不会转发它。 |
可用IP数量公式:
可用IP数量:2 ^N(N =主机位位数)-2**;即减去全0和全1的IP地址**。
-
N是主机位的位数。 -
-2是因为要减去网络地址 (主机位全0)和定向广播地址(主机位全1)。 -
举例 :一个C类网段
192.168.1.0/24,主机位有8位,可用IP数量为2^8 - 2 = 254个(从192.168.1.1到192.168.1.254)。
注:任意一个网段中,全0和全1的地址不能作为IP地址使用。
私网IP地址与公网IP地址
为了解决IPv4地址枯竭问题,RFC标准定义了三块私网地址范围。
| 类别 | 私网地址段 | 解释 |
|---|---|---|
| A类私网 | 10.0.0.0/8 |
一个巨大的私网,包含约1677万个地址。 |
| B类私网 | 172.16.0.0/16 - 172.31.0.0/16 |
16个连续的B类网络。 |
| C类私网 | 192.168.0.0/24 - 192.168.255.0/24 |
256个连续的C类网络。家庭路由器最常用。 |
关键区别:
-
私网地址:
-
可重复使用 :你家、我家、公司都可以使用
192.168.1.0/24这个网段。 -
不能直接上网 :路由器不会将目的地址是私网IP的数据包转发到互联网上。
-
需要通过 NAT 技术,将私网IP转换成一个公网IP,才能访问互联网。
-
-
公网地址:
-
全球唯一:在整个互联网上,每个公网IP都标识着一台唯一的设备。
-
需要向ISP(互联网服务提供商)申请购买。
-
3.IP报文头详解

| 字段名 | 长度 | 含义与作用 |
|---|---|---|
| Version | 4 bits | 版本 。对于IPv4,此值为 4。 |
| IHL | 4 bits | 首部长度。因为IP首部长度不固定(有选项),此字段指明首部有多少个32位字(一行)。最小值是5(即20字节)。 |
| Total Length | 16 bits | 总长度。指整个IP数据报(首部+数据)的总字节数。最大为65535字节。 |
| TTL | 8 bits | 生存时间 。防环机制。数据包每经过一个路由器,TTL值减1。当TTL减到0时,路由器会丢弃该包,并向源IP发送一个ICMP超时消息。这可以防止数据包因路由环路而在网络中无限循环。 |
| Protocol | 8 bits | 协议 。一个至关重要的"标签" ,类似于以太网帧中的"类型"字段。它告诉接收方的网络层,应该将数据部分交给哪个上层协议 处理。常见值:1(ICMP), 6(TCP), 17(UDP)。 |
| Header Checksum | 16 bits | 首部校验和 。用于检查IP报文首部 在传输过程中是否出错。不校验数据部分,数据的可靠性由上层(如TCP)或应用保证。 |
| Source/Dest IP | 32 bits | 源和目的IP地址 。这是IP报文的核心,指明了数据包的起点和终点。 |
4.IP分片与MTU
MTU :最大传输单元 。指数据链路层 一帧所能承载的最大数据量 。在以太网中,默认是 1500字节。
IP分片:
-
问题 :当网络层收到一个要发送的IP数据报(比如来自TCP的一个大包),其总长度超过了出口链路的MTU时,怎么办?
-
解决方案 :IP分片 。路由器会将这个大的IP数据报分割成多个片段,每个片段都是一个独立的IP数据报(有自己的IP头,但总长度小于等于MTU),然后分别发送。
- 重组:目的主机收到所有片段后,根据标识符、标志和片偏移,将它们重新组装成原始的数据报。
传输层
1.传输层与端口号
网络层(IP协议)负责将数据包从一台主机送到另一台主机,而传输层 负责将数据正确交付到主机上的特定应用程序。
端口号用于标识上层应用层的服务类型。2字节大小。
| 类型 | 范围 | 说明 | 常见协议举例 |
|---|---|---|---|
| 静态端口 | 1 - 1023 | 分配给知名服务。通常需要系统权限才能监听。 | HTTP: 80 , HTTPS: 443 , FTP: 21 , SSH: 22 , Telnet: 23 , DNS: 53 |
| 动态端口 | 1024 - 65535 | 由客户端程序随机使用,或分配给一些用户级服务。 | 当你打开浏览器访问网站时,浏览器会随机开启一个端口(如52001)去连接服务器的80端口。 |
一个完整的通信地址 :IP地址 + 端口号 ,构成了一个 Socket (套接字)。例如 192.168.1.100:52001 -> 220.181.38.148:80。
2.TCP协议 - 传输控制协议
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。

| 字段名 | 含义与作用 |
|---|---|
| Sequence Number | 序列号 。指出本报文段所发送数据的第一个字节 在整个数据流中的编号。用于排序。 |
| Acknowledgment Number | 确认号 。期望收到对方下一个报文段 的第一个数据字节的序号。值为收到的序列号 + 数据长度 + 1。用于确认。 |
| Data Offset | 数据偏移,即TCP首部长度。 |
| Control Bits | 控制位 ,共6个: • URG :紧急指针有效。 • ACK :确认号有效。一旦连接建立,ACK必须为1 。 • PSH :接收方应尽快将数据交付应用层。 • RST :重置连接,用于异常中断。 • SYN :同步序列号,用于建立连接 。 • FIN :发端完成发送任务,用于断开连接。 |
| Window | 窗口大小 。用于流量控制,告诉对方"我还能接收多少字节的数据"。 |
3.TCP的可靠性机制
| 机制 | 原理与解释 |
|---|---|
| 确认机制 | 接收方收到数据后,必须回复一个ACK确认报文,告知发送方"数据已收到"。 |
| 重传机制 | 发送方发送数据后会启动一个定时器 。如果超时仍未收到ACK,就认为数据丢失,会重新发送该数据。 |
| 排序机制 | 利用序列号,接收方可以将乱序到达的数据包重新排序,组装成完整有序的数据流。 |
| 流量控制(滑动窗口) | 接收方通过窗口字段 告知发送方自己的接收能力。发送方只能发送在窗口内的数据。这防止了发送过快导致接收方缓冲区溢出。窗口是动态变化的。 |
4.TCP分段与MSS
-
MSS :最大报文段长度 。指TCP报文段中数据部分的最大长度。
-
公式 :
MSS = MTU (1500) - IP头部(20) - TCP头部(20) = 1460字节。 -
为什么TCP要自己分段?
-
笔记里解释得非常到位:如果让IP层去分片,那么任何一个IP分片丢失,整个原始IP数据报都会作废,TCP需要重传整个大数据块,效率低下。
-
TCP在发送前,就根据MSS将应用层数据分成合适大小的段 。这样,如果某个段丢失,TCP只需重传那一个丢失的段,效率更高。
-
5.TCP连接管理:三次握手与四次挥手
三次握手 --- 建立连接

目标是同步双方的初始序列号,并交换参数。
-
客户端 -> 服务器 :
[SYN=1, seq=x]- 客户端说:"你好,我想建立连接,我的初始序列号是x。"
-
服务器 -> 客户端 :
[SYN=1, ACK=1, seq=y, ack=x+1]- 服务器说:"我同意连接,我的初始序列号是y。你发的x我收到了,下次请从x+1开始发。"
-
客户端 -> 服务器 :
[ACK=1, seq=x+1, ack=y+1]-
客户端说:"好的,连接已建立。你发的y我收到了,下次请从y+1开始发。"
此后,双方进入
ESTABLISHED状态,开始数据传输。
-
四次挥手 --- 断开连接

TCP连接是全双工的,因此每个方向必须单独关闭。
-
主动方 -> 被动方 :
[FIN=1, seq=u]- 主动方说:"我这边数据发完了,要关闭连接。"
-
被动方 -> 主动方 :
[ACK=1, seq=v, ack=u+1]- 被动方说:"好的,我知道你要关了。"(此时,主动方到被动方的连接关闭)
-
被动方 -> 主动方 :
[FIN=1, ACK=1, seq=w, ack=u+1]- 被动方等自己的数据也发完后,说:"我这边也发完了,我也要关了。"
-
主动方 -> 被动方 :
[ACK=1, seq=u+1, ack=w+1]-
主动方说:"好的,再见。"(被动方收到后关闭连接)
-
主动方进入
TIME-WAIT状态,等待2MSL (两倍报文最大生存时间)后彻底关闭。这是为了确保被动方收到了最后的ACK,防止旧连接的数据包干扰新连接。
-
6.UDP协议 - 用户数据报协议
UDP是一种非面向连接的尽力而为的传输协议。(无连接的、不可靠的 传输层协议。)

特点与解释:
-
无连接:通信前不需要建立连接,直接发送。开销小,延迟低。
-
不可靠:不保证数据能到达目的地,不保证顺序,没有确认和重传机制。
-
尽力而为:它只是把数据发出去,不管结果。
-
首部简单:只有8个字节,比TCP的20字节小得多。
7.TCP vs UDP 应用场景
| 特性 | TCP | UDP |
|---|---|---|
| 连接性 | 面向连接 | 无连接 |
| 可靠性 | 可靠 | 不可靠 |
| 速度/开销 | 慢,开销大 | 快,开销小 |
| 数据顺序 | 保证 | 不保证 |
| 流量控制 | 有(滑动窗口) | 无 |
| 应用场景 | Web浏览(HTTP/HTTPS) 、文件传输(FTP) 、电子邮件(SMTP) | 视频流媒体 、语音通话(VoIP) 、在线游戏 、DNS查询 |