Chinaunix首页 | 论坛 | 博客
  • 博客访问: 829742
  • 博文数量: 290
  • 博客积分: 511
  • 博客等级: 下士
  • 技术积分: 1590
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-29 13:14
文章分类

全部博文(290)

文章存档

2018年(28)

2017年(19)

2016年(8)

2015年(1)

2014年(14)

2013年(12)

2012年(22)

2011年(186)

分类: LINUX

2016-11-13 17:21:53

本文的部分内容可能来源于网络,该内容归原作者所有,如果侵犯到您的权益,请及时通知我,我将立即删除,原创内容copylefttingkman@163.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。欢迎加入嵌入式交流群:3462094
本文原作者是tingkman 官方博客是 tingkman.blog.chinaunix.net,新浪微博:tingkman,添加可查看我的最新更新

本文主要介绍ip数据包的处理过程。
tcp ip协议分析1-网络报文帧进入tcp/ip协议栈初步处理流程2014-2-13中讲过网络报文帧进入tcp/ip协议
流程,在: 图1:网络数据包进入协议栈路径框图中,其实还少了一个路径那就是网卡驱动程序,它位于网卡和tcp/ip协议之间

ip数据报文处理流程是,
1、首先计算ip校验和,假如校验和正确,则开始对ip数据包进行分析。错误则丢弃。校验和正确后
2、开始判断ip数据报文的destination ip,就是目的ip,如图:ip数据报的格式如下:
上面这些字段实际上是网路报文帧中的一部分,如下图中,长方形框内的ip数据报。

前面将到,ip数据报首先,计算校验和,然后比较destination ip,当该destination ip和本地ip地址相同,或者和组播地址在一个组内,或者等于广播地址,或者和loopback也及时环回地址一致,和子网掩码等是否一致,这里不仅仅是比较和组播地址,环回地址,而是将换回地址与相应掩码做与运算进行比较的。这里纯粹是图省事,才这么说。具体和什么有关,列图表如下:


destination ip符合以上条件后,
3、开始进行下面的处理,检查TTL,即ip数据报首部的8位生存时间,ip数据报的第9个字节,加上ethernet帧头14个字节,即网络帧的第23个字节,如果ttl为0,丢弃数据报,并发送 icmp error packet 错误报文,如果大于0,则进行正常的处理。



4、然后开始检查ip fragment flag(ip fragment flag是ip数据报的第7个字节)和ip实际数据(ip代表ip数据报去掉ip头后的数据),当ip fragment flag等于0x40(ETH_IP_FLAG_FRAG_DONT)且ip实际数据长度大于ETH_IP_MTU(1480),这个时候会发送icmp unreachable packet差错报文,这里两处判断发送的icmp报文就是icmp差错报文的两种情况,我们长听说icmp差错报文到底怎么发出来的,这里就是例子。当不符合这两个条件后,ip报文进入下一级处理。
5、如果ip fragment flag等于0x20(ETH_IP_FLAG_FRAG_MORE)或者ip的第7个和第8个字节标志是分片标志,我们这个时候就获取一个ip分片包,关于分片数据包的处理,后面再介绍,下面继续介绍正常不是分片的数据包。


6、接下来,开始根据协议进行分类,通过第10个字节来判断是udp还是tcp还是icmp还是igmp,还是ospf等。接下来就开始分析udp,tcp icmp、igmp、ospf的流程。


----------------
这一节还有一个没有分析那就是ip分片。文章中的截图的所用到的报文可以查看附件,使用wireshark等网络分析工具查看
请将下载报文文件名改成ip.pcap,因为受上传限制,所以改了后缀名字




































































阅读(1044) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~