TCP (Transmission Control Protocol)
1.面向连接的、可靠的、基于字节流的传输层通信协议。
2.数据传输时,将应用层的数据流分割成报文段并发送给目标节点的 TCP 层。
3.TCP 为了不丢失包,就给每个数据包一个序号,对方收到则发送 ACK 确认,未收到则重传。
4.使用校验和来校验数据在传输过程中是否有误。
TCP 头部格式
字段名称 | 长度(比特) | 含义 |
---|---|---|
发送方端口号(Source Port) | 16 | 发送网络包的程序的端口号。 IP 地址确定网络上唯一的一台主机,端口号确定主机上唯一的进程。 |
接收方端口号(Destination Port) | 16 | 网络包的接收方的端口号。 |
序号(发送数据的顺序编号)(Sequence Number) | 32 | 发送方告知接收方该网络包发送的数据相当于所有发送数据的第几个字节。 |
ACK 号(接收数据的顺序编号) | 32 | 接收方告诉发送方已经接收到了所有数据的第几个字节。其中,ACK 是 acknowledge 的缩写。 |
数据偏移量(Offset) | 4 | 由于头部有可选字段,长度不固定,数据偏移量表示 TCP 报文的数据距离 TCP 起始处有多远。 表示数据部分的起始位置,也可以认为表示头部的长度。 |
保留 | 6 | 该字段为保留,现在未使用。 |
控制位(TCP Flags) | 6 | 该字段中的每个比特分别表示以下通信控制含义。 URG:表示紧急指针字段有效。 ACK : 表示接收数据序号字段有效。一般表示数据已被接收方收到。 PSH : push 标志,表示接收方接收到数据应立刻将数据发送给应用程序,而不是放于缓冲区排队。 RST : 强制断开连 接,用于异常中断的情况或者拒绝连接请求。 SYN: 发送方和接收方相互确认序号,表示连接操作。 FIN:表示断开连接。 |
滑动窗口(Winodw Size) | 16 | 接收方告知发送方窗口大小(即无需等待确认可一起发送的数据量),以此来控制发送数据的速率,从而达到流量控制。 |
校验和(Checksum) | 16 | 用于检查是否出现错误。将 TCP 头部 和 TCP 数据计算所得,由发送方计算和存储,并由接收方校验。 |
紧急指针 | 16 | 只有当 TCP Flags 中的 URG 为 1 时候有效。表示应急处理的数据位置。 |
可选字段 | 可变长度 | 出了上面的固定字段之外,还可以添加可选字段,但除了连接操作之外,很少使用可选字段。这部分最多 40 字节,TCP头部最长 60 个字节。 |
RST 标志位出现的情况
在某些特殊的条件下,TCP 连接的一端会向另一端发送携带 RST 标志的报文段,即复位报文段,以通知对方关闭连接或者重新建立连接。
- 访问不存在的端口。或者该端口正被处于 TIME_WAIT 状态的连接占用时,发送端会收到复位报文段。
- 异常终止连接。数据交换完成之后,一方给另一方发送结束报文段,这是正常终止连接的方式。TCP 还提供了异常终止一个连接的方法,即给对方发送一个复位报文段,一旦发送了这个复位报文段,发送端所有排队等待发送的数据都将被丢弃。应用程序可以使用选项 SO_LINGER 来发送复位报文段,以异常终止一个连接。
- 半打开连接。服务器关闭或者异常终止了连接,而客户端没有接收到结束报文段(如发生了网络故障),此时客户端还维持着原来的链接,而服务器重启,也已经丢失了该连接的任何信息了。这种状态称为半打开状态。如果此时客户端往处于半打开状态的连接写入数据,则对方将回应一个复位报文段。
RST 标志位举例
在理想情况下,每一个连接都会以 TCP 终止来正常结束。但在现实中,连接经常会断掉。举例来说,这可能是由于一个潜在的攻击者正在进行端口扫描,或者仅仅是主机配置错误所导致的。在这些情况下,就需要使用设置了 RST 标志的 TCP 的数据包。RST 标志来表示连接被异常终止,或拒绝连接请求。
如下图,此时 192.168.100.138 正在请求目标 ip 192.168.100.1的 80 端口,但因为 192.168.100.1 此时并没有监听 80 端口,因此回复了 ACK/RST 报文,此时 RST 表示拒绝连接请求 :
同时从上图中可以看到 RST 报文的 Win = 0,即滑动窗口大小为 0,告知接收复位报文段的一端应该关闭连接或者重新连接,而不能回应这个复位报文段。
扩展
SYN 为 1 表示进行连接,这是因为将SYN 设为 1 并告知初始序号这一操作仅在连接过程中出现,因此发送SYN 为 1 的网络包就表示发起连接的意思。实际上,SYN 是 Synchronize(同步)的缩写,意思是通过告知初始序号使通信双方保持步调一致,以便完成后续的数据收发检查,这才是 SYN 原本的含义。