基本网络概念之Internet

Internet是世界上最大的基于IP的网络。它是所有七个大洲多个不同国家的计算机使用IP相互对话的一个无组织的集合。Internet不属于任何人(不过它的各个部分有相应的所有者)。

Internet地址分块

如果每个人都随心所欲地随机挑选Internet地址,那么有相同地址的不同计算机出现在Internet上立即就会引起冲突。为了避免这个问题,区域Internet注册机构会为Internet服务提供商(ISP)分配IPv4地址块。当公司或组织要建立一个基于IP的网络连接到Internet时,它们的ISP会给他们分配一个地址块。每个地址块有固定的前缀。例如,如果前缀是 216.254.85,那么本地网络可以使用216.254.85.0到216.254.85.255的地址。由于这个块固定了前24位,所以称为 /24。 /23指定了前23位,而留出9位表示总共2的9次方或512个本地IP地址。 /30子网(最小的子网)指定了子网中IP地址折前30位,留出2位表示总共2的2次方或4个本地IP地址。不过,所有块中最低地址用于标识网络本身(也就是0),最高地址是这个网络的广播地址(也就是255),所以比你原先预想的要少两个地址

网络地址转换

出于IP地址越来越稀缺,而对原始IP地址的需求越来越大,如今大多数网络都使用了网络地址转换(Network Address Translation,NAT)。基于NAT的网络中,大多数节点只有不可路由的本地地址,这些地址可能从 10.x.x.x、172..16.x.x到172.32.x.x或192.168.x.x选择。将本地网络连接到ISP的路由器会把这些本地地址转换为更小的一组可路由的地址。

例如,我的公寓里有大约十来个IP节点,它们都共用一个外部可见的IP地址。假如我现在用的这个计算机的IP为192.168.1.5, 共用的外部可见的IP地址为:216.254.85.72。实际上,我的机器必须把数据发送到216.254.85.72(即使如此,只有当我把NAT路由配置为将入站连接传递到192.168.1.5时,数据才会真正送达我的计算机)。路由器会监视出站和入站连接,调整IP包中的地址。对于出站的包,它将源地址改为路由器的外部地址(在我的网络上就是 216.254.85.72)。对于入站的包,它将目的地址改为一个本地地址,如:192.168.1.5。它如何记录哪些连接来自或发往哪台内部计算机,这对于java程序员并不是特别重要。只要正确地配置了你的机器,这个过程基本上就是透明的。你只需要记住外部地址和内部地址有可能不同就行了。

最后要说明的是,IPv6会使这里的大部分内容变得过时。NAT会毫无意义,不过防火墙还是有用的。仍然有可以路由的子网,不过那些子网会大得多

防火墙

Internet上有些顽皮的人。为了把他们关在门外,在本地网络建立一个访问点,检查所有进出该访问点的业务流通常很有用。位于Internet和本地网络之间的一些硬件和软件会检查所有进出的数据,以保证其合法性,这就称为防火墙(firewall)。防火墙通常是将本地网络连接到更大的Internet的路由器的一部分,还可以完成其他任务,如网络地址转换。此外,防火墙也可以是单独的机器。现代操作系统如Mac OS X和红帽Linux通常有内置的个人防火墙,只监视发送到这个机器的业务流。无论采用何种方法,防火墙都要负责检查传入或传出其网络接口的各个包,根据一组规则接收或拒绝这些包。

过滤通常是基于网络地址和端口的。例如,所有来自C类网络193.28.25.X的通信会被拒绝,因为你过遭遇过这个网络中黑客的攻击。出站SSH连接可能是允许的,但入站SSH连接不允许。端口80的入站连接是允许的,但只限于公司的web服务器。等等这些。更智能的防火墙会查看包的内容,确定是否接收或拒绝。防火墙具体的配置(哪些数据包允许通过而哪些不允许)取决于安全需求。Java与防火墙没有太大关系,除非防火墙总是碍你的事。

代理服务器

代理服务器(proxy server)与防火墙有关。如果说防火墙会阻止一个网络上的主机与外界直接建立连接,那么代理服务器就起到了中间人的作用。这样一来,如果防火墙阻止一个机器连接外部网络,这个机器可以请求本地代理服务器的web页面,而不是直接请求远程web服务器的web页面。然后代理服务器会请求web服务器的页面,将响应转发给最初发出请求的机器。代理还可以用于FTP服务和其他连接。使用代理服务器的安全优势之一外部主机只能看到代理服务器,而不会知道内部机器的主机名和IP地址,这就使得攻击内部网络更加困难

防火墙一般工作于传输层或网际层,而代理服务器通常工作于应用层。代理服务器对一些应用层协议非常了解,如HTTP和FTP(一个值得注意的例外是SOCKS【防火墙安全会话转换协议】代理服务器,它工作于传输层,可以代理所有TCP和UDP连接,而不考虑应用层协议)。可以检查通过代理服务器的包,确保其中包含适当类型的数据。例如,看起来包含Telnet数据的FTP包可能会被拒绝。下图展示了代理服务器在分层模型中的位置:

基本网络概念之Internet_第1张图片

只要所有对Internet的访问都通过代理服务器转发,那么访问就可以受到严格的控制。例如,公司可能选择阻止访问www.playboy.com,但允许访问www.microsoft.com。一些公司允许入站FTP,但不允许出站FTP,这样机密数据就不会容易地被非法带出公司。其他公司已经开始使用代理服务器来跟踪员工的web使用情况,这样可以看到谁在利用Internet获取技术支持,而谁在利用它找私人朋友。

代理服务器还可以用来实现本地缓存(local caching)。当请求web服务器的文件时,代理服务器首先查看此文件是否已在缓存中。如果文件在缓存中,那么代理服务器将提供缓存中的文件,而不是Internet上的文件。如果这个文件不在缓存中,那么代理服务器将获取此文件,转发给请求方,并将它存储在缓存中,供下次请求使用。这种机制可以显著地降低Internet连接的负载,大大提高响应时间。

代理服务器最大的问题在于它无法应对所有协议通常已有的协议如HTTP、FTP和SMTP允许通过,而更新的协议如BitTorrent则不允许通过(有些网络管理员会认为这应算是一项功能)。在快速改变的Internet世界,这是一个很大的缺点,对于java程序员而言更是一个缺点,因为它限制了定制协议的有效性使用Java可以很容易地创建为你的应用而优化的新协议,这通常也很有用。但是,没有代理服务器能理解这些独一无二的协议。因此,有些开发人员开始通过HTTP来接入他们的协议,最著名的是SOAP。不过,这对安全性有显著的负面影响。防火墙的存在肯定事出有因,而不是找Java程序员的麻烦。

你可能感兴趣的:(java-IO与网络编程)