让女朋友能懂的网络技术篇之动态代理

一、前言  

  笔者在工作经常遇到需要远程访问部署在另外一个城市的服务器上的网站,以分析并解决对方出现的程序异常问题。但是我们部署的程序常常为看不到对方的页面感到困扰,经过一番研究后,终于找到一种切实可行的方法,在这里也分享给面临同样问题的童鞋。
  情景是这样的:我本地主机是S,想要远程访问T服务器上8080的web应用网站,也就是说我本地主机S的浏览器上打开目标网站。但是呢,问题是S和T不是直接相连的,不在同一个局域网,并且每一个主机都有防火墙。庆幸的是,我们发现每一个局域网都一台对外开放的服务器,比如S所在的局域网有一台服务器A的22端口是连接到互联网的,T所在的局域网有一台服务器B的22的端口是连接到互联网的。

  问题可以这样形象地描述:我有一封写好的将要寄往远方的女朋友的信,我知道她所在的办公的地方,那么我要怎样做才能把这封信寄给她呢?在这里,我的请求数据就是封装在IP数据报里面的内容,而IP数据报就是信封,IP数据报里面的头部一般会写上收信人和地址并盖个戳。但是呢,我在公司的1号房间,路途遥远,我不能直接把信给女朋友。突然我想起,公司不是有邮件收发室A吗?于是,我就跑去2号房间邮件收发室A,由于我是公司内部人员,所以我不需要任何手续就可以进去了。通过邮件收发室,我很快就把信发出去了,一般会有邮局(电信运行商或中间服务器)的人员定时来取。很快,邮递人员按照我信封上面的地址,找到女朋友所在公司的大楼,但是由于邮递人员不是女朋友所在公司的内部员工,没有权限进入她所在的T栋大楼,只能放在她所在公司的前台。一般情况下,前台会定时通知公司内部人员哪些人有新邮件啦。最后,她看到了我写给她的信,非常高兴,于是她按照同样的方式回复了我。

二、操作过程

  下面需要介绍一个专门用于远程访问的工具xshell。

  step1:我本地主机S访问同一局域网的服务器A

 

  step2:在登陆上A服务器后,以A为代理去访问互联网上的服务器M

 

  配代理A界面如下:

 

  A服务器监听A本地端口,以建立隧道,这样就使得A的信可以传递到邮局M。

 

  step3:接着,通过M去访问B,也就是邮局人员去B楼送邮件的过程:

 

  step4:这时已经连上了B,即已经到达了女朋友所在公司的前台,只需要最后一步就可以把信送到了,激动不激动。女朋友所在房间号,即IP地址:192.166.1.101.

  

  step5:最后,打开浏览器“Internet设置”,设置代理,然后在浏览器输入localhost:8080/

 

三、动态代理与隧道技术原理引申

  所谓动态代理即通过socket实现端口的转发,socket是底层操作系统的一个应用程序,它能够实现端口的监听,支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。所谓隧道,就类似于socket之间建立的TCP连接。在TCP连接中,我们从一侧的出口(socket)放入数据,数据就会原封不动地从另一个出口出来,就好像在网络中挖了一条地道,网络包从这个地道里穿过来。它不同于其他的需要从来自多条路径的网络包组装,而是好像存在一条专有的管道一样,连接在网络的两端,因此它的速度一般比普通网络传输要快。

  建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

  套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。

 

  服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

  客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

  连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发 给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

参考资料:

https://blog.csdn.net/a351945755/article/details/22572529

https://www.cnblogs.com/jking10/p/5525519.html

《网络是怎样连接的》 

原文地址:https://www.cnblogs.com/zhongzihao/p/9955686.html