服务器初始化
(1)调用socket,建立文件描述符
(2)调用bind,将文件描述符与ip/port链接起来。若端口号已被占用,则bind失败
(3)调用listen,声明该文件描述符是服务器的一个文件描述符,为以后的accept作准备
(4)调用accept,并处于阻塞状态,等待客户端链接
创建链接
(1)调用socket,建立文件描述符
(2)调用connect,向服务器发起链接请求。
(3)connect会发送一个请求SYN段并阻塞等待服务器应答(第一次)
(4)服务器收到SYN,会给客户端发送一个确认应答的同时发送一个请求(SYN+ACK),表示赞成创建链接(第二次)
(5)客户端收到客户端发的SYN+ACK段,代表客户端链接已创建成功,进入ESTABLISHED状态,从connect()。客户端再向服务器发送一个ACK段,服务器收到后则服务器端链接也创建成功,服务器也进入ESTABLISHED状态。
数据传输
(1)链接创建成功后,在同一链接、同一时刻,通讯双方可同时写数据(全双工)
(2)服务器端从accept()返回后调用read()开始读数据,若没有数据则阻塞等待
(3)客户端调用write()向服务器发送数据请求,客户端收到以后调用read()处理请求,此过程