socket是网络编程的一个概念,使用户更方便的使用底层的协议。
socket 其实就是一个五元组,可以标识一条可用的连接。
源IP, 源端口, 目的IP, 目的端口, 类型(TCP or UDP)
比如[110.122.144.166:45678, tcp, 110.88.92.104:80]
源IP为你的出口IP地址 110.122.144.166,源端口为随机端口45678
目的IP为百度的某一个负载均衡服务器IP 110.88.92.104,端口为HTTP标准的80端口。
使用socket进行通信的流程
- 双方创建socket(每个 socket 被创建后,都会分配两个缓冲区,即输入缓冲区和输出缓冲区),其中服务端的socket需要绑定一个端口,一个进程最多可以创建1024个socket绑定这同一个端口(linux系统默认限制一个用户进程最多只能同时维持1024个文件描述符)。
- 在这两个socket之间建立连接
- 对socket使用send函数和recv函数来传输数据(send函数先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器,recv函数则是TCP协议先接受数据到缓冲区,然后再从缓冲区读取数据)
- 关闭连接