协议表示该数据报文所携带的数据所使用的协议类型,占 8 位。
该字段可以方便目的主机的 IP 层知道按照什么协议来处理数据部分。不同的协议有专门不同的协议号。
例如,TCP 的协议号为 6,UDP 的协议号为 17,ICMP 的协议号为 1。
不同模式下,探测过程中设计的数据包如下:
UDP 探测数据包(目标端口大于 30000) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 ICMP Destination Unreachable 数据包
TCP [SYN] 探测数据包(默认目标端口为 80) + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 TCP [SYN ACK] 数据包
ICMP Echo (ping) Request 探测数据包 + 中间网关发回 ICMP TTL 超时数据包 + 目标主机发回 ICMP Echo (ping) reply 数据包
UDP 端口扫描比较麻烦,它同TCP不一样,因为它不需要建立连接。
我们向 目标主机 的固定端口发送UDP数据包,可以得到 两种结果:
在运营商的路由器上,UDP 与 ICMP 的待遇大不相同。
为了利于 troubleshooting,ICMP ECHO Request/Reply 是不会封的,而 UDP 则不同。
UDP 常被用来做网络攻击,因为 UDP 无需连接,因而没有任何状态约束它,比较方便攻击者伪造源 IP、伪穗旅凯造目的端口发送任意多的 UDP 包,长度自定义。
所以运营商为安全考虑,对于 UDP 端口常常采用白名单 ACL,就是只有 ACL 允许的端口才可以通过,没有明确允许的则统统丢弃。比如允许 DNS/DHCP/SNMP 等。
当网络工程师用Ping时,Ping在偷摸做啥事儿?
ping命令是依托于 ICMP协议的, ICMP协议的存在就是为了更高效的转发 IP数据报和提高交付成功的机会。
ping命令除了依托于 ICMP,在局域网下还要借助于 ARP协议, ARP协议能根据 IP地址反查出计算机的 MAC地址。
另外 ARP是有缓存的,为了保证 ARP的准确性,计算机会更新ARP缓存。
有时我们traceroute 一台主机时,会看到有一些行是以星号表示的。
出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
有些路由器会隐藏的自己的位置,不让ICMP Timeout的消息通过,结果就是在那一跳上始终会显示星号。此外镇宽服务器也可以伪造traceroute路径的,不过一般应用服务器也没有理由这么做,所以Traceroute的结果还是能够为网络分析提供一些参考的。
Linux下traceroute程序默认发送的探测包为UDP协议,windows下tracert、mtr,以及Linux下mtr默认都发送的是icmp的数据包,并不是所有网关都会如实返回 ICMP 超时报文。处于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种猜唤 ICMP 报文,其余路由器或交换机也可能被管理员主动修改配置变为不返回 ICMP 报文。因此 Traceroute 程序不一定能拿到所有的沿途网关地址。所以,当某个 TTL 值的数据包得不到响应时,并不能停止这一追踪过程,程序仍然会把 TTL 递增而发出下一个数据包。这个过程将一直持续到数据包发送到目标主机,或者达到默认或用参数指定的追踪限制(maximum_hops 默认最大为30)才结束追踪
如果在局域网中的不同网段之间,我们可以通过traceroute 来排查问题所在,是主机的问题还是网关的问题。
如果我们通过远程来访问某台服务器遇到问题时,我们用到traceroute 追踪数据包所经过的网关,提交IDC服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC服务商也不可能帮助我们解决。
动态图解traceroute(路由追踪)的原理与实现
https://zhuanlan.zhihu.com/p/404043710
IP数据报格式详解
http://c.biancheng.net/view/6411.html
解析为何traceroute探测的时候中间有些节点探测不到?
https://zhuanlan.zhihu.com/p/122465496
traceroute使用与实现原理分析
https://zhuanlan.zhihu.com/p/36811672
traceroute(路由追踪)的原理及实现
https://www.jianshu.com/p/75a5822d0eec
为什么目标地址ping能通,但是tracetoute不通?
https://cloud.tencent.com/developer/article/1642331
只会用ping测试网络通不通?高级网工还会这么用
https://zhuanlan.zhihu.com/p/458358961
当网络工程师用Ping时,Ping在偷摸做啥事儿?
https://zhuanlan.zhihu.com/p/513184441
traceroute原理
https://www.cnblogs.com/zyd112/p/7196341.html
TCP/UDP/ICMP Traceroute的原理及区别
https://zhuanlan.zhihu.com/p/101810847
raceroute是我们经常用到的一个路由跟踪命令。山伏唯它的实现原理如下:
它发送一份 TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将 T T L值减 1,丢弃该数据报,并发回一份超时I C M P报文。这样就得到了该路径中的第一个路由器的地址。然后 Tr a c e r o u t e程序发送一份T T L值为2的数据报,这样逗培我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到 T T L值为1的I P数据报,也不会丢弃该数据报并产生一份超时 I C M P报厅枯文,这是因为数据报已经到达其最终目的地。那么我们该如何判断是否已经到达目的主机了呢?
Traceroute程序发送一份 U D P数据报给目的主机,但它选择一个不可能的值作为 U D P端口号(大于 30 000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的 U D P模块产生一份“端口不可达”错误(见 6 . 5节)的 I C M P报文。这样, Tr a c e r o u t e程序所要做的就是区分接收到的 I C M P报文是超时还是端口不可达,以判断什么时候结束。
我们使用ping命令的R选项也可以打印出源主机到目的主机所经过的路由。但是它和traceroute有些不同,至于区别在哪里?大家可以思考一下
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)