网络层

没写完。

  • 本章脉络
    • 网络层设计问题
      • 问题
      • 数据报
      • 虚电路
    • 路由算法
      • 最短路由算法
      • 泛洪算法
      • DV算法 距离矢量算法
      • LSR算法 链路状态路由
      • 层次路由
    • 拥塞算法
      • 总体原则
      • 拥塞预防
      • 拥塞控制
      • 负载脱落
    • 服务质量
    • 网络互连
    • 互联网的网络层
      • IPV4
      • ICMP
      • IP地址和路由表
      • NAT
      • ARP、DHCP
      • OSPF
      • BGP
      • IPV6

网络层是是处理端到端的最底层。

  • 网络层需要知道整体的拓扑结构
  • 避免某些通信线路和路由器过载,导致其他的闲置

5.1 网络层设计问题

5.1.3 无连接服务的实现

采用数据包。

如果提供的是无连接的服务,那么,所有的数据包都被独立地注入到网络中,并且每个数据包独立路由,不需要提前建立任何设置。在这样的上下文中,数据包通常称为数据报(datagram),它类似于电报(telegram),对应的网络称为数据报网络(datagram network)

无连接服务 路由表
每一台路由器都有一个内部表,它指明了针对每一个可能的目标地址应该将数据包送到哪里去。每个表项由两部分数据组成:目标地址和通往目标地址所使用的出境线路。

55.png

差错处理和流量控制由用户主机负责。分组交换网只负责送报。

5.1.4 面向连接的服务

虚电路(virtual circuit)

如果使用了面向连接的服务,那么,在发送数据包之前,必须首先建立起一条从源路由器到目标路由器之间的路径。这个连接称为虚电路(VC, virtual circuit),它类似于电话系统中建立的物理电路,对应的网络称为虚电路网络(virtual-circuit network)。

面向连接服务 路由表

当建立一个连接时,从源机器到目标机器之间的一条路径就被当作这个连接的一部分确定了下来,并且保存在这些中间路由器的表中。所有需要在这个连接上通过的流量,都使用这条路径,这与电话系统的工作方式完全一致。当连接被释放之后,虚电路也随之消失。在面向连接的服务中,每个数据包包含一个标识符,指明了它属于哪一条虚电路

55.png

尽管A很容易区分出标识连接1的数据包是来自H1还是来自H3,但是,C无法区分它们。基于这个原因,A给第二个连接的出境流量分配一个不同的连接标识符。这种避免冲突的做法说明了为什么路由器需要具各替换出境数据包中连接标识符的能力

在有些上下文中,这个过程称为标签交换(label switching)

5.1.5 虚电路与数据报网络的比较

55.png

55.png

5.2 路由算法

路由算法
路由算法(routing algorithm)是网络层软件的一部分,它负责确定一个入境数据包应该被发送到哪一条输出线路上。
如果网络内部使用了数据报,那么路由器必须针对每一个到达的数据包重新选择路径,因为自上一次选择了路径之后,最佳路径可能已经发生了改变。
如果网络内部使用虚电路,那么只有当建立一条新的虚电路时,才需要做路由决策。此后,数据包只要沿着已经建立的路径向前传递即可。后一种情形有时候也称为会话路由(session routing)

路由进程和转发进程
可以把路由器想象成内部有两个进程。其中一个进程在每个数据包到达的时候对它进行处理,它在路由表中査找该数据包所对应的出境线路。这个进程即为转(forwarding)进程;另一个进程负责生成和更新路由表,这正是路由算法发挥作用的地方。

路由算法的特性和指标
路由算法必须满足某些特性:正确性、简单性、鲁棒(健壮)性、稳定性、公平性和有效性。

首先必须确定要优化什么性能指标。使数据包的平均延退达到最小是有效发送流量的一种很明显的选择,但是使网络的总吞吐量最大化也是一种不错的选择。

路由算法分类

  • 静态/非适应性
    • 非自适应算法(nonadaptive algorithm)不会根据当前测量或者估计的流量和拓扑结构,来调整它们的路由决策。相反,从I到J(对所有的I和J)所使用的路由选择预先在离线情況下计算好,并在网络启动时被下载到路由器中的。这个过程有时候也称为静态路由(static routing)。
  • 适应性的
    • 自适应算法(adaptive algorithm)则会改变它们的路由决策以便反映出拓扑结构的变化,通常也会反映出流量的变化情况

5.2.1 优化原则

最优化原则

5.png

如果J在I->K的最短路径上,显然,J->K的最短路径也是同样的route

汇集树

汇集树(sink tree)
从所有的源到一个指定目标的最优路径的集合构成了一棵以目标节点为根的树。这样的树称为汇集树(sink tree)

汇集树不一定是唯一的;有可能存在具有相同路径长度的其他汇集树。如果我们允许选择所有可能的路径,则树就变成了更一般的结构,称为有向无环图(DAG, Directed Acyclic Graph)

由于汇集树确实是一棵树,它不包含任何环,所以每个数据包将在有限的跳数内完成传递。

不同的路由器对当前拓扑结构的了解可能有所不同

55.png

5.2.2 最短路径算法

基本想法是构造一张网络图,图中的每个节点代表一个路由器,每条边代表一条通信线路或者链路。

边权
一种测量路径长度的方法是跳数。

另一种度量是以千米为单位的地理距离,

除跳数和物理距离之外,还可以用许多其他度量来标示路径的长短。例如,图中每条边用一个标准测试包的平均延迟来标记,这是每小时的测量结果。

一般情况下,边上面的标记可以作为距离、带宽、平均流量、通信成本、平均延迟等其他因素的一个函数,通过计算得出

Dijkstra算法(已知拓扑,计算是容易的,难的是构造拓扑)

5.2.3 泛洪算法

泛洪(flooding)
将每一个入境数据包发送到除了该数据包到达的那条线路以外的每条出境线路。

问题和解决方法
泛洪法会产生大量的重复数据包

55.png

泛洪算法的特性
泛洪途径的鲁棒性非常好。

泛洪能并发选择每一条可能的路径,因此总能选出最短的那条路径,没有其他算法能够产生一个更短的延迟

对于广播信息来说,这是一种有效的广播手段

5.2.4 距离矢量算法

  • 每个router维护一个表
    • 到每个目的地的已知最好的距离
    • 这里的distance可能是hops的数目,时延ms,etc.
    • 使用哪条line
  • 这个表会不断的通过跟邻居交换信息来update
    • 发送routing信息(distance,destination)
      • 周期性的发送
      • 当表改变的时候
    • 接受routing信息
      • 如果收到了一个更好的route,就更新
      • refresh已经存在的routes(有个时戳,对应下面那个times out)
      • 如果某个item times out 了,就删除这一项

55.png
55.png
55.png

无穷计数问题

  • 整个网络最佳路径的寻找过程称为收敛(convergence)
  • 坏消息传播得很慢:没有一个路由器具有个比它所有邻居的最小值还大于1的值。逐渐地,所有的路由器都会趋向无穷大,但是所需交换的次数依赖于代表无穷大的数值。由于这样的原因,明智的做法是将无穷大设置为最长的路径加1。
  • 并不完全出人意料,这个问题称为无穷计数(count-to-infinity)问题。
  • 问题的核心在于当X告诉Y它有一条通往某个地方的路径,Y无从知道自己是否已在这条路径上。
  • 无穷级数问题例
  • 55.png
  • 55.png
  • 一般是把无穷设置为16。

5.2.5 链路状态路由 LS算法、

  • LS算法中每个路由器要做:

    • 发现邻居,了解网络地址
    • 建立distance和cost
    • 建立一个链路状态数据包(LSP),显示“学”到的信息
    • 该包发给所有路由器,flooding扩散
    • 计算自己到其他所有router的距离
  • 发现邻居

    • 发送HELLO包
      • 广播网络发广播报文
      • 不是广播网络发unicast HELLO
    • 邻居回一个回复报文告诉他是谁
      • 路由ID必须全局唯一
    • 简化拓扑结构
      • 当两个或者更多路由是被LAN或者其他多路存取的路由器
      • 怎么简化拓扑捏,伪结点
  • 伪结点

    • 广播LAN给连接到上面的每一对路由器都提供了连通性。然而直接建模会把LAN视为多个点到点链路,会增大拓扑结构,导致消息浪费。
    • 更好的办法是将LAN看作是一个节点。
    • 55.png
    • 这个N模拟的是LAN,可以由A、C、F中任何一个担当,如果A担当,那么A内部可以有两个邻接矩阵。
  • 构造链路状态数据包

    • 构建一个包含所有这些信息的数据包。该数据包的内容首先是发送方的标识符,接着是一个序号(Seq)和年龄(Age,后面再介绍),以及一个邻居列表。对于每个邻居,同时要给出到这个邻居的延迟。
    • 一种可能的做法是周期性地创建数据包,也就是说,以一定的时间间隔创建链路状态数据包。另一种可能做法是每当发生某些重要的事情时才创建数据包,比如当一条线路断掉或者一个邻居节点停机时,或当它们重新恢复运行时,或当它们的特性发生了一定变化时。
    • 55.png
  • 分发LSP

    • 采用可靠扩散。也就是说发出的报文受损会重发。
    • 55.png
    • 可能会出现的几个问题
      • 序号绕回。这个采用32位序号,基本用不完。
      • 路由器崩溃了会丢失所有序号记录表。或者路由器改了routerid。这两个问题都采用age解决。
      • age代表LSP的生存时间,每过一秒减一,减完了就不能用了。这样避免了拓扑结构改变结果路由还保存着错误的LSP的情况。
      • eg:55.png
        • 这里的每行对应于一个刚刚到达的,但是还没有完全处理完毕的链路状态数据包。该表记录了数据包的来源、序号和年龄,以及状态数据。而且,针对B的三条线路(分别到A、C和F)还记录了发送和确认标志。发送标志表明该数据包必须在所指示的线路上发送。确认标志表明它必须在这条线路上得到确认。
        • 在图5-13中,来自A的链路状态数据包可以直接到达,所以B必须将它发送给C和F,并且按照标志位的指示向A发回确认。类似地,必须把来自F的数据包转发给A和C,并且向F返回确认然而,第三个数据包,即来自E的数据包有所不同。它到达两次,一次经过EAB,另次经过EFB。因此,它只需被发送给C,但是要向A和F确认,正如标志位所示。
        • 如果一个重复数据包到来时原来的数据包仍然在缓冲区中,那么标志位必须作相应的改变。例如,如果表中第四项被转发出去之前,C的链路状态数据包的一份副本从F到达,那么,这六位将被改变为100011(在C的缓冲区中,而不是C将要发出去的),以表明该数据包必须向F确认,但是不用转发了。
  • 计算新的路由

    • 收集到一整套LSP就建立整个图
    • 然后迪杰斯特拉,最短路径
    • 55.png
    • 55.png
  • DV和LS比较

    • 55.png
    • 55.png
    • 55.png

5.2.6 层次路由

路由分组分层来减小路由表的开销。
55.png

5.3 拥塞控制算法

拥塞(congestion)
(一部分)网络中存在太多的数据包导致数据包被延迟延迟和丢失,从而降低了传输性能,这种情况称为拥塞(congestion)

  • 拥塞控制和流量控制
    • 拥塞控制和流量控制之间有很大的差异,它们之间的关系非常微妙。拥塞控制的任务是确保网络能够承载所有到达的流量。这是一个全局性的问题,涉及各方面的行为,包括所有的主机和所有的路由器。与此相反,流量控制只与特定的发送方和特定的接收方之间的点到点流量有关。它的任务是确保一个快速的发送方不会持续地以超过接收方接收能力的速率传输数据。

5.3.1 拥塞控制的途径

55.png

55.png

5.3.2 流量感知路由

  • 最直接的方式是把链路权重设置成一个(固定)链路带宽、传输延迟、(可变)测量负载或平均排队延迟的函数。在所有其他条件都相同的情况下,最小权重的路径更青睐那些轻负载的路径。
  • 潜在危险
    • 这两部分通过链路CF和EI相连。假设东西之间的大部分流量使用链路CF,因此,这个链路负荷超重因而延迟增大。如果把排队延退加入到计算最短路径的权重中,那么链路EI 将变得更具吸引力。当新的路由表被安装好之后,大部分东西方的流量现在改走链路E,由此增加了此链路的负载。因此,在下一次路由更新时,CF将成为最短路径。结果,路由表可能会烈地摇摆不定,从而导致不稳定的路由和许多潜在的问题。
    • 55.png
    • Internet路由协议通常不依赖于负载来调整自己的路由。相反,在路由协议外部通过慢慢改变它的输入来调整路由。这种方法就是所谓的流量工程(traffic engineering)

5.3.3 准入控制

其基本思想非常简单:除非网络可以携带额外的流量而不会变得拥塞,否则不再建立新的虚电路。因此,任何建立新的虚电路的尝试或许会失败.

描述流量通常采用的描述符是漏桶(leaky bucket)或令牌桶(token bucket)。一个漏桶有两个参数约束了平均速率和瞬时突发流量大小。

准入控制还可以和流量感知路由相结合,在虚电路建立过程中,考虑绕开流量热点区域的路由。

5.3.4 流量调节

  • 为了在拥塞到来之前确定,每个路由器连续检测资源,一般检测以下

    • 输出线路的利用率
    • 队列长度(最有用
    • 现在丢包数量
    • 路由器内部排队数据包的数量 EWMA
      • 其中d表示良好的排队延退估计。s表示瞬时队列长度的样值。则d可以通过这个式子实时更新。是一个系数,一般取0.8.
  • 路由器要及时把反馈信息给造成拥塞的发送方

    • 抑制包。choke packet
      • 抑制包中的目标地址取自该拥塞数据包。同时,在原来的拥塞数据包上添加一个标记(设置头部中的一位),因而它在前行的路径上不会产生更多的抑制包。除此以外,数据包的转发过程如同平常一样
    • 显式拥塞控制 ECN
      • 路由器可以在它转发的任何数据包上打上标记(设置数据包头的某一个标志位)发出信号,表明它正在经历着拥塞。当网络传递数据包时,接收方可以注意到有个拥塞已经发生,在它发送应答包时顺便告知发送方。然后发送方可以像以前那样紧急刹车降低传输速率。
    • 逐跳后压(TCP和IP中使用)
      • 另一种办法是让抑制包在沿途的每一跳都发挥作用,如图5-26(b)中的序列所示。在这里,只要抑制包到达F,则F必须按照要求减慢发给D的数据包流。这样做的结果是要求F为D的数据包流分配更多的缓冲区,因为源主机仍然在全速发送数据,但是F这么做却让D立刻得到缓解,就好像电视广告中的头痛疗法一样。在下一步,抑制包到达E告诉E减慢给F的数据包流。这一行动给E的缓冲区带来更大需求,但是却让F立即得到缓解。最后,抑制包到达A,数据包流才真的减慢下来。
      • 55.png
      • 这种逐跳方案的实际效果是拥塞点上的拥塞现象很快得到了缓解,但是其代价是上游路径需要消耗更多的缓冲区空间。

5.3.5 负载脱落

负载脱落(load shedding)是一种富有想象力的说法,它指当路由器因为米不及处理数据包而面临被这些数据包淹没的危险时,就将它们丢弃。

  • 丢包策略

    • 葡萄酒 wine
      • 对于文件传输,旧的数据包价值要高于新的数据包。因此一般丢新的。
    • 牛奶 milk
      • 对于实时媒体流,新的数据包价值超过老的数据包。一般丢旧的。因为一旦错失了播放时间,那这个包就没用了。
    • 包的优先级
      • 发送方给比较重要的包打上高优先级的tag
      • 允许主机超过协议说好的带宽,但是超出的部分标上比较低的优先级
  • RED 随机早期检测

    • 预测到网络要寄了就丢包。丢包是随机的。因为反正也不知道是哪个源发多了。
    • 被丢包影响到的源就会放慢传输速度。因此没有显式表示,但是仍然有抑制包类似的作用。
  • RED ECN

    • RED 在剩余缓存空间到达临界值(不一定满)的时候就开始扔包,而ECN只在路由器的buffer满了的时候才会丢包。
    • ECN 是通常更愿意选择的, 它显示的产生一个拥塞信号 rather than as a loss; 当主机不能接收显示的信号时,RED 就派上用场了。

5.4 服务质量

  • 可靠性
  • 时延
  • 抖动
  • 带宽
  • 55.png

5.4.2 流量整形

流量整形(traffic shaping)是指调节进入网络的数据流的平均速率和突发性所采用的技术

  • 服务等级约定(SLA, service level agreement)

    • 有时候客户和服务提供者之间的约定称之为服务等级约定(SLA, service level agreement),特别是当它由聚合流量组成,并且存在一段比较长期的时间时,比如一个给定客户的全部流量。只要顾客履行了约定中的义务,并且根据商定的合约发送数据包,那么,服务提供者就承诺按时将数据包递交到目的地。
  • 流量监管(traffic policing)

    • 超出约定模式之外的数据包可能会被丢弃,或者被打上低优先级标记。对一个流进行监测称为流量监管(traffic policing)
  • 漏桶和令牌桶

    • 55.png
    • 漏桶
      • 55.png
    • 令牌桶
      • 55.png
    • 二者区别
      • 55.png
  • 55.png

5.4.3 包调度

在同一个流的数据包之间以及在竞争流之间分配路由器资源的算法称为(数据)包调度算法(packet scheduling algorithms)。为不同的流可以预约的潜在资源有以下3种。

  • 带宽

  • 缓冲区

  • CPU周期

  • FIFO/FCFS

    • 先来先服务。先进先出,尾丢弃
    • 如RED,平均队列长度增大,随即丢弃一个新到达的数据分组
    • 存在问题
      • 存在多个流,一个流很容易干扰其他流量的性能。
  • 公平队列。

    • 针对每条输出线路,为每个流设置单独的队列。
    • 循环所有队列,以包为单位取出来发送。
    • 问题是给使用较大的数据包的主机比使用较小数据包的主机提供了更多的带宽。
  • 循环公平队列。

    • 这里的诀窍是计算一个虚拟时间,这个时间指每个数据包发送完毕所需要的轮数。每一轮循环从所有有数据待发送的队列中排空一个字节:然后,按照数据包的结时间顺序排队,并以该顺序真正发送数据包
    • 55.png
  • 加权公平队列

    • 这种修改后的算法称为加权公平队列(WFQ, Weighted Fair Queueing)。设每一轮的字节数是一个流的权重W,我们现在可以给出计算完成时间的公式:
    • 55.png
    • 其中A为到达时间,F为完成时间,L;是数据包i的长度。在图5-31(a)中,最下面的队列权重为2,所以你可以看到在图5-31(b)给出的完成时间表中,它的数据包被发送得更快。
    • 55.png

5.5 网络互联

5.5.2 何以连接网络

两种基本选择
连接不同网络的方式有两种基本选择:第一,我们可以制造这样的设备,它能将每种网络的数据包翻译或转换成每个其他类别网络的数据包;第二,像出色的计算机科学家那样,尝试在不同网络的上面增加一个间接层,并且构造一个公共层来解决这个问题。

路由器和交换机
在路由器上,数据包被从帧中提取出来,数据包中的网络地址被用来决定把它转发到哪里;而在交换机(或网桥) 上,整个帧是根据其MAC地址传送的。交换机不必了解正在被交换的数据包所采用的网络层协议,同样路由器也不必了解交换机所采用的链路层协议。

55.png
今天,网桥主要用来连接链路层的同类网络,路由器用来连接网络层不同的网络。

5.5.3 隧道

包裹包。用来途径不同类型的网络。

55.png

5.5.4 互联网路由

内部网关协议(IGP)/外部网关协议(EGP)/边界网关协议(BGP)
所有这些因素导致了两级路由算法。在每个网络中,使用一个域内(intradomain)或者内部网关协议(interior gateway protocol)进行路由(“网关”是”路由器”的旧称)。这可能是我们已经描述过的一种链路状态协议。为了让数据包跨越构成互联网的网络,就需要用到域间(interdomain)或外部网关协议(exterior gateway protocol)。网络可能全部使用不同的域内协议,但它们必须使用相同的域间协议。在Internet上,域间路由协议称为边界网关协议(BGP, Border Gaterway Protocol)。

5.5.5 最大传输单元MTU

源端通常不知道数据包通过网络到达接收方的路径,因此它当然不知道到达接收方的数据包尺寸有多小。这个数据包尺寸称为路径最大传输单元(MTU, Path Maximum Transmission Unit)即使源端知道路径MTU,数据包在无连接网络中也是独立路由的,比如Internet。这种路由意味着路径可能会突然改变,因而意外地更改路径MTU。

  • 透明分段/非透明分段

    • 55.png
    • 55.png
    • 分段不利于性能,因为除了增加头开销,数据包的丢失概率也增加了;任何个段的丢失都将导致整个数据包的丢失;而且对主机而言,分比不分带来了更大的突发
    • IP实现的非透明分段
      • 55.png
      • 55.png
  • 路径MTU发现

    • 每个IP数据包发出时在它的头设置一个比特,指示不允许对该数据包实施分段操作。如果一个路由器接收的数据包太大,它就生成一个报错数据包并发送给源端,然后丢弃该数据包,如图5-44所示。当源端收到报错数据包,它就使用报错数据包携带的信息重新将出错数据包分段,每个段足够小到报错路由器能处理。如果沿着路径前进又遇到一个MTU更小的路由器,那么重复上述过程。
    • 55.png

5.6 Internet的网络层

就是ip。

Internet的网络层
在网络层,可以把 Internet看作是一种相互关联的网络或自治域(自治系统)集合。

IP的任务是提供一种尽力而为(best-effort)地把数据包从源端传输到接收方的方法(即不提供任何保证),无须考虑这些机器是否在同一个网络,也不必关心它们之间是否还有其他网络。

5.6.1 IPv4协议

每个IP数据报包含两部分,一个头和一个正文,正文部分也称之为有效净荷。头由一个20字节的定长部分和一个可选的变长部分组成

55.png

全都要记下来。

  • 版本(version)字段
    • 版本(Version)字段记录了数据报属于协议哪个版本。
  • IHL字段
    • 由于头的长度不固定,所以头的IHL字段指明了头到底有多长(以32位字长度为单位)。IHL的最小值为5,这表明头没有可选项。该4位字段的最大值为15,把头的长度限制为最大60字节,因此选项(Options)字段最多为40字节。
    • IHL部分,每个1代表四个字节。比如说IHL是5,那就代表头有20个字节。
  • 区分服务
    • 该字段最初称为服务类型(Type of service)。它曾经并且仍然用来区分不同的服务种类。
    • 现在,前6位用来标记数据包的服务类别,我们在本章前面描述过的加速服务和确保服务:后2位用来携带显式拥塞通知信息,比如数据包是否经历了拥塞,我们在本章的拥塞控制部分描述了显式拥塞通知。
  • 总长度
    • 总长度(Total length)字段包含了该数据报中的所有内容,即头和数据。最大长度是65535个字节。
  • 标识字节
    • 标识(Identification)字段的用途是让目标主机确定一个新到达的分段属于哪一个数据报。同一个数据报的所有段包含同样的标识值。
  • DF标志
    • 为1代表不分段。不允许路由器对其分割。
  • MF标志
    • 为1代表允许分段。分段的时候,除了最后一个段,其他的这个标志位均为1.
  • 分段偏移量(fragment offset)字段
    • 分段偏移量(Fragment offset)字段指明了该段在当前数据报中的位置。除了数据报的最后一个段以外,其他所有段的长度必须是8字节的倍数。偏移部分的1代表八个字节。比如偏移部分是1,就代表从8bytes的位置开始。
    • eg
    • 55.png
  • 生存期字段
    • 数据包生存期计数器。跳计数器,每跳一次减一。减到0就丢弃然后给源主机传一个报警包。
  • 协议字段
    • 代表交给哪个进程。TCP或者UDP或者其他的。
  • 头校验和
    • 校验算法的执行过程是这样的:当数据到达时,所有的16位(半字)累加起来,然后再取结果的补码。该算法的目的是到达数据包的头校验和计算结果应该为0。这样的校验和对于检测数据包穿过网络时是否发生错误非常有用。请注意,在每一跳必须重新计算头校验和字段,因为至少有个字段总是不断在改变(即生存期字段),
  • 源地址和目的地址
    • 源地址(Source address)字段和目标地址(Destination address)字段表示源网络接和日标网络接口的P地址。
  • 选项字段
    • 选项(Options)字段的设计意图是提供一种途径,允许后续版本协议包含一些原设计中没有出现的信息,以便实验人员尝试新的想法、避免为那些不常使用的信息分配头字段。
    • 55.png

5.6.2 IP地址

  • IP和MAC比较

    • 一个IP地址并不真正指向一台主机,而是指向一个网络接口,所以如果一台主机在两个网络上,它必须有两个IP地址。然而,大多数主机都连在一个网络,因而只有一个IP地址。与此相反,路由器有多个接口,从而有多个IP地址
  • IP地址分为两部分。网络号(标志网络)和主机号(标志主机)。

  • 五类IP地址

    • 55.png
    • 55.png
    • 55.png
    • 55.png
    • 55.png
    • 55.png
      • 注意A的0号和127号不可用,所以A类有128个网络号,但是可用的只有126个。因为全0代表本地网络,全1代表回环。
  • 特殊IP地址

    • 55.png
    • 全0:本机地址,我不知道我自己的地址,就全写0,一段时间之后,网上的服务器会给分配一个地址
      • 有时候全0也可以代表默认路由,也就是直连互联网。这根据掩码区别。
    • network 全0:本网络的地址
    • 全1:本地网络的广播
    • network+全1:远程的某个网络的广播
    • 127+其他的任何东西:比如127.0.0.1,指的是本机的地址。
    • 本地的计算机还是有路由表的。

子网

从主机号借用若干个比特作为子网号。而主机号也就相应减少了若干比特。

  • 子网掩码

    • 地址中主机部分的剩余位数可以有所变化。这意味着,块的大小必须是2的幂。按照惯例,网络地址的书写格式是前缀IP地址后跟一个斜线,斜线后是网络部分的位长度。在我们的例子中,如果前包含28个地址,所以留下了24位用于网络部分,写成128.208.0.0/24。
    • 因为前缀长度仅从IP地址无法推断出来,路由协议必须把前缀携带给路由器。有时候,前缀很简单地由长度描述,比如”/16”,读音为”slash 16”。前缀长度相当于网络部分中16的二进制掩码。以这种格式书写时称为子网掩码(subnet mask),它可以与ー个IP地址进行AND操作,以便提取出该IP地址的网络部分。在我们的例子中,子网掩码为255.255.255.0。
    • 55.png
  • 子网划分

    • 有点像指令地址的划分,但又不是平均分的。
    • 它是先一分为2,然后把其中一份再一分为2…..这样,根据(需要的地址数目)向上取整,来决定怎么划分。
    • 55.png
    • 子网划分设计原则
    • 55.png
    • eg
    • 55.png
    • 55.png

CIDR

Route aggregation:路由聚合

多条路由汇聚成一条路由,跟子网划分是完全相反的一个过程。使得路由表长度减少。

而且还比子网划分要简单,就找出来这几个路由的前面多少位是一样的就行了

  • 最长前缀匹配原则
    • 55.png
    • 考虑到最长前缀匹配原则,所以允许前缀重叠。

NAT

简单来说就是NAT盒子给内网的每个主机分配一个IP地址,但分配的这些IP地址仅作为私有化而不允许出现在网络上,所以数据包离开或者抵达内网时要执行一个地址转换。

NAT分配的IP地址扩大了主机号而占用了网络号,在互联网上是非法的,但是在网内部是可以使用的,极大的扩充了IPv4可以有的主机数量。

55.png

NAT存在的问题
第一,NAT违反了IP的结构模型。IP的结构模型声明每个P地址均唯一标识了世界上的一台机器。

第二,NAT打破了Internet的端-端的连接模型,即任何一个主机可在任何时间给任何一台其他主机发送数据包。

第三,NAT将Internet从一个无连接网络改变成一个面向连接网络特有的形式。

第四,NAT违反了最基本的协议分层规则:第k层不应该对第k+1层在本层的有效载荷字段中放什么作任何假设

第五,Internet上的进程并不一定必须使用TCP或者UDP

第六,有些应用以规定的方式使用多个TCP/IP连接或者UDP端口。例如,标准的文件传输协议(FTP, File Transfer Protocol)在数据包正文插入IP地址,接收方正文中提取出这些地址,并使用它们。由于NAT对这些地址安排一无所知,它不可能重写这些IP地址,或者说明情况。

最后,由于 TCP Source port字段16位长,所以,至多只有65536台机器可以被映射到同一个IP地址上。

NAT表项分为静态和动态。

动态会删除已经关闭或者长久没用的NAT表项。

NAT的映射表保存在路由器里。如果内网的路由器寄了那就寄了。收不了应答报文,因为找不到人。

5.6.3 IPv6

55.png
55.png

IHL字段没有了,因为IPv6头有固定的长度。协议(Protocol)字段也被拿掉了,因为下一个头(Next header)字段指明了最后的P头后面跟的是什么(比如UDP或者TCP段)。

所有与分段有关的字段都被去掉了,因为IPv6采用了另一种方法来实现分段。当主机发送了一个非常大的IPv6数据包时,如果路由器不能转发这么大的数据包,它并不对该数据包进行分段,而是向发送主机返回一条报错消息。

校验和(Checksum)字段也被去掉了,因为计算校验和会极大地降低性能。

区分服务(Differentiated services,最初称为流量类别)字段的用途主要是区分数据包的服务类别,这些数据包具有不同的实时传递需求。它主要被用在服务质量的区分服务体系中,使用方式与IPv4数据包的同名字段一样。此外,最低2位用来发送显式拥塞指示也与IPv4的方式相同。

**流标签(Flow label)**字段为源端和接收方提供了一种建立伪连接的方式,即源端和接收方把一组具有同样需求并希望得到网络同等对待的数据包打上标记

**有效载荷长度(Payload length)**字段指明了紧跟在图5-56中40个字节头之后还有多少字节数。

IPv6头得以简化的原因在于它可以有额外的(可选)扩展头。该字段指明了当前头之后还有哪种扩展头(当前已经定义了6种扩展头),如果有的话。如果当前的头是最后一个IP头,那么下一个头字段指定了该数据包将被传递给哪个传输协议处理(比如TCP、UDP)。

55.png

跳数限制(Hop limit)
实际上,它与IPv4 中的TTL(Time to live)字段是一样的,也就是说,在每一跳上该字段中的值都要被路由器递减。

IPv6地址
16个字节被分成8组来书写,每一组4个十六进制数字,组之间用冒号隔开
55.png

5.6.4 Internet控制协议

ICMP

ICMP被封装在一个IP数据包中。

ICMP分两类,即ICMP差错报文和ICMP询问报文。

55.png
55.png

ICMP的校验和对整个ICMP报文进行校验。和IP报文不同。

  • ICMP的应用
    • traceroute。
    • 主机分片
    • 目的不可达
    • 路由重定向

ARP

用来通过IP地址获取MAC地址。

55.png

  • ARP缓存

    • 包含了已经ARP得到的内容。同时ARP缓存中的表项要在超时后丢弃。
  • 免费ARP

    • 主机把自己的地址配置完了,就广播个地址映射去找有没有和自己地址重合了的。如果没应答就ok,有应答就说明多个主机被分配了一个IP地址。
  • 直接交付和间接交付

    • 如果主机想知道其他网络里主机的地址,那就把ARP丢给默认网关,也就是默认路由器。路由器就把请求给IP软件,IP软件再去丢到对应网络里开查。这就是间接交付。
  • ARP代理。一个网络上的主机发数据包给另一个网络上的主机,就会用到ARP代理。

DHCP

四个阶段。

  • 客户端发申请

  • DHCP服务器回一个IP地址

  • 客户端给个offer要求拥有这个IP地址

  • DHCP服务器给个确认报文

  • DHCP中继。DHCP服务器和客户端不在一个网络上,这个时候就要过中继。

OSPF内部网关协议

BGP外部网关协议