TCP/IP协议详解 卷1 Traceroute程序[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。
作用
可以让我们看到IP数据报从1台主机传到另一台主机所经过的路由。比Ping程序看到更多东西
优势
- 不是所有路由器都支持RR选项。所以有些路由器上会出现不记录IP的现象。Traceroute不需要路由器具备任何特殊的功能
- RR选项的数据报的目的Ping服务器(主机)会将接受到的RR清单Copy回去。然后再加上回去的IP清单。这样就是X2。这会收到一些限制
- IP首部的空间有限,不能存放太多的IP(最多9个)
- 将TTL字段改成跳站的计数器
TTL
如果TTL的值为1或0时,路由器丢弃该数据报。并且给源主机发送一份ICMP超时信息。Traceroute程序将该路由器的IP地址包含在这份ICMP数据报中
如果是主机返回的ICMP是端口不可达的ICMP数据报。以此来区分路由器发送回来的还是主机发送回来的
ICMP超时报文
如果是TTL值等于0的时候产生的那code字段的值为0 如果是组装分片的时候发生超时,则code字段的值为1
Traceroute注意事项
不能保证ICMP报文的路由与Traceoute程序发送的UDP数据报采用同一路由 返回的ICMP数据报中包含的信源地址是路由器地址。但是IP记录路由选项(RR)是记录发送接口的地址。由于路由器有多个接口因此 A-B和B-A上运行Traceroute的返回结果可能会有所不同
IP源站选路选项
路由器发现下一站需要转发的路由器通常是采用Traceroute这样的程序完成。由发送者指定路由 规则有两种,严格的源路由选择(SSRR)和宽松的源路由选择(LSRR) 严格的源路由选择: 发送端指明IP数据报所要经过的确切路由,如果该IP不在其直接相连的网络上,则返回一个“源站路由失败”的ICMP差错报文 宽松的源路由选择:发送端指名IP数据报所要经过的IP清单,清单上的任意两个IP地址之间可以通过其他路由器
IP首部路由选项通用格式
跟IP路由选项的格式一样,不同的是源站选路一开始就要把清单填入。并且只需要分配足够的空间即可(IP地址清单通长会少于9个) 宽松的源站选路的code是0x83,严格的是0x89
源站路由选项运行过程:
- 发送主机收到源站路由清单,将第1个表项去掉(数据报的最终目的地),将剩下的项往前移动,然后将目的地址作为清单最后一项,类似把原本第一行的数据丢到最后一行去
- 每个处理数据报的路由都会检查自己的IP是否是清单中的最终地址。如果不是则转发(宽松的源站选路才可以)
- 如果路由是最终地址了那就将路由器的外出接口相对应的IP设为源地址,指针+4
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151535.html原文链接:https://javaforall.cn
相关文章
- 微信小程序轮播图片自适应[通俗易懂]
- TCP和UDP协议的区别_tcp和ip是什么意思
- tcp和udp的区别和使用场景_TCP跟UDP有什么不同
- TCP和UDP的区别是什么_socket tcp udp区别
- TCP三次握手图_tcp为什么三次握手
- tcp rst报文_TCP报文格式
- 重新理解小程序的未来
- S7-1200 PLC 与ATV340 Modbus TCP 通讯设置(含部分程序)
- 利用MOKIT从PySCF向其他量化程序传轨道
- tcp心跳包 - python TCP服务器v1.3 - 服务器抗压测试及关闭套接字处理
- SQLServer 错误 10060 在建立与服务器的连接时出错。 在连接到 SQL Server 时,在默认的设置下 SQL Server 不允许远程连接可能会导致此失败。 (提供程序:TCP 提供程序,错误:0 – 由于被连接方在一段时间后未正确响应,或者连接的主机无法响应,连接尝试失败。)(Microsoft SQL Server,错误:10060) 故障 处理 修复 支持远程
- SQLServer 错误 10061 在建立与服务器的连接时出错。 在连接到 SQL Server 时,在默认的设置下 SQL Server 不允许远程连接可能会导致此失败。 (提供程序:TCP 提供程序,错误:0 – 因目标计算机主动拒绝该连接而导致无法建立连接。) (Microsoft SQL Server,错误:10061) 故障 处理 修复 支持远程
- SQLServer 错误 11001 在建立与服务器的连接时出错。 在连接到 SQL Server 时,在默认的设置下 SQL Server 不允许远程连接可能会导致此失败。 (提供程序:TCP 提供程序,错误:0 – 无法识别主机。)(.Net SqlClient 数据提供程序) 故障 处理 修复 支持远程
- PHP goto:跳转到程序的指定位置
- Linux C 程序打包技术指南(linuxc程序打包)
- Linux下建立TCP连接的步骤(linux建立tcp连接)
- Go语言如何搭建网站程序
- Linux C语言开发:让程序脱颖而出(linuxc语言开发)
- Linux查看程序依赖:深入探讨(linux查看程序依赖)
- 端口揭示Linux系统监听TCP端口的真相(linux监听tcp)
- Linux系统下的程序加载与运行(linux加载程序)
- 端口Linux下监控TCP端口实战指南(linux监听tcp)
- Linux网络编程指南:TCP编程基础解析(tcp编程linux)
- 使用命令行编译打包运行自己的MapReduce程序 Hadoop2.6.0
- 深入理解Linux下的TCP协议栈(linux tcp协议栈)
- Linux程序怎么打包发布?(linux程序打包发布)
- Linux下TCP发包技巧(linux tcp发包)
- 探究Linux TCP协议实现的发包机制(linux tcp发包)
- MSSQL远程访问:TCP端口号码确定(mssql端口 tcp)
- 使用TCP协议探测Redis连接状态(tcp查看redis连接)
- TCP结合Redis构建高性能应用的实践(tcp redis)
- 深入探讨Oracle中的TCP协议的特点(oracle tcp格式)
- 关于用ADOSTREAM做的无组件上传程序简单介绍
- 动易数据转成dedecms的php程序