IP封包的封装 - 首部内容
IP 封包的封装
目前因特网社会的 IP 有两种版本,一种是目前使用最广泛的 IPv4 (Internet Protocol version 4, 因特网协定第四版), 一种则是预期未来会热门的 IPv6 。IPv4 记录的地址由于仅有 32 位,预计在 2020 年前后就会分发完毕,如此一来, 新兴国家或者是新的网络公司,将没有网络可以使用。为了避免这个问题发生,因此就有 IPv6 的产生。 IPv6 的地址可以达到 128 位,可以多出 2 的 96 次方倍的网址数量,这样的 IP 数量几乎用不完啦!虽然 IPv6
具有前瞻性,但目前主流媒体大多还是使用 IPv4 ,因此本文主要谈到的 IP 都指 IPv4 而言喔!(注13)
我们在前一小节谈到 MAC 的封装,那么 IP 封包的封装也得要来了解一下,才能知道 IP 到底是如何产生的啊! IP 封包可以达到 65535 bytes 这么大,在比 MAC 大的情况下,我们的操作系统会对 IP 进行拆解的动作。至于 IP 封装的表头数据绘制如下:(下图第一行为每个字段的 bit 数)
| 4 bits | 4 bits | 8 bits | 3 bits | 13 bits |
| Version | IHL | Type of Service | Total Length | |
| Identification | Flags | Fragmentation Offset | ||
| Time To Live | Protocol | Header Checksum | ||
| Source Address | ||||
| Destination Address | ||||
| Options | Padding | |||
| Data | ||||
图 2.3-1、IP 封包的表头资料
在上面的图示中有个地方要注意,那就是『每一行所占用的位数为 32 bits』, 各个表头的内容分别介绍如下:
- Version(版本)
宣告这个 IP 封包的版本,例如目前惯用的还是 IPv4 这个版本就在这里宣告。 - IHL(Internet Header Length, IP表头的长度)
告知这个 IP 封包的表头长度,使用的单位应该是字组 (word) ,一个字组为 4bytes 大小喔。 - Type of Service(服务类型)
这个项目的内容为『PPPDTRUU』,表示这个 IP 封包的服务类型,主要分为:
PPP:表示此 IP 封包的优先度,目前很少使用;
D:若为 0 表示一般延迟(delay),若为 1 表示为低延迟;
T:若为 0 表示为一般传输量 (throughput),若为 1 表示为高传输量;
R:若为 0 表示为一般可靠度(reliability),若为 1 表示高可靠度。
UU:保留尚未被使用。
举例来说,gigabit 以太网络的种种相关规格可以让这个 IP 封包加速且降低延迟,某些特殊的标志就是在这里说明的。 - Total Length(总长度)
指这个 IP 封包的总容量,包括表头与内容 (Data) 部分。最大可达 65535 bytes。 - Identification(辨别码)
我们前面提到 IP 袋子必须要放在 MAC 袋子当中。不过,如果 IP 袋子太大的话,就得先要将 IP 再重组成较小的袋子然后再放到 MAC 当中。而当 IP 被重组时,每个来自同一个 IP 的小袋子就得要有个标识符以告知接收端这些小袋子其实是来自同一个 IP 封包才行。 也就是说,假如 IP 封包其实是 65536 那么大 (前一个 Total Length 有规定), 那么这个 IP 就得要再被分成更小的 IP 分段后才能塞进 MAC 讯框中。那么每个小 IP 分段是否来自同一个 IP 资料,呵呵!那就是这个标识符的功用啦! - Flags(特殊旗标)
这个地方的内容为『0DM』,其意义为:
D:若为 0 表示可以分段,若为 1 表示不可分段
M:若为 0 表示此 IP 为最后分段,若为 1 表示非最后分段。 - Fragment Offset(分段偏移)
表示目前这个 IP 分段在原始的 IP 封包中所占的位置。就有点像是序号啦,有这个序号才能将所有的小 IP 分段组合成为原本的 IP 封包大小嘛!透过 Total Length, Identification, Flags 以及这个 Fragment Offset 就能够将小 IP 分段在收受端组合起来啰! - Time To Live(TTL, 存活时间)
表示这个 IP 封包的存活时间,范围为 0-255。当这个 IP 封包通过一个路由器时, TTL 就会减一,当 TTL 为 0 时,这个封包将会被直接丢弃。说实在的,要让 IP 封包通过 255 个路由器,还挺难的~ ^_^ - Protocol Number(协定代码)
来自传输层与网络层本身的其他数据都是放置在 IP 封包当中的,我们可以在 IP 表头记载这个 IP 封包内的资料是啥, 在这个字段就是记载每种数据封包的内容啦!在这个字段记载的代码与相关的封包协议名称如下所示:IP 内的号码 封包协议名称(全名) 1 ICMP (Internet Control Message Protocol) 2 IGMP (Internet Group Management Protocol) 3 GGP (Gateway-to-Gateway Protocol) 4 IP (IP in IP encapsulation) 6 TCP (Transmission Control Protocol) 8 EGP (Exterior Gateway Protocol) 17 UDP (User Datagram Protocol) 当然啦,我们比较常见到的还是那个 TCP, UDP, ICMP 说!
- Header Checksum(表头检查码)
用来检查这个 IP 表头的错误检验之用。 - Source Address
还用讲吗?当然是来源的 IP 地址,从这里我们也知道 IP 是 32 位喔! - Destination Address
有来源还需要有目标才能传送,这里就是目标的 IP 地址。 - Options (其他参数)
这个是额外的功能,提供包括安全处理机制、路由纪录、时间戳、严格与宽松之来源路由等。 - Padding(补齐项目)
由于 Options 的内容不一定有多大,但是我们知道 IP 每个数据都必须要是 32 bits,所以,若 Options 的数据不足 32 bits 时,则由 padding 主动补齐。
你只要知道 IP 表头里面含有: TTL, Protocol, 来源地址与目标地址也就够了!而这个 IP 表头的来源与目标 IP ,以及那个判断通过多少路由器的 TTL ,就能了解到这个 IP 将被如何传送到目的端。
IP封包的封装 - 首部内容的更多相关文章
- ip封包
I P封包 從一直以來討論至今﹐我們都不斷地接觸到“封包”這個詞﹐相信您也很有興趣想知道這個“封包”究竟是個什麼樣的東東吧﹗下面就讓我們一起看看一個IP封包究竟包含了那些內容. 擷取IP封包 如果您的 ...
- XML真正强大的功能是来自其元素与封装的内容
创建文档类型声明 一般而言,XML声明放在文档顶部.在PHP中声明十分简单:只需实例化一个DOM文档类的对象并赋予它一个版本号.查看程序清单A: 程序清单 A <?php// create do ...
- logstash filter geoip 转换IP为详细地址等内容。
使用logstash geoip筛选器可以将ip地址解析为更丰富的内容. 结果类似于这样: "geoip": { "city_name": "Ürüm ...
- IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式
IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个 ...
- 以太网帧,IP,TCP,UDP首部结构
1.以太网帧的格式 以太网封装格式 2.IP报头格式 IP是TCP/IP协议簇中最为重要的协议.所有的TCP,UDP, ICMP和IGMP数据都以IP数据报格式传输.IP提供的是不可靠.无连接的协议. ...
- TCP/IP详解--TCP首部选项中时间戳选项
一.简介 TCP时间戳选项会在TCP包头增加12个字节,以一种比重发超时更精确的方法来启用对RTT 的计算. 二.作用 ) TCP时间戳位于TCP选项中,kind=:lenth=:data由tim ...
- TCP/IP具体解释--TCP首部的TimeStamp时间戳选项
TCP应该是以太网协议族中被应用最为广泛的协议之中的一个,这里就聊一聊TCP协议中的TimeStamp选项.这个选项是由RFC 1323引入的,该C建议提交于1992年.到今天已经足足有20个年头.只 ...
- TCP/IP协议栈与数据报封装 (802.3 Ethernet 以太网 802.11 WLAN 无线网 )
http://blog.csdn.net/jnu_simba/article/details/8957242 一.ISO/OSI参考模型 OSI(open system interconnection ...
- TCP/IP协议栈与数据报封装
一.ISO/OSI参考模型 OSI(open system interconnection)开放系统互联模型是由ISO(International Organization for Standardi ...
随机推荐
- EBS开发之环境迁移
(一)环境迁移说明 1.1 迁移 由于EBS系统开发复杂,一般项目实施都是使用三套或者三套以上的系统,一套作为开发使用系统,一套作为集成测试系统,一套就是企业用的正式环境系统,在项目实施过程中对一 ...
- [lua]写个简单的Lua拓展-sleep函数
这几天在做一个小项目,其中用到了一些基本的API, 例如sleep,获取当前目录等等,lua标准库中没有提供这些接口,虽然所第三方库中也都有实现,但是要用的就那么几个函数,在一个嵌入式系统中安装那么多 ...
- Android使用局和数据实现天气项目-android学习之旅(十二)
1.首先注册聚合数据账号,下载相应的sdk 2.导入jar包和 so文件 配置Application,初始化sdk <application //自己新建的application类 androi ...
- linux常用的内核镜像格式
linux常用的内核镜像格式 Linux内核有多种格式的镜像,包括vmlinux.Image.zImage等. 1. Linux内核镜像格式 1.1 vmlinux vmlinuz是可引导的. ...
- Android初级教程使用服务注册广播接收者监听手机解锁屏变化
之前第七章广播与服务理论篇写到: 特殊的广播接收者(一般发广播次数频率很高) 安卓中有一些广播接收者,必须使用代码注册,清单文件注册是无效的 屏幕锁屏和解锁 电量改变 今天在这里就回顾一下,且用代码方 ...
- UI设计--大象无形
UI设计,大象无形 UI设计,如同优雅的艺术品一样,优秀的UI设计也可以大象无形,大象无形的意思是有意化无意.大象化无形!就是不要显刻意,不要过分的主张,要兼容百态.无形态无框架才能容纳一切形体! ...
- Handler,MessageQueue Loop 和Message的原理解析
先介绍和handler一起工作的几个组件 Handler的方法介绍 代码示例 package liu.peng.weather; import java.util.Timer; import java ...
- (NO.00004)iOS实现打砖块游戏(三):游戏主场景和砖块
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 制作墙体 首先在SpriteBuilder中新建Wall.ccb ...
- VS2010创建和调用动态链接库
当我们开发一个产品的时候,我们并不想把源码公布给对方,除了给对方提供exe可执行文件外,我们还可以生成动态链接库,供程序调用,方便二次开发. 下面我将简单梳理一下如何创建和调用动态链接库,方便大家程序 ...
- android下在屏幕适配小总结
为什么要屏幕适配?为此我就不说了,网上处理方法要么让你用几套不同分辨率的图片,要么写几套布局文件,要么就是在xml中写dip(这个还是可以的),前面两种感觉过程工作量太大了,由加载大图片的优化思想 同 ...