有人可以解释一下使用 ICMP 数据包传输 IP 数据和通过 ICMP 传输 TCP 数据之间的区别吗?
显然,我知道这将与不同的 OSI 层相关,但实际上在不同的层上完成的是什么?
我稍微了解隧道的一般概念,但不了解“通过 ICMP 隧道传输 IP 或 TCP”,实际上发生了什么?
答案1
使用 ICMP 数据包传输 IP 数据
ICMP 数据包用于封装 IP 数据报。此 IP 数据报可能是:UDP 数据包、TCP 段的一部分、SCTP/GRE/MPLS 协议数据单元的一部分,或任何其他高于第 2 层的协议。
通过 ICMP 隧道传输 TCP 数据
ICMP 数据包用于封装 TCP 段,或者仅由 TCP 段组成的 IP 数据报。
ICMP 回显请求允许发送者指定有效载荷。例如,ICMP 的“黑客”可以利用这一事实,将 TCP 数据包放入有效载荷中。接收端的某些东西必须知道这一点,并参与其中。如果您对其他 ICMP 请求类型富有创意,您可能会做很多事情。
扭曲协议以用于非预期用途的一个很好的例子是iodine
(http://code.kryo.se/碘/) 通过 DNS 请求隧道传输 IP。
(旁注:请注意,IP 标头中有一个“协议字段”,用于标识正在传输的上层协议。TCP 是协议 #6,GRE 是协议 #47,等等。(http://www.iana.org/assignments/protocol-numbers/protocol-numbers.xml))