TCP的连接和终止
TCP的连接过程称为三次握手,其过程为,主动开启方(一般为客户端)发送SYN报文段指明想要连接的IP数据报端口,和自己的起始序列号,同时还会发送一个或多个选项,其中有MSS表示能接受的最大报文段(TCP数据段大小不包括首部)。
对方端(一般为服务器)接收到SYN请求后被动开启,回复一个SYN 报文段同时将发送自己的初始序列号,另外会将ACK 位置1,同时确认序号为对方序列号+1的值,同时也会发送一个或多个选项, 包括自己的MSS
客户端收到服务器的SYN + ACK报文段时会发送一个纯ACK包回复,其确认序号为对方SYN的序列号+1,纯ACK不占序号。
TCP关闭时首先需要关闭的一方发送一个FIN报文段,同时该报文段也可以将ACK置为1用于确认应答上一个数据包,被动关闭方在接受到FIN报文段时会回复一个ACK其确认序号为FIN报文段序列号加1,同时被动关闭方可以继续发送数据,因为TCP连接是一个双工通信,当被动关闭方发送完数据后,其同样向对方发送FIN报文段, 对方回复ack此时连接断开。
TCP状态转变
TCP连接过程中状态变换如图所示:
首先客户端和服务器均为close装态,服务器启动定义监听套接字,绑定端口和地址,同时执行listen函数进入listen状态等待连接到来,此时服务器accept会进入阻塞