传输控制协议(TCP)

版权声明:转载请注明出处 https://blog.csdn.net/ty13572053785/article/details/85315988

一、TCP头部和封装

在这里插入得到图片描述
源端口与目的端口: 每个TCP头部包含了源和目的端口号,这两个值与IP头部中的源和目的IP地址一起,唯一地标识了每个连接。在TCP术语中,一个IP地址和一个端口的组合有时被称为一个端点(endpoing)或套接字(socket)。每个TCP连接由一对端点或套接字(四元组,由客户机IP地址、客户机端口号、服务器IP地址、服务器端口号组成)唯一地标识。
序列号: 序列号字段标识了TCP发送端到TCP接收端的数据流的一个字节,该字节代表着包含该序列号的报文段的数据中的第一个字节。
确认号: TCP可以被描述为“一种带累积正向确认的滑动窗口协议”。收到报文段后用ACK或SACK进行确认。
头部长度:
1.CWR------拥塞窗口减(发送方降低它的发送速率)
2.ECE-------ECN回显(发送方接受到了一个更早的拥塞报告)
3.URG------紧急(紧急指针有效字段,很少被使用)
4.ACK------确认(确认号字段有效,连接建立以后一般都是启用状态)
5.PSH------推送(接收方应尽快给应用程序传这个数据)
6.RST------重置连接(连接取消,经常是因为错误)
7.SYN------用于初始化一个连接的同步序列号
8.FIN-----该报文段的发送方已经结束向对方发送数据
窗口大小: TCP的拥塞控制由每个端点使用窗口大小字段来通告一个窗口大小来完成,这个窗口大小是字节数,从ACK号指定。
TCP校验和: TCP校验和字段覆盖了TCP的头部和数据以及头部中的一些字段。由发送方进行计算和保存,然后由接收方验证。
紧急指针: 紧急指针字段只有在URG位字段被设置时才有效。
选项: 最常见的选项字段就是“最大段大小”选项,称为MSS。MSS指定该选项的发送者在相反方向上希望接收到的报文段的最大值。

二、TCP连接的建立

在这里插图片描述

1.主动开启者(通常称为客户端)发送一个SYN报文段(即一个在TCP头部的SYN位字段置位的TCP/IP数据包),并指明自己想要连接的端口号和它的客户端初始序列号(记为ISN©,上图中ISN©=x)。通常客户端还会发送一个或多个选项,客户端发送的这个SYN报文段称作段1。
2.服务器端也发送自己的SYN报文段作为响应,并包含了它的初始序列号(记为ISN(s),上图中ISN(s)=y),该段称为段2。此外,为了确认客户端的SYN,服务器端将其包含的SYN©数据加1后作为返回的ACK数值。因此,每发送一个SYN,序列号就会自动加1。这样如果出现丢包的情况,该SYN段会重传。
3.为了确认服务器端的SYN,客户端将ISN(s)的数值加1后作为返回的ACK数值。这称为段3。
        通过上述3个报文段就完成了一个TCP连接的建立,它们也常称作三次握手。三次握手的目的不仅在于让通信双方了解一个连接正在建立,还在于利用数据包的选项来承载特殊信息,交换初始序列号(Initial Sequence Number,ISN)。

三、TCP连接的终止

在这kk图片描述
1.连接的主动关闭者发送一个FIN段指明接收者希望看到的自己当前的序列号。FIN段还包含一个ACK段用于确认对方最近一次发来的数据(图中未标出)。
2.连接的被动关闭者将K的数值加1作为响应的ACK值,以表明它已经成功接收到主动关闭者发送的FIN。
3.此时,上层的应用程序会被告知连接的另一端已经提出了关闭的请求。通常,这会导致应用程序发起自己的关闭操作。接着,被动关闭者将身份转换为主动关闭者,并发送自己的FIN。
4.为了完成连接的关闭,最后发送的报文段还包含一个ACK用于确认上一个FIN。如果出现FIN丢失的情况,那么发送方将重新传输直到收到一个ACK确认。

四、TCP状态转换图

1
1.TIME_WAIT状态
TIME_WAIT状态也称为2MSL状态。在该状态中,TCP将会等待两倍于最大段生存期(Maximum Segment Lifetime,MSL)的时间,有时也被称作加倍等待。按照规则,当TCP执行一个主动关闭并发送最终的ACK时,连接必须处于TIME_WAIT状态并持续两倍于最大生存期的时间。这样就能够让TCP重新发送最终的ACK以避免出现丢失的情况。
2.FIN_WAIT_2状态
在FIN_WAIT_2状态,某TCP通信端已发送一个FIN并已得到另一端的确认。

猜你喜欢

转载自blog.csdn.net/ty13572053785/article/details/85315988
今日推荐