什么是网络编程

网络编程是指不同主机上的程序通过网络进行数据交换的编程技术。

常见场景:

  • 浏览器访问网页
  • 客户端连接服务器
  • 聊天程序
  • 文件传输
  • 游戏服务器
  • 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
2
客户端:192.168.1.100:50000
服务端:192.168.1.10:8080

表示客户端的 50000 端口连接到了服务端的 8080 端口。

总结

可以这样理解:

1
2
3
4
IP 地址:找到哪台机器
端口号:找到机器上的哪个程序
协议:规定怎么通信
Socket:程序使用网络的接口

例如:

1
2
使用 TCP 协议,连接 192.168.1.10 这台机器上的 8080 端口,
程序通过 Socket 完成连接、发送和接收数据。