• IP包头是IP协议(网络层,第三层)为数据包添加的头部。
        ○ 格式:
        ○

○ 拆开看,每行是4+4+8+16=32bit=4Byte
        ○ ip协议最短20字节,最长60字节(可选项40字节)。
        ○ 先看第一行
            ⚀ 版本:
                □ ip协议有IPv4和IPv6
                □ 在IP包头4bit表示:0100 0110
            ⚀ 首部长度
                □ 因为IP包头长度是可变的所以首部长度标明了IP包头是多长 单位是 4字节也就是32bit,每个1都代表32bit,最常见0101,即这IP包头20字节,要和总长度区分开来。
            ⚀ 服务与优先级
                □ 前3位 代表优先级
                □ 中间4位 代表服务类型
                □ 最后1位 没有被启用(保留)
                    ✦ 一般很难用到,在服务运营商那用的多
                □ QOS就是对这儿进行标记
            ⚀ 总长度
                □ 表示了到这层为止的长度(5层数据+4层包头+3层包头的长度)
                □ 超过1500就分片
            ⚀ 标识符
                □ 是发送端随机生成的,用来表示同一个IP包
                    ✦ 同一个IP包?
                        ◊ 因为数据过大会切成多个数据发送
                        ◊ 最后目标机组装的时候同一个ip包的就拼接在一起,就通过标识符识别是否是同一个IP包。
            ⚀ 标志
                □ 标志位有3bit,目前只启用的两个,第一个bit位没有启用
                □ 第一位
                    ✦ 没有用(保留)
                □ 第二位
                    ✦ 如果第二个bit为1,则代表这个数据包没有被分片
                    ✦ 如果第二个bit为0,则代表这个数据包进行了分片
                □ 第三位
                    ✦ 拼接的时候用来表示这个帧是不是最后一个分片
                    ✦ 为1说明还有后续的分片
                    ✦ 为0说明这是最后一个分片啦
                □ 目前主流防火墙都不允许分片通过
                    ✦ 因为可以不停的伪造段偏移量,导致重组失败,占用服务器内存。
                        ◊ 所以就不在网络层进行分片了,而是在应用层,应用层直接分成1460字节,+20传输层协议,网络层一看刚好1480,自己再加20字节的ip协议正好1500MTU,省的自己再切片了,直接扔给数据链路层了,到数据链路层就加个首尾然后直接发出去了。
                        ◊ 对方收到后相应的到应用层才开始重组。
                
            ⚀ 段偏移量
                □ 众所周知一个帧最大长度是1518,去掉目标和源mac地址12B,去掉类型2B,去掉FCS 4B,中间MTU最大1500,这1500B中包含了所有的上三层协议,顶层数据很大,上三层流下来会超过1500,那么就要对数据进行切片,将数据通过多个帧发送出去,目标机收到之后进行拆封,拼接,但是互联网是瞬息万变的,第一个发出去的帧不一定是第一个到达的,那么拼接的顺序依据就是段位偏移量。
                □ 段位偏移量:0,1480,2960…..累加1480
                    ✦ 为什么累计1480呢而不是1500呢?不是说MTU最多1500吗?
                        ◊ MTU1500其中还包含了20字节的IP协议,用来当导游呢,所以有效字节只能是1480,目标机收到之后先把0拆开放在第一位,此时数据就拼出来1480个了,接着把偏移量位1480的帧拆开并拼在第一个帧的的后面,依次类推。
        ○ 第二行
            ⚀ TTl
                □ time to live
                □ 生存时间,用来剔除垃圾包
                □ 可以大概判断出对方是什么主机
                    ✦ 100以上的一般是windos主机
                    ✦ 100以下的一般是linux主机
                    ✦ 255代表网络设备
                □ 每被转发一次就减1
                □ ttl使用完,改包就被丢弃了
                □ tracert www.baidu.com
                    ✦ 查看到达百度要经过几跳
            ⚀ 协议号
                □ 识别上层协议(ICMP也包括)
                    ✦ TCP
                    ✦ UDP
                    ✦ ICMP(这个是同层)
                □ 6代表是TCP
                □ 17代表UDP
                □ 1代表同层ICMP
            ⚀ 首部校验和
                □ 校验头部内容是否完整(只校验头部的20-60字节)

IP包头分析的更多相关文章

  1. TCP/IP协议栈概述及各层包头分析

    TCP/IP协议栈中各层包头的分析 Protocol列表示的是该数据包最高层对应的协议,Length列表示该包的长度(包括从底层的协议到最高层的协议,其中包头一般是,链路层14字节,IP20字节,TC ...

  2. TCP、UDP、IP 协议分析

    http://rabbit.xttc.edu.cn/rabbit/htm/artical/201091145609.shtml  http://bhsc881114.github.io/2015/06 ...

  3. TCP、UDP、IP协议分析

    此篇文章的原创作者是:草根老师博客(程姚根) chengyaogen.blog.chinaunix.net 感谢原作者! 互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如: ...

  4. TCP、UDP、IP包头结构分析(转)

    1.TCP数据段格式 TCP是一种可靠的.面向连接的字节流服务.源主机在传送数据前需要先和目标主机建立连接.然后,在此连接上,被编号的数据段按序收发.同时,要求对每个数据段进行确认,保证了可靠性.如果 ...

  5. IP包头

    上图为IP报头的结构图,下图为捕捉的IP数据包

  6. IP包头结构详解

    版本号(Version):长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),0110(IPv6) IP包头长度(Header Length):长度4比特.这个字段的作用是为了 ...

  7. IP包头部格式解析

    IPv4首部一般是20字节长.在以太网帧中,IPv4包首部紧跟着以太网帧首部,同时以太网帧首部中的协议类型值设置为080016. IPv4提供不同,大部分是很少用的选项,使得IPv4包首部最长可扩展到 ...

  8. IP包头结构

    版本号(Version): 长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),0110(IPv6) IP包头长度(Header Length): 长度4比特.这个字段的作用是 ...

  9. tcpdump使用和TCP/IP包分析

    关于tcpdump如何抓包,本文不再总结,可以查看 tcpdump的官方地址查看http://www.tcpdump.org 本文重点记录两个部分:           第一部分:tcpdump所抓包 ...

随机推荐

  1. spring框架半自动注解

    为了简便我们的开发,让我们一起来学习半自动注解吧. 让Spring管理某些类 1.在需要被SpringIOC容器管理的类上打上相应的注解 @Component:任意组件 @Controller:控制层 ...

  2. 学习笔记:Splay

    代码适中.非常灵活的平衡树. 需要前置:二叉搜索树. 一些基础的函数: int idx, ch[N][2], cnt[N], sz[N], fa[N]; /* idx 是节点计数, ch[i][0 / ...

  3. 【学习笔记】浅析平衡树套线段树 & 带插入区间K小值

    常见的树套树 一般来说,在嵌套数据结构中,线段树多被作为外层结构使用. 但线段树毕竟是 静态 的结构,导致了一些不便. 下面是一个难以维护的例子: 带插入区间 \(k\) 小值问题 来源:Luogu ...

  4. win32 C++制作美观按钮,告别win32 API编程中默认的灰色按钮

    使用win32 API制作美观按钮,当鼠标移入/移出按钮时改变按钮背景颜色,类似HTML网页中的效果,告别win32 API编程中默认的灰色按钮,效果图见下面动图和视频. 下载地址: 按钮效果(win ...

  5. pag object设模式

    pag object 是自动化测试最佳模式测试之一,它主要体现在对界面交互细节的封装 优点: 减少代码重复,提高测试的可读性,提搞测试用例的可维护性.

  6. 多年总结IDEA 使用技巧 (建议收藏!)

    很长一段时间没有更新了,前段时间转测试了,浪费了一些时间,终于可以写文章了,今天来写一下之前自己开发的一些习惯,因为自己本身自己是一个极简主义所以 开发喜欢这样:. 全屏显示 我们可以使用[Prese ...

  7. 最速下降法--MATLAB程序

    function x = fxsteep(f,e,a,b)x1 = a;x2 = b;Q = fxhesson(f,x1,x2);x0 = [x1,x2]';temp = [x0];fx1 = dif ...

  8. 【命令】pstree命令

    这个命令简单没有什么说的,语法格式: pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-Z] [-A|-G|-U] [pid|user] pstree ...

  9. JavaEE在职加薪课好客租房项目实战视频教程

    JavaEE在职加薪课好客租房项目实战视频教程课程介绍:       本课程采用SOA架构思想进行设计,基于目前主流后端技术框架SpringBoot.SpringMVC.Mybaits.Dubbo等来 ...

  10. 运行jar提示“没有主清单属性”的解决方法

    以下记录的是我export jar包后运行遇到问题的解决方法,如有错误,欢迎批评指正. 1.运行导出jar包,提示"没有主清单属性" 2.回想自己导出jar的操作是否有误,重新ex ...