TCP协议的客户端与服务器的通信过程
使用TCP时,客户端与服务器端的通信流程 服务器初始化 1)调用socket,创建文件描述符fd 2) 调用bind将fd与服务器的IP与PORT绑定 3)调用listen将套接字设为监听模式,准备接收客户端连接请求 4)调用accept等待并接收客户端的连接请求,建立好TCP连接后,该函数会返回一个新的已连接套接字newfd 建立连接 1)客户端调用socket创建文件描述符 2)调用connect,向服务器发送连接请求 3)connect会发送一个请求SYN段并阻塞等待服务器应答(第一次握手) 4)服务器收到SYN,会给客户端发送一个确认应答ACK,同时发送一个请求(SYN)建立连接(第二次握手) 5)客户端收到服务器发的SYN+ACK段,表明客户端连接已建立成功,进入已连接状态。客户端再向服务器 发送一个ACK段,服务器收到后则服务器连接成功。 数据传输 1)连接建立成功后,在同一连接、同一时刻,通信双方可同时写数据(全双工) 2)服务器端从accept()返回后调用read()开始读数据,若没有数据则阻塞等待 3)客户端调用write()向服务器发送数据请求,客户端收到之后调用read()处理请求,此过程服务器调用read()阻塞等待 4)服务器调用write()将处理好的请求发送给客户端,再次调用read()等待下一个请求 5)客户端收到后从read()返回