IP路由:当一个IP包在主机发送出去或者在网络当中时,是怎么选择路径到达目的主机的呢? 一般情况下, 如果说源主机和目的主机在同一个网络中的话,那个数据报可以直接到达目的主机而不经过路由器,下面可以试一下, 我的主机网络是192.168.1.2 ping 网络里面的另一台主机, 我们可以用traceroute或者tracepath看一下整个包在网络中的过程。

~/Desktop$ tracepath 192.168.1.7
1?: [LOCALHOST] pmtu 1500
1: 192.168.1.7 0.601ms reached
1: 192.168.1.7 0.946ms reached
Resume: pmtu 1500 hops 1 back 1

这里可以看到并没有经过路由器192.168.1.1 如果是外网的ip地址的话

~/Desktop$ tracepath baidu.com
1?: [LOCALHOST] pmtu 1500
1: 192.168.1.1 2.128ms
1: 192.168.1.1 1.983ms
2: 15.15.180.2 4.320ms
3: 15.81.3.18 3.632ms

可以看到外网的话是要通过路由器去路由的。

~/Desktop$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

内核IP路由表里面的默认路由是192.168.1.1 也就是说到达外网的数据包都会交给路由器, 让路由器在去路由到目的主机。

sudo route del default gw  192.168.1.1 

删除默认网关,再去stracepath 外网的话就会直接send failed。 但是内网是没有问题的, 也就是说:

( 1)如果I P层被设置为路由器的功能,那么就对数据报进行转发 (也就是说,像下面对待发出的数据报一样处理);否则( 2)数据报被丢弃。
路由表中的每一项都包含下面这些信息: • 目的I P地址。它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标
志字段来指定(如下所述) 。主机地址有一个非0的主机号(见图1 - 5) ,以指定某一特定的
主机,而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网) 。 • 下一站(或下一跳)路由器( next-hop
router)的I P地址,或者有直接连接的网络 I P地 址。下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报。下
一站路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的。 • 标志。其中一个标志指明目的 I
P地址是网络地址还是主机地址,另一个标志指明下一 站路由器是否为真正的下一站路由器,还是一个直接相连的接口(我们将在 9 . 2节中
详细介绍这些标志) 。 • 为数据报的传输指定一个网络接口。

路由器IP路由选择主要完成以下这些功能:
1) 搜索路由表,寻找能与目的 I P地址完全匹配的表目(网络号和主机号都要匹配) 。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值) 。
2) 搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目
指定的下一站路由器或直接连接的网络接口(取决于标志字段的值) 。目的网络上的所
有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表
目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。
3) 搜索路由表,寻找标为“默认( d e f a u l t) ”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。

网络中路由器之间的路由选择就是第二种功能的利用。
那么网络中的路由器之间又是怎么知道各自网络呢,这就需要动态路由, 告诉其他路由器自己所连接的网络状态,路由器上有一个进程称为路由守护程序( routing daemon) ,它运行选路协议,并与其相邻的一些路由器进行通信。 动态路由协议RIP可参考TCP/IP卷一。

TCP/IP协议栈 --- IP路由的更多相关文章

  1. TCP/IP协议栈--IP首部选项字段的分析

    IP输入函数(ipintr)将在验证分组格式(检验和,长度等)之后.确定分组是否到达目的地之前,对选项进行处理. 这表明分组所 遇到的每一个路由器以及终于的目的主机都对要分组的选项进行处理. IP分组 ...

  2. 【转】TCP/IP协议栈及OSI参考模型详解

    OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...

  3. TCP/IP协议栈概述

    TCP/IP协议栈概述 这篇文章虽然只是很粗浅的介绍了ISO/OSI 网络模型,但确实把握住了关键点,某种意义上,简单回顾一下就可以加深对TCP/IP协议栈的理解. 原作者:阮一峰 链接: http: ...

  4. [转]为何TCP/IP协议栈设计成沙漏型的

    http://m.blog.csdn.net/blog/dog250/18959371 前几天有人回复我的一篇文章问,为何TCP/IP协议栈设计成沙漏型的.这个问题问得好!我先不谈为何它如此设计,我一 ...

  5. TCP/IP协议栈与数据包封装+TCP与UDP区别

    ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/IP参考模型和OSI参考模型的对比示意图. T ...

  6. TCP/IP协议栈及OSI参考模型详解

    OSI参考模型 OSI RM:开放系统互连参考模型(open systeminterconnection reference model) OSI参考模型具有以下优点: 简化了相关的网络操作: 提供设 ...

  7. 深入浅出TCP/IP协议栈

    TCP/IP协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输.TCP/IP协议采用4层结构,分别是应用层.传输层.网络层和链路层, ...

  8. TCP/IP协议栈模型

    OSI七层模型介绍: 下面4层(物理层.数据链路层.网络层和传输层)主要提供数据传输和交换功能,即以节点到节点之间的通信为主:第4层作为上下两部分的桥梁,是整个网络体系结构中最关键的部分:而上3层(会 ...

  9. TCP/IP协议栈 --- 网络层(IP 首部 和分片)

    IP 是TCP/IP协议栈中重要的层次, TCP UDP ICMP IGMP都是依赖IP层进行传输的.首先它是一种不可靠,无连接的协议.不可靠:它不保证IP包能正确到达目的地,无连接:表示IP并不会维 ...

随机推荐

  1. java加密解密

    java加密解密 public class MD5Util { /** * @param args */ public static void main(String[] args) { System ...

  2. require.js实现js模块化编程(一)

    1.认识require.js: 官方文档:http://requirejs.org/RequireJS是一个非常小巧的JavaScript模块载入框架,是AMD规范最好的实现者之一.最新版本的Requ ...

  3. 【Win 10 应用开发】UI Composition 札记(二):基本构件

    在上一篇中,老周用一个示例,演示了框架视图的创建过程,在本篇中,老周将给大伙伴们说一下 Composition 构建 UI 的一些“零件”. UI Composition 有一个核心类——对,就是 C ...

  4. Buy the Ticket(卡特兰数+递推高精度)

    Buy the Ticket Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...

  5. .NET Core跨平台的奥秘[上篇]:历史的枷锁

    微软推出的第一个版本的.NET Framework是一个面向Windows桌面和服务器的基础框架,在此之后,为此微软根据设备自身的需求对.NET Framework进行裁剪,不断推出了针对具体设备类型 ...

  6. 0_Simple__cppIntegration

    引用已经编好的 .cu 和 .cpp 代码来混合使用.在 main.cpp 中调用了使用GPU的 cppIntegration.cu (测试函数也在其中) 和使用CPU的 cppIntegration ...

  7. Ruby变量常量

    全局变量:以$开头 实例变量:以@开头  @cust_id=id Ruby 常量: 常量以大写字母开头

  8. HTTP中的Range: bytes=0-

    HTTP中的Range就是分段请求字节数,也是大家经常说的断点续传.Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的 表示第二个 ...

  9. JAVA 的关键字 、

    关键字: 被JAVA语言赋予特定含义的单词, 特点: 组成关键字的单词的字母全部小写 注意: A:goto 和 const 是保留字 B: 类似于Notepad++ 这样的高级记事本,针对关键字有特殊 ...

  10. Maven 浅谈一

    一.Maven的作用 在开发中,为了保证编译通过,我们会到处去寻找jar包,当编译通过了,运行的时候,却发现"ClassNotFoundException",我们想到的是,难道还差 ...