TCP IP 各层的各个协议的状态都包含什么内容,是否有扩展字段

48 阅读12分钟

要理解TCP/IP各层协议的“状态”本质,首先需要明确核心概念:协议的“状态”是协议在执行过程中,为了实现可靠通信、数据处理或资源管理而维护的“动态信息集合”,其本质是计算机内存中的数据结构资源(如结构体、变量、链表等)。这些状态记录了协议交互的上下文,确保通信按规则有序进行。

TCP/IP模型通常简化为四层模型(应用层、传输层、网络层、网络接口层),各层协议的状态资源因功能不同而存在显著差异。以下按层级拆解,详解核心协议的状态资源及包含内容。

一、网络接口层(数据链路层+物理层)

该层负责物理介质访问和相邻设备间的帧传输,协议状态以“链路连接”和“硬件配置”为核心,状态资源通常由操作系统内核或网卡驱动维护。

核心协议及状态资源

1. 以太网(Ethernet)协议

以太网是最常用的局域网协议,其状态资源聚焦于“链路连通性”和“地址映射”。

  • 状态资源类型:内存中的MAC地址表、链路状态标志位、帧发送/接收计数器。
  • 包含内容
    • MAC地址表:记录局域网内设备IP地址与MAC地址的映射关系(用于ARP协议解析),通常由交换机维护,包含“IP地址、MAC地址、端口号、老化时间”等字段。
    • 链路状态:标志当前物理链路是否连通(如“up”/“down”),由网卡通过物理信号检测(如链路脉冲)更新。
    • 帧统计:发送/接收成功的帧数、错误帧数(如CRC校验失败、帧长异常)、丢弃帧数等,用于故障排查。
2. ARP(地址解析协议)

ARP负责将网络层的IP地址转换为数据链路层的MAC地址,其状态资源是“ARP缓存表”。

  • 状态资源类型:内存中的缓存表(键值对结构)。
  • 包含内容
    • 目标IP地址:需要解析的网络层地址。
    • 目标MAC地址:对应的链路层地址。
    • 接口:关联的网络接口(如eth0)。
    • 老化时间:缓存条目有效期(通常10-20分钟),过期后自动删除以避免失效信息干扰。

二、网络层:负责跨网络的数据包路由与转发

该层核心是“路由选择”和“IP数据包交付”,协议状态资源聚焦于“路由信息”和“数据包生命周期”。

核心协议及状态资源

1. IP(互联网协议)

IP是网络层的核心,提供无连接的数据包传输服务,其状态资源相对简单(无连接协议无“会话状态”),主要是“IP配置信息”和“分片重组缓存”。

  • 状态资源类型:系统网络配置结构体、分片缓存队列。
  • 包含内容
    • 本地IP配置:本机IP地址、子网掩码、默认网关、DNS服务器地址等(静态配置或DHCP动态获取)。
    • 数据包分片信息:当数据包超过MTU(最大传输单元)时,IP会分片传输,接收端需重组。分片缓存记录“标识号(ID)、分片偏移量、总长度、已接收分片列表”等,重组完成后删除。
2. ICMP(互联网控制消息协议)

ICMP用于传递网络故障通知(如“目标不可达”)和测试消息(如ping),无持久化状态资源,仅在消息交互时维护临时上下文。

  • 状态资源类型:临时请求/响应映射表。
  • 包含内容
    • ping请求的“标识符(ID)、序列号(Sequence Number)”:用于匹配发送的echo请求和接收的echo响应,确保对应关系,请求处理完成后状态立即释放。
3. 路由协议(RIP/OSPF/BGP)

路由协议负责动态生成路由表,其状态资源是“路由表”和“协议邻居关系信息”。

  • 状态资源类型:内存中的路由表、邻居状态机、链路状态数据库(仅OSPF)。
  • 包含内容
    • 路由表:核心字段为“目标网络地址、子网掩码、下一跳IP、出接口、度量值(如跳数、带宽)、路由协议类型”,指导IP数据包转发路径。
    • 邻居状态(以OSPF为例):记录相邻路由器的状态(如“Down→Init→2-Way→ExStart→Exchange→Loading→Full”)、邻居IP、hello报文间隔、死亡时间等,确保邻居通信正常。
    • 链路状态数据库(OSPF):存储整个OSPF区域内的链路状态信息(如路由器端口、IP、带宽),用于计算最短路径生成路由表。

三、传输层:负责端到端的可靠数据传输

该层是TCP/IP协议栈中“状态最复杂”的层级,核心协议TCP是有状态协议(维护会话上下文),UDP是无状态协议(无会话状态)。

核心协议及状态资源

1. TCP(传输控制协议)

TCP提供可靠、有序、面向连接的传输服务,其状态资源是TCP连接控制块(TCP Control Block, TCB) —— 操作系统内核中维护的核心数据结构,每个TCP连接对应一个独立的TCB。

  • 状态资源类型:内核内存中的TCB结构体(关键资源,数量直接影响系统并发连接数)。
  • 包含内容(核心字段):
    类别具体内容
    连接标识本地IP、本地端口、对端IP、对端端口(四元组唯一标识一个TCP连接)
    连接状态处于TCP状态机的哪个阶段(如LISTEN、SYN_SENT、ESTABLISHED、FIN_WAIT_1等)
    序号与确认发送序号(Next Send Seq)、接收序号(Next Recv Seq)、确认号(Ack Num)
    窗口机制发送窗口大小、接收窗口大小、拥塞窗口大小(用于流量控制和拥塞控制)
    定时器重传定时器(超时重传未确认报文)、保活定时器(检测连接是否存活)
    数据缓存发送缓冲区(待发送的应用层数据)、接收缓冲区(已接收但未交付应用层的数据)
2. UDP(用户数据报协议)

UDP提供无连接、不可靠的传输服务,无持久化状态资源,仅在数据发送/接收时维护临时信息。

  • 状态资源类型:临时端口分配记录。
  • 包含内容
    • 本地临时端口:当应用层(如DNS客户端)发起UDP请求时,系统分配一个临时端口,请求完成后端口释放,无连接上下文留存。

四、应用层:提供具体的应用服务

应用层协议状态与业务场景强相关,核心是“会话上下文”和“用户/服务配置”,状态资源通常由应用程序进程维护。

核心协议及状态资源

1. HTTP/HTTPS(超文本传输协议)
  • HTTP 1.1(无状态基础):本身无会话状态,但为实现用户跟踪,引入“Cookie”和“Session”。
    • 状态资源类型:客户端Cookie缓存、服务端Session存储(内存/数据库)。
    • 包含内容
      • Cookie(客户端):存储“Session ID、用户登录状态、偏好设置”等,由服务端生成并返回,客户端下次请求时携带。
      • Session(服务端):与Cookie中的Session ID对应,记录“用户ID、登录时间、权限信息”等,超时未活动则销毁。
  • HTTP 2/3:支持“连接复用”,状态资源增加“流状态”(如流ID、流优先级、流关闭状态),维护单个TCP连接内的多流并发上下文。
2. DNS(域名系统协议)

DNS负责域名与IP地址的解析,状态资源是“DNS缓存”。

  • 状态资源类型:本地DNS缓存(操作系统/浏览器)、DNS服务器缓存。
  • 包含内容
    • 域名-IP映射:记录“域名、对应IP地址、记录类型(A/AAAA)、TTL(生存时间)”,TTL过期后缓存失效,需重新解析。
3. FTP(文件传输协议)

FTP是有状态协议,维护“控制连接”和“数据连接”的双重状态。

  • 状态资源类型:FTP服务器端的会话控制块。
  • 包含内容
    • 控制连接状态:用户登录状态(用户名、密码验证结果)、当前工作目录、传输模式(ASCII/binary)。
    • 数据连接信息:数据连接的端口号、连接状态(已建立/关闭)、传输进度(已传输字节数)。
4. SSH(安全外壳协议)

SSH用于远程登录,状态资源聚焦于“加密会话”和“连接上下文”。

  • 状态资源类型:SSH客户端/服务端的会话结构体。
  • 包含内容
    • 加密信息:会话密钥、加密算法(如AES)、身份认证状态(公钥/密码验证是否通过)。
    • 连接状态:终端模式(如窗口大小)、已执行的命令历史、端口转发配置(本地/远程转发规则)。

总结:TCP/IP各层协议状态的核心特征

层级状态核心关注点典型状态资源载体状态持续性
网络接口层链路连通性、地址映射MAC表、ARP缓存短期(老化失效)
网络层路由路径、数据包分片路由表、IP分片缓存动态更新
传输层端到端连接、数据可靠性TCP TCB、UDP临时端口TCP持久化,UDP临时
应用层业务会话、用户上下文Session、Cookie、DNS缓存按需维护(超时销毁)

简言之,协议状态的本质是**“通信上下文的内存快照”**,无状态协议(如UDP、IP)无需留存上下文,效率高但功能有限;有状态协议(如TCP、FTP)通过维护状态实现可靠、复杂的服务,但会消耗更多内存和CPU资源。

这些状态资源都有预留由扩展字段么?

在TCP/IP协议的各层协议中,很多都设有预留扩展字段,用于满足未来协议功能扩展等需求。以下是各层主要协议的相关情况:

  • 网络接口层:以以太网协议为例,其帧格式中一般没有专门为状态资源预留的扩展字段。以太网帧主要包含目的MAC地址、源MAC地址、类型/长度字段和数据字段等。但一些其他的链路层协议可能会有预留扩展字段,例如PPP协议(点对点协议),它有一个可选的网络控制协议(NCP)部分,可用于协商和配置网络层协议的相关参数,在一定程度上可以看作是一种扩展机制。(容器网络一般用不到这一层,在主机路由层解决问题)
  • 网络层
    • IP协议:IPv4报文中有一个4位的首部长度字段,它表示IP首部的长度,单位是4字节。这意味着IP首部最长可以达到60字节,而固定首部长度是20字节,那么剩下的40字节就是可选字段,用于实现一些扩展功能,如记录路由、时间戳等。此外,IP协议的服务类型字段中,有1位保留字段,为未来可能的扩展预留空间。IPv6则取消了首部长度字段,因为其首部长度是固定的40字节,同时把一些可选字段放到了扩展首部中,通过扩展首部来实现更多的功能,如分段、认证、加密等。
    • ICMP协议ICMP报文本身没有专门为状态资源预留的扩展字段,它的报文格式相对固定,主要包含类型、代码、校验和以及一些与具体功能相关的字段等,用于传递网络控制消息,如差错报告、网络诊断等。
  • 传输层
    • TCP协议:有6位保留字段,主要是为了以后扩展时使用,目前必须全部为0。此外,TCP首部中还有一个可选字段,用于支持一些额外的功能,如最大报文段长度(MSS)、窗口扩大因子、时间戳等。这个可选字段的长度可变,最多可以达到40字节,为TCP协议的功能扩展提供了空间。
    • UDP协议:UDP报文中没有专门的预留扩展字段。它的首部非常简单,只有源端口号、目的端口号、长度和校验和四个字段,总共8个字节,主要用于在应用程序之间进行简单的数据传输,不提供可靠传输等复杂功能,所以也没有预留扩展字段来支持额外的状态资源等功能。
  • 应用层:应用层协议众多,不同协议的情况差异较大。一些协议可能会有预留扩展字段或扩展机制,例如HTTP协议,在请求头和响应头中可以自定义一些字段来传递额外的信息,为协议的功能扩展提供了一定的灵活性。而另一些协议可能没有专门的预留扩展字段,其功能扩展通过其他方式实现,如FTP协议主要通过命令与响应机制来实现各种文件传输操作,没有明显的预留扩展字段用于状态资源等方面的扩展。

一个思路:基于各个协议层的状态中的扩展字段可以把 VNI 放进去

然后只需要在内核中把带有 VNI 的包转发到 vxlan vtep 基本就可以实现 k8s node 和 vxlan 内 pod 的全互联

关键是 tcp/ip 每一层的网络包 都带有 VNI 状态,然后就能下一层识别和重定向,最终只要到了 vxlan vtep 口,就能实现封包和转发。

比如,从 dns 层开始支持: 返回 pod 名对应的 dns 以及它所在的 VNI