TCP通信的基本流程
客户端
- 调用 socket函数创建客户端 socket;
- 调用 connect 函数尝试连接服务器 ,利用服务器已知的ip和端口进行连接,期间发生三次握手过程;
- 连接成功以后调用 send 或 recv 函数开始与服务器进行数据交流;
- 通信结束后,调用 close 函数关闭侦听socket。
服务器
- 调用 socket 函数创建 socket(侦听socket);
- 调用 bind 函数 将 socket绑定到某个ip和端口的二元组上:服务端必须有一个对客户端公开的ip和端口,这样客户端才知道如何去访问;
- 调用listen函数开启侦听
- 当有客户端请求连接上来后,调用 accept 函数接受连接,产生一个新的 socket(客户端 socket) — 网络通信底层就建立好了连接;
- 基于新产生的 socket 调用 send 或 recv 函数开始与客户端进行数据交流;
- 通信结束后,调用 close 函数关闭侦听 socket。
TIP:
- 端口复用:服务端绑定一个ip和端口号,进程退出了,4次挥手机制,端口会被保留一段时间,那这个时候,重启这个服务器,希望能快速复用这个端口号,就需要缩短操作系统保留端口的时间,希望这个端口可以立刻被新的进程使用。
- 一个端口号只能被一个进程使用,通过ip找机器,通过端口号找进程。