『TCP/IP详解——卷一:协议』读书笔记——08
2013-08-21 13:56:23
- 3.3 IP路由选择
| 1. IP路由选择有两种情况。(1)如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接到达目的主机。(2)如果目的主机和源主机不直接相连,则主机把数据报发往一默认的路由器上,由路由器来转发该数据报。 | ||||||||
| 2. IP层既可以配置成路由器的功能,也可以配置成主机的功能。本质上的区别在于主机从不把数据从一个接口转发到另外一个接口,而路由器则要转发数据报。内含路由器功能的主机应该从不转发数据报,除非它被设置成那样。 | ||||||||
| 3. IP路由选择机制,IP可以从TCP、UDP、ICMP和IGMP接收数据报(即在本地生成的数据报)并进行发送,或者从一个网络接口接收数据报(待转发的数据报)并进行发送。IP层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表进行搜索一次。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果确实是这样,数据报就被送到由IP首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么分两种情况处理:(1)如果IP层被设置为路由器功能,那么就对数据报进行转发(也就是说面向下面对待发出的数据报一样处理);(2)如果IP没有设置路由功能,数据报被丢弃。 | ||||||||
4. 路由表的结构:
|
||||||||
5. IP路由选择的步骤:
如果上面的步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误 |
||||||||
| 6. 为一个网络制定一个路由器,而不必为每个主机制定一个路由器,是IP路由选择机制的另一个基本特征 |
- 举例
- 例一:

同一个以太网上的两台主机,bsdi向sun发送数据。当IP从某个上层收到这份数据报后,它搜索路由表,发现目的IP地址(140.252.13.33)在一个直接相连的网络上(以太网140.252.13.0)。于是,在表中找到匹配网络地址(在下一节中,我们将看到,由于以太网的子网掩码的存在,实际的网络地址是140.252.13.32,但是这并不影响这里所讨论的路由选择)。数据报被送到以太网驱动程序,然后作为一个以太网数据帧被送到sun主机上。IP数据报中的目的地址是sun的IP地址(140.252.13.33),而在链路层首部中的目的地址是48bit的sun主机的以太网接口地址。这个48bit的以太网地址是用ARP协议获得的。
- 例二:

主机bsdi有一份IP数据报要传送到ftp.uu.net主机上,它的IP地址是192.48.96.9。经过的前三个路由器如上图3-4所示。首先,主机bsdi搜索路由表,但是没有找到于主机地址或网络地址相匹配的表目,因此只能用默认的表目,把数据报传给下一站路由器,即主机sun。当数据报从主机bsdi传到主机sun以后,目的IP地址是最终的信宿机地址(192.48.96.9),但是链路层地址却是sun主机的以太网接口地址。
当sun收到数据报后,它发现数据报的目的IP地址并不是本机的任一地址,而sun已被设置成具有路由器功能,因此它把数据报进行转发。经过搜索路由表,选用了默认表目。根据sun的默认表目,它把数据报传给了下一站路由器netb,该路由器的地址是140.252.1.183。数据报是经过点对点SLIP链路传送的,采用了最小封装格式。图中没有给出像以太网那样的链路层数据帧首部,因为在SLIP链路中没有那样的首部。
当netb收到数据报后,它执行sun主机相同的步骤,自己不是数据报上要找的东西,但是自己又有路由器功能,所以netb就有转发这个报文的义务。但是一看路由表,发现没有要找的那个主机的IP地址的记录,就连那个主机所在的网路的记录也没有,那怎么办?于是,他就把这个数据报发给了默认接它班的下一站路由器gateway,希望它能帮助自己完成未完成的使命。
这里补充一下,netb是以太网140.252.1下的主机,而netb原来经过SLIP收到的数据报是没有链路层地址的,所以它动用了ARP协议,不知用了什么招数(以后会学到的),然后就知道了下一站的IP地址,然后就把它封装到了数据报的首部。
路由器gateway也执行与前面两个路由器相同的步骤。它的默认路由表目所指定的下一站路由器IP地址是140.252.104.2。这个例子就到此为止了,预知后事如何,还要继续看书啦~
例子的一些关键点:
| 1. 该例子中的所有主机和路由器都使用了默认路由。事实上,大多数主机和一些路由器可以用默认路由来处理任何目的,除非它在本地局域网上 |
| 2. 数据报中的目的IP地址始终不发生任何变化(在8.5节我们会看到不一样的情况)。所有的路由选择决策都是基于这个目的IP地址 |
| 3. 每个链路层可能具有不同的数据帧首部,而且链路层的目的地址(如果有的话)始终指的是下一站的链路层地址。在例子中,两个以太网封装了含有下一站以太网地址的链路层首部,但是SLIP链路没有这样做。以太网地址一般通过ARP获得。 |
『TCP/IP详解——卷一:协议』读书笔记——08的更多相关文章
- 『TCP/IP详解——卷一:协议』读书笔记——10
2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...
- 『TCP/IP详解——卷一:协议』读书笔记——01
从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...
- 『TCP/IP详解——卷一:协议』读书笔记——18
2013-08-27 15:44:52 第7章 Ping程序 7.1 引言 “ping”这个名字来源于声纳定为操作.Ping程序由Mike Muuss编写,目的是为了测试另一台主机是否可达.该程序发送 ...
- 『TCP/IP详解——卷一:协议』读书笔记——14
2013-08-25 11:32:06 第5章 RARP:逆地址解析协议 5.1 引言 具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址.但是无盘机,如X终端或无盘工作站,则需要采用其 ...
- 『TCP/IP详解——卷一:协议』读书笔记——13
2013-08-24 16:03:39 4.6 ARP代理 ARP代理(Proxy ARP):如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求.这样可 ...
- 『TCP/IP详解——卷一:协议』读书笔记——11
2013-08-23 20:00:18 第4章 ARP:地址解析协议 4.1 引言 ARP(Address Resolution Protocol,地址解析协议)是获取物理地址的一个TCP/IP协议. ...
- 『TCP/IP详解——卷一:协议』读书笔记——07
2013-08-20 17:51:49 第三章 IP:网际协议 3.1 引言 IP是TCP/IP协议族中最为核心的协议.所有的TCP.UDP.ICMP和IGMP数据都以IP数据报格式传输.再来看一下图 ...
- 『TCP/IP详解——卷一:协议』读书笔记——06
2013-08-20 14:41:01 2.8 最大传输单元MTU MTU,最大传输单元:以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节.这个不同网络对应的传输上限 ...
- 『TCP/IP详解——卷一:协议』读书笔记——05
2013-08-19 22:35:57 2.6 PPP:点对点协议 PPP点对点协议修改了SLIP协议中的所有缺陷: 1. 在串联链路上封装IP数据报的方法.PPP即支持数据为8位&无奇偶检验 ...
- 『TCP/IP详解——卷一:协议』读书笔记——04
2013-08-18 16:31:17 第2章 链路层 2.1 引言 链路层主要有三个目的: 为IP模块发送和接受IP数据报 为ARP模块发送ARP请求和接受ARP应答 为RARP发送RARP请求和接 ...
随机推荐
- 潜入ICU的四逆汤
制附子50克(先煎2小时).干姜15克.炙甘草10克.桂枝10克.上好肉桂10克(后下).煎取药液300毫升,分三次鼻饲.这是昨天我给A先生病危的父亲开的处方:四逆汤加肉桂.桂枝. 昨天上午的门诊到2 ...
- MFC使用TRACKMOUSEEVENT触发mouseHover和mouseLeave
为对话框添加WM_MOUSEHOVER或WM_MOUSELEAVE消息并不会响应.MFC需要特殊处理,其中一法就是使用TRACKMOUSEEVENT void CmfcDlgDlg::OnMouseM ...
- CSS子元素居中(父元素宽高已知,子元素未知)
<style> .container{width:400px; height:400px; position:relative;} .center{position:absolute; l ...
- 银行ATM机工作流程模拟编程
[编程内容] 编程,模拟一个ATM(Automatic Teller Machine,自动取款机)的工作流程.依据帐户信息:姓名.帐号.密码.余额,完成ATM机功能:登录.显示余额.取款.修改密码. ...
- vue-cli#2.0 webpack 配置分析
目录结构: ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-s ...
- Linux_08------Linux的系统管理
分钟,在随机延迟0-45分钟时间 * 使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件. * */
- C语言 malloc、calloc、realloc的区别
三个函数的申明分别是: void* malloc(unsigned size); void* realloc(void* ptr, unsigned newsize); void* calloc(si ...
- Installshield 打包安装包心得
制作简单的安装软件 声明:下面的教程,是把读者当做完全没接触过IS的角度来制作的. 1. 启动InstallShield 12.建立一个InstallShield MSI Project,如图: 2 ...
- codeforce div 377
#include <bits/stdc++.h> using namespace std; #define pb push_back #define lb lower_bound #def ...
- asp.net Gridview 的用法
留个档. <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="Fa ...