《TCP/IP详解卷一:协议》学习笔记八

2023-11-10

一、Traceroute程序的操作

1、Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。其还可以让我们使用IP源路由选项。

 

2、为什么不使用IP记录路由选项(RR)而另外开发一个新的应用程序?

 1)、原先并不是所有的路由器都支持记录路由选项,因此该选项在某些路径上不能使用。

 2)、记录路由一般是单项的选项。

 3)、IP首部中留给选项的空间有限,不能存放当前大多数的路径。

 

3、Traceroute程序使用ICMP报文和IP首部中的TTL字段(生存周期)。

 

4、TTL字段

 1)、此是由发送端初始设置一个8 bit字段。推荐的设置值是由分配数字RFC决定,当前值为64。

 2)、每个处理数据报的路由器都需要把TTL的值减1或减去数据报在路由器中停留的秒数。由于大多数的路由器转发数据报的延时都小于一秒钟。因此TTL最终成为一个挑战的计数器,所经过的每个路由器都将其值减1.

 3)、TTL字段的目的是防止数据报在选路时无休止地在网络中流动。

 4)、当路由器收到一份IP数据报,如果其TTL字段是1或0,则路由器不转发该数据报。反之,路由器将该数据报丢弃,并给信源机发送一份ICMP“超时”信息。

 

5、Traceroute程序操作过程

 1)、它发送一份 T T L字段为1的I P数据报给目的主机。处理这份数据报的第一个路由器将 T T L值减 1,丢弃该数据报,并发回一份超时 ICMP报文。这样就得到了该路径中的第一个路由器的地址。

 2)、然后  Tr a c e r o u t e 程序发送一份 T T L值为2 的数据报,这样我们就可以得到第二个路由器的地址。

 3)、继续这个过程直至该数据报 到达目的主机。但是目的主机哪怕接收到 T T L值为1的I P数据报,也不会丢弃该数据报并产生 一份超时I C M P报文,这是因为数据报已经到达其最终目的地。

 

 

二、局域网输出

1、我们将使用从 s v r 4到s l i p,经路由器b s d i的简单互联网(见内封面)。 b s d i和s l i p之间是9600 b/s的S L I P链路。

图8.1

1)、输出的第1个无标号行给出了目的主机名和其 I P地址,指出t r a c e r o u t e程序最大的T T L字段值为3 0。 4 0字节的数据报包含 2 0字节I P首部、 8字节的U D P首部和1 2字节的用户数据(1 2字节的用户数据包含每发一个数据报就加 1的序列号,送出T T L的副本以及发送数据报的时间)。

2)、输出的后面两行以T T L开始,接下来是主机或路由器名以及其I P地址。对于每个T T L值,发送3份数据报。每接收到一份I C M P报文,就计算并打印出往返时间。如果在 5秒种内仍未收到3份数据报的任意一份的响应,则打印一个星号,并发送下一份数据报。

 

2、往返时间是由发送主机的 t r a c e r o u t e程序计算的。它是指从 t r a c e r o u t e程序到该路由器的总往返时间。如果我们对每段路径的时间感兴趣,可以用 T T L字段为N + 1所打印出来的时间减去T T L字段为N的时间。

 

3、有两种不同的I C M P“超时”报文(见 6 . 2节的图6 - 3),它们的I C M P报文中c o d e字段不同。图2给出了这种I C M P差错报文的格式。

图2

我们所讨论的I C M P报文是在T T L值等于0时产生的,其c o d e字段为0。
1)、主机在组装分片时可能发生超时,这时,它将发送一份“组装报文超时”的 I C M P报文。这种差错报文将c o d e字段置1。

 

4、关于t r a c e r o u t e程序,还有一些必须指出的事项。

1)、首先,并不能保证现在的路由也是将来所要采用的路由,甚至两份连续的 I P数据报都可能采用不同的路由。如果在运行程序时,路由发生改变,就会观察到这种变化,这是因为对于一个给定的 T T L,如果其路由发生变化,t r a c e r o u t e程序将打印出新的I P地址。

2)、第二,不能保证 I C M P报文的路由与 t r a c e r o u t e程序发送的U D P数据报采用同一路由。

3)、第三,返回的 I C M P报文中的信源 I P地址是U D P数据报到达的路由器接口的 I P地址。

4)、最后,在广域网情况下,如果 t r a c e r o u t e程序的输出是可读的域名形式,而不是 I P地址形式。

 

 

三、广域网输出

1、图3是从s u n主机到NIC (Network Information Center)的情况。

图3

1)、T T L字段为6和7的路由器位于JPL (JetPropulsion Laboratory)上。 T T L字段为11所输出的s u r a . n e t网络位于Southeastern UniversitiesResearch Association Network上。 T T L字段为1 2的域名G S I是Government Systems, Inc., NIC的运营者。

2)、T T L字段为6的第2个RT T(5 9 0)几乎是其他两个 RT T值(2 3 4和2 6 2)的两倍 。它表明 I P路由的动态变化。在发送主机和这个路由器之间发生了使该数据报速度变慢的事件。同样,我们不能区分是发出的数据报还是返回的 I C M P差错报文被拦截。

3)、T T L字段为3的第1个RT T探测值(2 0 4)比T T L字段为2的第1个探测值(2 3 3)值还小。由于每个打印出来的RT T值是从发送主机到路由器的总时间,因此这种情况是可能发生的。
 

 

四、IP源站选路选项

1、通常I P路由是动态的,即每个路由器都要判断数据报下面该转发到哪个路由器。应用程序对此不进行控制,而且通常也并不关心路由。它采用类似 Tr a c e r o u t e程序的工具来发现实际的路由。源站选路(source routing)的思想是由发送者指定路由。它可以采用以下两种形式
1)、严格的源路由选择。发送端指明 I P数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个“源站路由失败”的I C M P差错报文。

2)、宽松的源站选路。发送端指明了一个数据报经过的 I P地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。

 

2、Tr a c e r o u t e程序提供了一个查看源站选路的方法,我们可以在选项中指明源站路由,然后检查其运行情况。图3给出了源站路由选项的格式。
图4

1)、对于源站选路,我们必须在发送 I P数据报前填充I P地址清单;而对于记录路由选项,我们需要为 I P地址清单分配并清空一些空间,并让路由器填充该清单中的各项。同时,对于源站选路,只要为所需要的I P地址数分配空间并进行初始化,通常其数量小于 9。而对于记录路由选项来说,必须尽可能地分配空间,以达到 9个地址。

2)、对于宽松的源站选路来说, c o d e字段的值是0 x 8 3;而对于严格的源站选路,其值为 0 x 8 9。l e n和p t r字段与7 . 3节中所描述的一样。

 

3、源站路由选项的实际称呼为“源站及记录路由”(对于宽松的源站选路和严格的源站选路,分别用L S R R和S S R R表示),这是因为在数据报沿路由发送过程中,对 I P地址清单进行了更新。下面是其运行过程

1)、发送主机从应用程序接收源站路由清单,将第 1个表项去掉(它是数据报的最终目的地址),将剩余的项移到1个项中(如图4所示),并将原来的目的地址作为清单的最后一项。指针仍然指向清单的第 1项(即,指针的值为 4)。

2)、每个处理数据报的路由器检查其是否为数据报的最终地址。如果不是,则正常转发数据报(在这种情况下,必须指明宽松源站选路,否则就不能接收到该数据报)。

3)、如果该路由器是最终目的,且指针不大于路径的长度,那么( 1)由p t r所指定的清单中的下一个地址就是数据报的最终目的地址;( 2)由外出接口(outgoing interface)相对应的I P地址取代刚才使用的源地址;( 3)指针加4。

 

5、当一个应用程序接收到由信源指定路由的数据时,在发送应答时,应该读出接收到的路由值,并提供反向路由。Host Requirements RFC指明, T C P客户必须能指明源站选路,同时, T C P服务器必须能够接收源站选路,并且对于该 T C P连接的所有报文段都能采用反向路由。如果T C P服务器下面接收到一个不同的源站选路,那么新的源站路由将取代旧的源站路由。
 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《TCP/IP详解卷一:协议》学习笔记八 的相关文章

  • 如何查看局域网内所有IP

    要如何查看局域网内正在使用的电脑的IP一共分以下几个步骤 第一步 点击电脑左下角的 开始 然后再点击 运行 第二步 在运行窗口里填入 cmd 然后点击确定 第三步 在cmd命令窗口输入 ipconfig ALL 命令 点击键盘上的回车键 第
  • 如何在移动端猎豹浏览器中设置代理IP

    手机浏览器作为一款功能强大且广受欢迎的移动浏览器 提供了丰富的功能和个性化选项 其中包括设置动态ip地址的功能 通过设置动态ip地址 您可以改变您的网络访问路径 保护个人隐私 或者访问被地理限制的内容 接下来 我将为您介绍在手机浏览器中如何
  • socket局域网测试是可以的,但是在腾讯云/阿里云上报错“[Errno 99] Cannot assign requested address”

    现在云服务器一般都是只有内网地址 通过公网IP访问时 由云服务器运营商映射到内部网络的 因此 如果部署socket服务时 配置server ip应该是内网IP 解决方法 服务端的ip填服务器的私网ip 客户端填公网ip
  • 一些优秀的开源轻量级TCP/IP协议栈

    以下是一些优秀的开源轻量级TCP IP协议栈 它们适用于嵌入式设备和其他资源受限的环境 lwIP lightweight IP lwIP 是一个非常流行的开源 TCP IP 协议栈 它专门为嵌入式系统设计 具有低内存占用和高效率的特点 lw
  • F5 BIG-IP LTM基础资料

    F5 BIG IP网络概述 TMOS是一个全代理的体系结构 流量必须穿越BIG IP设备以获得TMOS的优化效果 部署方式 路由模式 也被称作串联模式 真实服务器放在BIG IP之后的一个内部网络 真实服务器的网关需要指向 或者最终通过 B
  • TCP服务器—实现数据通信

    目录 前言 1 接口介绍 2 编写服务器 3 编写客户端 4 编译链接 5 测试 6 总结 前言 今天我们要介绍的是使用TCP协议实现数据通信 相比于之前写的UDP服务器实现数据信 在主体逻辑上并没有差别 客户端向服务器发送信息 服务器接受
  • 使用iperf测试设备的网络吞吐量

    iperf简介 iperf是一个基于Client Server的网络性能测试工具 可以测试TCP UDP和SCTP带宽质量 能够提供网络吞吐量信息 以及震动 丢包率 最大段和最大传输单元通统计信息 帮助我们测试网络性能 定位网络瓶颈 ipe
  • ip最长匹配mysql实现

    ip最长匹配计算 mysql使用inet aton函数实现 mask是ip的 select from select inet aton 10 181 88 1 inet aton mask inet aton prefix as match
  • 整型和IP地址之间的转换(Java实现)

    整型和IP地址之间的转换 Java实现 在Java编程中 有时我们需要将整型数据与IP地址之间进行转换 整型和IP地址表示的是不同的数据类型 但是它们之间可以相互转换 下面我将为你提供一种在Java中实现整型与IP地址互相转换的方法 将整型
  • TCP快速重传机制

    一 快速重传机制 上一篇讲到了TCP 的超时重传 但是超时重传往往会带来许多微妙的问题 比如说 当一个报文段丢失时 会等待一定的超时周期然后才重传分组 增加了端到端的时延 当一个报文段丢失时 在其等待超时的过程中 可能会出现这种情况 其后的
  • 浅析epoll的水平触发和边缘触发,以及边缘触发为什么要使用非阻塞IO

    https blog csdn net lihao21 article details 67631516 ref myread https blog csdn net D Guco article details 71373381 一 基本
  • TCP/IP协议栈及网络基础,协议栈原理及实现

    1 TCP IP协议栈及网络基础 推荐这个在B站几千观看的视频讲解 底层原理到徒手实现 TCP IP网络协议栈 tcp协议栈 如何实现 C C Linux服务器开发高级架构学习视频点击 C C Linux服务器开发高级架构师 Linux后台
  • 如何批量Ping 1000个IP地址,一个小技巧节约N小时?

    一 批量ping网段 对于一个网段ip地址众多 如果单个检测实在麻烦 那么我们可以直接批量ping网段检测 那个ip地址出了问题 一目了然 先看代码 直接在命令行窗口输入 for L D in 1 1 255 do ping 10 168
  • TCP协议,TCP报头及特点基础介绍

    目录 TCP协议 TCP协议特点 TCP协议适用场景 TCP包首部 什么是TCP连接 如何唯一确定一个TCP连接 有一个 IP 的服务器监听了一个端口 它的 TCP 的最大连接数是多少 TCP与UDP的区别 TCP协议 TCP是一种面向字节
  • 通讯编程001——Nodejs快速开发Modbus TCP Master

    本文介绍如何利用ModbusJs库快速开发Modbus TCP Master 相关源码请登录网信数智 wangxinzhihui com 下载 ModbusJs是一个基于Nodejs的Modbus TCP的开发库 目前支持的功能函数有 re
  • LWIP学习笔记(2)---IP协议

    IP首部 最高位在左边记为 bit 最低位在右边 记为31 bit 传输顺序 先0 7bit 在8 15bit 然后16 13 最后24 31bit 这种方式称为 big endian 也叫网络字节序 版本 ipv4 或 6 ipv6 首部
  • 前阿里P6花七天时间整理地方软件测试基础知识,高手请绕道

    可以说软件测试所学习的知识都是在循序渐进的 从更基础的知识逐渐延伸到困难的知识 由此可以看出 基础知识是这些重难点知识延伸的基础 想要升职加薪 基础知识必须牢靠 一 软件测试概述 1 软件缺陷 软件缺陷 又称之为 Bug 即计算机软件或程序
  • 传输层协议

    目录 UDP协议 如何向上交付 如何解包 UDP协议的特点 UDP是全双工的 UDP面向数据报 TCP协议 如何向上交付 如何解包 4位首部长度 TCP的可靠性 序号与确认序号 16位窗口大小 6位标记 为什么需要6位标记 ACK SYN
  • linux下查看所有tcp端口情况

    netstat ntlp
  • 什么是DLNA

    DLNA旨在解决个人PC 消费电器 移动设备在内的无线网络和有线网络的互联互通 使得数字媒体和内容服务的无限制的共享和增长成为可能 DLNA的口号是Enjoy your music photos and videos anywhere an

随机推荐

  • C语言/实现MD5加密

    本文详细视频讲解 已经发布到B站 https www bilibili com video BV1uy4y1p7on 更多仔细 请关注公众号 一口Linux 一 摘要算法 摘要算法又称哈希算法 它表示输入任意长度的数据 输出固定长度的数据
  • C语言头文件路径相关问题总结说明

    聊聊系统路径位置 绝对路径与相对路径 正斜杠 与 反斜杠 使用说明 by 矜辰所致 目录 前言 一 C语言中的头文件引用 二 KEIL 中的头文件路径 2 1 IncudePaths 指定的路径 绝对路径和相对路径 正斜杠 与 反斜杠 与双
  • SpringBoot Sleuth Zipkin Dubbo日志链路追踪全流程(2)

    SpringBoot SpringCloud Sleuth Zipkin Dubbo日志链路追踪全流程 看这篇文章之前 你最好看一下 之前的文章 SpringBoot SpringCloud Sleuth Zipkin Http Log4j
  • RC电路(一):微分

    1 充放电时间常数 在模拟 数字电路中 常常用到由电阻 和电容 组成的 电路 和 的取值不同 会导致输出波形和输入波形之间的关系也不同 由此也会产生不同的应用 当 时 电容电压 0 63E 当 时 电容电压 0 86E 当 时 电容电压 0
  • 通用嵌入式系统测试平台 ETest简介

    通用嵌入式系统自动化测试平台 通用嵌入式系统测试平台 Embedded System Interface Test Studio 简称 ETest 是针对嵌入式系统进行实时 闭环 非侵入式测试的自动化测试平台 适用于嵌入式系统在设计 仿真
  • 《阵列信号处理及MATLAB实现》绪论、矩阵代数相关内容总结笔记

    第一章 绪论 1 1 研究背景 1 1 1 阵列信号处理简介 将一组传感器按照一定方式布置在空间的不同位置 形成传感器阵列 用传感器阵列来接收空间信号 相当于对空间分布的场信号采样 得到信号源的空间离散观测数据 通过对阵列接受的信号进行处理
  • Lex和Yacc应用方法(一).初识Lex

    Lex和Yacc应用方法 一 初识Lex 草木瓜 20070301 Lex Lexical Analyzar 词法分析生成器 Yacc Yet Another Compiler Compiler编译器代码生成器 是Unix下十分重要的词法分
  • Feign的使用

    基于Feign远程调用 Feign说明 Feign是一个声明式的http客户端 其作用是帮助我们优雅的实现http请求的发送 官网地址 https github com OpenFeign feign Feign的使用 修改服务的pom x
  • MVC中的项目案例

    我们先一起来看看超期的效果图吧 以上就是超期的效果图 我来解析一下 超期操作的模态窗体弹出的条件与归还一样 应选择需要超期的书籍 再弹出模态窗体 模态窗体弹出 数据自动回填上去 罚款金额 超期天数 0 2 获取当前时间为罚款时间 罚款成功后
  • 解决python3在import cv2时报错问题

    在安装了ros 在import cv2时会报错 如下 import cv2 ImportError opt ros kinetic lib python2 7 dist packages cv2 so undefined symbol Py
  • CMake(七):函数和宏

    回顾到目前为止涉及的材料 CMake的语法已经开始看起来很像一门编程语言 它支持变量 if then else逻辑 循环和包含要处理的其他文件 毫无疑问 CMake还支持常用的函数和宏编程概念 就像它们在其他编程语言中的角色一样 函数和宏是
  • vistual studio 2017中导入pthread.h的配置方法

    1 下载pthread h的相关库文件 下载路径 https www mirrorservice org sites sourceware org pub pthreads win32 pthreads w32 2 9 1 release
  • 从技术小白到编程大神的技术书籍推荐

    本人算不上大神 也非计算机专业出身 本着一股热爱技术的精神 研究过各种计算机技术 对于知识的索取方式 比较习惯看书 当然 随着认识的加深 以及新技术的层出不穷 也常接触各种技术文档 早些时候阅读过很多不错的计算机书籍 对于计算机底层的深入认
  • spring boot 提示:程序包不存在,解决方法总结

    背景 之前出现过这样的问题 打包安装父项目就好了 今天改了一下代码 重新编译的时候 又出现了这样的情况 决定深度挖掘一下这里面的问题 spring boot 提示 程序包不存在 解决方法总结 spring boot 提示 程序包不存在 解决
  • Mysql系列(四)彻底理解MVCC+行锁+表锁+间隙锁

    文章目录 一 什么是MVCC 二 什么是行锁 表锁 间隙锁 三 MVCC与各种锁的关系 四 MVCC的实现原理 4 1 多版本 4 2 undo log 4 2 readview 一 什么是MVCC MVCC Multi Version C
  • Unity3D Shader 学习 1

    1 属性定义 用来指定这段代码将有哪些输入 1 name display name Range min max number 定义浮点数范围属性 2 name display name Color number number number
  • 【stm32学习】GPIO函数理解

    注 在魔术棒output选中 下图 函数编译后 可以在声明处右击 跳转至函数的定义 GPIO Init初始化 例子 注意 速度只有三个可选 输入输出模式 GPIO Mode AIN 模拟输入 GPIO Mode IN FLOATING 浮空
  • 【面试系列】JDK动态代理和CGLIB静态代理

    文章目录 前言 JDK动态代理代码实例 Cglib 代理代码实例 两者优缺点 前言 是否在面试过程中经常被问到Spring的代理的问题 比如说几种代理方式 两种代理方式的区别 或者问为什么JDK动态代理只能代理接口 如果你能回答出来JDK动
  • App内测神器之蒲公英--类似 testFlight fir.im

    一 前言部分 没发现蒲公英之前一直采用非常傻B的方式给公司App做内部测试 要么发个测试包让公司测试人员用iTUnes 自己安装 要么苦逼的一个个在我Xcode上直接安装测试包 操作起来又麻烦又苦逼 后来偶然发现了蒲公英感觉这货还真不是一般
  • 《TCP/IP详解卷一:协议》学习笔记八

    一 Traceroute程序的操作 1 Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由 其还可以让我们使用IP源路由选项 2 为什么不使用IP记录路由选项 RR 而另外开发一个新的应用程序 1 原先并不