TCP协议通讯流程

TCP的报头格式:

  TCP协议通讯流程

6个标志位:

URG:紧急指针是否有效

ACK:确认号是否有效

PSH:提示接收端从应用程序立刻从TCP缓冲区把数据读走

RST:对方要求重新建立连接;称为重置标志位

SYN:请求建立连接;称为同步报文段

FIN:通知对方,本端要关闭;携带FIN标识的称为结束报文段


服务器初始化:

调用socket,创建文件描述符

调用bind,将当前文件描述符和ip/port绑定在一起,如果这个端口已经被其他进程占用,便会绑定失败。

调用listen,声明这个文件描述符作为服务器的文件描述符,为后面的accept做准备。

调用accept,并阻塞,等待有客户链接。


建立连接的过程:三次握手

调用socket,创建文件描述符

调用connect,向服务器发起连接请求;

(第一次):connect会发出SYN段并阻塞式等待服务器应答;

(第二次):服务器收到客户端的SYN,会应答一个SYN-ACK段表示同意建立连接;

(第三次):客户端收到SYN-ACK后会从connect()返回,同时还应答一个ACK段

TCP协议通讯流程

数据传输的过程:

1.建立服务后,TCP协议提供全双工(在同一条连接中,同一时刻,通信的双方可以同时写数据)的通讯服务。

2.服务器从accept()返回后立刻调用read(),读取socket和读取管道相同,如果没有数据到达就阻塞式等待;

3。这时客户端调用write()发送请求给服务器,服务器收到后会从read()返回,并对客户端的请求进行处理,在此期间客户端调用read()阻塞等待服务器的应答。

4.服务器调用write()将处理的结果发回客户端,再次调用read()阻塞等待下一条请求。

5.客户端收到后从read()返回,发送下一条请求,如此循环。


断开连接的过程:四次挥手

1.如果客户端没有更多的请求,就调用close()关闭连接,客户端会向服务器发送FIN段(第一次

2.此时服务器收到FIN后,会回应一个ACK,同时read()会返回0(第二次

3,read()返回后,服务器就知道了客户端关闭了连接,也调用了close()关闭了连接,这时服务器会向客户端发送一个FIN,(第三次

3.客户端收到FIN,在返回一个ACK给服务器;(第四次

TCP协议通讯流程