我想知道我的电脑与路由器通信时使用的端口是什么。它是否与我使用的服务使用的端口相同(例如,当我使用 HTTP 时使用 80),或者是否有专门用于电脑与路由器通信的端口?
答案1
没有。
端口属于传输层协议(如 TCP 和 UDP),但普通路由器不会解释这些协议 - 它们在 Internet 层工作,并且仅根据其 IP 地址传输 IP 数据包,而不考虑其内容。(就像邮局一样,它只使用信封上写的内容,而不查找里面的地址。)
例如,您的计算机想要通过 UDP 向 192.0.1.2 发送 DNS 查询数据包。
IPv4: source=1.0.0.1, dest=192.0.1.2,
└ UDP: source_port=79846, dest_port=53,
└ DNS: ...
它添加了相应的链路层头(以太网,802.3,Wi-Fi):
Ethernet: source=[computer's MAC], dest=[your router's MAC], type=IPv4, ├ liiink layerrr
└ IPv4: source=1.0.0.1, dest=192.0.1.2, ├ internet layer
└ UDP: source_port=79846, dest_port=53, ├ transport l-r.
└ DNS: ... ├ application l.
然后,您的路由器将 IP 数据包不加改变地转发到下一个路由器:
Ethernet: source=[this router's MAC], dest=[next router's MAC], type=IPv4,
└ IPv4: source=1.0.0.1, dest=192.0.1.2,
└ UDP: source_port=79846, dest_port=53,
└ DNS: ...
等等。没有特殊端口——跳数之间唯一改变的是鏈接層地址(以太网和 Wi-Fi 的 MAC 地址)。
这甚至适用于执行 NAT 的路由器(例如您的家庭网关)。尽管它们会窥视 TCP/UDP 内部并重写某些端口号(通常是源端口,而不是目标端口),但它们仍然不会改变 TCP 端口端到端的任何内容。至于你的电脑就此而言,这个 NAT 过程是不可见的,因此与这个问题无关。
(旁注:路由器做了解 TCP 和 UDP,并能接受和发起 TCP 连接。如果你将数据包发送到路由器自己的IP 地址,那么它将通过 TCP:80 进行常规 HTTP 通信,通过 TCP:22 进行 SSH 通信,等等。他们只是在转发其他人的数据包。)
答案2
按照“端口”的通常定义,它特指流量的 TCP 目标端口,无论它在路径中的哪个位置。这是 80。如果您以其他方式定义“端口”,您可能会得到有关计算机到路由器通信的其他答案。人们使用“端口”一词来表示各种各样的东西。
您的计算机和路由器之间不存在流量,您的计算机和网站之间也不存在流量。您的计算机直接发送到路由器的数据包与发送到网站的数据包完全相同。您是否认为它们是相同的数据包取决于定义。