zoukankan      html  css  js  c++  java
  • 网络--网络层协议

    IP协议

    ip数据报格式

    IP 数据报的首部长度和数据长度都是可变长的,但总是4 字节的整数倍。对于IPv4,4 位版本字段是4。
    4 位首部长度的数值是以4 字节为单位的,最小值为5,也就是说首部长度最小是4x5=20 字节,也就是不带任何选项的IP 首部,4 位能表示的最大值是15,也就是说首部长度最大是60 字节
    8 位TOS 字段有3 个位用来指定IP 数据报的优先级(目前已经废弃不用),还有4 个位表示可选的服务类型(最小延迟、最大呑吐量、最大可靠性、最小成本),还有一个位总是0。
    总长度是整个数据报(包括IP 首部和IP 层payload)的字节数。每传一个IP 数据报,16 位的标识加1,可用于分片和重新组装数据报。3 位标志和13 位片偏移用于分片。
    TTL(Time to live)是这样用的:源主机为数据包设定一个生存时间,比如64,每过一个路由器就把该值减1,如果减到0 就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包,因此这个生存时间的单位不是秒,而是跳(hop)
    协议字段指示上层协议是TCP、UDP、ICMP 还是IGMP。然后是校验和,只校验IP 首部,数据的校验由更高层协议负责。IPv4的IP 地址长度为32 位。
     

    网际控制报文协议ICMP

    目的:
      为了提高 IP 数据报交付成功的机会
    注意:
      ● 允许主机和路由器报告差错情况和提供有关异常情况的报告
      ● ICMP不是高层协议,而是IP层的协议
      ● ICMP报文作为IP层数据报的数据,加上数据报的首部,组成 IP 数据报发送出去
      ● ICMP报文的前4个字节是统一的格式,共有三个字段:即类型,代码和检验和.接着的4个字节的内容与ICMP的类型有关
    种类:
      ● ICMP 差错报告报文:
        ○ 终点不可达
        ○ 源点抑制(Source quench)
        ○ 时间超过
        ○ 参数问题
        ○ 改变路由(重定向)(Redirect)
      ● ICMP 询问报文:
        ○ 回送请求和回答报文
        ○ 时间戳请求和回答报文

    报文格式:

    所有的ICMP差错报告报文中的数据字段都具有同样的格式。将收到的需要进行差错报告IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段。再加上响应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文。提取收到的数据报的数据字段的前8个字节是为了得到运输层的端口号(对于TCP和UDP)以及运输层报文的发送序号(对于TCP)。
     
    ICMP地址掩码请求和应答报文

    ICMP不可达报文

    日常生活中,邮寄包裹会经过多个传递环节,任意一环如果无法传下去,都会返回寄件人,并附上无法邮寄的原因。同理,当路由器收到一个无法传递下去的IP报文时,会发送ICMP目的不可达报文(Type为3)给IP报文的源发送方。报文中的Code就表示发送失败的原因。
    Code
    0 = net unreachable;
    1 = host unreachable;
    2 = protocol unreachable;
    3 = port unreachable;
    4 = fragmentation needed and DF set;
    5 = source route failed.

    ICMP回显请求和回显应答报文格式

    ICMP超时报文

    网络传输IP数据报的过程中,如果IP数据包的TTL值逐渐递减为0时,需要丢弃数据报。这时,路由器需要向源发送方发送ICMP超时报文(Type为11),Code为0,表示传输过程中超时了。
    一个IP数据报可能会因为过大而被分片,然后在目的主机侧把所有的分片重组。如果主机迟迟没有等到所有的分片报文,就会向源发送方发送一个ICMP超时报文,Code为1,表示分片重组超时了。

    ICMP重定向报文

    当路由收到IP数据报,发现数据报的目的地址在路由表上没有,它就会发ICMP重定向报文(Type为5)给源发送方,提醒它想要发送的地址不在,去其他地方找找

    ICMP路由器请求报文格式

    ICMP路由器通告报文格式

    ICMP 源站抑制差错报文格式

      ICMP 类型:

    不应发送ICMP差错报告报文的情况:
      ● 对第一个分片的数据报片的所有后续数据报片都不发送ICMP 差错报告报文
      ● 多播地址的数据报都不发送ICMP差错报告报文
      ● 特殊地址(如127.0.0.0 或 0.0.0.0)的数据报不发送 ICMP差错报告报文


    IGMP 是Internet Group Management Protocol(互联网组管理协议)的简称。它是TCP/IP 协议族中负责IP 组播成员管理的协议,用来在IP 主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系。

    IGMP主要功能
    当一台主机加入到一个新的组时,它发送一个IGMP消息到组地址以宣告它的成员身份,多播路由器和交换机就可以从中学习到组的成员。利用从IGMP中获取到的信息,路由器和交换机在每个接口上维护一个多播组成员的列表。
    IGMP报文格式和分类
    一个完整的IGMP数据报:正如ICMP一样, IGMP 也被当作IP 层的一部分。

    IGMP报文的基本格式:IGMP有固定的报文长度,没有可选数据。

    1) 4位IGMP版本。
    2) 4位IGMP类型:为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文。
    3) 16位校验和:检验和字段覆盖整个IGMP报文。使用的算法和IP首部校验和算法相同。IGMP的检验和是必需的。

  • 相关阅读:
    Windows 科研软件推荐
    有关Python 包 (package) 的基本知识
    《Using Python to Access Web Data》Week4 Programs that Surf the Web 课堂笔记
    Coursera助学金申请模板
    《Using Databases with Python》 Week2 Basic Structured Query Language 课堂笔记
    Jupyter 解决单个变量输出问题
    解决 pandas 中打印 DataFrame 行列显示不全的问题
    《Using Python to Access Web Data》 Week3 Networks and Sockets 课堂笔记
    缓存击穿及解决方案
    jvm垃圾收集器
  • 原文地址:https://www.cnblogs.com/tla001/p/6485813.html
Copyright © 2011-2022 走看看