IP数据包的格式(1)

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字节

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值