怎样实现局域网穿透

2025-05-16 20:00:18

在国内,由于大多数用户都不是直接连接在互联网上,而是先连接到局域网,然后再通过局域网的网关接入互联网;所以,作为一个编程技术人员,想要自己的程序能够在多个不同局域网内的主机之间进行通信,掌握局域网穿透是一个必不可少的技能。那么,怎样才能实现局域网穿透呢?

一、不同局域网内主机互联的最大障碍

1、障碍一:位于局域网内的主机有两套 IP 地址,一套是局域网内的 IP 地址,通常是动态分配的,仅供局域网内的主机间通信使用;一套是经过网关转换后的外网 IP 地址,用于与外网程序进行通信。

怎样实现局域网穿透

2、障碍二:位于不同局域网内的迷撞笸痉两台主机,即使是知道了对方的 IP 地址和端口号,就这么“一厢情愿”地将数据包发送过去,对方也是接收不到的。为什么呢?因为出于安全起见,除非是主机主动向对方发出了连接请求(这时会在该主机的数据结构中留下一条记录),否则,当主机接收到数据包时,如果在其数据结构中查询不到对应的记录,那些不请自来的数据包将会被丢弃。

怎样实现局域网穿透

二、实现局域网穿透的解决办法

1、要想解决以上两大障碍,我们需要借助一尊怠哉砑台具有公网 IP 的服务器进行牵线搭桥。为了便于说明,先假设这里有两台位于不同局域网内的主机 A 和主机 B,以及一台具有公网 IP 地址的服务器。想在这两台主机间实现通信,具体的实现方法为:1)A 和 B 分别连接到服务器,这时,服务器将它们的外网 IP 和经过转换后的端口号(IP 地址和端口号合称套接字,下面就用套接字来代替)存储起来。

怎样实现局域网穿透

2、2)A 向服务器发送请求获取 B 的套接字,再根据获取的信息发送数据包给 B。B 收到 A 发来的数据包后,由于在它的数据结构中查询不到对应的记录,数据包将会被丢弃。当然,B 此时完全接收不到 A 发来的信息。

怎样实现局域网穿透

3、3)A 向服务器发送消息,告知服务器自己已经向 B 发送了数据包。于是,服务器开始向 B 发送消息,通知它 A 想和其建立连接,并将 A 的套接字发给 B。此时,B 根据得到的 A 的套接字,再向 A 发送数据包。由于 A 事前已经向 B 发送过数据包,在 A 的数据结构中留存有记录,因此,A 将能够成功接收到 B 的数据包。

怎样实现局域网穿透

4、4)A 接收到 B 发来的数据包后,可以再向 B 发送数据包。同样,由于 B 此前向 A 发送过数据包,在 B 的数据结构中留有记录,因此现在 B 也能够成功接收 A 发来的数据包了。至此,不同局域网内的主机 A 和主机 B 就可以自由通信了。

怎样实现局域网穿透
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢