java

【黑马训练营】网络编程_Part3_内网中的计算机通过网关上网的原理

---------------------- android培训java培训、期待与您交流! ----------------------

什么是网关:

假设有一个由多台计算机组成的内部网络

并且在这个网络中,只有一台计算机能够连接到Internet,这里暂且称之为计算机G(Gateway)

那么,在这个内部网络中,就只有计算机G才拥有Internet中的合法IP,并可以与Internet中的其他计算机进行通信

这时,如果这个网络中其他的计算机也想要连接到Internet的话

就必须先要通过计算机G在内部网络的IP来连接到计算机G,然后才能通过计算机G连接到Internet

这里的计算机G我们就称之为网关

 

内部网络中的计算机向Internet网络中其他计算机发送数据的原理

假设在内部网络中有2台计算机,外部网络有1台计算机

并假设内部网络中非网关的计算机为计算机S(Source),网关计算机为计算机G,外部网络的计算机为计算机T(Target)

其中计算机S的内部网络IP为192.168.0.2

计算机G的内部网络IP为192.168.0.1,Internet上的IP地址为166.111.111.10

计算机T在Internet的IP地址为221.101.121.57

 

首先计算机S向计算机T发送一个数据包,数据包的格式如下:

192.168.0.2  | 221.101.121.57 |   3000   |     3000    |     hello

源计算机IP    |    目标计算机IP   |  源端口 |  目标端口 | 发送的数据

由于源计算机IP和目标计算机的IP不在一个网段上,因此计算机S会首先将这个数据包发送给网关计算机G

 

当计算机G接收到这个数据包时,会自动将这个数据包进行修改,修改后的数据包的格式如下:

166.111.111.10 | 221.101.121.57 | 1027 | 3000 | hello

可以看出,计算机G将源计算机在内部网络的IP改成了计算机G在Internet上的IP,并修改了源端口

但是为什么会把源端口修改成1027呢?这里就又涉及到了一个知识:端口映射

 

所谓端口映射,指的就是将内部网络中计算机S的端口A,和网关计算机G的端口B关联起来

这样,当计算机S通过端口A向Internet发送数据时,就会自动通过计算机G的端口B向Internet中发送数据

同理,当计算机G的端口B中接收到Internet上的数据的时候,也会自动将该数据发送给计算机S的端口A

 

所以,在这里假设我们已经将计算机S的3000端口映射到计算机G的1027端口上了

那么在计算机S通过3000端口向Internet发送数据时,就会自动通过计算机G的1027端口向Internet中发送数据

所以计算机G需要将源端口号改为1027

 

当计算机T接收到该数据包后,由于在数据包中保存的源IP是166.111.111.10,源端口号是1027

那么计算机T如果想要回复计算机S的话,需要发送的数据包格式就应当如下:

221.101.121.57 | 166.111.111.10 | 3000 | 1027 | hi

由于这个数据包中目标计算机的IP地址和端口号均为计算机G的

所以当计算机T发送了该数据包后,会首先由计算机G接收到该数据包

但是由于此时计算机G的1027端口已经和计算机S的3000端口设置了映射关系了

所以当计算机G的1027端口中接收到该数据包的时候,就会自动将该数据发送给计算机S的3000端口

这样就实现了内网中的计算机S和外网中的计算机T进行通信的全过程

---------------------- android培训java培训、期待与您交流! ----------------------
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值