博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IP报文格式学习笔记
阅读量:4067 次
发布时间:2019-05-25

本文共 1991 字,大约阅读时间需要 6 分钟。

由于记性不好的原因, 一直对报文格式的字段记的不是很牢固, 故花了一天时间学习IP报文格式, 第二天来总结. 过两天再继续学习TCP和UDP.

IP报文格式如下图所示(图片来源—百度百科):

 

版本(Version, 4bit):为4代表ipv4, 为6代表ipv6

报头长度(Header Length, 4bit):一般为5, 代表IP首部一共占用20个字节. (4*5)

服务类别(Type Of Service, 8bit):

报文长度(Length, 16bit):  IP首部+数据部分的总长度, 一般再加上以太头长度即为数据包的长度.

标识(Identification, 16bit): 用于在IP层对数据包进行分段的时候,标识数据包.

标志(IP Flags, 3bit): 0x80---保留字段, 0x40---不分段, 0x20---还有更多的分段

分段偏移(Fragment Offset, 13bit): 本数据包的数据在分段中的偏移(需要再乘以8).

生存时间(Time To Live, 8bit): 本数据包的TTL.

用户协议(Protocol, 8bit): 1---icmp, 2---igmp, 6---tcp, 17---udp, 89---ospf.

报头校验和(Header Checksum, 16bit): IP首部的校验和.

源IP地址(Source IP, 32bit): 源IP地址.

目的IP地址(Destination IP, 32bit): 目的IP地址.

 

 

问题点:

1.   IP层的分片和重组分别发生在什么时候?

IP分片发生在IP层,不仅源端主机会进行分片,中间的路由器也有可能分片,因为不同的网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU要小,路由器就可能对IP数据报再次进行分片。而分片数据的重组只会发生在目的端的IP层。

 

2.   IP分片和TCP分段有什么区别?

IP分片的原因是MTU, TCP分段的原因是MSS.

3.      IP协议对分片进行重组的时候, 是不是也要像TCP协议一样, 启动一个定时器, 等到3片都到齐?

启用定时器.但只是一个针对分片重组的定时器。如果定时器超时还没有收到完整的数据包,则直接将数据包丢弃.

注: 关于这个问题, 今天专门去分析了协议栈的源代码. lwIP中并没有在ip层启动定时器, 只是简单的回收最旧的ip分片组. linux内核(2.6.18)的协议栈中确实有在ip层对分片做了定时器处理. 注册了一个timer, 当过期的时候, 回调函数会调用从而收受内存. 在linux内核协议栈中, ip分片的默认超时时间为600秒. (ipfragment.c中有源代码ip4_frags.secret_interval = 10 * 60 * HZ;)

最近刚好在关注TI5, secret站队很强大. 不知道内核源代码开发者为什么要用secret_interval 这样的名字~~

4.   IP层会不会对错误的数据包进行重传?

IP层不会对丢弃或者错误的数据包进行重传,但是上层协议可能会提供重传机制(tcp).

 

5.    为什么要避免IP分片

IP层是没有超时重传机制,一旦分片中有一个数据包丢失就只能由上层协议重传整个数据包,效率低下

使用UDP开发的时候,我们需要在应用层去限制每个包的大小,一般不要超过1472字节(即以太网MTU—UDP首部—IP首部),来避免IP层的分片。TCP程序由于有MSS, TCP协议本身会避免IP分片,则不用考虑这些.

 

6.   TOS的作用是什么?

RFC 791中定义了TOS位的前三位为IP Precedence,划分成了8个优先级,即:IP优先级字段。可以应用于流分类,数值越大表示优先级越高。IP优先权与CoS相同,有8种服务(07)可以标记。在网络中实际部署的时候8个优先级是远远不够的,于是在RFC 2474中又对TOS进行了重新的定义。把前六位定义成DSCP差分服务代码点(Differentiated Services Code Point),后两位保留。(总结:该字段比较复杂,以后可以做为专题再研究).

 

分片攻击

  这种攻击的原理是:在IP的分片包中,所有的分片包用一个分片偏移字段标志分片包的顺序,但是,只有第一个分片包含有TCP端口号的信息。当IP分片包通过分组过滤防火墙时,防火墙只根据第一个分片包的Tcp信息判断是否允许通过,而其他后续的分片不作防火墙检测,直接让它们通过。

这样,攻击者就可以通过先发送第一个合法的IP分片,骗过防火墙的检测,接着封装了恶意数据的后续分片包就可以直接穿透防火墙,直接到达内部网络主机,从而威胁网络和主机的安全。

 

 

下面这张图对IP报文格式描述的更加清晰:

你可能感兴趣的文章
《数据库系统概论》 第三章 关系数据库标准语言SQL
查看>>
SQL语句(二)查询语句
查看>>
SQL语句(六) 自主存取控制
查看>>
《计算机网络》第五章 运输层 ——TCP和UDP 可靠传输原理 TCP流量控制 拥塞控制 连接管理
查看>>
堆排序完整版,含注释
查看>>
二叉树深度优先遍历和广度优先遍历
查看>>
生产者消费者模型,循环队列实现
查看>>
PostgreSQL代码分析,查询优化部分,process_duplicate_ors
查看>>
PostgreSQL代码分析,查询优化部分,canonicalize_qual
查看>>
PostgreSQL代码分析,查询优化部分,pull_ands()和pull_ors()
查看>>
ORACLE权限管理调研笔记
查看>>
移进规约冲突一例
查看>>
IA32时钟周期的一些内容
查看>>
SM2椭圆曲线公钥密码算法
查看>>
获得github工程中的一个文件夹的方法
查看>>
《PostgreSQL技术内幕:查询优化深度探索》养成记
查看>>
PostgreSQL查询优化器详解之逻辑优化篇
查看>>
STM32中assert_param的使用
查看>>
C语言中的 (void*)0 与 (void)0
查看>>
vu 是什么
查看>>