`

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培训、期待与您交流! ----------------------
分享到:
评论

相关推荐

    JAVA_API1.6文档(中文)

    java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类...

    java源码包---java 源码 大量 实例

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    Java 面经手册·小傅哥.pdf

    这是一本以面试题为入口讲解 Java 核心内容的技术书籍,书中内容极力的向你证实代码是对数学逻辑的具体实现。当你仔细阅读书籍时,会发现Java中有大量的数学知识,包括:扰动函数、负载因子、拉链寻址、开放寻址、...

    Java OCR 图像智能字符识别技术,可识别中文

    Java OCR(Optical Character Recognition,光学字符识别)技术是一种计算机视觉领域的应用,它能将图像中的文字转换成可编辑的文本格式。这项技术在各种场景下都有广泛应用,比如文档扫描、车牌识别、发票处理等。...

    Java API文档 中文网页版

    Java API文档是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)中的所有类、接口、方法和常量的详细说明。这份中文网页版的Java API文档为中国的开发者提供了便利,无需通过英文版本来学习和查找API信息,...

    java_011 java 人脸识别完整源代码

    java_011 java 人脸识别完整源代码java_011 java 人脸识别完整源代码java_011 java 人脸识别完整源代码java_011 java 人脸识别完整源代码java_011 java 人脸识别完整源代码java_011 java 人脸识别完整源代码java_011...

    java源码包3

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行...

    java电商源代码 java电商源代码

    java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java电商源代码java...

    java api最新7.0

    JAVA开发人员最新版本7.0 api文档!本文档是 Java Platform Standard Edition 7 的 API !Java 1.7 API的中文帮助文档。 深圳电信培训中心 徐海蛟博士教学用api 7.0中文文档。支持全文检索,在线即时查询。 里面列...

    java单机小游戏.zip

    java单机小游戏java单机小游戏java单机小游戏java单机小游戏 java单机小游戏java单机小游戏java单机小游戏java单机小游戏 java单机小游戏java单机小游戏java单机小游戏java单机小游戏 java单机小游戏java单机小游戏...

    java景点导航系统java景点导航系统

    java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点导航系统java景点...

    java开源包4

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java简易小游戏.zip

    java简易小游戏java简易小游戏java简易小游戏java简易小游戏 java简易小游戏java简易小游戏java简易小游戏java简易小游戏 java简易小游戏java简易小游戏java简易小游戏java简易小游戏 java简易小游戏java简易小游戏...

    java开源包9

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    java开源包10

    JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...

    Java2Pas Java代码转pas代码

    Java2Pas是一个实用工具,主要用于将Java编程语言编写的源代码转换为Pascal语言的等效代码。这个工具对于那些需要在两种语言之间迁移代码或者理解不同编程语言语法的开发者来说非常有价值。Java和Pascal虽然都是面向...

    Java开发技术大全(500个源代码).

    HelloWorldApp.java 第一个用Java开发的应用程序。 firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 ...

    java错误处理:java.lang.OutOfMemoryError: Java heap space

    ### Java 错误处理:java.lang.OutOfMemoryError: Java heap space 在Java应用程序开发过程中,经常遇到的一个问题就是内存溢出错误,特别是在处理大量数据或长时间运行的应用时。其中,“java.lang....

    Java基础 学习笔记 Markdownr版

    Java是一种广泛使用的面向对象的编程语言,其设计目标是具有高度的可移植性,灵活性和安全性。本学习笔记主要涵盖了Java的基础知识,包括面向对象、集合、IO流、多线程、反射与动态代理以及Java 8的新特性等方面,...

    java2python--java代码转python工具

    Java到Python的转换工具,如标题“java2python”所示,是编程领域中的一种实用技术,旨在帮助开发者将已有的Java代码转换为Python语言。这种转换对于那些熟悉Java但希望进入Python生态系统,或者想要利用Python特定...

Global site tag (gtag.js) - Google Analytics