• IP协议


    简介

      IP协议是TCP/IP中核心的协议,也是听得最多的协议,不管是TCP、UDP的数据都是以IP数据进行传输的。

      IP协议不能保证IP数据报能成功到达目的,IP只提供数据传输,如果发生错误的话,会丢弃该报文并且发送一个ICMP消息报给信息源。可靠性的服务是由TCP来完成。

    报文格式

      普通的IP首部长为20个字节,除非含有选项字段


    1.版本号
        主要有IP4,IP6现在大部分还是在用IP4协议。4位长度
    
    2.4位首部长度
        首部长度从IP数据报开头,每32bit算一个首部长度,首部长度这个字段占4个bit.
        全为1的话,换算成十进制就是15,则15*4=60字节.
    
    3.服务类型
        其中3bit的优先权字段,4bit的TOS子字段,1bit未用字段但必须置为0
        4bit的TOS分别代表【最小时延、最大吞吐量、最高可靠性和最小费用】
    
    4.16位总长度
        以字节为单位,代表整个IP数据报的内容,由于16位bit,所以ip数据报最长可达65535字节
        但是大多数链路层都会对它进行分片,而且主机也要求不能接收超过576字节的数据报
        
    5.16位标识
        主机发送一份数据报,它的值就会加1
    
    6.TTL
        数据报可以经过最多的路由器时间
    
    7.协议
        上层协议
    
    8.校验和
        把首部中每个16bit进行二进制反码求和。结果存在检验和字段
    

      注意:ICMP、IGMP、UDP和TCP都采用相同的算法,但是TCP和UDP除了本身的首部喝数据外,在IP首部中还包含不同的字段

    校验和计算






    1.IP首部校验和
        1.1接收方:  IP首部校验和主要是针对IP首部看成16bit为单位的数字组成
            ,依次进行二进制求和,然后得出反码
            0x4500 0x0040 0x40d2 0x4000 0x8006  0xD272 0xc0a8 0x0301 0x2762 0xfc5c
            求和为
            3FFFC
            高位溢出值为3
            FFFC+0x0003=FFFF,转换为2进制为:1111111111111111
            反码为:0
        1.2接收方:
            4500 0028 a5a7 4000 7406 79c0 2762 fc5c c0a8 0301
            求和为:3FFFC.
            高位溢出:FFFC+0003=FFFF 转换为二进制反码为0
    

      发送方例子



    1.发送方1
        4510 0054 7e02 4000 4006 0000 c0a8 031f c0a8 030e
        求和值为:2CAE9
        高位溢出为2,0002+CAE9=CAEB 转换为2进制为:1100101011101011
        反码为:11010100010100 转为十六进制:3514
    

    IP路由选择

      目的主机和源主机直连(点对点链路),或者都在一个共享网络上,那么IP数据报就可以直接发送

      IP层在内存中有一个路由表,当收到一份数据报的时候,它都要对该表进行搜索一次。

      在liunx上采用route命令查看路由表。主要包含:目的地址、下一站、标志、网络接口



      IP路由选择是逐跳进行,逐跳的意思就是IP不知道到达任何目的的完整路径,所有的IP路由选择只为数据报传输数据提供下一站路由器的IP地址。

      IP路由选择主要完成以下功能:

    1.搜索路由表,寻找能与目的IP地址完全匹配的表目
    
    2.搜索路由表,寻找能与目的网络号相匹配的表目
      如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口
      
    3.搜索路由表,寻找标为【默认】的表目
    

      如果上述步骤没有成功,该数据报不能被传送。并且会返回一个ICMP的主机不可达或者网络不可达错误

    例子

      主机bsdi有一份IP数据报要传到ftp.uu.net主机上,它的IP地址时192.48.96.9,经过的前三个路由器如下图



    1.主机bsdi搜索路由表,没有找到与主机地址或网络地址匹配的表目
    只能用默认的表目,把数据报传给下一站路由器,即【主机sun】
        注意:数据报在发送的时候目的以太网是140.25.213.33这也是默认路由表。但是目的IP地址不变
    
    2.sun接收到数据报后,目的IP地址时最终的信宿机地址(192.48.96.9)
    但是链路层地址却是sun主机的以太网接口地址
    
    
    3.sun接收到数据报后,发现目的IP并不是本机的任一地址,
    而sun被设置成具有路由器的功能,因此它把数据报进行转发
    经过搜索路由表,选用了默认表目
    
    
    4.根据sun默认表目,它把数据报转发到下一站路由器netb,该路由器的地址时
    140.252.1.183
    
    5.数据报是经过点对点SLIP链路被传送的
    
    6.当netb收到数据报后,它执行和sun主机相同的步骤,把数据报发送到下一站
    路由器gateway(140.252.14).
    位于以太网140.252.1上的主机netb用ARP获得对应于
    140.252.1.4的48bit以太网地址。
    这个以太网地址就是链路层数据帧头上的目的地址
    

    子网寻址

      首先了解互联网地址分为五类,如下图所示



      例如有一个B类网络(140.252),在剩下的16bit当中,8bit用于子网号,8bit用于主机号,这样的话就允许有254个子网,每个子网可以有254台主机。

  • 相关阅读:
    设置navigationBar透明,隐藏iOS导航条底部与self.view的分界线
    毛玻璃效果
    手动代码约束,等比例
    UIScrollView基本用法和代理方法
    swift学习笔记
    设置子视图背景颜色不影响到父视图的背景颜色方法
    JS内置对象
    JS创建自定义对象
    dom添加事件
    dom对象操作Html,Css
  • 原文地址:https://www.cnblogs.com/zhengyazhao/p/13267131.html
Copyright © 2020-2023  润新知