TCP连接的建立与释放

基本符号

  • 传输控制模块TCB:储存连接的重要性息,如TCP连接表等。
  • 序列号seq:4字节,TCP连接传送的字节流中每一个字节都有一个序列号,报文段首部的序列号为所携带数据第一个字节的序列号。
  • 确认号ack:4字节,表明期望收到的下一个报文段第一个数据字节的序列号,同时说明确认号之前的数据都已确认接收。
  • 确认位ACK:ACK置为1时,报文段首部的确认号才有效,TCP规定,TCP连接建立后所有报文段的ACK都要置为1。
  • 同步位SYN:SYN=1的报文是连接请求或者连接接受的报文。
  • 终止位FIN:FIN=1的报文是连接释放报文。
  • MSL:最长报文段寿命。

三报文握手(连接建立)

  • 准备阶段:服务器进程创建传输控制模块TCB进入LISTEN状态(被动打开),客户进程也创建传输控制模块TCB(主动打开)。
  • 第一阶段:客户进程发送SYN=1,ACK=0,seq=x的连接请求报文,进入SYN-SENT(同步已发送)状态。
  • 第二阶段:服务器进程收到连接请求报文后,发送SYN=1,seq=y,ACK=1,ack=x+1的报文(同步报文与确认报文合并),进入SYN-RSVD(同步已接收)状态。
  • 第三阶段:客户进程收到服务器进程的同步确认报文后,发送ACK=1,ack=y+1,seq=x+1的确认报文,进入ESTABLISHED(连接已建立)状态,服务器进程收到该确认报文后也进入ESTABLISHED状态。

四报文挥手(连接释放)

  • 第一阶段:客户进程发送FIN=1,seq=u的连接释放报文,进入FIN-WAIT1(终止等待1)状态。
  • 第二阶段:服务器进程收到连接释放报文后,发送ACK=1,ack=u+1,seq=v的确认报文,进入CLOSE-WAIT(关闭等待状态),客户进程收到确认报文后进入FIN-WAIT2(终止等待2)状态。此时TCP连接处于半关闭状态,客户进程不再发送数据,但服务器进程仍可向客户进程发送数据。
  • 第三阶段:服务器进程发送FIN=1,seq=w,ACK=1,ack=u+1(重复使用确认号)的连接终止报文,进入LAST-ACK(最后确认)状态。
  • 第四阶段:客户进程收到连接释放报文后发送ACK=1,ack=w+1,seq=u+1的确认报文,进入TIME-WAIT(时间等待)状态,等待2MSL时间后进入CLOSED状态,服务器收到确认报文后也进入CLOSED状态。结束时都需撤销TCB。

相关问题

1.TCP连接建立时,客户进程最后为什么还要发送确认报文?

为了处理服务器进程突然收到已失效SYN报文的情况。

假设现有客户进程A,服务器进程B。A在请求TCP连接时发送了两次SYN报文,第一次服务器没有响应,随后A与B建立连接、传送数据并释放连接。

如果A第一次发送的SYN报文并未丢失而是因网络拥塞等原因滞留,在A与B释放TCP连接后,B接收到了该SYN报文,若无需客户进程发送确认报文便可建立连接,此时B将认为TCP连接已建立,B将一直等待A发送数据,服务器进程被浪费。

2.TCP连接释放时,客户进程最后为什么要等待2MSL时间?

原因有两点:

  • 防止客户进程最后发送的ACK报文丢失。如果服务器进程接收不到ACK报文,则会在超时后重发FIN+ACK报文,等待2MSL时间可处理该请况。
  • 避免失效的SYN报文出现在本连接中。2MSL时间可使本连接连续时间发送的所有报文在网络中消失,下一个连接中将不会出现失效的SYN报文。

3.TCP连接建立后,客户进程出现故障不再发送数据怎么办?

TCP设有保活计时器,每次接收到来自客户进程的数据便重置该计时器。若两个小时没有接收到数据,则服务器将发送探测报文,以后每隔75s发送一次,发送10次后客户仍未响应,服务器将认为客户已退出TCP连接,随后关闭连接。

你可能感兴趣的:(计算机网络)