1.4.1 数据收发操作概览
- 向操作系统内部的协议栈发出委托时,需要按照指定的顺序来调用Socket库中的程序组件。
- 步骤:
a. 创建套接字(创建套接字阶段)
b. 将管道连接到服务端的套接字上(连接阶段)
c. 收发数据(通信阶段)
d. 断开管道并删除套接字(断开阶段)
1.4.2 创建套接字阶段
- 创建套接字只需要调用Socket库中的socket程序组件就可以了。
- 套接字创建完成后,协议栈会返回一个描述符,应用程序将收到的描述符存放在内存中,描述符用来识别不同的套接字。
1.4.3 连接阶段:把管道接上去
- 应用程序通过调用Socket库中的名为connect的程序组件来完成连接操作。
- 调用connect需要的三个参数是描述符、服务器IP地址、服务器端口号。协议栈需要通过描述符判断使用哪个套接字进行连接,服务器端通过IP和端口号识别出进行连接的套接字。
- 连接成功后,协议栈会将对方的IP地址和端口号等信息保存在套接字中。
1.4.4 通信阶段:传递消息
- 发送通过调用Socket的write组件,读取调用Socket的read组件。
- 收发步骤:
a. 应用程序首先要在内存中准备好要发送的数据。
b. 调用write程序组件,要指定描述符和发送数据。
c. 调用read读取数据,需要指定存放响应数据的内存地址,称为接收缓冲区。
1.4.5 断开阶段:收发数据结束
- 调用Socket的close组件断开连接,最终管道会被断开,套接字本身被删除。
- HTTP协议规定,服务器发送响应消息后应主动断开连接,断开操作传达到客户端后,客户端套接字也进入断开阶段。