TCP 报文段结构
TCP(传输控制协议)报文段是 TCP 协议用于在网络中传输数据的基本单元。下面是对 TCP 报文段各字段的详细解释:
- 源端口(16位):发送方进程的端口号,用于标识发送数据的来源。
- 目标端口(16位):接收端进程的端口号,用于标识数据应该被哪个进程接收。
- 序号(32位):发送端为每个字节进行编号,从0或某个随机值(称为初始序列号,ISN)开始,用于接收端正确重组数据。
- 确认号(32位):用于接收端确认已接收到的数据段,并告诉发送端下一个期望接收的数据字节的序号。
- 首部长度(4位):表示 TCP 报文段首部的长度,以 32 位字(4 字节)为单位。
- 保留(若干位):为未来使用而保留。
- URG、ACK、PSH、RST、SYN、FIN(各1位):TCP 的控制标志位,分别用于指示紧急数据、确认、推送、重置连接、同步和断开连接。
- 窗口大小(16位):表示接收端当前可用的接收缓冲区大小,用于实现流量控制。
- 校验和(16位):用于校验 TCP 报文段在传输过程中是否发生错误。
- 紧急指针(16位):当 URG 标志位为 1 时,该字段指出紧急数据在 TCP 数据中的位置。
TCP 连接建立与断开
三次握手
- SYN:客户端发送 SYN 报文段(SYN=1,seq=x),请求建立连接。
- SYN+ACK:服务器回复 SYN+ACK 报文段(SYN=1,ACK=1,ack=x+1,seq=y),确认收到 SYN 报文段,并请求建立连接。
- ACK:客户端回复 ACK 报文段(ACK=1,ack=y+1,seq=x+1),确认收到 SYN+ACK 报文段,连接建立成功。
四次挥手
- FIN/ACK:客户端发送 FIN 报文段(FIN=1,ACK=1,seq=u,ack=v),请求断开连接。
- ACK:服务器回复 ACK 报文段(ACK=1,ack=u+1,seq=v),确认收到 FIN 报文段。
- FIN/ACK:服务器发送 FIN 报文段(FIN=1,ACK=1,seq=w,ack=u+1),请求断开连接。
- ACK:客户端回复 ACK 报文段(ACK=1,ack=w+1,seq=u+1),确认收到 FIN 报文段,连接断开。
TCP 报文段
除了之前提到的字段外,还有一些其他的字段可以包含在 TCP 报文段中,但它们并不是每个报文段都必需的。
- 选项(Options):TCP 选项字段用于包含额外的信息,如窗口缩放(Window Scale)、时间戳(Timestamps)等。这些选项是可选的,并且可以根据需要进行扩展。
- 紧急数据指针(Urgent Pointer):当 URG 标志位被设置时,紧急数据指针字段指示了紧急数据在 TCP 数据部分中的位置。
TCP 连接建立与断开
在 TCP 的三次握手和四次挥手过程中,还有一些细节值得注意:
- 三次握手的目的:通过三次握手,客户端和服务器可以确保彼此都准备好进行数据传输,并确定双方的初始序列号。
- 四次挥手的原因:TCP 是一个全双工协议,因此客户端和服务器都可以同时发送和接收数据。四次挥手确保双方都可以关闭自己的发送和接收通道,从而完全断开连接。
TCP(传输控制协议)
- 特点:
- 面向连接:通过三次握手建立连接,通过四次挥手关闭连接。
- 可靠性:通过序列号、确认应答、重传控制等机制保证数据传输的可靠性。
- 流量控制:使用滑动窗口机制防止发送方发送速度过快。
- 拥塞控制:包括慢启动、拥塞避免、快重传和快恢复等算法,避免网络拥塞。
- 字节流服务:TCP将数据视为字节流,而不是独立的报文。
- 应用场景:
- Web浏览(HTTP协议使用TCP)。
- 电子邮件(SMTP、POP3等协议使用TCP)。
- 文件传输(FTP协议使用TCP)。
- 远程登录(SSH协议使用TCP)。
- 即时通讯(如QQ、微信使用TCP)。
常用端口
- FTP(21):文件传输协议的控制端口。
- TELNET(23):远程登录协议,用于远程控制管理目标主机。
- SMTP(25):简单邮件传输协议,用于发送邮件。
- HTTP(80):超文本传输协议,用于网页浏览。
- POP3(110):邮局协议版本3,用于接收邮件。
- SSH(未指定):安全外壳协议,用于加密远程登录会话。
- IMAP4(未指定):交互式邮件访问协议第4版,用于邮件访问。
UDP 报文首部格式
UDP(用户数据报协议)报文首部相对简单,包括以下字段:
- 源端口号(16位):发送方进程的端口号。
- 目标端口号(16位):接收端进程的端口号。
- UDP 长度(16位):表示 UDP 报文首部和数据的总长度。
- UDP 校验和(16位):用于校验 UDP 报文在传输过程中是否发生错误。
UDP 报文首部格式
UDP 报文首部相对简单,但也有一些需要注意的地方:
- UDP 长度:这个字段表示的是整个 UDP 数据报(包括 UDP 首部和数据)的长度,以字节为单位。
- UDP 校验和:这是一个可选的字段,用于提供数据的完整性检查。如果发送方计算了校验和并将其包含在 UDP 数据报中,那么接收方可以使用相同的算法重新计算校验和,以检查数据在传输过程中是否发生了更改。
UDP(用户数据报协议)
- 特点:
- 无连接:发送数据前不需要建立连接,发送结束后也没有连接可以释放。
- 不可靠:不保证数据传输的可靠性和顺序性,没有确认应答和重传机制。
- 面向数据报:每次发送的数据都是一个独立的数据报。
- 应用场景:
- 实时音视频传输(如直播、视频会议)。
- DNS域名解析。
- 网络游戏(对实时性要求高,但对数据可靠性要求相对较低)。
访问控制列表(ACL)
ACL 可以基于多种条件来过滤网络流量,包括但不限于:
- 功能:
- 根据设定的条件对接口上的数据包进行过滤,允许其通过或丢弃。
- 广泛应用于路由器和三层交换机,用于控制用户对网络的访问,保障网络安全。
- 匹配规则:
- 基于源IP地址、目的IP地址、端口号、协议类型等条件进行匹配。
- 顺序匹配:一旦数据包匹配到某条规则,后续的规则将不再进行匹配。
- 类型:
- 静态ACL:规则是固定不变的,需要管理员手动进行配置。
- 动态ACL:可以根据网络环境的变化自动更新规则,以适应实时的网络安全需求。
- 应用场景:
- 限制网络流量、提高网络性能。
- 提供对通信流量的控制手段。
- 提供网络访问的基本安全手段。
- 在网络设备接口处,决定哪种类型的通信流量被转发、哪种类型的通信流量被阻塞。
其他补充
- TCP 的流量控制:TCP 通过滑动窗口机制来实现流量控制。接收端会告诉发送端自己当前可用的接收缓冲区大小(即窗口大小),发送端则根据这个窗口大小来限制发送的数据量。
- TCP 的拥塞控制:TCP 还实现了一套拥塞控制机制,以防止网络中的拥塞。这包括慢启动、拥塞避免、快重传和快恢复等算法。
- UDP 的无连接特性:与 TCP 不同,UDP 是一种无连接的协议。这意味着 UDP 不需要建立连接就可以直接发送数据。因此,UDP 通常用于那些对实时性要求较高,但对数据完整性和顺序性要求不高的应用程序,如音频和视频流。