IPv4数据报的首部由固定首部(20字节)和可变部分组成(40字节).选项可用于网络的测试和排错.

1:选项的组成(TLV:type-length-value)

  1.1:一个字节的类型字段.

    1.1.1:类型(8位一个字节)

      第一位(复制):

        0:仅在第一个分片中复制

        1:复制到所有分片

      第二位和第三位(类别):

        00:数据报控制

        01:保留

        10:排错和管理

        11:保留

      第四位到第八位(编号):

        00000:选项结束

        00001:无操作

        00011:不严格的源路由

        00100:时间戳

        00111:记录路由

        01001:严格路由

  1.2:一个字节的长度字段.表示选项的总长度

  1.3:可变长度的值.

2:目前仅使用了六种选项,其中俩种是单字节选项,塔门不需要长度字段和值,剩下四种多字节选项,需要长度和字节

  单字节选项:无操作(00000),选项结束(00001)

  多字节选项:记录路由(00111),严格路由(01001),时间戳(00100),不严格路由(00011)

2.1

  1:无操作是1字节的选项,主要用于选项和选项之间的填充符,使下一个选项在16位或32位边界上对齐

  2:选项结束也是1字节选项,用于选项字段结束时的填充,只能用于最后一个选项,并且只能用一次,在这个选项之后,解析器就开始寻找净负荷.

  3:记录路由选项用来记录处理数据报的因特网路由器.它可以列出最多九个路由器IP地址.格式如下

   

      指针一个字节,指针是一个偏移量的整数字段,它包含第一个空项的字节号,当报文离开,这个值是4,指向第一个空字段.在数据报的前进过程中,处理

      这个数据报的每一个路由器都要比较指针字段的值和长度字段的值,若指针值大于长度值,则选项满,不做任何改变,如果没有,路由器就插入字节的出口IP,

      同时把指针值加4,

  4:严格路由,源点用来预先指定数据报在因特网中传送时的路由,发送方可以选择具有特定服务类型的路由,如最小延时,最大吞吐量,也可以选择数据报的某条路由路线

    不经过对手的网络.数据报必须经过在选项中定义的所有路由器,如果某个路由器收到报文,但是未被列入,丢弃报文,回送一个差错报文,如果报文达到终点有列入的路由器

    未达到,也丢弃报文,回送差错报文.在数据报前进的过程中.若指针值大于长度,则这个数据报已经通过了所有预设定的路由器,不能再转发,丢弃,回送差错报文.

    若指针值小于长度,比较该帧的目的IP地址是否与自己入口IP地址一致,一致,处理,用输出帧的目的IP地址来替换指针指向的IP地址,指针值加4,转发,如果不相等,丢弃,

    回送差错报文.报文格式.

    

  5:不严格路由和严格路由选项相似,但条件要放宽一些,表中列出的路由器必须通过,但数据报还可以访问其他的路由器.格式和上面一样

    

   6:时间戳选项用来记录路由器处理数据报的时间,很少用.因为路由器的时间可能并没有同步,所以只是估计值.

相关命令:

ping

ping -R实现记录路由,

traceroute -g ip地址1 ip地址2。。。。。。目的ip地址 实现不严格的路由

traceroute -G  ip地址1 ip地址2。。。。。。目的ip地址   严格路由

我这个win7是-r来记录,然后好像ping 百度的ping不通

我的数据报被那个路由器给丢弃了么

IPv4选项的更多相关文章

  1. IPv4组播通信原理

    2011-05-08 21:21:14 标签:组播 vin_do,vin_do学习笔记,笔记 休闲 职场 摘自网络,感谢原作者 摘要: 本文试图成为学习TCP/IP网络组播技术的入门材料.文中介绍了组 ...

  2. IPv4与IPv6数据报格式详解

    摘要: 本文给出IPv4与IPv6数据报格式示意图,并整理了各个字段含义,最后对比IPv4与IPv6数据报格式的区别. 一.IPv4数据报 图1 IPv4数据报格式版本号(version) 不同的IP ...

  3. 手把手教你玩转nginx负载均衡(三)----配置虚拟服务器网络

    引言 虽然上一篇我们成功的启动了虚拟机,也安装好了操作系统,但是这台虚拟机和主机以及其他虚拟机是没有办法连通的,我们的目标是配置多台服务器并且配置nginx反向代理,来实现负载均衡,所以不能访问内网是 ...

  4. [网络技术]VPN设置

    1.解决VPN服务器默认路由困扰 现在移动办公已经变得家常便饭,每次外出出差办公需要访问单位的内网服务器时,该怎么办呢?相信很多人都想到了VPN连接!的确,使用VPN连接, 我们可以利用现成的Inte ...

  5. 给虚拟机中的CentOS7配置固定ip

    在虚拟机中安装完了CentOS7之后,使用了DHCP来获取ip,vmware的网络连接使用了NAT模式.但是在把Linux设置为固定ip地址后,虚拟机里的linux可以ping通全网段的ip地址,但是 ...

  6. setsockopt()使用方法(參数具体说明)

    int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen); s(套接字): 指向一个打开的套接口描写叙述 ...

  7. setsockopt()使用方法()参数说明

    int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen); s(套接字): level:(级别): 指定 ...

  8. setsockopt()用法(参数详细说明)(转)

    nt setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen); s(套接字): 指向一个打开的套接口描述字le ...

  9. Wireshark网络端点和会话

    如果想让网络进行正常通信,你必须至少拥有两台设备进行数据流交互.端点(endpoint)就是指网络上能够发送和接受数据的一台设备.举例来说,在TCP/IP的通信中就有两个断电:接收和发送数据系统的IP ...

随机推荐

  1. 蓝桥杯 ALGO-1:区间k大数查询

      算法训练 区间k大数查询   时间限制:1.0s   内存限制:256.0MB        问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个 ...

  2. jQuery prop() 方法

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  3. hello1与hello2在glassfish上部署

    部署hello1 打开项目实例 找到hello1(tutorial-examples-master\web\jsf\hello1) 并在当前目录打开cmd并输入mvn install命令在hello1 ...

  4. 使用webpack搭建vue项目中遇到的问题

    1:data数据文件经试验,需要放在生成的build文件夹中才能生效,但是应该把data文件夹先放在src中,然后如何定义config文件,让其复制过去? new CopyWebpackPlugin( ...

  5. JS页面打印预览功能

    点击按钮后就可以直接打印预览,并且隐藏了按钮,如果你不希望按钮显示,可以把那部分代码删除就可以了. <html><head><meta http-equiv=" ...

  6. tomcat源码阅读之生命周期(LifeCycle)

    一.事件机制流程: 1.     当外部事件源发生事件(比如点击了按钮,数据发生改变更新等)时,事件源将事件封装成事件对象Event: 2.     将事件对象交由对应的事件派发器Dispatcher ...

  7. SQL群集多实例卸载、安装

    安装SQL多实例群集: 准备工作:准备SQL群集管理员及服务账号:sqladmin和srv-sql,sqladmin和srv-sql都属于群集节点计算机的administrators组 预留群集名称账 ...

  8. 关于 android 读取当前手机号码

    手机号码不是所有的都能获取.只是有一部分可以拿到.这个是由于移动运营商没有把手机号码的数据写入到sim卡中.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码 ...

  9. Delphi控件备份工具

    用途: 1.如果您需要重装Delphi,想省去重装控件的麻烦. 2.如果您把Delphi环境安装至另一台电脑上. 那么,您一定需要这个! 运行批处理后,自动在当前目录下生成备份目录. 批处理代码 @e ...

  10. BASIC-25_蓝桥杯_回形取数

    示例代码: #include <stdio.h>#define N 200 int main(void){ int num[N][N]; int i= 0, j = 0 , k = 0 , ...