尽管TCP和UDP都使用相同的网络层(IP),TCP提供的是一种面向连接的,可靠的字节流服务。
TCP协议提供可靠的连接服务,客户端和服务端的连接过程,称为三次握手
(1)第一次握手:建立连接时,,客户端A发送SYN包(SYN=j) 到服务器B,并进入SYN_SEND状态,等待服务器B确认。
(2)第二次握手: 服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
(3) 第三次握手: 客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手,客户端和服务器端开始穿数据。
建立一个连接需要三次握手,而终止一个连接要经过4次握手。这是由于TCP的半关闭(half closed)造成的。因为TCP连接是一个全双工的(数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。 而发送FIN通常是应用层进行关闭的结果。
首先进行关闭的一方(即发送第一个FIN)将执行主动关闭,而另一方(收到FIN)则执行被动关闭
(1) 客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(宝文段4)
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5).和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文7)
下次面试时,可以使用画图加解说的方式表达TCP协议的三次握手和四次挥手的过程