文档章节

4.IP分组的交付和转发

alon龙武
 alon龙武
发布于 2014/11/16 16:42
字数 1596
阅读 914
收藏 35
点赞 0
评论 2

1 交付

网络层监视底层物理网络对分组的处理过程,定义为分组的交付。完成一个分组交付给最后终点的任务,需要使用两种不同的交付方法:直接交付和间接交付

1.1 直接交付

直接交付时,分组的终点是一台与交付者连接在同一个网络上的主机。直接交付发生在两种情况:一种是分组的源点和终点都在同一个物理网络。另一种是最后一个路由器与目的主机之间进行的交付。发送方通过提取终点的网络地址,然后与自己所连接的网络地址进行比较。

 

1.2 间接交付

如果目的主机与交付者不在同一个网络,分组需要间接地交付。间接交付时,分组经过一个又一个路由器,最后到达与终点连接在同一个网络上的路由器

 

2 转发

当IP作为无连接的协议时,转发的基础是IP数据报的目的地址。当IP作为面向连接的协议时,转发的基础是附加在IP数据报上的标记

2.1 基于目的地址的转发

一种传统的方法,要求主机或路由器有一张路由表才能进行转发。当主机有分组要进行发送,或路由器收到分组要进行转发时,搜索路由表获取到达最后终点的路由。然而,这种方法因为路由表的表项数量过多导致路由表的查找效率非常低。下面描述一些转发技术:


下一跳方法:可以减少路由表的内容。路由表中只保留下一跳的地址,而不是保留完整路由的信息


特定网络方法:路由表不是对连接在同一个物理网络上的每一台主机都设置一个表项,而只用一个表项来定义目的网络本身的地址。换言之,连接在同一个网络上的所有主机看成是一个表项


默认方法:主机的路由表不必把整个因特网所有的网络列出来,使用一个默认表项


无子网划分的转发:使用分类编址时,全球因特网中的绝大多数路由器没有涉及到子网划分,子网划分是在一个组织内部进行的。这样情况下,典型的转发模块使用三张表,每个单播类别ABC对应一张表。如果路由器支持多播,需要增加一张处理D类地址的表。每张路由表至少包括三列:目的网络的网络地址、下一跳地址和接口号

最简单的情况下,转发模块处理步骤:1.提取出分组的目的地址 2.目的地址的一个副本用来查找地址的类别,具体做法:地址的副本右移28,得到一个0~15之间的4位数(0~7 A类 0111、8~11 B类 1011、12~13 C类 1101、14 D类 1110、15 E类 1111) 3.根据步骤2得到的结果和目的地址,可以用来提取目的网络地址 4.根据地址的类别和目的网络地址查找下一跳地址和输出端的接口号。如果没有发现匹配,使用默认的 5.ARP模块根据下一跳地址和接口号找出下一个路由器的物理地址,然后请求数据链路层把分组交付到下一跳


有子网划分的转发:固定长度子网划分的简化模块:1.模块提取分组的目的地址 2.如果目的地址与路由表任意一个特定主机表项相匹配,提取下一跳地址和接口号 3.通过目的地址和掩码提取子网地址 4.根据子网地址搜索路由表,获取下一跳地址和接口号。如果没有匹配,使用默认的 5.下一跳地址和接口号传送给ARP


2.2 基于标记的转发

在一个面向连接的网络,交换机根据附加在分组上的标记转发分组。路由选择通常基于对路由表内容的搜索,而交换可以用一个索引访问交换表来完成。路由选择涉及到搜索过程,交换涉及到直接的访问

多协议标记交换MPLS

MPLS既可以用作路由器,也可以用作交换机。当用作路由器使用时,可以根据目的地址转发分组;当用作交换机使用时,可以基于标记转发分组


3 路由器的结构

一个路由器有四个构件:输入端口、输出端口、路由选择处理器和交换结构

输入端口:执行路由器的物理层和数据链路层的功能。它从接收到的信号中得到比特流,并把帧拆装后得到分组,同时进行差错的检测和纠正。分组准备就绪后,可以通过网络层进行转发。缓存队列用来在分组被传送到交换结构之前进行暂存

输出端口:首先,向外发送的分组需要进行排队,然后将分组封装成帧,最后使用物理层的功能,把帧变成发送到线路的信号

路由选择处理器:路由选择处理器执行网络层的功能。通过目的地址找出下一跳地址,同时找出分组发送出去的端口号。一些较新的路由器,路由选择处理器功能被转移到输入端口,为了使这个过程更容易更快地进行

交换结构:路由器最困难的任务就是把分组从输入队列搬移到输出队列。完成的速度直接影响到输入/输出队列的大小和分组交付的总延时。

a.纵横交换结构

b.榕树交换结构


© 著作权归作者所有

共有 人打赏支持
alon龙武
粉丝 2
博文 14
码字总数 20481
作品 0
深圳
程序员
加载中

评论(2)

alon龙武
alon龙武

引用来自“hphper”的评论

看不懂
呵呵,哪些地方看不懂哈!
hphper
hphper
看不懂
计算机网络学习笔记(2):IP协议

主要内容:IP头部,IPV6扩展头部,IP转发。IPV6扩展头部主要是分片头部。 引言 IP是TCP/IP协议族中最核心的协议。所有TCP,UDP,ICMP,IGMP数据都通过IP数据报传输。IP提供了一种尽力而为,无...

我和我的皮球 ⋅ 2017/11/20 ⋅ 0

2.网络层介绍

1.交换处理过程 上述模型当中,像路由器这样的连接设备担当着交换机的作用。当一个分组从某个端口到达路由器后,通过另一个端口转发给下一部交换机,称为交换的处理过程发生在连接设备上 2....

alon龙武 ⋅ 2014/11/13 ⋅ 0

网络基础之--IP数据报、分片策略、路由表

IP 数据报的格式 一个 IP 数据报由首部和数据两部分组成。 首部的前一部分是固定长度共 20 字节是所有 IP 数据报必须具有的。 在首部的固定部分的后面是一些可选字段其长度是可变的。 IP 数据...

duanjiatao ⋅ 2016/08/04 ⋅ 0

计算机网络复习

1、运输层协议就是为了运行在不同终端上的应用进程提供逻辑通信(logic communication)的。 2、TCP与UDP的区别:TCP提供的是可靠连接,UDP非可靠连接。 3、本书的UDP与TCP分组统称为报文段,...

追风赤兔 ⋅ 2014/04/07 ⋅ 1

计算机网络的五层协议体系

由于博客迁移至www.coderyi.com,文章请看http://www.coderyi.com/archives/405 写这篇博客,主要是看了谢希仁的计算机网络那本书,计算机专业的朋友在大学期间都学过那本教材,近日重读特写这...

flyicarus ⋅ 2014/07/01 ⋅ 6

计算机网络知识点

基本知识点 1.OSI参考模型(七层体系结构) 物理层 - 数据链路层 - 网络层 - 运输层 - 会话层 - 表示层 - 应用层 2.TCP/IP体系结构(四层体系结构) 网络接口层 - 网际层IP - 运输层(TCP/UD...

Panda_Jerry ⋅ 2017/11/07 ⋅ 0

浅谈路由概念

计算机网络的五层因特网协议栈由上而下分别是:应用层,运输层,网络层,链路层和物理层,路由概念就出现在网络层中,因为网络层的三个重要功能为:转发、路由选择、建立连接。这篇文章主要分...

卫莨 ⋅ 2017/09/23 ⋅ 0

你应该知道的计算机网络知识

前言 作为一名程序员,不可能不与网络打交道。不夸张地说,我们的手机和电脑离开了网络就是一块「废铁」,它们的作用将大打折扣.。本文要是针对非网络专业开发的人员准备的,以「最短的时间,...

Yomut ⋅ 2016/09/08 ⋅ 0

校招面试知识点复习之计算机网络

1、电路交换与分组交换 电路交换特点:资源会被预留 电路交换分为:频分多路复用以及时分多路复用 优点:可以为一个通话保证特定数量的端到端带宽 缺点:效率低 分组交换特点:资源不会被预留...

大黄有故事 ⋅ 2017/03/14 ⋅ 0

计算机网络知识点(三)

Chapter3 数据链路层 数据链路层解决下一步怎么走的问题 向网络层提供一个定义良好的服务接口 处理传输错误 从网络层获取分组,并且将分组封装到帧中以便传输。每一个帧包含一个帧头,一个静...

球球球球弱 ⋅ 2017/12/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Linux kernel脉络和主干总结

写在前面 前人常说,对Linux操作系统/内核的理解,是计算机行业从业者的内功,决定了你在技术领域想走多远。但内核的庞大以及学习曲线之陡峭,总让我在学习途中觉得犹如“管中窥豹”。 随着工...

Markz0928 ⋅ 29分钟前 ⋅ 0

在gcc中使用intel风格的内联汇编

很简单,内联汇编使用asm(“.intel_syntax noprefix/n”)声明一下,以后的内联汇编就可以用intel风格了,构建可执行文件时给gcc加上-masm=intel参数。 先写一个小程序测试一下: [cpp] view...

simpower ⋅ 39分钟前 ⋅ 0

NIO 之 ByteBuffer实现原理

相关文章 BIO、NIO、AIO 内部原理分析 NIO 之 Selector实现原理 NIO 之 Channel实现原理 前言 Java NIO 主要由下面3部分组成: Buffer Channel Selector 在传统IO中,流是基于字节的方式进行...

轨迹_ ⋅ 49分钟前 ⋅ 0

Jenkins docker权限问题

环境Ubuntu Server 工具 jenkins-war:2.89.2 报错信息 Cannot connect to the Docker daemon. Is the docker daemon running on this host?Build step 'Execute shell' marked build as fai......

Pulsar-V ⋅ 49分钟前 ⋅ 0

180621-一个简单的时间窗口设计与实现

如何设计一个计数的时间窗口 时间窗口,通常对于一些实时信息展示中用得比较多,比如维持一个五分钟的交易明细时间窗口,就需要记录当前时间,到五分钟之前的所有交易明细,而五分钟之前的数...

小灰灰Blog ⋅ 今天 ⋅ 0

Android之Dalvik、ART、JIT、AOT

Android之Dalvik、ART、JIT、AOT 本文内容:Dalvik、ART、JIT、AOT之间关系 本文定位:知识记录 学习过程记录,加深理解,提升文字组合表达能力。也希望能给学习的同学一些灵感 本文整理于[...

lichuangnk ⋅ 今天 ⋅ 0

Thrift RPC实战(五) thrift连接池

Thrift本身没有提供连接池,我们可以用Apache Commons Pool2来实现一个 一、定义对象工厂 BasePooledObjectFactory<T> extends BaseObject implements PooledObjectFactory<T> public class......

lemonLove ⋅ 今天 ⋅ 0

git 命令简写

简写 命令 g git gst git status gd git diff gdc git diff --cached gdv git diff -w "$@" | view - gl git pull gup git pull --rebase gp git push gc git commit -v gc! git commit -v ......

charley158 ⋅ 今天 ⋅ 0

Java中的锁使用与实现

1.Lock接口 锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁能够防止多个线程同时访问共享资源。 在Lock出现之前,java程序是靠synchronized关键字实现锁功能的,而Java SE5之后,...

ZH-JSON ⋅ 今天 ⋅ 0

Intellij IDEA神器常用技巧四-类和方法注释模板设置

IDEA自带的注释模板不是太好用,我本人到网上搜集了很多资料系统的整理了一下制作了一份比较完整的模板来分享给大家,我不是专业玩博客的,写这篇文章只是为了让大家省事。 这里设置的注释模...

Mkeeper ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部