java,
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培训、期待与您交流! ----------------------相关文章
- 暂无相关文章
用户点评