最近我意识到,ICMP不包含任何端口,所以我试图从我无线连接的笔记本电脑ping公共IP(当然它的工作!)。
在典型configuration中,本地networking使用指定的“专用”IP地址子网(RFC 1918)之一。 该networking上的路由器在该地址空间中具有私有地址。 路由器还通过互联网服务提供商分配的“公共”地址连接到互联网。 当stream量从本地networkingstream向Internet时,每个数据包中的源地址将从私有地址转换为公有地址。 路由器跟踪每个活动连接的基本数据(特别是目标地址和端口)。
我的路由器是否有特殊的ICMP数据包空间?
ICMP标题
它只有4个字段:“types”,“代码”,“校验和”和“数据”。 只增加额外数据似乎是一个可行的解决方 请在回答时提供资料,因为找不到它们。 感谢您的时间:)
这里缺less的信息是位于8字节ICMP头中的标识符 (又名查询ID) – 见https://en.wikipedia.org/wiki/Ping_(networking_utility)#Echo_request 。 当多个内部主机同时ping同一个外部主机时,它们很可能会用不同的查询ID来完成。
这是用来代替路由器的NAT表中的TCP / UDP端口号,以便返回的回复可以匹配到初始请求并发送回正确的内部主机(以及基于外部的通常的匹配全球地址)。
您的路由器将您的内部地址转换为其外部地址。 该数据包以ICMP数据包中的外部地址作为源地址发送到Internet。
响应从另一个系统发回到路由器的外部地址。 数据包再次被重写,以将其转发到内部地址。
根据您的路由器,特别是个人/家庭/企业/企业,它可以使用多种方式来跟踪哪个内部系统发送原始ICMP ping。 它可以只保留一个出站ICMP数据包的列表并匹配,它可以使用多个外部地址,每个内部地址等等。
查看“有状态的NAT”为您的路由器获取更多的细节。