ip头部最长是60字节,前面的20字节是固定的,选项可加上40字节

4位版本号--- 对于ipv4来说呢,就是4

4位头部长度 ---  表示 有多小个32bit(4字节),4位最大表示数是15啦,也就是最大就是15啦,所以头部最长就是60啦

8位服务类型 --- 已经不用了

16总长度---ip数据报长度 所以最大长度为 65535啦

16位标识-- 分片的时候用的

3位标志 --- 第一位保留 第二位 禁止分片 第三位 表示更多分片

13位偏移 --- 相对ip数据报的开始处

8位生存时间 ---ttl 当变为0的时候抛弃

8 位协议 ---- 指应用层协议,区分上层协议

16位校验和 ---- 数据的hash值啦

32 位 原端 和目的端ip地址

选项 包括有

1 记录路由

2 时间戳

3 松散路由

4 严谨 路由

下面来分析一下

tcpdump -i eth0:1 -ent '(dst 192.168.5.190 and src 192.168.5.109)or( dst 192.168.5.109 and src 192.168.5.190)' –X

bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 74: 192.168.5.109 > 192.168.5.190: ICMP echo request, id 1, seq 72, length 40

0x0000:  4500 003c 7da4 0000 4001 70a1 c0a8 056d  E..<}...@.p....m
0x0010:  c0a8 05be 0800 4d13 0001 0048 6162 6364  ......M....Habcd
0x0020:  6566 6768 696a 6b6c 6d6e 6f70 7172 7374  efghijklmnopqrst
0x0030:  7576 7761 6263 6465 6667 6869            uvwabcdefghi

0x4 代表ip版本号

0x5  头部长度为 5个32位(20个字节)

0x00 说明tos没有开启

0x003c  说明 数据报总长度 60字节

0x7da4 数据报标示

0x0 没有设置标志位

0x000 分片偏移

0x40 ttl设置为64

0x01 表示上层协议 为 icmp    1    ICMP        # internet control message protocol (可以查找linux的/etc/protocols )

0x70a1 校验值

0xc0a8 056d 源ip

0xc0a8 05be 目标ip

 

IP分片

什么时候会分片呢,就是数据包大的时候啦

参照下图就最清楚啦

下面来做个试验

ping 192.168.5.190 -l 1473

bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 1514: (tos 0x0, ttl 64, id 20425, offset 0, flags [+], proto ICMP (1), length 1500)

192.168.5.109 > 192.168.5.190: ICMP echo request, id 1, seq 92, length 1480

bc:ee:7b:9d:ee:02 > 40:16:7e:79:c7:36, ethertype IPv4 (0x0800), length 60: (tos 0x0, ttl 64, id 20425, offset 1480, flags [none], proto ICMP (1), length 21)

192.168.5.109 > 192.168.5.190: icmp

从id可以看出

他们两个包都是同一个包的

第一个包偏移为0 ,flag[+] 表示MF标志啦

第二个包偏移为1480 flag[none]表示已经无下一个

从上个我们可以知道,第二个包是没有包含icmp头部,因为规范说第一次发了下次就不发啦

ipv4头部分析,读书笔记3的更多相关文章

  1. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  2. STL源码分析读书笔记--第5章--关联式容器

    1.关联式容器的概念 上一篇文章讲序列式容器,序列式容器的概念与关联式容器相对,不提供按序索引.它分为set和map两大类,这两大类各自有各自的衍生体multiset和multimap,的底层机制都是 ...

  3. STL源码分析读书笔记--第三章--迭代器(iterator)概念与traits编程技法

    1.准备知识 typename用法 用法1:等效于模板编程中的class 用法2:用于显式地告诉编译器接下来的名称是类型名,对于这个区分,下面的参考链接中说得好,如果编译器不知道 T::bar 是类型 ...

  4. Linux内核分析 读书笔记 (第七章)

    第七章 链接 1.链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储器并执行. 2.链接可以执行于编译时,也就是在源代码被翻译成机器代码时:也可以执行于 ...

  5. Linux源代码情景分析读书笔记 物理页面的分配

    函数 alloc_pages流程图

  6. Linux内核分析 读书笔记 (第四章)

    第四章 进程调度 调度程序负责决定将哪个进程投入运行,何时运行以及运行多长时间.进程调度程序可看做在可运行态进程之间分配有限的处理器时间资源的内核子系统.只有通过调度程序的合理调度,系统资源才能最大限 ...

  7. Linux内核分析 读书笔记 (第三章)

    第三章 进程管理 3.1 进程 1.进程: 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程:执行 ...

  8. Linux内核分析 读书笔记 (第十八章)

    第十八章 调试 18.1 准备开始 1. 需要的只是: 一个bug 一个藏匿bug的内核版本 相关内核代码的知识和运气 2. 在跟踪bug的时候,掌握的信息越多越好. 18.2 内核中的bug 1.  ...

  9. Linux内核分析 读书笔记 (第五章)

    第五章 系统调用 5.1 与内核通信 1.调用在用户空间进程和硬件设备之间添加了一个中间层.该层主要作用有三个: 为用户空间提供了硬件的抽象接口. 系统调用保证了系统的稳定和安全. 实现多任务和虚拟内 ...

随机推荐

  1. ubuntu装机后的一些零散配置

    -2 以root用户登录 su passwd root 可参考http://blog.csdn.net/happyteafriends/article/details/7518893 : 先设定一个r ...

  2. OpenMp并行提升时间为什么不是线性的?

    最近在研究OpenMp,写了一段代码,如下: #include<time.h> #include<stdio.h> #include<stdlib.h> #incl ...

  3. poj - 2431 Expedition (优先队列)

    http://poj.org/problem?id=2431 你需要驾驶一辆卡车做一次长途旅行,但是卡车每走一单位就会消耗掉一单位的油,如果没有油就走不了,为了修复卡车,卡车需要被开到距离最近的城镇, ...

  4. java-基础练习题3

    [程序3] 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数",因 ...

  5. C++关键字 inline

    在C&C++中 一.inline关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义. 表达式形式的宏定义一例: #define ExpressionName(Va ...

  6. 内存分配(c/c++)

    C++中内存分配          内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 1,栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区.里面的 ...

  7. git subtree有效管理公共第三方lib

    如果你的项目中有很多第三方的lib,你希望使用它,并且也希望可能对该lib做修改并且贡献到原始的项目中去,或者你的项目希望模块化,分为几个repo单独维护,那么git subtree就是一个选择.gi ...

  8. UVa 11019 (AC自动机 二维模式串匹配) Matrix Matcher

    就向书上说得那样,如果模式串P的第i行出现在文本串T的第r行第c列,则cnt[r-i][c]++; 还有个很棘手的问题就是模式串中可能会有相同的串,所以用repr[i]来记录第i个模式串P[i]第一次 ...

  9. Codeforces 443 B Kolya and Tandem Repeat【暴力】

    题意:给出一个字符串,给出k,可以向该字符串尾部添加k个字符串,求最长的连续重复两次的子串 没有想出来= =不知道最后添加的那k个字符应该怎么处理 后来看了题解,可以先把这k个字符填成'*',再暴力枚 ...

  10. How to begin with the webpage making

    1.网页制作三剑客必须要会使用.(dreamweaver  /fireworks/flash)2.学习些最基层的html语言的知识,3.在学习一些基本的html标签(要多加练习哦)4.先试着用表格进行 ...