Java网络编程的基本网络概念(2)

传输层(transport layer)负责确保各包以发送的顺序接收,并保证没有数据丢失或破坏。如果丢包,传输层会请求发送方重传这个包。为实现这个目标,IP网络会给每个数据报添加一个附加首部,其中包含有更多信息。

这一层上主要有两个协议。第一个是传输控制协议(Transmission Control Protocol,TCP),这是一个开销很高的协议,支持对丢失或破坏的数据进行重传,并按照发送时的顺序进行传送。第二个协议是用户数据报协议(User Datagram Protocol ,UDP),它允许接收方检测被破坏的包,但不保证这些包以正确的顺序传送(或者包有可能根本未传送)。但是,UDP通常比TCP快。TCP称为可靠(reliable)协议;UDP是不可靠(unreliable)协议。

应用层

向用户传送数据的层称为应用层(application layer)。它下面的三层共同定义了数据如何从一台计算机传输到另一台计算机。应用层确定了数据传输后的操作。有用户Web的HTTP,还有用户电子邮件的SMTP、POP、IMAP、;用于文件传输的FTP、FSP、TFTP,用于文件访问的NFS;用于文件共享的Gnutella和BitTorrent;用于语音通信的会话启动协议(Session Initiation Protocol,SIP)和Skype等。此外你的程序可以在必要时定义自己的应用层协议。

IP、TCP、UDP

IP设计为允许任意两点之间有多个路由,可以绕过被破坏的路由器实现数据包的路由。由于两点间存在多个路由,并且两点间的最短路径可能由于网络业务流量或其他因素而随时间改变,所以构成某个特定数据流的包可能不会采用相同的路由。另外,即使它们全部到达,也可能不会以发送的顺序到达。为了改进这种基本机制,将TCP置于IP之上,使连接的两端能够确认接收IP包,以及请求重传丢失或被破坏的包。此外,TCP允许接收端的包按发送时的顺序重新组合在一起。

不过,TCP会有很大的开销。因此,如果有些情况丢失个别包不会完全破坏数据的话,也可以使用UDP发送数据包,而不需要TCP提供保证。UDP是不可靠协议,它不能保证包一定会到达目的地,也不保证包会以发送时的相同顺序到达。但是它开销小,速度快,也可以在应用层的UDP数据流中建立纠错码,来解决数据丢失问题。

可以在IP之上运行很多其他协议。但是Java支持的协议只有TCP和UDP,以及建立在TCP和UDP之上的应用层协议。所有其他传输层、网际层和更底层的协议,如ICMP、IGMP、ARP、RARP、RSVP和其他洗衣在Java程序中都只能通过连接到原生代码来实现。

IP地址和域名

IPv4网络中的每台计算机都有一个4字节的数字标识。一般写为点分四段格式,如192.1.32.90,这4个数中,每个数都是一个无符号字节,范围从0到255。IPv4网络中的每台计算机都有一个唯一的4节地址。当数据通过网络传输时,包的首部会包括要发往的机器地址(目的地址)和发送这个包的机器地址(源地址)。沿路的路由器通过检查目的地址来选择发送数据包的最佳路由。包括源地址是为了让接收方知道要向谁回复。

虽然计算机可以轻松地处理数字,但人类对于记忆数字却不在行。因此开发了域名系统(Domain Name System,DNS)用来将人类易于记忆的主机名(如)转换为数字Internet地址(如208.201.243.99)。当Java程序访问网络时,他们需要同时处理数字地址和相应的主机名。这些方法由java.net.InetAddress类提供。

端口

如果每台计算机一次只做一件事情,那么地址可能就足够了。但是,现代计算机同时要做很多不同的事情。电子邮件需要与FTP请求分开,而FTP又要与Web业务流分开。这是通过端口(port)实现的。每台有IP地址的计算机都有几千个逻辑端口(确切地讲,每个传输层协议有65535个端口)。这些只是计算机内存中的抽象,不表示任何物理实物,与USB端口不同。每个端口由1到65535之间的一个数字标识。每个端口可以分配给一个特定的服务。

防火墙

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

过滤通常是基于网络地址和端口的。Java与防火墙没有太大关系,除非防火墙总是碍你事。

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/7153eb0b871d4aff4507708062dbc200.html