

有关网络通信基础知识的笔记,学习资源来自清华电子系暑培录播。
HTTP
TCP / IP 模型
- 应用层
包含高层协议(HTTP, FTP, SMTP) - 传输层
提供端到端通信,包含传输控制协议(TCP)和用户数据报协议(UDP) - 互联网层
负责 IP 地址和路由的选择,包含 IP 协议 - 网络接入层
传输比特流 / 节点间传输帧
IP 地址
网络设备的地址标识,分为 IPv4 和 IPv6。
IPv4
32 位 4 字节地址,点分十进制表示,如 192.168.42.14
。
缺点: 地址数量不够用。
IPv6
128 位地址,每 16 位一组,中间使用冒号隔开。
域名
字符型地址方案,与 IP 地址一一对应,域名在访问时会被解析为对应的 IP 地址。
端口
计算机为多进程并行执行,主机收到数据包后,应当转发为哪个进程,由端口号决定。
一个 IP 地址允许由 65536 个端口(16 bit 编码)
0-1023 编号端口称为周知端口(前 8 bit 编码),大多固定分配给某些服务(如 www)
http: 超文本传输协议
http 是 www 数据通信的基础。
server-client 模式:
- 客户与服务器建立连接
- 客户向服务器发送请求 request
- 服务器接收请求,返回相应文件作为应答 response
- 关闭连接
一次性连接,一次发送一个请求,应当后连接立即关闭
http request 格式
请求行 + 请求头 + 空行 + 请求体
示例(删去 #
注释理解):
1 | # 请求行 (HTTP 方法、请求 URI、HTTP 版本) |
http response 格式
状态行 + 响应头 + 空行 + 响应体
示例(删去 #
注释理解):
1 | # 状态行(HTTP 版本、状态码(403/404/408...)、状态描述) |
Protobuf
序列化协议
通信传输面临问题: 不同编程语言使用不同数据结构,传输未对准。
序列化协议定义数据编解码方式、确保手法双方正确处理和理解。通过将复杂数据结构转化为线性字节流,消除潜在兼容问题。
常见协议: JSON、XML、protobuf
ex. 创建一个姓名为 John Doe,年林 30 岁的人物信息。
JSON
键值对形式。
1 | { |
易读写,广泛支持,但序列化,反序列化速度慢。
XML
标签结构。
1 | <person> |
可扩展,自定义标签,广泛支持,缺点同 json。
protobuf
预定义 proto 文件。
1 | syntax = "proto3"; |
使用 protoc 编译 proto 文件,得到一个 python 文件,随后可以通过 import 进行信息初始化与编码,得到信息的字节串编码。
序列化为二进制格式,高效多语言,向后兼容。
gRPC
现代高性能远程调用(RPC)框架,创建分布式应用程序和服务。
ex. 大型联机游戏,游戏内在逻辑需要大量复杂计算,不可能放在每一个用户的电脑上运行;服务器处理内在逻辑,用户通过接口调用不同的服务即可。
- 定义服务:用户可以调用的函数、函数参数、返回类型等
- 服务器端实现函数内部逻辑,运行 gRPC 服务器处理用户调用函数请求
- 用户保留存根(stub),通过存根调用服务器实现的函数
优点:用户和服务器在各种环境中通信,跨语言,跨平台,使用 protobuf 序列化数据