小白学网络之三_TCPIP协议之IP协议

来源:互联网 发布:前锦网络信息技术 编辑:程序博客网 时间:2024/04/28 07:39
               总以为,自己最近应该可以告一个段落了,因为刚看了,文件系统过滤驱动,文件系统小端口过滤驱动,网络过滤驱动,WFP过滤驱动,网络重定位驱动,但是今天突然发现了另一类设备驱动,讲的是WPD,一些外围的设备驱动,MTP设备等,后续这方面还是需要看一下,还是之前的感觉就是一个圆,当你发现自己知道的东西越多,不知道也就越多。后续中秋的三天,准备补上三篇博客,一个是UMDF驱动框架的总结。第二个是usbccgp.sys驱动,第三个是winusb.sys驱动。因为这个两个驱动对于Windows中使用最多的USB体系框架结构的理解发挥了很重要的作用。


              今天我们来看一下TCP/IP协议中最重要的一种协议,IP协议,也叫网际协议。
      
              IP是TCP/IP协议族中最为核心的协议。所有的TCP,UDP,ICMP及IGMP数据都以IP数据报的格式传输。
      
              IP提供一种不可靠,无连接的数据报传送服务。
      
              不可靠:不能保证IP数据报可以成功的到达目的地。如果发生错误时,只进行简单的错误处理算法,丢弃数据报,发送ICMP消息给信源端。任何
要求的可靠性必须由上层来提供。(TCP).


              无连接:IP并不维护任何关于后续数据报的状态信息。
      
              IP首部:
      

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

              

      
              最高位在左边,记为0bit,最低位在右边,记为31bit.
      
              4个字节的32bit值以下面的次序传输:首先是0-7bit,8-15bit,16-23bit,24-31bit.这种传输顺序称作big endian字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储的二进制整数的机器,如little endian格式,必须在传输前把首部转换为网络
字节序。


             目前的协议版本是4,因此IP有时也称作IPv4.
      
             首部长度指的是首部占32bit 字的数目,包括任何选项。由于它是一个4比特字段,因此首部最长是60个字节。普通IP数据报(没有任何选择项)字段的值为5.
      
             服务类型(TOS)字段包括一个3bit的优先权子字段(现在已经忽略),4bit的TOS字字段和1bit未用位必须为0.4bit的TOS分别代表,最小时延,最大吞吐量,最高可靠性和最小费用。4bit中只能置其中1位。如果所有4bit都为0.那么就意味着一般服务。


             


            Telnet和Rlogin这两个交互应用要求最小的传输时延,因为人们主要用它们来传输少量的交互数据。另一方面,FTP文件传输要求有最大的吞吐量。最高可靠性被指明给网络管理(SNMP)和路由选择协议。用户网路新闻(NNTP)是唯一要求最小费用的应用。


            总长度字段是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段就可以知道IP数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长为65535字节(回忆之前,超级通道的MTU为65535,它的意思其实不是一个真正的MTU-它使用了最长的IP数据报)。当数据报被分片时,该
字段的值也随之变化。


            尽管可以传送一个长达65535字节的IP数据报,大多数的链路层都会对它进行分片。而且,主机并不要求接收超过576字节的数据报。由于TCP把用户数据分成若干片,因此一般来说,这个限制不会影响TCP.


            标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1.
       
            TTL(Time To Live)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。TTL的初始值有源主机设置(通常为32或64),一旦经过了一个处理它的路由器,它的值就减1.当该字段的值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。


            协议字段,之前已经讨论过,根据它可以识别时哪个协议向IP传送数据。
       
            首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。ICMP和IGMP,UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据检验和码。
       
            为了计算一份数据报的IP检验和,首先把检验和字段设置为0.然后,对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检验和字段中。当收到一份数据报后,同样对首部中每个16bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中
没有发生任何差错,那么接收方计算的结构应该全为1.如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。


            ICMP,IGMP,UDP和TCP都采用相同的检验和算法,尽管TCP和UDP除了本省的首部和数据外,在IP首部中还包含了不同的字段。
       
            每一份数据报都包含源IP地址和目的IP地址。它们都是32bit的值。
       
            最后一个字段是任选项,是数据报中的一个可变长的可选信息。目前,这些任选项定义如下:
       
            安全和处理限制(用于军事目的)
            记录路径(让每个路由器都记下它的IP地址)
            时间戳(让每个路由器都记下它的IP地址和时间)
            宽松的源站选路(为数据报指定一系列必须经过的IP地址)
            严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能经过其他的地址。)
       
           选项字段一直都是以32bit作为界限,在必要的时候插入值为0的填充字节。这样就保证IP首部始终都是32bit的整数倍。
       
           IP路由选择:
       
           从概念上来说,IP路由选择是简单的,特别对于主机来说。如果目的主机与源主机字节相连或都在一个共享网络上,那么IP数据报就直接发送到目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。


           在一般的体制中,IP可以从TCP,UDP,ICMP和IGMP接收数据报并进行发送,或者从一个网络接口接收数据报并进行发送。IP层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果确实是这样,数据报就被送到由IP首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么:


           1,如果IP层被设置为路由器的功能,那么就对数据报进行转发。
           2,否则数据报被丢弃。
        
           路由表中的每一项都包含下面这些信息。
        
          1,目的IP地址,它既可以是一个完整的主机地址,也可以说一个网路地址,由该表目中的标志字段来指定。主机地址有一个非0的主机号,以指定某一特定的主机,而网络地址中的主机号为0,以指定网络中的所有主机。


          2,下一站(或下一跳)路由器的IP地址,或者有直接连接的网络IP地址,下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报,下一站路由器不是最终的目的。但是它可以将传送给它的数据报转发到最终目的。


          3,标志,其中一个标志指明目的IP地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接相连的接口。
        
          4,为数据报的传输指定一个网络接口。
        
          IP路由选择是逐跳地进行的,从路由表信息来看,IP并不知道到达任何目的完整路径。所有的IP路由选择只为数据报传输提供下一站路由器IP地址。
        
          IP路由选择主要完成以下功能:
        
          1,搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配),如果找到,则把报文发给该表目指定的下一站路由器或直接连接的网络接口。
          2,搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文送给该表目指定的下一站路由器或直接连接的网络接口。目的网络上的所有主机都可以通过这个表目来处置。这种搜索网络的匹配方法必须考虑可能的子网掩码。
          3,搜索路由表,寻找标为默认的表目。如果找到,则把报文发送给该表目指定的下一站路由器。
        
         如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个主机不可达,网络不可达的错误。
        
         完整主机地址匹配在网络号匹配之前执行。只有当它们都失败后才选择默认路由器。默认路由器,以及下一站路由器发送的ICMP重定向报文(如果我们为数据报选择了错误的默认路由器)是IP路由器机制中功能强大的特性。


         子网寻址:
        
         现在所有的主机都要求支持子网寻址(RFC 950).不是把IP地址看成单纯的一个网络号和一个主机号组成。而是把主机号再分成一个子网号和一个主机号。
        
         子网掩码:
        
         任何主机在引导时进行的部分配置是指定主机的IP地址。大多数系统把IP地址存在一个磁盘文件里供引导时使用。
        
         除了IP地址以外,主机还需要知道有多少比特用于子网号及多少比特用于主机号。这是在引导过程中通过子网掩码来确定的。这个掩码一般是一个32bit的值,其中值为1的比特留给网络号和子网号,为0的比特留给主机号。


         


        尽管IP地址一般都以点分十进制方法表示,子网掩码却经常用十六进制来表示,特别是当界限不是一个字节时,因为子网掩码是一个比特掩码。
        
        给定IP地址和子网掩码后,主机就可以确定IP数据报的目的是:
        
        1,本子网上的主机。
        2,本网络中其他子网中的主机。
        3,其他网路中的主机。
        如果知道本机的IP地址,那么就知道它是否为A类,B类,C类地址,也就知道网络号和子网号之间的分界线。而根据子网掩码就可知道子网号和主机号之间的分界线。
        
        特殊情况的IP地址:
        
        经过子网划分的描述,现在介绍7个特殊的IP地址。如图所示,在这个图中,0表示所有的比特位全为0,-1表示所有的比特位全为1.netid ,sudnetid,hostid分别表示不为全0或全1的对应字段。子网号栏为空表示该地址没有进行子网划分。


        我们把这个表分成三个部分。表的头两项是特殊的源地址,中间项是特殊的环回地址,最后四项是广播地址。
        
        表中的头两项,网络号为0,如果主机使用BOOTP协议确定本机IP地址时只能作为初始化过程中的源地址出现。
原创粉丝点击