当前位置:网站首页>IP数据包的格式(1)
IP数据包的格式(1)
2022-08-03 05:26:00 【_RELIFE】
IP数据包结构图

(引用千锋教育)
IP包头长度可变,20-60字节。
1、版本: 告诉大家使用的是ipv4还是ipv6? (这四位是0100或0110)
2、首部长度:告诉接收端IP包头长度,别多收少收。
(注意:数据帧前14字节是二层帧头,故从14往后根据首部长度就可以直到三层IP包头的长度)
3、优先级与服务类型(QOS与TOS): 前3bit是优先级,服务类型是4bit,最后留一个bit不用,扩展开发使用。 比如公司分公司之间跨城市连接专线,给专业运营商交点钱,让网速快很多。
4、总长度: 数据帧由2层帧头,3层ip包头,四层tcp/udp包头,五层数据,2层帧尾组成
首部长度指的是3层ip包头的长度,而总长度是3,4,5层加起来。
5、分片:

举个例子,这个是数据帧中三四五层内容,比如五层待发数据为4000字节,其他两个为20字节,
假如每个ip数据包最多容纳1500个字节,那上面这个情况肯定要分片,如何分呢?下面解释。
直观来看,1500是上限,那4000字节肯定要分3份。
把20字节的IP包头拿出来复制3份,把TCP/IP包头和data放一起,变成了4020字节。(下图)
注意,TCP/UDP层为什么不拿出复制,因为主要起导航作用的是3层IP包头,故TCP/UDP安全到终点即可。

接下来开始组合,如下图

这样就组合完成了!
注意,只是单纯从字节角度分析分片,后面还会提到标志位和偏移量。
6、段偏移量和标识位
还是刚刚的图,我加上偏移量

7、标志位(3位): 第一位没有启用,统一是0,第二位0表示分片了,1表示未分片,
第三位为1表示还有后续分片,自己不是最后一个。
8、TTL(time to live): 也是转为10进制来算,100以上基本是windows主机,以下是linux
发送数据,每经过一个路由器TTL就减一,如果为0时,那就销毁该数据帧。
目的是防止无用数据包在网络上当垃圾。如果接收方无法接收数据或者出错,导致发送方找不到,那不能让该数据帧永远游荡在网络上,故TTL归零时就销毁。
9、协议号:如果是6往TCP走,17往UDP走,1是往同层ICMP协议走
看下图,数据从下到上所经过的协议:

该图表示下层为上层服务的简单结构图,数据链路层中MAC子层协议包含了IP和ARP两种类型,在
MAC帧中的(类型)一栏通过类型号来进行选择。(0x0800走IP协议,0x0806走ARP协议)
网络层中IP协议中也包含了去往TCP和UDP的途径,协议号6走TCP,17走UDP,1走ICMP。
10、首部校验和: 和帧尾FCS类似,FCS用于校验整个帧,而这里主要校验IP数据包的(20-60字节)
11、源地址和目的地址: 32位大小,比如10.1.1.1 ,每个10进制数字转换8个二进制位,共32位
补充:MAC地址48位,IP地址32位。即6字节和4字节
边栏推荐
猜你喜欢

ZEMAX | 探究 OpticStudio 偏振分析功能

3D游戏建模师在国内的真实现状,想转行,先来看看!

自监督论文阅读笔记 Multi-motion and Appearance Self-Supervised Moving Object Detection

What is parametric design, let's understand it through practical operation?| SOLIDWORKS How-To Videos

数组与字符串14-使用双指针移除元素

MATLAB自带的dwt2和wavedec2函数实现基于小波变换的自适应阈值图像边缘检测

数组与字符串12-数组拆分

pandoc -crossref插件实现markdwon文档转word后公式编号自定义

2021-03-22

C语言中打印字符数组出现乱码的问题(烫烫烫)
随机推荐
全球一流医疗技术公司如何最大程度提高设计工作效率 | SOLIDWORKS 产品探索
MySql【后面附有练习题】
申请公网ip后,配置光猫,路由器使用公网ip步骤
MCU接收串口字符型数据转换成数据型数据
二分查找2 - x的平方根
二分查找6 - 寻找峰值
三、final、finally、 finalize有什么不同?
什么是次世代建模,为什么这么多建模人在学习次世代建模流程
六、对比Vector、ArrayList、LinkedList有何区别?(设计、性能、安全)
cb板上常用的电子元器件都有哪些?
SolidWorks 操作视频 | 流体分析结果演示
ZEMAX | How to rotate any element around any point in space
2-php学习笔记之控制语句,函数
6. What is the difference between Vector, ArrayList and LinkedList?(design, performance, safety)
C语言中打印字符数组出现乱码的问题(烫烫烫)
window下VS2022封装静态库以及调用静态库
ZEMAX | 在OpticStudio中建立扩增实境(VR)头戴式显示器
在Maya和ZBrush中制作战士模型
数组与字符串14-使用双指针移除元素
A.1#【内存管理】——1.1.4 node: 初始化