TCP/IP协议定义了一个在因特网上传输的包,称为IP数据报
TCP连接的建立和释放(三次握手和四次挥手)
TCP
序列号
TCP传送的数据流中每个字节都有一个序号,序号字段代表报文段要发送的数据的第一个字节的序号
确认号
通讯的任何一方在收到对方的一个报文后,都要发送一个相对应的确认报文,来表示确认收到,确认报文包含一个确认号,它的值表示期望收到对方下一个报文段的序号值(在确认报文中确认号才会有效)
标识一个确认报文的方式:6个标志位
3个重点标志位
ACK
ACK标志位为1时确认号有效,当前报文是一个确认报文,ACK=0时确认号无效
SYN
同步比特SYN置为1,表示这是一个连接请求或连接接受报文
FIN
用来释放一个连接,FIN=1时,表示此报文段的发送端的数据已经发送完毕,并要求释放运输连接
三次握手
TCP的连接和建立都是采用客户服务器方式,主动发起连接建立的应用进程叫做客户(Client),被动等待连接建立的应用进程叫做服务器(Server)
TCP/IP中,采用三次握手建立一个连接
第一次握手
客户(Client)向服务器(Server)发送一个连接请求,此时,SYN=1,同时发送序列号Seq=x.
第二次握手
此时,服务器收到客户的报文要发出一个相对应的确认报文表示收到,ACK=1,接着发送一个确认号ACKnum(是期望收到对方的下一个报文段的数据的第一个字节的序号),ACKnum=x+1,表示收到了SYN标识,同时SYN=1,标识这是一个连接接受报文,再发送自己的序列号Seq=Y
第三次握手
此时,客户端收到服务器的响应报文,也要回复确认报文,ACK=1,ACKnum=Y+1,表示收到了SYN携带标识
四次挥手
当客户端想关闭连接时,需要四次挥手来释放连接
第一次挥手
客户端发送一个FIN标志位置为1的包,其次携带自己的序列号Seq=x
第二次挥手
服务器端确认客户端的FIN包,发送一个确认包,表明接受了客户端关闭连接的请求(此时未准备好关闭连接),ACK=1,ACKnum=x+1;
第三次挥手
当服务器端准备好关闭连接时,向客户端发送结束连接请求,FIN置为1,同时发送自己的序列号seq=y
第四次挥手
客户端收到来自服务器端的关闭请求,发送一个确认包,ACK=1,ACKnum=y+1,服务器端接收到确认包,就会关闭连接,进入CLOSED状态,如果服务器端关闭,将不再回应客户端,客户端在等待某个固定时间后,将会自行关闭,进入CLOSED状态,这个时候就完成了TCP连接的释放