IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 以太网帧格式 IP数据报格式 TCP数据报格式 MTU MSS -> 正文阅读

[网络协议]以太网帧格式 IP数据报格式 TCP数据报格式 MTU MSS

一、以太网帧格式

下图摘自《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。

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-19 12:24:57  更:2021-08-19 12:26:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 20:16:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码