简述TCP协议
TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
TCP数据包格式:
source port: 源端口号
Destination port: 目的端口号
sequence number: ***
Acknowledge number:确认号
标志位:
URG-紧急标志位,不常用
ACK-为1代表是一个确认报文
PSH-不常用,为1表示直接交付给应用进程,不用等待缓冲
RST-为1表示tcp要重新建立
SYN-为1表示建立tcp连接的第一个报文
FIN-为1代表是关闭tcp连接的第一个报文
TCP三次握手过程
从图中,可以看出三次握手的基本步骤是:
第一次握手:客户端向服务器端发送连接请求包SYN,等待服务器回应;
第二次握手:服务器端收到客户端连接请求包SYN后,将客户端的请求包SYN放入到自己的未连接队列,此时服务器需要发送两个包给客户端;
(1)向客户端发送确认自己收到其连接请求的确认包ACK,向客户端表明已知道了其连接请求
(2)向客户端发送连接询问请求包SYN,询问客户端是否已经准备好建立连接,进行数据通信;
即在第二次握手时服务器向客户端发送ACK和SYN包,此时服务器进入SYN-RCVD状态。
第三次握手:客户端收到服务器的ACK和SYN包后,知道了服务器同意建立连接,此时需要发送连接已建立的消息给服务器;
向服务器发送连接建立的确认包ACK,回应服务器的SYN告诉服务器,我们之间已经建立了连接,可以进行数据通信。
ACK包发送完毕,服务器收到后,此时服务器与客户端进入ESTABLISHED状态,开始进行数据传送。
TCP四次挥手过程
断开一个tcp连接需要“四次挥手”
第一次:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发送数据了,但是,此时,主动关闭方依然可以接收数据。
第二次:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1.
第三次:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我已经发完了,不会再给你发数据了。
第四次:主动关闭方收到FIN后,发送一个ACK给对方,确认序号为收到序号+1,至此,四次挥手完成。