网络编程基础
什么是网络编程
网络编程是指不同主机上的程序通过网络进行数据交换的编程技术。
常见场景:
- 浏览器访问网页
- 客户端连接服务器
- 聊天程序
- 文件传输
- 游戏服务器
- RPC / HTTP 服务
网络通信的本质:
两个进程通过操作系统提供的网络接口进行数据收发。
在 Linux / Unix 系统中,网络通信通常通过 Socket API 完成。
网络通信基本要素
一次网络通信通常需要以下信息:
| 要素 | 说明 |
|---|---|
| IP 地址 | 标识网络中的一台主机 |
| 端口号 | 标识主机上的一个进程或服务 |
| 协议 | 规定通信规则,例如 TCP、UDP |
| Socket | 操作系统提供的网络通信接口 |
例如:
1 | 192.168.1.10:8080 |
表示:
- IP 地址:
192.168.1.10 - 端口号:
8080
IP 地址
IP 地址用于标识网络中的设备。
常见类型:
| 类型 | 示例 |
|---|---|
| IPv4 | 192.168.1.1 |
| IPv6 | fe80::1 |
IPv4 是 32 位地址,通常用点分十进制表示。
端口号
端口号用于标识一台主机上的具体应用程序。
范围:
| 范围 | 含义 |
|---|---|
| 0 ~ 1023 | 知名端口,需要管理员权限 |
| 1024 ~ 49151 | 注册端口 |
| 49152 ~ 65535 | 动态/临时端口 |
常见端口:
| 服务 | 端口 |
|---|---|
| HTTP | 80 |
| HTTPS | 443 |
| SSH | 22 |
| MySQL | 3306 |
| Redis | 6379 |
协议
协议用于规定网络通信双方如何交换数据。
可以理解为:
协议就是通信双方都必须遵守的规则。
如果没有协议,双方即使连接成功,也无法正确理解对方发送的数据。
例如客户端发送:
1 | hello |
服务端需要知道:
- 这是什么格式的数据?
- 一条消息从哪里开始?
- 一条消息到哪里结束?
- 收到后应该如何响应?
- 如果出错应该返回什么?
这些都需要协议来规定。
常见网络协议
网络协议通常分布在不同层次中。
| 协议 | 所属层次 | 说明 |
|---|---|---|
| IP | 网络层 | 负责主机之间寻址和路由 |
| TCP | 传输层 | 面向连接、可靠传输 |
| UDP | 传输层 | 无连接、不可靠传输 |
| HTTP | 应用层 | Web 通信协议 |
| HTTPS | 应用层 | HTTP + TLS 加密 |
| DNS | 应用层 | 域名解析协议 |
| FTP | 应用层 | 文件传输协议 |
| SMTP | 应用层 | 邮件发送协议 |
Socket
Socket 是操作系统提供的网络通信接口。
可以理解为:
Socket 是程序进行网络通信的“插座”。
应用程序并不直接操作网卡,而是通过 Socket 调用操作系统提供的网络能力。
Socket 的作用
Socket 主要用于:
- 创建网络连接
- 绑定 IP 和端口
- 监听客户端连接
- 接收客户端连接
- 发送数据
- 接收数据
- 关闭连接
Socket 与 IP、端口、协议的关系
一次网络通信通常可以用下面的信息确定:
1 | 协议 + 本地 IP + 本地端口 + 远程 IP + 远程端口 |
对于 TCP 连接来说,常用四元组唯一标识一条连接:
1 | 源 IP、源端口、目的 IP、目的端口 |
例如:
1 | 客户端:192.168.1.100:50000 |
表示客户端的 50000 端口连接到了服务端的 8080 端口。
总结
可以这样理解:
1 | IP 地址:找到哪台机器 |
例如:
1 | 使用 TCP 协议,连接 192.168.1.10 这台机器上的 8080 端口, |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 tsengcode!



