详解IP协议(上)

梦想不抛弃苦心追求的人,只要不停止追求,你们会沐浴在梦想的光辉之中。再美好的梦想与目标,再完美的计划和方案,如果不能尽快在行动中落实,最终只能是纸上谈兵,空想一番。只要瞄准了大方向,坚持不懈地做下去,才能够扫除挡在梦想前面的障碍,实现美好的人生蓝图。详解IP协议(上),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、网络核心

线路交换(电路交换)

  • 适用于电话网络(固话/移动电话),连接建立时间长,独立资源,不共享,每个呼叫一旦建立就能够保证性能,不适合计算机之间的通信

  • 网络资源(如宽带)被分成片

    • 为呼叫分配片,如果某个呼叫没有数据,则资源处于空闲状态(不共享)

    • 将宽带分成片的方式:频分、时分、波分

      频分(FDM):将链路上的有效通信频率范围划分成若干个片,选择某个空闲的片进行通信

      时分(TMD):将时间周期分成若干个片,每个时间片给不同的用户使用

      波分(WDM):将链路间的波段可以分为若干个小的波段,给不同用户使用

分组交换

  • 存储转发,数据被分为多个packet,在每个网络节点把数据全量存下来,等待该网络节点链路空闲时,把数据发送到下一跳,依次类推一直到目标主机

  • 数据传输时长,除了发送时间和链路上传输的时间,还包含了数据包在网络节点排队的时间

  • 排队延迟和丢失

    • 如果到达速率>链路的输出速率,则分组将会排队,等待传输
    • 如果路由器(网络节点)的缓存用完了,分组将会被抛弃
  • 路由和转发

    • 路由:决定分组采用的源到目标的路径,有路由算法计算出到下一跳的路径
    • 转发:将分组路由器的输入链路转移到输出链路,具体转移到哪一个输出链路,则需要通过路由表来决定
  • 数据报(datagram)的工作原理

    • 通信之前,无须建立起一个连接,有数据就传
    • 每一个分组都独立路由(路径不一样,可能会失序)
    • 路由器根据分组的目标地址进行路由,到达下一跳
  • 虚电路的工作原理

    虚电路表体现在每个网络节点上,它存储了数据链路入口和数据链路出口

二、网络数据平面

网络层简介

  • 转发和路由选择:数据平面和控制平面

    • 转发

      将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作。转发是在数据平面实现的唯一功能。通过路由计算出来的转发表(路由表)进行转发。

    • 路由选择

      当分组从发送方流向接收方时,网络层决定这些分组所采用的路由或路径,每台网络路由器中有一个转发表,通过路由选择算法计算出转发表。

    • 转发功能

      传统方式:基于目标地址和转发表

      SDN方式:基于多个字段和流表

  • 控制平面

    • 传统方法

      路由选择算法运行在每台路由器中,一台路由器中的路由选择算法与其他路由器中路由选择算法通信,以计算出它的转发表的值。

    • SDN方法

      从路由器物理上分离的一种方法,由远程控制器计算和分发转发表以供每台路由器使用(远程控制器与本地控制代理CAs交互)。远程控制器可能实现在具有高可靠性和冗余的远程数据中心中,也可能由ISP或某些第三方管理。通过交换包含转发表和其他路由选择信息的报文,这种控制平面方法时软件定义网络(Soft-ware-Define Networking,SDN)的本质

  • 网络层服务

    • 在发送主机和接收主机对之间传送段(segment)
    • 在发送端将段封装在数据报中
    • 在接收端,将段上传给传输层实体
    • 网络层协议存在于每一个主机和路由器
    • 路由器检查每一个经过它的IP数据报的头部

路由器工作原理

通用路由器体系结构:

在这里插入图片描述

  • 路由器概况

    • 路由

      运行路由选择算法/协议(RIP,OSPF,BGP)-生成路由表

    • 转发

      从输入到输出链路交换数据报-根据路由表进行分组的转发

  • 路由器结构

    • 输入端口

      在上图的路由器通用系统结构中,输入端口包含了物理层、链路层和网络层,在网络层通过查找转发表决定路由器的输出端口。到达的分组通过路由器的交换结构转发到输出端口。

    • 交换结构

      将路由器的输入端口连接到它的输出端口

    • 输出端口

      输出端口存储从交换结构接收的分组,并执行链路层和物理层功能在输出链路上传输这些分组。当一条链路是双向的时(即承载两个方向的流量),输出端口通常与该链路的输入端口成对出现在同一线路卡上。

    • 路由选择处理器

      在传统路由器中,执行路由选择协议,维护路由选择表与关联链路信息,并为该路由器计算转发表。在SDN路由器中,路由选择处理器负责与远程控制器通信,目的是接收由远程控制器计算的转发表项,并在该路由器的输入端口安装这些表项。

  • 路由器结构功能

    • 输入端口

      功能:

      • 物理层将物理信号(光/波)转换为数字信息,Bit级别接收
      • 链路层协议协作、解封装,判断报文中的MAC地址是否与路由器的MAC地址相等
      • 网络层缓存到达的分组,然后通过路由表,计算输出端口。

      分布式交换

      • 根据数据报头部的信息如:目的地址,在输入端口内存中的转发表中查找合适的输出端口(匹配+行动)

      • 基于目标的转发

        仅仅依赖于IP数据报的目标IP地址(传统方法)

      • 通用转发

        基于头部字段的任意集合进行转发

      缓存:

      • 当交换结构的速率小于输入端口的汇聚速率时,在输入端口可能要排队

        造成排队延迟以及由于缓存溢出造成丢失!

      • 排在队头的数据报阻止了队列中其他数据报向前移动

        输出端口竞争(多个输入端口队头分组路由到同一个输出端口):

        假设由A、B、C三个输入端口队头分组都被路由到同一个输出端口,这是只有一个输入端口将在交换结构中进行转发,而剩余两个输入端口被阻塞,这时,由于队列头的分组被阻塞,这两个输入端口缓存中的其他分组也被阻塞。

    • 交换结构

      交换速率:分组可以按照该速率从输入传输到输出

      运行速率通常是输入/输出链路速率的若干倍

      N个输入端口:交换结构的交换速率速度是输入线路速度的N倍时比较理想,才不会成为瓶颈,否则将导致大量延迟和丢包

      三种典型的交换机构:

      • 内存交换

        在CPU(路由选择处理器)直接控制下交换,分组被拷贝到系统内存,然后从分组头部取出目标地址,查找转发表,找到对应的输出端口,拷贝到输出端口,转发速率被内存的宽带限制(数据报通过BUS两遍),一次只能转发一个分组

      • 总线交换

        输入端口为分组预先计划一个内部标签(首部),指示本地输出端口,使分组在总线上传送和传输到输出端口。所有输出端口都可以收到该分组,通过匹配标签判断是否从当前输出端口输出。

        • 数据报通过总线交换,从输入端发送分组到总线
        • 总线竞争:交换速度受限与总线带宽
        • 一次只能处理一个分组
      • 互联网络交换

        由2N条总线组成的互联网络(输入端口和输出端口纵横交叉),同时并转发多个分组,克服总线带宽限制

      在这里插入图片描述
      当分组从端口A到达,转给转口Y,控制器短接相应的两个总线

    • 输出端口

      • 当数据报从交换机构转出的速率大于输出端口转出速率,就需要输出端口缓存(同输入端口缓存)

        排队带来延迟,由于输出端口缓存溢出则丢弃数据报!

      • 由调度规则选择排队的数据报进行传输

  • 调度机制

    调度:选择下一个要通过链路传输的分组

    丢弃策略:如果分组达到一个满的等待队列,哪个分组将会被抛弃?

    • tail drop:丢弃刚到达的分组
    • priority:根据优先权丢失/移除分组
    • random:随机地丢弃/移除

    调度策略:

    • 先进先出(First-In-First-Out,FIFO)

      按照分组到来的次序发送

    • 优先权排队

      优先权调度:发送最高优先权的分组

      多类分组:不同类别有不同的优先权(流媒体数据优先级高)

      不同优先级的分组使用不同的缓存队列

      • 类别可能依赖于标记或者其他的头部字段
      • 先传高优先级的队列中的分组,除非没有
      • 高低优先权队列中分组的传输次序:FIFO
    • Round Robin(RR) scheduling

      多类分组,循环扫描不同类型的分组,发送完一类的分组后,再发送下一类的一个分组,循环所有类。

      例如:一个队列中有红、蓝、白三个类型的分组,先发红的,再发蓝的,然后发白的,然后再按照红、蓝、白循环进行

    • 循环和加权公平排队(Weighted Fari Queuing WFQ)

      一般化的Round Robin,在一段时间内,每个队列得到的服务时间是:Wi/(XIGMA(Wi)) * t,和权重成正比

      每一类分组在每一个循环中获得不同权重的服务量

      例如:队列中有红、蓝、白三个类型的分组,其中红色权重50%,蓝色30%,白色20%,那么在输出端口的链路上,红色占用50%的带宽,蓝色占30%带宽,白色占20%带宽

IP协议

  • IPv4数据报文格式
    在这里插入图片描述

    • 版本号

      4个比特规定了数据报的IP协议版本(IPv4/IPv6),不同版本的协议使用不同的数据报格式

    • 首部长度

      用4个比特表示,以四个字节为单位的IP数据报头部长度,固定的4行,即header len = 20,表示20个字节,大多数IP数据报不包含选项,所以一般的IP数据报具有20字节的首部

    • 服务类型

      基本不用

    • 数据报长度

      用16个比特表示,IP数据报的总长度,包含首部和数据部分

    • 寿命(最大剩余段数)

      Time To Live(TTL),用8个比特表示IP数据报剩下的段数,确保数据报不会永远在网络中循环。IP数据报每经过一台路由器,该值就减一

    • 上层协议

      该字段仅当数据到达目的地时才会用,表示IP数据报的数据部分应该交给哪个特定的传输层协议(TCP/UDP)

    • 首部检验和

      与TCP/UDP的检验和不同,IP的检验和是首部检验和,只检验IP数据报的头部信息

    • 16比特标识/标志/13比特片偏移

      分片和重组使用

  • IPv4数据报分片

    在一条网络链路中,一个链路层帧能承载的最大数据量叫作最大传输单元(Maximum Transmision Unit,MTU),而一条链路中的MTU由链路中最小的链路层帧决定。

    如果一个IP数据报的长度大于MTU,则需要分片进行传输,分片的规则如下:

    分片前IP数据报:20字节头部+3800字节数据部分

    MTU=1500字节,除去20字节的IP头,数据部分只能容纳1480字节

    分片的IP数据报

    数据报P1 = 20字节头部+1480字节数据

    数据报P2 = 20字节头部+1480字节数据

    数据报P3 = 20字节头部+840字节数据

    在IP数据报首部有16比特标识/标志/13比特片偏移这三个字段

    16比特的标识表示分片前的IP数据报的ID,分片后P1、P2、P3具有相同的ID,标志位用于区分是否为最后一个分片,最后一个分片的标志比特被设为0,而其他的片的标志比特被设为1。偏移字段指定该片应该放在初始IP数据报的哪个位置。

  • IP编址

    • 引论

      • IP地址

        32位标示,对主机或者路由器的接口编址

      • 接口

        主机/路由器和物理链路的连接处

        • 路由器通常有多个接口(最少两个,入口和出口)
        • 主机也有可能有多个(通常一个)

        一个IP地址和一个接口相关联(一个接口就是一个IP)

    • 分类编址

      IP地址包含网络号和主机号,一个32位的IP地址,前x位表示网络号,后32-x位表示主机号,前面的网络号分配给不同的组织,在同一个组织内部,所有联网设备的IP地址具有相同的网络号前缀,后面的32-x位用于区分不同的主机等。

      例如:a.b.c.d/21 的前21定义了一个组织的网络前缀,后面的11位,可以用来分给组织内不同的子网,a.b.c.d/24

      较早时候,IP地址分为A、B、C、D、E五类地址

      A类地址:0 | 1—(2^8-2) | Host

      B类地址:10 | 1—(2^16-2) | Host

      C类地址:110 | 1—(2^24-2) | Host

      D类地址:1110|1—(2^28-2)

      E类地址:11110|1—(2^27-2)

      • 子网掩码
        在这里插入图片描述
        如上图所示,左边的三个主机接口与一个路由接口的网络形成了一个子网(subnet)。IP编址为这个子网分配一个地址223.1.1.0/24,其中/24记法,有时称为子网掩码,指示32比特中的最左侧的24比特定义了子网地址。有时候会将IP地址和子网掩码分开表示,如:

        IP地址:172.168.81.23

        子网掩码:255.255.255.0

        通过IP地址和子网掩码的按位与运算,可以得到子网前缀

      • 无类别域间路由选择

        因特网的地址分配策略采用无类别域间路由选择(Classless Interdomain Routing,CIDR)。

        子网部分可以在任意的地址,地址格式:a.b.c.d/x,其中x是地址中子网号的长度

        在网络中,按照网络号进行网络聚集,如上图所以,左边的三个主机接口的前24位一样,路由器通过一个接口可以给三个主机提供服务,这种能力称为地址聚集或路由聚合。

    • IP地址获取

      获取地址的方法:从ISP网络中获取它的一个子网范围,或者从IP地址分配机构获取

      获得一块IP地址后,可以为组织内的主机和路由器接口逐个分配IP地址,通常由网络管理员为路由器配置地址,主机地址也能手动配置,但目前更多是采用动态主机配置协议(Dynamic Host Configuration,DHCP)来完成。

      • DHCP协议

        DHCP协议允许主机自动获取(被分分配)一个IP地址。或者某主机被分配一个临时的IP地址,除了主机IP地址分配外,DHCP还告知它的子网掩码、默认网关(第一条路由地址)和本地DNS服务器的地址

      • 地址分配过程

        1. 一个新的主机到来时,首先需要通过DHCP发现报文发现DHCP服务器,客户端在UDP分组的67号端口发送报文,客户端生成的包含DHCP报文的IP数据报,使用广播目的地址255.255.255.255和本主机源IP地址0.0.0.0,将IP数据报通过链路层广播到所有与该子网连接的接口
        2. DHCP服务器收到DHCP发现报文时,用DHCP提供报文响应客户端,该报文向该子网的所有节点广播,仍然使用255.255.255.255广播地址。每台服务器提供的报文包含收到的发现报文的事务ID、向客户端推荐的IP地址、子网掩码以及IP地址租用期(IP有效的时间量)
        3. 客户从一个或多个服务器提供中选择一个IP地址,并向选中的服务器提供用DHCP请求报文进行响应,回显配置参数
        4. DHCP服务器确认,服务器使用DHCP ACK报文响应,证实所要求的参数
  • 网络地址转换(Network Address Translation,NAT)

    以家庭网络为例,家庭中的路由器接入子网的IP地址为218.192.25.31,但路由器为家庭联网设备分配的IP地址为10.01.25.1,如果这台设备用该IP地址封装IP数据报发送到公网,公网路由器是不认识它的,所以,需要路由器上的NAT转换表,将内部的IP地址转成外部的IP地址,内网的主机发送数据的IP和端口为:10.01.25.1:100,转换表将其转化为

    218.192.25.31:9527,这样路由器可以与外网进行通信,数据到来时,又可以通过转换表将数据报发送到具体的内网主机。

    NAT穿越:数据报的端口号属于传输层的信息,却在网络层进行了更改!

  • IPv6地址

    • IPv6数据报格式
      在这里插入图片描述

      • 版本同IPv4,IPv6将该字段设置为6
      • 流量类型,同IPv4的流量类型
      • 流标签:表示数据报的流,对一条流中的某些数据给出优先权,或者对某些应用(多媒体应用)的数据报给出更高的优先权
      • 有效载荷长度:IPv6数据报中跟在定长的40字节首部后面的字节数据量(数据部分)
      • 下一个首部:相当于IPv4的协议字段,指明数据报的内容交付哪个协议(TCP/UDP)
      • 跳限制:相当于IPv4的寿命(TTL),跳限制计数为0时,该数据报将会被抛弃
    • 与IPv4区别

      1. IPv6不支持分片和重组,如果发现IP数据报太大,直接丢掉数据报,然后给发送方发回一个“分组太大”的ICMP差错报文。
      2. 没有了首部检验和,传输层报文已经有检验和,且数据链路层协议执行了检验操作
      3. 删除了选项字段,但可能出现在”下一个首部“指出的位置上
    • IPv4与IPv6之间数据传输

      将IPv6的整个请求报文作为IPv4报文段的数据部分

通用转发和SDN

  • SDN的主要思路

    • 网络设备数据平面和控制平面分离
    • 数据平面-分组交换机
      • 将路由器、交换机和目前大多数网络设备的功能进一步抽象成:按照流表(由控制平面设置的控制逻辑)进行PDU(帧、分组)的动作(包括转发、丢弃、拷贝、泛红、阻塞)
      • 统一化设备功能:SDN交换机(分组交换机),执行控制逻辑
    • 控制平面-远程控制器+网络应用
      • 分离、集中
      • 计算和下发控制逻辑:流表
  • 流表

    请求到来的分组与流表中的数据项进行匹配,根据匹配到的动作,进行执行,其中包括转发(单播或多播)、丢弃、修改字段。

    • 表项

      首部字段值集合、计数器集合、分组匹配流表时所采取的动作集合

    • OpenFlow1.0中规范中匹配的值(最近的OpenFlow规范中已经增加到41个)
      在这里插入图片描述

    • OpenFlow中操作的例子

      简单转发、负载均衡、充当防火墙

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/153692.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!