TCP建立连接与释放

TCP建立连接与释放

1.学习前的知识储备

URGent(urgent) /ˈɜːrdʒənt/ 紧急的
Pointer 指针
ACK(Acknowledgement) /əkˈnɒlɪdʒmənt/ 确认
PSH (push)
RST (Reset) 复位
SYN(Synchronize) /ˈsɪŋkrənaɪz/ 同步
FIN (finally) 完成,最后

上面是6位标志位的缩写,具体含义如下(先看,不了解没关系)。6位控制位

  • URG:紧急指针(URGent Pointer)有效。

  • ACK:确认序号有效。

  • PSH:接收端应该尽快将这个报文段交给应用层。

  • RST:重建连接。

  • SYN:同步序号,用来发起一个连接。建立连接,初步序号时随机的

  • FIN:发送端完成任务发送。

2.TCP概括

传输控制协议(TCP)为同一网络中或者连接到一个互联网络系统的成对计算机提供可靠的主机到主机的通信协议。

在网络体系结构中,TCP的上层是应用程序,下层是IP,TCP可以根据IP提供的服务传送大小不等的报文,IP负责对报文进行分段、重组,并在多种网络上传送。

2 TCP报文段的结构

TCP虽然是面向字节流的,但TCP传送的基本数据单元是报文段,一个TCP报文段分TCP报首和TCP数据两部分

报文、包、段、数据报、帧、比特等术语,可以理解为要传输的基本数据单元在网络不同层的叫法。

IP数据包与TCP报文段格式:

TCP建立连接与释放_第1张图片

其中TCP报文段的格式如下:

TCP建立连接与释放_第2张图片

由上面两个图我们可以看到,TCP的报首有20个字节固定的长度和一个可变的选项长度,这个选项(长度最大值是40字节)。

  • 源端口(16)和目的端口(16)各占2字节,共4字。

  • 序号确认序号(确认号)各占4字节,共8字节。

  • 随后有4位报首长度、6位保留位、6个标志位(URG、ACK、PSH、RST、SYN、FIN)、16位窗口大小、16位校验和、16位紧急指针和一个可变的选项(长度最大40个字节)

源端口-目的端口-序号-确认号-4位数据偏移-6位保留位-6位控制位-窗口-检验和-紧急指针-选项(长度位0时,首部为20字节)

3 TCP连接的建立和终止

TCP栈支持同时建立两个TCP连接:一个为主动连接,另一个为被动连接。TCP是基于连接的协议,因为必须保持对TCP连接状态的监视并将与状态有关的信息保存在发送控制块中,而TCP连接状态的改变由TCP的软件状态机来实现。软件状态机又由事件或用户来触发。

为了建立一条TCP连接,必须经过以下3次握手过程

TCP建立连接与释放_第3张图片

如上图所示就时建立连接的过程:下面就是3次握手的过程了

  1. 客户A向服务器B发送SYN=1(SYN=1表示请求建立连接)和seq=x(这个是序列号,A随机生成的,所以用x表示)。

  2. 服务器B收到建立连接的请求后,向A发送SYN=1,ACK=1,seq=y(B随机生成的序列号)和ack=x+1(将A的序列号加+1,然后传送到A后,A内部自动将序列号减1,然后跟自己之前产生的序列号进行对比。

  3. 同理A向B发送ACK=1(确认确认),seq=x+1(自己之前产生的序列号+1,表示第二次进行通信或者连接),ack=y+1

TCP的连接释放(4次挥手过程或者4次分手过程)

TCP建立连接与释放_第4张图片

一开始A和B都处于ESTABLISHED状态,下面是分手的过程

  1. A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。A把连接释放报文段首部的终止控制位FIN置1,其序号seq =u,它等于前面已传送过的数据的最后一个字节的序号加1。这时A进入FIN-WAIT-1(终止等待1)状态,等待B的确认

  2. B收到连接释放报文段后即发出确认,确认号是ack = u + 1,而这个报文段自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1。然后B就进入CLOSE-WAIT(关闭等待)状态。(A收到来自B的确认后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。)

  3. 若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN = 1。现假定B的序号为w(在半关闭状态B可能又发送了一些数据)。B还必须重复上次已发送过的确认号ack = u + 1。这时B就进入LAST-ACK(最后确认)状态,等待A的确认。

  4. A在收到B的连接释放报文段后,必须对此发出确认。在确认报文段中把ACK置1,确认号ack = w + 1,而自己的序号是seq = u + 1(根据TCP标准,前面发送过的FIN报文段要消耗一个序号)。然后进入到TIME-WAIT(时间等待)状态。请注意,现在TCP连接还没有释放掉。必须经过时间等待计时器(TIME-WAIT timer)设置的时间2MSL后,A才进入到CLOSED状态。

你可能感兴趣的:(网络协议)