一、TCP数据报的结构

三次握手与四次挥手_可靠传输

重点:数据号、确认号、标志位

1.数据号(Sequence Number):占32位,用来标识一台计算机发送到另一台计算机的数据包的序号。

2.确认号(Acknowledge Number):占32位,客户端和服务器端均可发送。

3.标志位:每个标志占1位,共有6个,分别为URG、ACK、PSH、RST、SYN、FIN

URG表示紧急指针(urgent pointer)有效。
ACK表示确认序号有效。
PSH表示接收方应当尽快把此报文交给应用层。
SYN表示建立一个新连接
FIN表示断开一个连接

二、TCP协议的特点

TCP(Transmission Control Protocol):传输控制协议,是一种可靠的、面向连接的、基于字符流的通信协议,数据在传输前要建立连接,在传输完毕后要断开连接。

2.客户端在收发数据前要使用connect()函数和服务器建立连接,来保证IP地址、端口和物理链路等没有错误,为数据的传输开辟通道。

3.TCP不提供广播或多播服务。

4.TCP在传输数据之前需要传输三个数据包来建立连接,我们将它称之为三次握手。

5.TCP一般用于文件传输、发送和接受邮件、远程登录等。

6.TCP在数据传输完成后需要断开连接,我们称之为四次挥手。

三次握手与四次挥手_可靠传输_02

三、TCP的三次握手

第一次握手:客户端(Client)发送连接请求报文

第二次握手:服务器端(Server)接受到请求连接报文后回复Ack确认报文,并且为这次连接分配资源。

第三次握手:客户端接受到Ack报文后也向服务器端发送Ack确认报文,并分配资源。

三次握手完成。

三次握手与四次挥手_三次握手_03

四、数据传输

建立连接成功后,开始相互数据传输,为了保证数据的准确到达,目标主机在收到数据包后立刻返回Ack包,发送方才能确认数据发送成功。

三次握手与四次挥手_可靠传输_04

五、TCP的四次挥手

      建立连接是数据传输的前提条件,在数据传输完毕后,及时的断开连接,释放计算机资源,关闭套接字也十分重要。

第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送。

第二次挥手:服务器收到FIN后,发送一个Ack给客户端,服务器进入CLOSE_WAIT状态。

第三次挥手:服务器发送一个FIN,用来关闭服务器端到客户端的数据传送,服务器端进入LAST_ACK状态。

第四次:客户端收到FIN后,客户端进入TIME_WAIT状态,发送ACK给服务器,服务器进入CLOSED状态,

四次挥手完成。

三次握手与四次挥手_TCP_05