什么是网络协议?为什么计算机之间必须遵守协议?

7 0
三先森 发表于 昨天 20:14 | 查看全部 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
关键词:TCP/IPSocketHTTPHTTPSWiresharkLinux网络编程、网络安全、QUICHTTP3TCP三次握手、面试八股、毕业设计

一、先说结论:网络协议就是计算机之间“说话的规则”

很多同学刚学计算机网络时,都会看到一个词:
协议。
比如:
· TCP/IP 协议族;
· HTTP 协议;
· HTTPS;
· DNS;
· TCP;
· UDP;
· TLS;
· QUIC;
· HTTP/3;
· WebSocket;
· SSH;
· SMTP。
刚开始可能会觉得很抽象:
协议到底是什么?为什么计算机之间通信一定要有协议?
其实可以先记住一句话:
网络协议就是计算机之间通信时必须共同遵守的一套规则。
如果没有协议,计算机之间就像两个互相听不懂语言的人:
你发了一堆数据过去,对方不知道这是什么意思;
对方回了一堆数据回来,你也不知道应该怎么解析。
所以,协议的作用就是:
规定数据怎么组织、每个字段是什么意思、什么时候发送、收到后怎么处理。
这篇文章就从最基础的角度讲清楚:
· 什么是网络协议;
· 为什么计算机之间必须遵守协议;
· 协议通常由哪些部分组成;
· TCP/IP、HTTP、HTTPS、Socket、Wireshark 和协议之间是什么关系;
· 面试、课程设计和毕业设计中应该怎么理解协议。

二、为什么计算机之间不能“随便发数据”?

很多初学者会有一个疑问:
既然网络通信本质上就是发送 0 和 1,那我直接把数据发过去不就行了吗?
问题是:数据可以发过去,但对方不一定能看懂。
比如你给服务器发送一段数据:
hello
服务器收到以后会有很多疑问:
· 这是普通文本?
· 这是 HTTP 请求?
· 这是某种登录消息?
· 这是文件内容?
· 这是心跳包?
· 这是加密后的数据?
· 这条消息什么时候结束?
· 收到以后应该回复什么?
如果双方没有提前约定规则,对方就无法正确理解这段数据。
这就是协议存在的原因。
协议不是为了让通信变复杂,而是为了让通信变得可理解、可解析、可协作。

三、用人类语言理解网络协议

网络协议最简单的类比就是人类语言。
假设两个人交流:
A 说中文,B 也懂中文,他们就能沟通。
A 说中文,B 只懂英文,他们就很难沟通。
A 不按任何语法乱说一堆词,B 即使懂中文,也可能听不懂。
计算机之间通信也是一样。
两个程序想要通信,必须先约定:
· 用什么格式发送数据;
· 每个字段代表什么意思;
· 谁先发,谁后发;
· 什么时候算一条消息结束;
· 收到错误数据怎么办;
· 是否需要加密;
· 是否需要确认和重传。
这些约定合起来,就是协议。
举个生活中的例子。
你打电话给客服,一般流程是:
1. 你拨打电话;
2. 对方接通;
3. 你先说明问题;
4. 对方确认身份;
5. 你提供订单号;
6. 对方查询结果;
7. 双方结束通话。
这其实就像一个“人类通信协议”。
如果你一上来就报订单号,对方可能会问你要办理什么业务。
如果客服还没接通,你就开始讲问题,对方也听不到。
如果双方说的不是同一种语言,交流也无法继续。
网络通信也是同样的道理。
1.png

四、协议到底规定了什么?

网络协议不是一句简单的“大家都这么传数据”。
一个完整的协议通常至少规定三类内容:
· 语法;
· 语义;
· 时序,也有教材叫同步。
也可以用更通俗的话理解为:
· 数据长什么样;
· 每个字段什么意思;
· 通信过程按什么顺序进行。
这就是很多教材里说的协议三要素。
简单记就是:协议 = 数据格式 + 字段含义 + 交互顺序。

五、协议组成之一:语法,也就是“数据格式”

语法规定的是:
数据应该按照什么格式组织。
比如 HTTP 请求大致长这样:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Chrome
这里不是随便写的。
HTTP 协议规定了请求报文的格式:
· 第一行是请求行;
· GET 表示请求方法;
· /index.html 表示请求路径;
· HTTP/1.1 表示协议版本;
· Host 表示访问的主机名;
· User-Agent 表示客户端信息;
· Header 后面还会有一个空行,用来区分请求头和请求体。
如果你乱写成这样:
我要访问首页
服务器你看着办
人可能能看懂中文,但服务器不会把它当成合法 HTTP 请求。
因为它不符合 HTTP 协议规定的语法格式。
所以,协议的第一件事就是规定:数据必须长成什么样。
这也是为什么学习 HTTP、DNS、TCP、TLS 时,经常会看到“报文格式”“首部字段”“数据包结构”这些内容。

六、协议组成之二:语义,也就是“字段含义”

只有格式还不够。
对方还必须知道每个字段是什么意思。
比如 HTTP 响应中经常会看到状态码:
HTTP/1.1 200 OK
这里的 200 不是普通数字,而是有明确含义:请求成功。
再比如:
HTTP/1.1 404 Not Found
404 的含义是:请求的资源不存在。
再比如:
HTTP/1.1 500 Internal Server Error
500 的含义是:服务器内部错误。
这就是语义。
协议不仅规定数据格式,还规定每个字段代表什么。
再看 TCP。
TCP 报文里有 SYN、ACK、FIN 这些标志位。
它们也不是随便写的:
· SYN:请求建立连接;
· ACK:确认收到数据;
· FIN:请求关闭连接。
所以 TCP 三次握手可以简单理解为:
1. 客户端发送 SYN:我想建立连接;
2. 服务端回复 SYN + ACK:我收到了,我也准备好了;
3. 客户端回复 ACK:确认,我们开始通信。
这就是协议语义在真实通信中的体现。

七、协议组成之三:时序,也就是“谁先发、谁后发”

很多协议不仅规定数据格式和字段含义,还规定通信顺序。
这叫时序。
在有些教材里,也会叫“同步”。
你可以把它理解为:通信双方按照什么顺序交互。
比如 TCP 三次握手就有严格顺序:
客户端 服务端:SYN
服务端 客户端:SYN + ACK
客户端 服务端:ACK
不能服务端还没收到 SYN,客户端就直接发送 ACK。
也不能还没建立连接,就当作连接已经成功。
再比如 HTTP 请求响应模型:
客户端 服务端:HTTP Request
服务端 客户端:HTTP Response
通常是客户端先发请求,服务端再返回响应。
如果顺序乱了,通信就会出问题。
这就是为什么网络协议不仅是“数据格式”,它还包含“通信流程”。
对于面试来说,这一点很重要。
很多 TCP/IP 面试题,本质上问的不是你会不会背概念,而是问你是否理解协议的时序规则。
比如:
· TCP 为什么要三次握手?
· TCP 为什么要四次挥手?
· HTTP 请求和响应的顺序是什么?
· TLS 握手发生在什么时候?
· HTTPS 为什么比 HTTP 多了加密过程?
· HTTP/3 为什么基于 QUIC?
· QUIC 为什么可以减少连接建立延迟?
这些问题背后都离不开协议的时序。
2.png

八、TCP/IP 协议族:不是一个协议,而是一组协议

很多同学会把 TCP/IP 理解成一个单独的协议。
严格来说,TCP/IP 更像是一个协议族。
它不是只有 TCP 和 IP,而是一整套用于互联网通信的协议集合。
常见的包括:
· IP:负责寻址和路由;
· TCP:负责可靠传输;
· UDP:提供轻量、低延迟的数据传输;
· ICMP:用于网络诊断,例如 ping;
· ARP:用于在局域网中根据 IP 地址寻找 MAC 地址;
· DNS:负责域名解析;
· HTTP:负责网页和接口通信;
· TLS:提供加密、身份认证和完整性保护;
· HTTPS:通常指运行在 TLS 之上的 HTTP;
· QUIC:基于 UDP 的现代传输协议,并集成 TLS 1.3 加密能力;
· HTTP/3:基于 QUIC 的新一代 HTTP。
所以,当我们说“互联网使用 TCP/IP”时,并不是说只用了 TCP 和 IP。
更准确地说:现实互联网主要建立在 TCP/IP 协议族之上。
比如你访问一个传统 HTTPS 网站,HTTP/1.1 或 HTTP/2 场景下通常涉及:
DNS

TCP

TLS

HTTP
如果是 HTTP/3,则通常是:
DNS

UDP

QUIC

HTTP/3
这里要特别注意:
HTTP/3 不再是 HTTP over TCP,而是 HTTP over QUIC。QUIC 基于 UDP,并把 TLS 1.3 的安全能力集成到了协议内部。
这些协议配合起来,才完成了一次真正的网络访问。

九、Socket 和协议是什么关系?

很多同学学 Linux 网络编程时,会接触 Socket。
比如 TCP 服务端常见流程:
socket()
bind()
listen()
accept()
recv()
send()
close()
TCP 客户端常见流程:
socket()
connect()
send()
recv()
close()
这里要注意一个容易混淆的点:Socket 本身不是网络协议,而是操作系统提供给程序员使用网络协议的编程接口。
你可以把 Socket 理解成一个“插座”。
底层真正负责通信的是操作系统内核中的 TCP/IP 协议栈。
程序员通过 Socket 调用操作系统的网络能力。
比如:
· 你创建 TCP Socket,本质上是使用 TCP 协议;
· 你创建 UDP Socket,本质上是使用 UDP 协议;
· 你写 HTTP 服务,本质上通常是基于 TCP Socket;
· 你写实时通信服务,可能会基于 UDP;
· 你写 QUIC 或 HTTP/3 服务,底层会涉及 UDP。
所以学习 Socket 编程时,不能只背 API。
你还要理解 API 背后的协议逻辑。
否则你会知道 send() 和 recv() 怎么写,但不理解为什么会出现:
· 连接超时;
· 连接拒绝;
· TCP 粘包;
· 半关闭;
· TIME_WAIT;
· 端口占用;
· UDP 丢包;
· TLS 握手失败。
这里顺便解释一下“TCP 粘包”。
所谓 TCP 粘包,并不是 TCP 协议出错了。
而是因为:TCP 是面向字节流的协议,它只保证字节按顺序到达,并不会保留应用层消息边界。
如果你的应用层协议没有设计好消息长度、分隔符或固定格式,就可能出现多条消息被一次读出来,或者一条消息被分多次读出来的情况。
所以粘包问题,本质上是应用层协议设计问题,而不是 TCP 本身的问题。
3.png

十、HTTPHTTPS:协议规则在 Web 中的体现

我们每天访问网页,本质上也是在遵守协议。
比如浏览器访问一个网站,会发送 HTTP 请求:
GET / HTTP/1.1
Host: www.example.com
服务器会返回 HTTP 响应:
HTTP/1.1 200 OK
Content-Type: text/html
这就是典型的请求响应协议。
浏览器和服务器都必须遵守 HTTP 协议规则。
浏览器知道应该怎么组织请求。
服务器知道应该怎么解析请求。
服务器返回响应后,浏览器知道怎么解析状态码、响应头和网页内容。
如果是 HTTPS,则在 HTTP 之外还会引入加密通信机制。
在 HTTP/1.1 和 HTTP/2 场景下,可以简单理解为:
HTTP

TLS

TCP

IP
TLS 的作用是:
· 加密通信内容;
· 验证服务器身份;
· 防止数据被篡改。
所以 HTTPS 不是一个完全脱离 HTTP 的新东西。
更准确地说: HTTP/1.1 HTTP/2 场景下,HTTPS 通常可以理解为 HTTP over TLS。
也就是 HTTP 数据通过 TLS 加密后再传输。
不过到了 HTTP/3,底层关系发生了变化:
HTTP/3

QUIC

UDP

IP
HTTP/3 基于 QUIC,而 QUIC 内部集成了 TLS 1.3 的安全能力。
这也是为什么网络安全、抓包分析、Web 后端开发、面试八股里经常会问:
· HTTP 和 HTTPS 有什么区别?
· TLS 握手做了什么?
· 为什么 HTTPS 更安全?
· 证书有什么作用?
· Wireshark 为什么默认看不到 HTTPS 明文内容?
· HTTP/3 为什么不再基于 TCP?
· QUIC 为什么基于 UDP?
这些问题本质上还是协议问题。

十一、Wireshark 为什么能看懂网络通信?

Wireshark 是学习网络协议非常重要的工具。
它能把网卡抓到的数据包解析成人能看懂的结构。
比如你抓一次访问网页的过程,可能会看到:
· DNS 查询;
· TCP 三次握手;
· TLS Client Hello;
· TLS Server Hello;
· HTTP 请求;
· HTTP 响应;
· QUIC 数据包;
· TCP 重传;
· ICMP 报文。
为什么 Wireshark 能看懂这些?
因为这些协议都有公开、固定、可解析的格式。
比如:
· TCP 报文头里有源端口、目标端口、序列号、确认号、标志位;
· IP 报文头里有源 IP、目标 IP、TTL 等字段;
· DNS 报文里有查询类型、域名、返回记录;
· HTTP 报文里有请求行、状态码、Header、Body;
· TLS 握手里有 Client Hello、Server Hello、证书等内容。
Wireshark 正是按照这些协议规则去解析数据包的。
但这里也要注意一个细节:如果是普通 HTTP,Wireshark 可以直接看到明文请求和响应;如果是 HTTPS,Wireshark 默认只能看到 TLS 握手信息和加密后的应用数据,看不到 HTTP 明文内容。
除非你配置浏览器的密钥日志,或者在合法授权的测试环境中进行解密分析,否则 HTTPS 的具体请求内容通常是不可见的。
这也是 HTTPS 安全性的体现。
如果通信双方完全不遵守任何协议,Wireshark 也无法正确解释这些数据。
它最多只能看到一堆原始字节。
这也是协议的重要性:有协议,数据才有结构;有结构,工具才能分析;能分析,工程师才能排查问题。
4.png

十二、为什么计算机之间必须遵守协议?

到这里可以总结一下。
计算机之间必须遵守协议,主要有五个原因。
1. 为了让不同设备能互相理解

不同设备可能来自不同厂商:
· Windows 电脑;
· Linux 服务器;
· iPhone;
· Android 手机;
· 路由器;
· 云服务器;
· 浏览器;
· Nginx;
· 数据库;
· 物联网设备。
如果大家都遵守 TCP/IP、HTTP、DNS、TLS 这些协议,就可以互相通信。
否则每个厂商都搞一套自己的规则,互联网就无法统一。

2. 为了让数据格式统一

没有协议,数据就是一堆字节。
有了协议,数据才有结构。
比如 HTTP 协议规定了请求和响应格式。
TCP 协议规定了报文头结构。
DNS 协议规定了查询和响应格式。
TLS 协议规定了握手和加密流程。
这让不同程序可以按照统一规则解析数据。

3. 为了让通信流程可控

网络通信不是一次简单的数据发送。
很多时候需要:
· 建立连接;
· 确认对方在线;
· 协商加密参数;
· 发送请求;
· 等待响应;
· 超时重试;
· 关闭连接。
这些流程都需要协议规定。
比如 TCP 三次握手就是连接建立流程。
TLS 握手就是安全参数协商流程。
HTTP 请求响应就是 Web 通信流程。

4. 为了处理错误和异常

真实网络并不稳定。
可能会出现:
· 丢包;
· 延迟;
· 乱序;
· 重复;
· 连接中断;
· 服务端异常;
· DNS 解析失败;
· TLS 证书错误;
· 端口不通。
协议会规定遇到这些问题时应该怎么办。
比如 TCP 可以进行超时重传。
HTTP 可以用状态码表示请求结果。
TLS 可以在证书不可信时终止连接。
DNS 可以返回解析失败。
这些都是协议规则的一部分。

5. 为了让网络安全成为可能

网络安全也离不开协议。
比如:
· TLS 负责加密 HTTPS 通信;
· SSH 负责安全远程登录;
· IPsec 可以用于网络层安全;
· QUIC 默认集成加密能力;
· Web 安全分析离不开 HTTP Header、Cookie、CORS 等协议规则;
· 防火墙和入侵检测系统需要识别端口、协议和流量特征。
如果没有协议,安全设备也很难判断一段流量到底是什么。
所以网络安全不是脱离协议存在的。
相反,网络安全分析的基础就是理解协议。

十三、从面试角度,怎么回答“什么是网络协议?”

如果面试官问:什么是网络协议?
不要只回答:“协议就是规则。”
这个回答太短,像背书。
更好的回答是:
网络协议是计算机之间进行通信时共同遵守的一套规则。它规定了数据的格式、字段的含义以及通信的顺序。比如 HTTP 规定了浏览器和服务器之间请求与响应的格式,TCP 规定了连接建立、可靠传输和连接释放的过程,DNS 规定了域名如何解析成 IP 地址。没有协议,不同设备和程序之间就无法正确理解对方发送的数据,也就无法完成可靠通信。
如果想回答得更专业一点,可以补充:
协议通常包括语法、语义和时序三个方面,有些教材也把时序称为同步。语法规定数据格式,语义规定字段含义,时序规定通信双方的交互顺序。现实互联网主要运行在 TCP/IP 协议族之上,常见协议包括 IP、TCP、UDP、DNS、HTTP、TLS、QUIC 等。
这一段基本可以应付校招面试。

十四、从考试角度,怎么理解协议三要素?

考试里经常会问:网络协议由哪些要素组成?
标准回答一般是:
· 语法;
· 语义;
· 同步。
也有很多资料会写成:
· 语法;
· 语义;
· 时序。
这两个说法本质接近。
可以这样理解:
语法

规定数据和控制信息的结构或格式。
比如 HTTP 请求报文格式、TCP 首部格式、IP 数据报格式。
语义

规定每个字段或控制信息的含义。
比如 HTTP 状态码 200 表示成功,404 表示资源不存在;TCP 中 SYN 表示请求建立连接,ACK 表示确认。
同步 / 时序

规定通信事件发生的顺序。
比如 TCP 建立连接需要三次握手,HTTP 通常是客户端先请求,服务器再响应,TLS 握手需要按照一定流程协商密钥和证书。
考试时可以把一句话记下来:协议三要素:语法规定格式,语义规定含义,同步/时序规定顺序。

十五、从毕设角度,协议能怎么用?

如果你正在做毕业设计,不要觉得协议只是理论。
很多毕设项目都可以围绕协议展开。
比如:
1. 基于 Socket 的聊天室

涉及关键词:
· TCP;
· Socket;
· 多线程;
· Linux 网络编程;
· 粘包处理;
· 心跳机制;
· 消息格式设计。
这里你可以自己设计一个简单应用层协议。
例如:
消息类型 | 用户ID | 消息长度 | 消息内容
这就已经是在设计协议了。
其中“消息长度”非常关键。
因为 TCP 不保留应用层消息边界,如果没有长度字段、分隔符或固定包头,接收端就很难判断一条完整消息到底在哪里结束。

2. 简单 HTTP 服务器

涉及关键词:
· HTTP;
· TCP;
· Socket;
· 请求解析;
· 响应生成;
· 状态码;
· Web 服务。
你可以实现:
· 解析 GET 请求;
· 返回 HTML 文件;
· 返回 404;
· 记录访问日志。
这类项目非常适合写课程设计和毕业设计。

3. Wireshark 抓包分析实验

涉及关键词:
· DNS;
· TCP 三次握手;
· TLS 握手;
· HTTP;
· QUIC;
· HTTP/3;
· 网络安全;
· 流量分析。
你可以设计实验:
1. 抓取 DNS 查询;
2. 抓取 TCP 三次握手;
3. 抓取 TLS 握手;
4. 对比 HTTP 和 HTTPS;
5. 对比 HTTP/2 和 HTTP/3;
6. 分析 TCP 重传或连接异常。
这类实验截图清楚,论文也好写。
需要注意的是:
普通 HTTP 可以直接看到明文请求内容。
HTTPS 默认看到的是 TLS 加密流量。
HTTP/3 常见的是 UDP 443 上的 QUIC 流量。
这三个场景在 Wireshark 里看到的内容是不一样的。

4. 网络安全流量检测系统

涉及关键词:
· 协议识别;
· 端口扫描;
· HTTP Header;
· TLS 证书;
· 异常流量;
· 防火墙;
· 入侵检测。
网络安全项目的基础也是协议分析。
因为你必须知道正常流量是什么样,才能判断异常流量。
比如:
· 正常 HTTP 请求应该有合理的请求方法和 Header;
· 正常 TLS 连接会有握手过程;
· 异常端口扫描会表现出大量连接尝试;
· DNS 隧道可能会出现异常长域名或高频查询。
这些都离不开对协议的理解。
5.png

十六、最后总结:协议不是死概念,而是网络世界的共同规则

这一篇的核心结论可以总结成一句话:
网络协议就是计算机之间通信时共同遵守的规则。
它规定了:
· 数据格式;
· 字段含义;
· 通信顺序;
· 错误处理;
· 安全机制。
没有协议,计算机之间就无法正确理解彼此发送的数据。
TCP/IP 协议族让不同网络可以互联。
HTTP 让浏览器和服务器可以交流。
HTTPS 和 TLS 让通信可以加密。
DNS 让域名可以转换成 IP。
Socket 让程序员可以使用操作系统提供的网络能力。
Wireshark 让我们可以观察协议在真实网络中的运行过程。
所以,学习计算机网络时,不要只把协议当成书上的定义。
真正重要的是:
你能不能用 HTTP 看懂请求和响应;
你能不能用 Wireshark 看懂 TCP 三次握手;
你能不能用 Socket 写出一个能通信的程序;
你能不能解释 HTTPS 为什么安全;
你能不能理解 HTTP/3 为什么基于 QUIC;
你能不能把这些内容讲清楚、写进课程设计、用在毕业设计、回答在校招面试里。
如果能做到这些,协议就不再是抽象概念,而是你真正掌握计算机网络的入口。


回复

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

学研领航向全体高校师生打造的一站式综合交流与资源服务平台,集知识学习、经验分享、资源下载、互动问答、职场成长、兼职实践于一体,覆盖校园生活、专业学习、求职就业、兴趣发展等全场景需求。

快捷导航

小黑屋
  • 添加微信客服
Copyright © 2026 学研领航 版权所有 陕ICP备2025077879号-1
关灯 在本版发帖
扫一扫添加微信客服
返回顶部
快速回复 返回顶部 返回列表