《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详解卷一:协议》学习笔记八 的相关文章

  • C# 获取本地主机IP地址

  • IP地址与用户行为

    IP地址能够解决网络风险和提高网络安全的原因是 所有的网络请求都会带有IP信息 是访问者的独立标识 另外ip地址的分配和管理比较严格 难以造假 另外ip属于网络层 可以轻松的对其进行阻断 现有的各种网络安全 负载均衡的设备和软件 都是以ip
  • L2TP和PPTP的区别

    用最短的时间搞清楚L2TP和PPTP的区别 一 相关知识铺垫 1 虚拟隧道协议 一种通过公共网络的基础设施 在专用网络或专用设备之间实现加密数据通信的技术 通信的内容是可以是任何通信协议的数据包 隧道协议将这些协议的数据包重新封装在新的包中
  • socket局域网测试是可以的,但是在腾讯云/阿里云上报错“[Errno 99] Cannot assign requested address”

    现在云服务器一般都是只有内网地址 通过公网IP访问时 由云服务器运营商映射到内部网络的 因此 如果部署socket服务时 配置server ip应该是内网IP 解决方法 服务端的ip填服务器的私网ip 客户端填公网ip
  • 【Unix 网络编程】TCP状态转换图详解

    在前面 已经介绍了TCP协议的三路握手和四次挥手 如下图所示 TCP通信过程包括三个步骤 建立TCP连接通道 三次握手 数据传输 断开TCP连接通道 四次挥手 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过程 先看TC
  • TCP服务器—实现数据通信

    目录 前言 1 接口介绍 2 编写服务器 3 编写客户端 4 编译链接 5 测试 6 总结 前言 今天我们要介绍的是使用TCP协议实现数据通信 相比于之前写的UDP服务器实现数据信 在主体逻辑上并没有差别 客户端向服务器发送信息 服务器接受
  • 为什么要接入高防IP,到底有什么作用呢

    首先我们要了解什么是高防IP DDOS高防IP是为了应对互联网的DDOS攻击而产生的一款付费增值产品 根据不同的业务接入的方法也不同 在开通这款DDOS高防IP时服务商会给到对应的高防IP作为对外IP和业务IP使用 游戏业务就需要将之前配置
  • 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
  • TCP/IP协议:传输层之UDP

    一 UDP用户数据报协议 它是一个无连接的 面向数据报的协议 它不提供可靠性但传输速度比TCP要快 UDP数据报中的 UDP长度 为两个字节 所以我们要发送的UDP数据最多支持65507大约68K的数据 超过该大小的话需要自己来分割发送 使
  • MQTT协议详解一

    首先给出MQTT协议的查看地址 http public dhe ibm com software dw webservices ws mqtt mqtt v3r1 html 当然也有PDF版的 百度一下 不过个人感觉还是官网上的字体和排版最
  • TCP对方关闭对应的进程,调用Send将会产生Broken pipe信号默认会关闭进程

    解决 Linux下send函数 Broken pipe错误的解决方法 http www xootus net cache shtml 52 content 491 htm
  • 给windows宿主机和wsl2的ubuntu-20.04分配固定IP,使能相互ping通

    我们知道wsl2是基于hyper v的虚拟机 每次重新启动的时候 都会重新拉一个新的hyper v虚拟机实例 然后虚拟网卡的IP是dhcp随机分配的 如果作为开发系统用 就会比较烦每次都要换一个IP 有人提供了个脚本 他写了个bat脚本在w
  • 查看linux中的TCP连接数

    一 查看哪些IP连接本机 netstat an 二 查看TCP连接数 1 统计80端口连接数 netstat nat grep i 80 wc l 2 统计httpd协议连接数 ps ef grep httpd wc l 3 统计已连接上的
  • 端口开放,ubuntu开放指定端口 包括TCP UDP

    netstat nupl UDP类型的端口 netstat ntpl TCP类型的端口 a 表示所有 n 表示不查询dns t 表示tcp协议 u 表示udp协议 p 表示查询占用的程序 l 表示查询正在监听的程序 在ubuntu下面开放端
  • 通讯编程001——Nodejs快速开发Modbus TCP Master

    本文介绍如何利用ModbusJs库快速开发Modbus TCP Master 相关源码请登录网信数智 wangxinzhihui com 下载 ModbusJs是一个基于Nodejs的Modbus TCP的开发库 目前支持的功能函数有 re
  • Linux: sysctl: network: ip_no_pmtu_disc,容易搞混的参数名称

    这个参数的迷惑性在于双重否定 字面意思是关闭PMTU发现的功能 如果设置为1 代表关闭 如果是0 代表不关闭pmtu发现的功能 所以说明里 有disable enable 就容易搞混 所以要甄别网上的某些博客的说明 不要被误导 ip no
  • C# Tcplistener,Tcp服务端简易封装

    文章目录 前言 相关文章 前言 设计 代码 简单使用 运行结果 前言 我最近有个需求要写Tcp服务端 我发现Tcp服务端的回调函数比较麻烦 简化Tcp的服务 我打算自己封装一个简单的Tcp服务端 相关文章 C TCP应用编程三 异步TCP应
  • linux下查看所有tcp端口情况

    netstat ntlp
  • 协议茶馆:TLV 格式及编码

    本篇是多年前的存篇 出处不详 旧酒换新瓶 温故知新 有了新的理解 一 什么是 TLV 格式 几乎所有的通信都有协议 而几乎所有的需要在卡片和终端之间传送的数据 结构 都是 TLV 格式的 TLV 是 tag length 和 value 的
  • 分辨公网IP和内网IP的方法

    公网IP一般就是对外的访问地址 内网IP就是对内的访问地址 两者的使用范围是不一样的 那如果区分客户网络的IP地址是公网IP地址还是内网IP地址呢 公网IP的地址范围是很广泛的 我们可以先了解下内网IP 因为内网IP的地址段相对是局限的 一

随机推荐

  • 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 原先并不