以太网帧格式 IP数据报格式 TCP数据报格式 MTU MSS

本文详细介绍了网络通信中的以太网帧格式,包括最小和最大尺寸,以及填充规则。接着讨论了IP数据报的结构,如版本号、头部长度、服务类型、总长度等。此外,还阐述了TCP数据报的组成部分,如序号、确认号、标志位、窗口大小和校验和。最后,解释了MTU(最大传输单元)和MSS(最大段大小)在网络传输中的作用和它们之间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、以太网帧格式

下图摘自《TCP IP详解卷1:协议(第2版)》第3.2.2节以太网帧格式。
以太网(IEEE 802.3)帧格式
以太网帧有最小和最大尺寸。最小的帧是64字节,要求数据区(有效载荷)长度(无标签)最小为48字节。当有效载荷较小时,填充字节(值为0)被添加到有效载荷尾部,以确保达到最小长度。

传统以太网的最大帧长度是1518字节(包括4字节CRC和14字节头部)。选择这个值出于一种折中:如果一个帧中包括一个错误(接收到不正确的CRC校验),只需重发1.5kB以修复该问题。另一方面,MTU大小限制为1500字节。为了发送一个更大的消息,则需要多个帧(例如,对于TCP/IP网络常用的较大尺寸64KB,需要至少44个帧,64*1024/1500向上取整)。

二、IP数据报格式

IP数据报格式
IP数据报格式

  • 4位版本号(version)指定IP协议的版本。对IPv4来说其值是4.
  • 4位头部长度(header length)表示该IP头部有多少个32bit(4字节)。4位最大15,所以IP头部最长60字节。
  • 8位服务类型(Type Of Service, TOS)包括一个三位的优先权字段(现在已经被忽略),4位的TOS字段和1位保留字段(必须置0)。4位TOS字段分别表示:最小延时,最大吞吐量,最高可靠性和最小费用。最多有一个能置1。
  • 16位总长度是指整个IP数据报的长度,以字节为单位,因此IP数据报最大长度是65535字节。由于MTU限制,超过MTU的数据报会被分片传输。
  • 16位标识唯一标识主机发送的每一个数据报,同一个数据报的所有分片都具有相同的标识值。
  • 3位标识字段第一位保留。第二位(Don’t Fragment,DF)表示“禁止分片”。第三位(More Fragment,MF)表示“更多分片”,除了数据报的最后一个分片外,其它分片都要把它置1。
  • 13位分片偏移是分片相对于原始IP数据开始处(仅指数据部分)的偏移。实际的偏移值是该值左移3位(乘8)后得到的。由于这个原因,除了最后一个IP分片外,每个IP分片的数据部分的长度必须是8的整数倍。
  • 8位生存时间(time to live,TTL)使用“跳数“作为TTL的单位。数据报每经历一个路由器时对应的TTL值就会减 1 ,防止数据报发送在路由器中出现环路,因为数据报在传送的过程中要占用一定的带宽(TTL值为零时路由器将自动丢弃该数据包并向源端发送一个ICMP差错报文)。
  • 8位协议用来区分上层协议。ICMP是1,TCP是6,UDP是17。
  • 16位头部校验和由发送端填充,接收端对其IP头部使用CRC进行循环冗余检验。
  • IPv4最后一个选项字段是可变长的可选信息,最多40字节。包括记录路由、时间戳、松散源路由选择和严格源路由选择。

三、TCP数据报格式

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。

客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。

下面为TCP数据报的结构:
TCP数据报结构
TCP数据报结构.jpg

  • 序号:Seq(Sequence Number)序号占32位,用来标识从计算机A发送到计算机B的数据包的序号,计算机发送数据时对此进行标记。
  • 确认号:Ack(Acknowledge Number)确认号占32位,客户端和服务器端都可以发送,Ack = Seq + 1。
  • 首部长度/数据偏移:4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。
  • 标志位:每个标志位占用1Bit,共有6个,分别为 URG、ACK、PSH、RST、SYN、FIN,具体含义如下:
    • URG:紧急指针(urgent pointer)有效。
    • ACK:表示确认号Ack有效。
    • PSH:表示有 DATA数据传输,接收方应该尽快将这个报文交给应用层。
    • RST:重置连接。
    • SYN:建立一个新连接。
    • FIN:断开一个连接。
  • 窗口:滑动窗口RWND16位滑动窗口大小,代表其socket接收缓冲区大小的字节数,最大65535。
  • 校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。
  • 紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和32位序号字段中的值相加表示紧急数据的下一字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
  • 选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。
  • 数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

对标志位英文字母缩写的总结:Seq 是 Sequence 的缩写,表示序列;Ack(ACK) 是 Acknowledge 的缩写,表示确认;SYN 是 Synchronous 的缩写,愿意是“同步的”,这里表示建立同步连接;FIN 是 Finish 的缩写,表示完成。

四、MTU MSS

传统上,以太网的有效载荷一直是1500字节,它代表以太网的MTU。
目前,大多数系统为以太网使用1500字节的MTU,虽然在必要时它也可设置为一个较小的值。
有效载荷有时被填充(添加)数个0,以确保帧总体长度符合最小长度要求。

  • MTU: Maximum Transmit Unit,最大传输单元。即物理接口(数据链路层)提供给其上层(通常是IP层)最大一次传输数据的大小;以普遍使用的以太网接口为例,缺省MTU=1500 Byte,这是以太网接口对IP层的约束,如果IP层有<=1500 byte 需要发送,只需要一个IP包就可以完成发送任务;如果IP层有> 1500 byte 数据需要发送,需要分片才能完成发送,这些分片有一个共同点,即IP Header ID相同。

  • MSS:Maximum Segment Size ,最大段大小。TCP提交给IP层最大分段大小,不包含TCP Header和 TCP Option,只包含TCP Payload(有效负载),MSS是TCP用来限制application层最大的发送字节数。如果底层物理接口MTU= 1500 byte,则 MSS = 1500- 20(IP Header) -20 (TCP Header) = 1460 byte,如果application 有2000 byte发送,需要两个segment才可以完成发送,第一个TCP segment = 1460,第二个TCP segment = 540。

<think>嗯,用户想了解TCP/IP协议的基础知识和重要概念。首先,我需要回忆一下TCP/IP的基本结构。记得TCP/IP分为四层:应用层、传输层、网络层和链路层,这和OSI模型不同。用户可能对分层结构不太清楚,需要详细解释每一层的功能。例如,应用层负责HTTP、FTP这些协议,传输层有TCP和UDP,网络层主要是IP协议,链路层处理物理连接。 接下来,用户可能想知道TCP和UDP的区别。这里需要强调TCP是面向连接的,提供可靠传输,而UDP是无连接的,速度快但不可靠。比如三次握手和四次挥手的过程,以及为什么需要这些步骤来确保连接的可靠性。另外,用户可能对IP分片和TCP分段有疑问,特别是为什么TCP不会导致IP分片,而UDP会。根据引用4的内容,TCP自己处理分段,MSS的设置避免了分片,而UDP则可能因为数据包过大导致IP层分片,这时候重组只能在目的地进行,且一旦分片丢失需要整个重传。 然后,用户可能关心一些重要概念,比如IP地址、子网划分、路由选择、端口号等。这些是TCP/IP通信的基础。此外,DNS的作用也很重要,因为它将域名转换为IP地址,方便用户访问网络资源。 用户的问题中还提到了参考引用,需要适当引用相关内容。例如,引用3详细解释了三次握手和四次挥手,可以在这里引用。引用4讨论了TCP和UDP在分片处理上的不同,也需要提到。 另外,用户可能希望了解如何学习TCP/IP协议。引用1提到分层次学习和理论与实践结合,这部分可以作为学习方法的建议,帮助用户更有效地掌握知识。 还需要注意用户可能存在的误区,比如认为TCP/IP和OSI模型是一样的,但实际上它们的层次结构和设计理念不同,如引用2所述,OSI注重功能,而TCP/IP强调实现。 最后,生成的相关问题需要覆盖用户可能进一步探索的方向,比如分层结构的意义、TCP三次握手的重要性、IP地址和子网掩码的作用、TCP和UDP的应用场景,以及如何有效学习这些知识。这些问题可以帮助用户深化理解,并引导他们继续学习相关主题。</think>### TCP/IP协议基础知识与核心概念解析 #### 一、协议分层模型 TCP/IP协议采用**四层架构**,与OSI七层模型形成对比: 1. **应用层**(HTTP/FTP/DNS):直接面向用户,提供文件传输、网页访问等服务。例如通过$HTTP$协议访问网页时,浏览器与应用层交互[^3]。 2. **传输层**(TCP/UDP):实现端到端通信控制。TCP提供可靠传输,使用$SEQ=1000$的序列号标记数据包;UDP适用于实时音视频传输[^4]。 3. **网络层**(IP/ICMP):负责路由选择与寻址,核心协议IP使用$IPv4=192.168.1.1$或$IPv6=2001:db8::1$地址格式。 4. **链路层**(以太网/Wi-Fi):处理物理网络接入,MAC地址格式为$MAC=00:1A:2B:3C:4D:5E$。 $$ \text{数据封装流程:应用层数据} \rightarrow \text{TCP/UDP头部} \rightarrow \text{IP头部} \rightarrow \text{尾} $$ #### 二、核心工作机制 1. **TCP三次握手**(可靠连接建立): - SYN=1, SEQ=x → SYN-ACK=1, ACK=x+1, SEQ=y → ACK=y+1 - 通过序列号协商防止历史连接混淆[^3] 2. **滑动窗口协议**: - 窗口大小$W=min(rwnd,cwnd)$动态调整 - 通过$ACK=5001$确认已接收0-5000字节 3. **IP分片与TCP分段**: - TCP通过MSS(最大报文段长度)避免IP分片,计算公式: $$ MSS = MTU - IP_{header} - TCP_{header} $$ - UDP可能触发IP分片,若分片丢失需重传整个数据报[^4] #### 三、关键参数对照表 | 参数 | TCP | UDP | |-------------|----------------------|------------------| | 连接方式 | 面向连接 | 无连接 | | 可靠性 | 确认重传机制 | 尽力交付 | | 首部开销 | 20字节(基础) | 8字节 | | 适用场景 | 文件传输/网页浏览 | 视频会议/DNS查询 | #### 四、学习实践建议 1. 使用Wireshark抓包分析三次握手过程[^1] 2. 通过`ping`命令验证网络连通性(ICMP协议) 3. 配置路由器观察NAT地址转换 4. 编写Socket程序体验协议差异(Python示例): ```python # TCP客户端示例 import socket s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('www.example.com', 80)) s.send(b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n') print(s.recv(4096)) ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值