zoukankan      html  css  js  c++  java
  • 第二章、IP协议详解

    一、IP服务的的特点

    IP协议是TCP/IP协议族的动力,他为上层协议提供的无状态无连接,不可靠的服务。

      无状态是指IP通信双方不同步传输数据的状态信息,因此所有的ip数据报的发送,传出和接受都是相互独立的,没有上下文的联系。这种服务最大的缺点就是无法处理乱序和重复的IP数据报。比如,发送端发送出的第N个数据包可能逼第N+1个报文段后到达接收端,而同一个IP数据报也可能经过不同的路径多次到达接收端。IP数据报头部提供了一个标识字段用以唯一的标识一个 IP数据报,但它是被用来处理IP分片和重组的,而不是用来指示接受顺序的。

      无状态的优点也有,简单高效,我们无须为保持通信的状态而分配一些内核资源,也无需每次传输数据是都携带上状态信息。网络协议中,无状态是很常见的,比如UDP协议和HTTP协议就是无状态连接。以HTTP协议为例,一个浏览器连续俩次网页请求之间没有任何关系,他将被web服务器独立的处理。

      无连接是指IP通信双方都不长久的维持对方的任何信息,这样,上层协议每次发送数据报的时候,都必须明确指定对方的ip地址。

      不可靠是指IP协议不能保证数据报准确的到达接收端,他只是承诺尽最大努力。导致IP数据报发送失败。

    二、IPV4头部结构。

      iPV4头部结构如下图,其长度通常为20字节,除非含有可变长的选项部分。

    4位版本号 4位头部长度 8位服务类型 16位总长度(字节数)
    8位生存时间TTL 8位协议 16位头部校验和
    32位源端IP地址
    32位目的端IP地址
    选项,最多40个字节

    4位版本号:制定IP协议的版本。

    4位头部长度:标识该IP头部有多少个32bit字,因为4位是最大能表示15,所以IP头部最长是60字节。

    8位服务类型:

    16位总长度是指整个UP数据包的长度。

    16位标识唯一标识主机发送的每一个报文段。

    三、IP分片。

       前面提到,当IP数据报长度超过帧MTU时候,他将被分片传输。分片可能发送在发送端,也可能发生在中转的路由器上,而且可能在传输过程中被多次分片,但是只有在最终的目标机器上,这些分片才会被内核中的IP这些分片才会被内核中的IP模块重新组装。

      IP数据包头部:数据报标识,标志和片偏移。一个IP数据报的每个IP数据分片都有自己的IP头部,他们具有相同的标识值,但是具有不同的片偏移。并且除了最后一个分片外,其它分片都将设置MF标志。此外,每个分片的IP头部的总长度将被设置为该分片的长度。

      以太网,帧的长度为MTU1500字节,因此他携带的IP数据报的数据部分最多是1480字节,(IP头部需要占20字节)。考虑,用IP数据报文封装一个长度为1481字节的ICMP报文(包括ICMP头部8字节,所以长度是1473字节),则该数据报在使用以太网帧传输的时候必须被分片。

    四、IP路由。

      IP协议的一个核心任务就是数据包的路由,即确定发送数据报到目标机器的路径。为了理解IP路由过程,我们先简要分析IP模块的基本工作流程。

    1、IP模块工作流程:当IP模块接受来自数据链路层的IP数据报的时候,他首先对该数据报进行CRC校验,确认无误之后就分析其头部的具体信息。如果该数据包头部设置了源站选路选项,则,IP模块调用数据包转发子模块来处理该数据报。如果该IP数据报的头部中目标IP地址是本机的某个IP地址,或者广播地址,就是该数据报是发送给本机的,则IP模块就根据数据包头部中的协议字段来决定发给那个上层应用。如果IP模块发现这个数据包不是发送给本机的,则也调用数据包转发子模块来处理该数据报。

      数据包转发子模块将首先检测系统是够允许转发,如果不允许,IP模块就将数据包丢弃。如果允许,数据包转发子模块将对该数据包执行一些操作,然后将它交给IP数据报输出子模块。

      IP数据报应该发送给哪个下一跳路由(或者目标机器),以及经过那个网卡来发送,就是IP数据报路由过程。IP模块实现数据包路由的核心数据结构是路由表。这个表按照数据报的目标IP地址分类,同一类型的IP数据报将被发送往相同的下一跳路由(或是目标机器)。

      IP输出队列中存放的是所有等待发送的IP数据报,其中除了需要转发的IP数据报之外,还包括封装了本机上层数据(ICMP报文,TCP报文段和UDP数据报)的IP数据报。

    2、路由机制:;路由表是如何按照IP地址分类的?

    (1)查找路由表中和数据包的目标IP地址,完全匹配的主机ip地址。如果找到,就使用该路由项,没找到则转步骤2。

    (2)查找路由表中和数据包的目标IP地址具有相同的网路ID的网络IP地址。如果找到,就使用该路由项;没找到则跳转步骤3.

    (3)选择默认路由项,这通常意味着数据包的下一跳路由是网关。

    3、路由表更新。

      路由表必须能够更新,以反映网络连接的变化,这样的IP模块才能更准确,高效的穿法数据报。route命令可以修改路由表。

    五、IP转发。

    不是发送给本机的IP数据报转发子模块来处理。路由器都能执行数据包的转发操作,而主机一般只发送和接受数据报,这是因为主机上的讷河参数默认被设置为0,。我们可以通过修改他来使能主机的数据报转发功能。

    六、重定向。

    1、ICMP重定向报文。

    8位类型 8位代码 16位校验和
    应该使用的路由器的IP地址
    原始IP数据报的头部信息(包括可选字段)+数据部分的前8个字节

    ICMP报文头部的三个固定字段,8位类型,8位代码,16位校验和。ICMP重定向报文的类型是5,代码段由4个可选值,用来区分不同的重定向类型。

  • 相关阅读:
    Sitecore Digital Marketing System, Part 1: Creating personalized, custom content for site visitors(自定义SiteCore中的 Item的Personalize的Condition) -摘自网络
    Send email alert from Performance Monitor using PowerShell script (检测windows服务器的cpu 硬盘 服务等性能,发email的方法) -摘自网络
    使用Mono Cecil 动态获取运行时数据 (Atribute形式 进行注入 用于写Log) [此文报考 xxx is declared in another module and needs to be imported的解决方法]-摘自网络
    秒杀 ILSpy 等反编译利器 DotNet Resolver
    Nagios:企业级系统监控方案
    C# Asp.net中的AOP框架 Microsoft.CCI, Mono.Cecil, Typemock Open-AOP API, PostSharp -摘自网络 (可以利用反射 Attribute 进行面向切面编程 可以用在记录整个方法的Log方面)
    Windows性能监视器之CPU、硬盘、IO等监控方法详解-摘自网络
    网站防刷方案 -摘自网络
    利用XSD配合XSLT產出特定格式Word檔案 -摘自网络
    asp页面快速找到菜单按钮转向的页面的方法
  • 原文地址:https://www.cnblogs.com/yjds/p/8848862.html
Copyright © 2011-2022 走看看