其他分享
首页 > 其他分享> > IP协议及其它的小弟 ,我保证没人会看的

IP协议及其它的小弟 ,我保证没人会看的

作者:互联网

IP协议及其它的小弟


IP协议:127.0.0.1就一个32位的标识符.实际上:
类似这样的:

精神小伙慢慢看吧.我赌一包辣条你是不会认真看完的.

IP协议的构成

地址解析协议 ARP

前面的叙述中我们看到知道了IP地址的基本含义.但是如何从逻辑的IP对应到真是的物理地址(MAC)上,这就是ARP的内容.
地址解析协议ARP就是在主机的ARP高速缓存中存放一个IP地址到硬件地址的映射表,并且这个映射表经常的动态更新(更新或超时删除)
在win上查看APR缓存中具体的内容:

arp -a

手动的配置arp映射,静态表示管理员设定的

arp -s 196.128.1.2  01-00-5e-7f-ff-fa 

APR运行的过程:

  1. ARP进程在本局域网上发送一个SRP请求分组. 发送一个主要信息为:"我的IP地址是209.0.0.5,硬件地址是00-00-c0-12-ad-13.我想知道IP地址为1-9.0.0.6 的主机硬件地址"
  2. 本局域网上的所有主机的ARP进程都收到此ARP请求的分组.
  3. 主机B的IP地址与ARP请求分组中要查询的IP地址一致.就收下这个ARP请求分组,并向主机A发送ARP响应分组.在这个分组中写入自己的MAC地址.由于其余的主机的IP地址都与ARP地址中要查询的IP不同不一致,对该请求不予理睬.虽然ARP分组是广播发送的,但ARP分组是普通的单播,及就是从一个地址发送到另一个地址
  4. 主机A接受到主机B的相应ARP分组,在ARP高速缓存中写入主机B的IP地址到硬件地址的映射.
    所以APR协议是处理在同一局域网中传输的,不经过网关(路由器).
    如果B主机不在同一个局域网中, 因此主机把IP数据转发给R1路由器(连接的路由器).然后路由器负责下一跳.最终一个路由器使用ARP协议解析到B的硬件地址,将数据发送到对应的主机.

使用ARP协议的典型的四种情况

  1. 发送主机H1要把IP数据报发送到同一网络上的另一台主机H2.这时ARP发送ARP广播(在网1上广播),找到H2的MAC地址
  2. 发送主机,要把数据报发送到另一台网络上的主机(H3).发送ARP广播,找到一个路由(R1)的MAC地址.
  3. 发送方是路由(R1),要把IP数据报转发到网3上的一台主机(H4).H4不与R1连接在同一个网络上,这是ARP发送分组(在网2上广播),找到连接网络2上的一个路由R2的硬件地址,
  4. 发送方式路由R2,要把数据发送到H4,在同一网络上,使用ARP广播,找到H4的地址
    以上基本就是全部的情况了.

IP数据报的格式

在IP数据报中,首部的长度是可变的.

  1. 版本 占4位,指的是IP的协议的版本常用的IPv4, IPv6.
  2. 首部长度 占4位. 值从5到15(1111H).表示了IP数据报的首部长度.因为规定的固定的长度是20个字节.5代表的是5个4个字节(一个int类型大小).为15时,表明首部的长度为15*4个字节(60个字节).
  3. 区分服务:区分服务,一般不使用该字节
  4. 总长度2 16-1 个字节.实际上实际的长度极少遇到.
    因为在数据链路层协议规定了数据字段的最大长度(MTU).当IP数据报过长,就必须进行片分处理. 虽然长度大,IP数据报总可携带的有用信息就越多. 当时会影响路由的转发速度.因此IP协议规定,互联网上所有的主机和路由,必须能接受的长度不超过576字节
  5. 标识 占16位.IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并赋值给此字段. 但是这个字段并不是所谓的序号,IP是无连接的服务前面提到过. 数据报不存在按序接受的问题.当数据报的长度超过MTU.必须分片时,这个表示字段的值就被赋值到了所有数据段的标识字段中.以便重组为一个数据报
  6. 标志: 占3位:
  1. 片偏移: 较长的分组在分片后,某片相对于原分组中的位置,以8个字节为单位计算的偏移
  2. 生存时间: TTL,数据报在网络上的寿命.后改为跳数限制
  3. 协议: 上层使用的协议例如:TCP为6 UDP为17
  4. 首部校验和: 只检验首部,采用划分为16个字节,并发检验和的字段清空.用反码运算,把所有所有的16的字段相加,将得到的反码在写入检验和字段中.
    接受方接受到后,在使用反码运算相加一次.结果为0,表示没有发送差错,保留.否则丢弃.
  5. 数据报可变的部分.一般不使用,在IPv6首部长度为固定.

IP层转发分组的流程

下面先简单的例子说明如何路由器如果简单的转发分组.

先有四个A类网络通过三个路由连接在一起.每个路由上可能存在上万台主机.若路由表指出其他网络中每个主机如何转发,那么所维护的路由表就比较非常的大了. 但是路由器只需要指出到某个网络如何转发那么只需要4条路由表.
假设: 我们以路由器R2为例,由于R2同时连接在网2和网3上,因此只要目的主机在R2和R3上,都可以通过接口0和接口1由路由直接交付到对应的主机上.
若目标地址在网络1中,则下一跳的路由器为R1,其IP地址为20.0.0.7.路由器R2和R1同时连接在网2上,所以路由器R2把分组转发到R1还是比较的容易的.
需要注意的是图中的每个路由都有两个不同的IP地址
我们可以把整个网络简化层上图中b图简单的拓扑.
在路由表中最主要的两条信息:

(目标地址:下一跳地址)

其中一个实际的路由中还存在其他的信息.例如:标志,参考计数,使用情况,接口等.标志 U 表示 该路由是可用的,G表示下一跳是一个路由器,因而是间接交付 , 不设置则是直接交付. H表示该路由是到一台主机.参考计数 是给出正在使用该网络路由的TCP连接数.使用情况 显示出通过该路由的分组数 接口是本地接口的名称,指出分组应该从哪个接口转发.

分组转发算法

上面我们会疑惑,在IP数据报中只有源IP地址和目标IP地址,是如何找到下一逃的?这里使用了分组转发算法,如下:

  1. 从数据报的首部提取目标IP地址D,得到目标网络地址为N
  2. 若N就是与此路由器直接相连的某个网络地址,则进行直接交付.否则,使用间接交付(3)
  3. 如果路由表中有目的地址D的路由,则把数据报传送给路由表中所指明的下一跳路由,否则执行(5)
  4. 若路由中有一个默认的路由,则把数据报传送给路由表中所指明的下一跳路由. 否则,执行(6)
  5. 报告转发分组出错
    这里说明:路由表并没有给出指明到某个网络的完整路由(及就是先进过那个路由,在进过那个路由) .路由表仅仅指出,到某个网络应先到某个路由(即下一跳路由).在下一跳路由中,在继续的查找路由.一步步的执行下去就最终可以到达.
    几个例子: 从家门口开车到机场,但是没有地图.不知道走那条路,好在每个岔路口都有一个警察可以询问.因此每到一个岔口,就询问到机场如何的走.警察就仅仅指出到到下一个岔口如何走,虽然没有地图,但是可以最终到达.
    上面讨论的IP层怎么基于路由表转发,但是没有说明如何建立路由表,以及路由表如何更新.下面先建立一些必要的知识,做铺垫.

划分子网和构建超网

划分子网

  1. 从两级IP地址到三级IP地址
    在种ARPANET的早期IP地址,在今天已经不再适用了.
IP地址::={<网络号>,<子网号>,<主机号>}

凡是从其他的网络发送给本单位的某台主机IP数据报,仍然是IP数据包找到连接本单位网络上的路由器,通过路由器在把IP数据报转交付给目标主机,假设某个单位拥有145.12.x.x的B类地址.但凡是145.12.x.x都交付给这个网络上的某个总路由.该路由在进行分发处理.
2. 子网掩码
现在剩下了一个问题.假设有一个数据段(其目标地址是145.13.3.10)已经到达路由器R1.那么这个路由如何把它转发到子网上哪? 之前是两级的结构,转发到了某个网络上,直接存在对应的主机号,可以直接交付或者间接交付.但是现在,数据报到达这个网络上,不知道主机在那个子网上,如何处理. 这时使用了子网掩码(subnet mask) 的解决办法.

上图中 IP地址为145.13.3.10 的主机本来是两级IP.图中的(b)是对应的两级IP地址的子网掩码. (c)是同一地址的三级IP地址结构.也就是说对应的从原来的16位主机号中拿出了8位作为子网号,而主机号由16位减少到了对应的8位.现在子网号为 3的网络地址是145.13.3.0(既不是原来的两级IP地址,也不是简单的子网号为3).为了让路由器R1(总路由器)能够很方便的从数据报中的目的地址IP中获取所对应的子网掩码.路由器R1就要使用三级IP地址的子网掩码.图(d)就是对应三级IP地址的子网掩码.它也是32位,由一串24个1和跟随8个0构成.子网掩码中的1对应域IP地址中原来两级IP地址中的16位网络号加上新增8位子网络号.而子网掩码中共的0对应现在的8位主机号.
图(e),表示半三级的IP地址的子网掩码和接受带的数据报的目的IP地址145.13.3.10 逐位相与运算得出了所要找的子网的网络地址145.13.3.0
使用子网运算的好处就是: 不管网络有没有划分子网.只要把子网掩码和IP地址进行与运算(用连续的1或0来),就立即得出网络地址来.这样路由器处理到来的分组就可以采用相同的算法

子网掩码的划分

如果一个一个网络没有子网.则使用默认的子网掩码.
下面是三类子网掩码的默认值

子网掩码是一个网络或者一个子网的重要属性.目前已经是互联网正式标准之一.路由器在和相邻的路由器交换路由信息,必须把自己的所在的网络(或子网)的子网掩码高速相邻的路由器. 在路由器中的映射表中还有对应的网络的子网掩码. 若一个路由器连接两个子网上,就必须拥有两个网络地址和子网掩码.
在子网划分中全为1或者全为0和1,因为这样的划分对这种子网没有意义.随着无分类路由选择CIDR广泛使用.现在全为0,或者全为1的可以使用.但是需要知道路选择软件是否支持这种比较新的划分方式.
同时,子网的划分增加了灵活性,当时却减少了可以连接在网络上的主机数

使用子网时的分组转发

在划分子网的情况下,分组转发算法也必须的改变.

  1. 从收到的数据报的首部提取目的地址IP地址D
  2. 先判断是否为直接交付,对路由器直接向连的网络逐个进行检查.要个网络的子网络掩码和D逐位相与操作.看结果是否和相应的网络地址匹配.若匹配则把分组进行直接交付.否则间接交付执行(3)
  3. 若路由中有目的地址为D的特定路由,则把数据报传送给路由表中指明的下一跳地址.否则执行(4)
  4. 对路由表中的每一行(目的网络地址,子网掩码,下一跳地址).用其中的子网掩码和D逐位相与,其结果为N.若N与该行的目标地址网络目标地址匹配,则把 数据报传送给该行指明的下一跳路由器,否则执行(5)
  5. 若路由器表中有一个默认路由,则把数据报传送给路由表所指明的默认路由器.否则执行(6)
  6. 报告转发分组错误

无分类编制CIDR(构造超网)

划分子网咋一定的程度上环节了互联网在发展的过程中遇到困难.然而在1992年互联网必须尽早解决的问题:

  1. B类地址,早在1992年分配了将近一半,眼看就要分配完毕
  2. 互联网主干网上的路由表中的数目在急剧的增长(几千个增长为几万个)
  3. 整个IPv4的地址空间最终会全部耗尽.在2014年2月3日,IANA宣布IPv4地址已经耗尽了.
    当预计的前两个问题将在1994年变得非常的严重,因此IETF很快的研究出了无分类编制的方式来解决前两个问题. 第三个问题属于比较长远的问题.因此成立IPv6工作组来负责研究新版本IP协议的问题

CIRD最主要的两个特点

  1. 消除了传统的A类,B类和C类以及子网之间的划分.因而能更加有效的使用IP地址空间.CIDR把32位的IP地址划分为两个部分. 前面是网络前缀(network-prefix)用来指明网络.后面的部分则用来指明主机.
Ip地址::={<网络前缀>,<主机号>}

CIDR还使用斜线记法 或成为CIDR地址块 .即就是在IP地址后面加上"/"来表示网络前缀所占的个数
2. CIRD把网络前缀相同的连续IP组成一个CIDR地址块.我们只要知道CIDR地址块中任何一个地址.就可以知道这个地址块中的起始地址和最大地址,以及地址块中的个数.
例如已知IP地址的为128.14.35.7/20.那么可以得到最小的地址为128.14.32.0
最大的地址为128.14.47.255 .当然主机号全为0和全为1一般不使用.
同样这里也使用了类似子网掩码的功能地址掩码作用差不多.
由于一个CIDR地址块中有很多的地址,所在在路由表中就利用CIDR地址块来查找目的网络.

最长前缀匹配

因为的前缀的可变的,所以在匹配的过程中可能会有多个结果.处理办法是 : 应当从匹配结果中选择具有最长网络前缀的路由. 这叫做最长前缀匹配(longest -prefix matching)

使用二叉树匹配

将IP的前缀用二叉查找数来组织.从二叉树的根节点自顶向下的深度最多有32层,每层对应于IP地址中的每一位.
为了提高二叉树的查找速度,还广泛的应用各种压缩技术.例如只要前面的4位是1101,就可以直接跳过前面的4层,查找的过程,直接从第五层在开始.
同样,在使用二叉线索树时,还必须使二叉树中的每一个节点包含对应的网络前缀和子网掩码.当搜索一个叶节点时,就必须将寻找匹配的目标地址和所对应的该叶节点的子网掩码进行位的相与运算. 看结果是否对应的网络前缀匹配.若匹配则 按下一跳的接口转发该分组,否则,则丢弃该分组.

网间控制报文协议ICMP

为了更有效的转发IP数据报和提高交付成功的机会.在网际层使用了网际控制报文协议ICMP(Internet Control Message Protocol).ICMP允许主机或者路由报告差错情况和提供有关异常情况的报告. ICMP是互联网标准协议.但是ICMP不是高层协议,尽管他封装在IP数据报中.

ICMP的数据格式

ICMP报文的种类

ICMP报文类型有两种,即ICMP差错报文和ICMP询问报文
ICMP的前4个字节是同一格式的.共有三个字段: 类型,代码和检验和.接着的4个字段的内容和ICMP的类型有关.最后面是数据字段,其长度取决与ICMP的类型.

  1. 对ICMP差错报告报文,不在发送ICMP差错报告报文
  2. 对第一个分片的数据报的所有后续数据片报,都不发送ICMP差错报告报文
  3. 对具有多播地址的数据报,都不发送ICMP差错报告报文
  4. 对特殊地址的数据报

ICMP的应用举例

分组网间探测 PING(Packet InterNet Groper),用来探测两台主机之间的连通性.

互联网的路由选择协议

这里讨论的路由表是这样得出的
可以分为静态路由选择策略和动态路由选择策略.静态路由策略就是管理员手动的配置.

分层次的路由选择协议

把整个互联网化为许多比较小的自治系统(autoonmous system),一般记为AS,自治系统一般是在单一技术管理下的一组路由.而这些路由器使用一个自治系统内部的路由选择协议和共同的度量 .一个AS对其他的AS表现出的是单一的和一致的路由选择策略.
AS具体点就是一个实体管辖内所有的路由,PC,服务器,防火墙,具有相同选路策略的IP网络.
在目前的互联网中,一个大的ISP就是一个自治系统.这样互联网选择协议划分为2类:

内部网关协议RIP

RIP是内部网关协议IGP中国最先广泛使用的协议.它的中文名称叫做路由信息协议(Routing Information Protocol) 最大的优点是简单

  1. RIP定义的距离也称为跳数,因为每经过一个路由器,跳数就加1,认为好的路由就是它通过的路由数目最小 .RIP允许一条路径最多包含15个路由器
    RIP路由交换信息的特点:
  2. 仅和相邻的路由器交换信息.
  3. 路由器交换信息是当前目的本路由器所知道的全部信息,即就是现在自己的路由表. 交换的信息就是: 我倒本自治系统中所有网络(最短)距离,以及到每个网络经过的下一跳路由.
  4. 按照固定的时间间隔交换路由信息.
    在路由表中最主要的信息就是:到某个网络的距离.以及经过的下一跳地址. 路由表更新的原则找出每个网络的最短距离.这种更新的算法又称为向量距离算法.

向量距离算法

  1. 地址为X的相邻路由器发过来RIP报文,先修改报文中的所有项目:把下一跳的字段都改为X,并把所有的距离加1.每个项目都有三个关键数据 到目的网络N,距离是D ,下一条跳路由是X(注意这不是主机的信息交换,是路由器的信息交换 )
对修改后的RIP报文中的每一个项目,进行一下的步骤: 
若原来的路由表中没有目的网络N,把该项目添加到路由表中  
 否则 (在路由表中存在目的网络N,这是在查看下一跳路由器地址)
    若下一跳的路由器是X,则把收到的项目替换成原路由表中的项目 
    否则(即这个项目是:到目的网络N,但是下一跳路由器不是X)
        若收到的项目中的距离小于路由表中的距离,则进行更新 
            否则啥事不做          
  1. 若是三分钟还没有收到相邻路由表的更新路由表,则把次路由表记为不可达的路由器,即把距离置为16 (不可达)
  2. 返回
    缺点:
    RIP协议对于故障的反应比较的慢(数分钟). 好消息传播快,坏消息传播慢.
    RIP的距离也限制的应用的大小.

内部网关协议OSPF

这个协议的名字是 开发最短路径优先OSPF(Open Short Path First).这是为了克服RIP缺点在1989年开发出来的. 借鉴了Dijkstra提出的最短路径算法SPF.
实际上自治系统内部都是在寻找最短的路径.
OSPF简单的描述:

  1. 向本自治系统系统中 所有路由发送信息.这里使用的是泛方法. 这就是路由器通过所有的输出端口发消息.而相邻的接口又将此消息发送给对应的其相邻的路由.最终整个区域中的网络都可以接受到该消息的副本.
  2. 发送的消息就是与本路由器相邻的所有路由器的链路状态.但这只是路由器所知道的部分信息.所谓链路状态就是说明路由器都和那些路由器相邻. 以及路由的量度 用来表示费用,距离,时延,宽带.
  3. 当链路发生变化才发送这种消息.
    由于各路由器之间频繁的交互信息,因此所有的链路都能建立一个链路状态数据库(link-state database) ,这个数据库就是全为的拓扑结构. 在每个自治系统中划分在划分为子区域.以减轻每个路由中维护的数据.一般一个区域中的路由数不超过200个. 在采用层次划分的思想,可以使得范围变得很大.

。主干区域的标识符是0.0.0.0,主干区域的作用是用来连通其他在下层的区域。从其他区域来的信息都由区域边界路由器进行概括。如图中的R3、R4和R7都是区域边界路由器,每个区域至少有一个区域边界路由器。

在主干区域的路由器叫做主干路由器,如R3、R4、R5、R6、R7。在主干系统中还有一个路由器专门用于本自治系统和其他自治系统交换路由信息,叫做自治系统边界路由器,如图中的R6。

OSPF华为技术文档 是在写不动了...

OSPF的数据格式

OSPF的不是使用UDP而是直接使用IP数据格式.OSPF数据报构成的数据报非常的短.这样可减少路由信息的通信量.数据报短的另一个好处是,可以将不必长的数据报分片传送.分片传输的数据报只要少一个,就无法组装成原来的数据报,因而整个数据报需要重传.
OSPF分组使用24字节的固定长度,分组的数据报部分可以是五种分组中的一种.

其中的各个字段的介绍:

OSPF特点:

  1. 允许管理员可以给每个路由设置不同的代价. 同样可以给每种类型设置不同的链路.比较灵活的寻找路由
  2. 如果多条相同的路径,那么可以将通信分配给几条链路.实现多路径间的负载均衡
  3. 所有在OSPF路由之间交换分组都具有鉴别的功能,因而保证了仅在可信的路由之间交换链路信息.
  4. OSPF支持可变长度的子网划分和无分类编址CIDR
  5. 由于网络中的链路状态可能时常的划分变化.因此OSPF让每一个链路状态都带上一个32位的序列号,序列号越大状态就越新 .
    OSPF的五种分组类型
  6. 问候分组: 发现和维持可达性
  7. 数据库描述(Databata Description) 向临站给出自己的链路状态数据库中的所有链路状态项目的摘要信息
  8. 链路状态请求: (Link State Request)
  9. 链路状态更新
  10. 链路状态确认

外网网关协议BGP (就是EGP的一个典型的代表)

BGP全称是Border Gateway Protocol, 对应中文是边界网关协议.BGP是互联网上一个核心的去中心化自治路由协议。从这个解释来看,首先这是一个用于互联网(Internet)上的路由协议。它的地位是核心的(目前是最重要的,互联网上唯一使用的路由协议),它的目的是去中心化,以达到各个网络自治。简而言之,BGP号称是使互联网工作的协议.

使用BGP的主要原因:

IP多播

多播是解决类似视频服务类似的问题.在一对多通信中,多播可以大大的节约网络资源.

造上面的图中可以看出,单播对主机的要求比较的高,而多播需要路由器相应的支持. 为了适应交互式音频和视频信息.在互连网上实验虚拟的多播主干网MBONE
多播组的标识符就是D类地址.D类地址的前4位位1110.因此D类的地址为224.0.0.0到224.255.255.255 多播数据报也是尽最大努力的交付 不保证一定能够交付多播组内的所有成员. 在首部的中协议的字段值是2,表明使用的网际组管理协议IGMP.
多播地址只能用于目的地址,不能用于源地址.此外,对多播数据包不产生ICMP报文.因此在ping命令后面键入D类地址,永远不会受到相应.
IP多播可以分为两种: 只在本局域网的多播,和在互联网上的多播.IGMP就是在IP多播使用的一种协议.

标签:IP,地址,小弟,没人会,IP地址,路由表,路由,路由器
来源: https://www.cnblogs.com/king0/p/12907481.html