1. TCP

2019-08-29  本文已影响0人  不要必应

1. TCP

1.1 概念

1.2 TCP 报文头

TCP 报文头

1.3 TCP 报文头字段含义

1. Source Port和Destination Port:

分别占用16位,表示源端口号和目的端口号,用于区别主机中的不同进程, 而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一 的确定一个TCP连接。

2. Sequence Number:

用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据 字节在数据流中的序号;主要用来解决网络报文乱序的问题。

3. Acknowledgment Number:

32位确认序列号包含发送确认的一端所期望收到的下一个序号,因此,确认序号应 当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字 段才有效。主要用来解决不丢包的问题。

4. Offset:

给出首部中32 bit字的数目,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能 表示15个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。然而,没有任选字段, 正常的长度是20字节。

5. TCP Flags:

TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次 为URG,ACK,PSH,RST,SYN,FIN。每个标志位的意思如下:

6. Window:

滑动窗口大小 (流量控制)。

7. 校验和:

奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。

8. 紧急指针:

只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

9. 选项和填充:

最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

10. 数据部分:

TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

2. 三次握手

2.1 原因

为什么需要三次握手:

2.2 概念

所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。

2.3 三次握手的流程图

三次握手的流程图

2.4 流程图的解释

2.5 安全隐患

2.5.1 首次握手 —— SYN 超时

在 Server 收到 Client 的 SYN 之后,回复 SYN-ACK 的时候未收到 ACK 确认,导致服务端不断重试,直到超时。

2.5.2 SYN Flood 攻击

恶意程序会在短时间对服务器不断发起建立连接请求,但不响应服务器请求,导致服务器不断重发,占用资源,导致崩溃。

2.5.3 应对 SYN Flood 攻击的方式

2.6 建立连接后,Client 故障

2.6.1 保活机制

向 Client 发送探测报文,如果未收到响应则继续发送,直到收到响应或达到保活探测数时,中断连接。

3. 四次挥手

3.1 原因

由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。

3.2 概念

四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。

3.3 四次挥手流程图

四次挥手流程图

3.4 为什么客户端发送完最后一个 ACK 包之后还需要 TIME-WAIT

3.5 服务器出现大量 CLOSE-WAIT 状态的原因

客户端关闭 socket 连接,服务端忙于处理读或写,没有及时关闭连接

4. TCP 滑动窗口

4.0 必知必会

RTT

发送数据包到收到对应的 ACK,中间所花费的时间

RTO

重传时间间隔(经过 RTT 计算得到)

4.1 滑动窗口的作用

TCP 使用滑动窗口做流量控制和乱序重排

上一篇下一篇

猜你喜欢

热点阅读