zoukankan      html  css  js  c++  java
  • IP网际协议

     

    IP分类

    IP地址分为网络号和主机号,5类不同的IP地址格式如下:

    A类地址每个网段内最多有224个,也就是16,777,214个。

    B类地址每个网段内最多有216个,也就是65535个。

    C类地址每个网段内最多有28个,也就是255个。

    子网寻址

     现在的主机都要求支持子网编址,不再把IP看成单纯的网络号和主机号组成,而是把主机号再分为子网号和主机号。

    子网对外部路由来说隐藏内部网络组织。而且子网划分大大减少路由表的规模

    子网掩码

    IP地址分类的本质是区分网络标识和主机标识,另一种更加灵活、细粒度的区分方法是使用子网掩码。子网掩码长度也是32位,由一段连续的1和一段连续的0组成。1的长度就表示网络标识的长度,0代表主机号的长度。

    给定IP地址和子网掩码后,主机就可以确定IP数据报的目的是:(1)本子网上的主机;(2)本网络上其他子网的主机;(3)其他网络的主机

    IP报文分割

    在数据链路层,不同的数据链路层有不同的最大传输单元(MTU),因此IP协议的一个任务就是对数据进行分片和重组。

    分片由发送端主机和路由器负责,重组有接收端主机负责。

    路径MTU

    分片会加重路由器的负担,因此只要条件允许,我们都不希望路由器对数据报进行分片处理。而且,如果一个数据片丢失,整个数据报都会作废。

    解决以上问题的技术是“路径MTU发现”。主机会首先获取整个路径中所有数据链路的最小MTU,并按照整个大小将数据分片。因此传输过程中的任何一个路由器都不用进行分片工作。

    为了找到路径MTU,主机首先发送整个数据包,并将IP首部的禁止分片标志设为1.这样路由器在遇到需要分片才能处理的包时不会分片,而是直接丢弃数据并通过ICMP协议将整个不可达的消息发回给主机。

    主机将ICMP通知中的MTU设置为当前MTU,根据整个MTU对数据进行分片处理。如此反复下去,直到不再收到ICMP通知,此时的MTU就是路径MTU。

    重组

    接收端根据IP首部中的标志(Flag)和片偏移(Fragment Offset)进行数据重组。

    IP首部

    普通的IP首部长20个字节,除非含有选项字段,IP数据报格式如下:

    • 4位版本:目前的协议版本号为4,因此IP也称为IPV4

    • 4位首部长度:首部占4字节的数据,包括任何选项。由于它是一个4比特字段,因此首部最长为60(4* (2- 1))个字节。普通IP数据报(没有任务选项)字段的值为5.

    • 8位服务类型:目前不使用,全为0

    • 16位总长度:整个IP数据报的长度,以字节为单位。利用首部长度和总长度,就可以知道数据内容的起始位置和长度。由于该字段场16比特,所有IP数据报的最长为65535个字节。

    • 用于分片和重组
    1. 16位标识:标识字段唯一的标识主机发出每一份数据报。用户分片和重组。

    2. 3位标志:由3个比特位组成:

      • 第一个标识未使用,目前必须是0;

      • 第二个标识标识是否分片,0标识分片,1标识不分片;

      • 第三个标识表示分片时是否最后一个包,0表示是最后一个包,1表示不是最后一个包。

    3. 13位偏移量:表示被分片的段相对于原始数据的位置,单位为8字节,

    • 8位生存时间:表示包可以经过多少路由器的中转,每经过1个路由器,TTL减1

    • 8位协议:表示IP首部的下一个首部属于哪个协议。比如TCP协议的编号为6,UDP编号为17

    • 16位首部校验和:用于检查IP首部是否损坏

    • 32位源IP地址:

    • 32位目的IP地址:

    IP选路

    netstat命令

    对于一个给定的路由器,可以打印出五种不同的标志( f l a g):
    U 该路由可以使用。
    G 该路由是到一个网关(路由器)。如果没有设置该标志,说明目的地是直接相连的。
    H 该路由是到一个主机,也就是说,目的地址是一个完整的主机地址。如果没有设置该
    标志,说明该路由是到一个网络,而目的地址是一个网络地址:一个网络号,或者网
    络号与子网号的组合。
    D 该路由是由重定向报文创建的( 9 . 5节)。
    M 该路由已被重定向报文修改( 9 . 5节)。
    标志G是非常重要的,因为由它区分了间接路由和直接路由(对于直接路由来说是不设置
    标志 G的) 。其区别在于,发往直接路由的分组中不但具有指明目的端的 I P地址,还具有其链
    路层地址(见图 3 - 3 )。当分组被发往一个间接路由时, I P地址指明的是最终的目的地,但是
    链路层地址指明的是网关(即下一站路由器) 。
    理解 G和 H标志之间的区别是很重要的。 G标志区分了直接路由和间接路由,如上所述。
    但是 H标志表明,目的地址( n e t s t a t命令输出第一行)是一个完整的主机地址。没有设置
    H标志说明目的地址是一个网络地址(主机号部分为 0)。当为某个目的 I P地址搜索路由表时,
    主机地址项必须与目的地址完全匹配,而网络地址项只需要匹配目的地址的网络号和子网号
    就可以了
    参考记数 R e f c n t( Reference count)列给出的是正在使用路由的活动进程个数。
    下一列(“ u s e”)显示的是通过该路由发送的分组数。




  • 相关阅读:
    SpringBoot的@Import和@ImportResource
    SpringBoot引入其他配置文件
    SpringBoot加载application.properties配置文件的顺序
    Interceptor(拦截器)
    Filter(过滤器)
    ES6数组知识点,巧妙运用数组,对循环说88
    javase基础socket编程之局域网聊天,局域网文件共享
    【金三银四】缓存面试题-web层缓存
    MD5和SHA-1加密算法被我国密码学家王小云破解
    java中的ArrayList 的C语言实现版本。
  • 原文地址:https://www.cnblogs.com/xyz0601/p/9261360.html
Copyright © 2011-2022 走看看