什么是 Socket

Socket 可以理解为网络通信的端点。

对于 TCP 通信来说,一个连接通常由四元组唯一确定:

1
源 IP、源端口、目的 IP、目的端口

例如:

1
2
客户端:192.168.1.100:50000
服务器:192.168.1.10:8080

Socket 类型

常见 Socket 类型:

类型 说明 对应协议
SOCK_STREAM 面向连接、可靠、字节流 TCP
SOCK_DGRAM 无连接、不可靠、数据报 UDP
SOCK_RAW 原始套接字 IP/ICMP

TCP Sokcet 通信流程

服务端流程

1
2
3
4
5
6
socket()
bind()
listen()
accept()
recv()/send()
close()

客户端流程

1
2
3
4
socket()
connect()
send()/recv()
close()

TCP 服务端示意

1
2
3
4
5
6
7
8
9
10
11
12
13
客户端                  服务端
| |
| connect |
|---------------------->|
| | accept
| send |
|---------------------->|
| | recv
| recv |
|<----------------------|
| |
| close |
|---------------------->|

UDP Socket 通信流程

UDP 是无连接协议,不需要 listen()accept()

UDP 服务端

1
2
3
4
5
socket()
bind()
recvfrom()
sendto()
close()

UDP 客户端

1
2
3
4
socket()
sendto()
recvfrom()
close()