首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >计算机网络-TCP/IP五层模型

计算机网络-TCP/IP五层模型

作者头像
运维小路
发布2026-03-10 11:55:18
发布2026-03-10 11:55:18
1280
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

目前几乎所有的应用都会跟网络打交道,所以我们了解和熟悉网络对我们后续的排错是很有必要的,我这里讲解的部分主要是我个人理解来进行讲解。

上个小节介绍的OSI7层模型,在实际上可能只有面试的人会问到(属于面试八股文),在实际环境中,我们一般是TCP/IP五层模型或者TCP/IP四层模型,这里四层就是把数据链路层和物理层合并。因为TCP/IP是我们整个协议的最核心协议。

下图来源于网络

数据链路层&物理层

数据链路层通信是内网通信的关键,他们不依赖网络设备,最简单的连接方式就是2台电脑可以通过网线直接组网。在早期的电脑和电脑通信使用的交叉线,电脑和其他网络设备则使用直连线(线都是不通用),当然目前新设备已经没有这个问题。在这里传输的数据是帧&比特流。

报文格式

核心是MAC地址

代码语言:javascript
复制
+-------------------+-------------------+-------------------+-------------------+-------------------+
| 目的MAC地址 (6B)  | 源MAC地址 (6B)    | 类型/长度 (2B)    | 载荷 (46-1500B)   | FCS校验 (4B)      |
+-------------------+-------------------+-------------------+-------------------+-------------------+
  例: 00:11:22:33:44:55   例: AA:BB:CC:DD:EE:FF   0x0800=IPv4  承载IP报文   循环冗余校验

网络层

网络层的核心就是IP地址,包括源IP地址,就是发起请求方,目标IP地址,就是响应方,简单理解就是机器对机器。

代码语言:javascript
复制
+--------+--------+-----------+----------------+---------------+
| 版本(4b)| IHL(4b)| 服务类型(8b)| 总长度(16b)        | 标识(16b)|
+--------+--------+-----------+-----+----------+---------------+
| 标志(3b)| 片偏移(13b)    | TTL(8b)| 协议(8b) | 头部校验和(16b)|
+---------------------+--------+--------+--------------------+-+
| 源IP地址 (32b) (例: 192.168.1.1)                              |
+--------------------------------------------------------------+
| 目的IP地址 (32b) (例: 10.0.0.1)                               |
+--------------------------------------------------------------+
| 选项 (0-40B)  | 数据 (载荷,承载TCP/UDP报文)                   |
+--------------------------------------------------------------+

传输层

传输层的核心IP+端口+协议,也是我们常说的5元组(源端口,源IP,协议,目标IP,目标端口),如果去掉协议就是4元组。这里就是进程对进程(比如我用curl命令请求某个网站)。

传输层的协议核心就是TCP协议/UDP协议。

TCP报文

代码语言:javascript
复制
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         源端口(16b)           |        目的端口(16b)      |
   |        (例: 54321)            |        (例: 80)          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       序列号(32b)                        |
   |                      (例: 123456789)                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                       确认号(32b)                        |
   |                      (例: 543210987)                    |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   | 数据偏移(4b)| 保留(6b)| 标志位(6b)|         窗口大小(16b   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         校验和(16b)           |         紧急指针(16b)     |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          选项(0-40B)                    |
   |                    (如MSS、时间戳、窗口缩放等)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            数据                          |
   |                    (上层应用数据,可变长度)                |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

UDP报文

udp协议简单,所以他的效率比tcp高,但是他是不可靠协议。

代码语言:javascript
复制
  +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |         源端口(16b)           |        目的端口(16b)      |
   |        (例: 54321)            |        (例: 53)          |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |          UDP长度(16b)          |         UDP校验和(16b)   |
   |     (头部+数据的总字节数)        |      (可选,0表示不校验)  |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                            数据                         |
   |                    (上层应用数据,可变长度)                |
   |               (例: DNS查询、DHCP请求、视频流)              |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

应用层

应用层协议最简单的就是具体应用,比如下面的http请求和返回。

请求报文

代码语言:javascript
复制
+---------------------------------------------------------------+
|                        请求行(Request Line)                    |
| +-----------------------------------------------------------+ |
| | 方法    | 空格 |   URL    | 空格 | 版本    | 换行符(\r\n) | |
| | (GET)   |      |/index.html|     |HTTP/1.1|              | |
| +-----------------------------------------------------------+ |
+---------------------------------------------------------------+
|                           头部(Headers)                        |
| +-----------------------------------------------------------+ |
| | Host: www.example.com\r\n                                 | |
| | User-Agent: Mozilla/5.0\r\n                               | |
| | Accept: text/html,application/xhtml+xml\r\n               | |
| | Accept-Language: zh-CN,zh;q=0.9\r\n                       | |
| | Accept-Encoding: gzip, deflate\r\n                        | |
| | Connection: keep-alive\r\n                                | |
| | 空行(\r\n)                                                | |
| +-----------------------------------------------------------+ |
+---------------------------------------------------------------+
|                           消息体(Body)                          |
| +-----------------------------------------------------------+ |
| | (GET请求通常没有消息体)                                    | |
| | POST请求时会有:                                           | |
| | username=admin&password=123456                            | |
| +-----------------------------------------------------------+ |
+---------------------------------------------------------------+

返回报文

代码语言:javascript
复制
+---------------------------------------------------------------+
|                        状态行(Status Line)                      |
| +-----------------------------------------------------------+ |
| | 版本    | 空格 | 状态码 | 空格 | 状态描述 | 换行符(\r\n)   | |
| |HTTP/1.1|     |  200  |     |   OK    |              | |
| +-----------------------------------------------------------+ |
+---------------------------------------------------------------+
|                           头部(Headers)                        |
| +-----------------------------------------------------------+ |
| | Server: nginx/1.18.0\r\n                                  | |
| | Date: Mon, 04 Mar 2024 10:00:00 GMT\r\n                   | |
| | Content-Type: text/html; charset=UTF-8\r\n                | |
| | Content-Length: 1234\r\n                                   | |
| | Last-Modified: Mon, 04 Mar 2024 09:00:00 GMT\r\n          | |
| | Connection: keep-alive\r\n                                 | |
| | Content-Encoding: gzip\r\n                                 | |
| | 空行(\r\n)                                                | |
| +-----------------------------------------------------------+ |
+---------------------------------------------------------------+
|                           消息体(Body)                          |
| +-----------------------------------------------------------+ |
| | <!DOCTYPE html>                                           | |
| | <html>                                                     | |
| | <head>                                                     | |
| |     <title>Example Page</title>                           | |
| | </head>                                                    | |
| | <body>                                                     | |
| |     <h1>Hello, World!</h1>                                 | |
| | </body>                                                    | |
| | </html>                                                    | |
| +-----------------------------------------------------------+ |
+---------------------------------------------------------------+
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档