我想在位于不同本地网络(本地网络使用 wifi)的两台计算机之间通过互联网建立 TCP 连接。我查找了 TCP 协议的描述,特别是 TCP 标头的结构:http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Checksum_computation
我从该数据中假设只需要:源地址(全局 ip)、目标地址(全局 ip)、源端口、目标端口。
但是,在没有MAC地址或本地IP地址的情况下,接收方本地网络中的路由器如何知道该网络中的哪台计算机是最终目的地?
编辑:我的情况是:一部手机连接到互联网(不是通过 wifi),家庭本地网络中的服务器(pc)通过 wifi 连接到路由器。
所以问题是:建立连接是否只需要全局发送方/接收方 IP 地址和端口,还是还需要 MAC 地址?
如果 MAC 不是必需的,那么如果同一网络中有两台计算机正在监听同一端口会怎样呢?据我记得,所有 PC 都使用端口 80 进行 http 通信,而 http 通信使用 tcp。为什么没有冲突?
答案1
在交换网络中,客户端确实需要 MAC 地址。
在路由网络中,客户端不需要 MAC 地址。
在路由示例中,数据包通过默认路由离开源网络。然后,该路由器查询其路由表以决定如何将流量发送到目的地。到达目标网络后,路由器将使用 ARP 协议来发现本地网络上的正确 MAC 地址,然后发送数据包。
答案2
如果 MAC 不是必需的,那么如果同一网络中有两台计算机正在监听同一端口会怎样呢?据我记得,所有 PC 都使用端口 80 进行 http 通信,而 http 通信使用 tcp。为什么没有冲突?
存在冲突。这是使用 NAT 和单一公网 IP 的网络很糟糕的原因之一。路由器可以通过三种方式判断将数据包发送到哪台机器:
如果连接源自内部,路由器可以创建 NAT 表条目。当它看到入站数据包时,它会在其 NAT 表中查找源 IP 地址、源端口和目标端口。这告诉您内部目标 IP 地址。然后它可以重写目标 IP 地址。
如果路由器中专门设置了端口转发,它可以查找该目标端口并按照配置重写目标 IP 地址。
如果配置了像 UPnP 这样的动态协议,那么内部机器可以在路由器中创建动态转发条目,允许它重写目标 IP 地址。