Java网络编程—(1)网络的简介

来源:互联网 发布:回收站数据恢复免费版 编辑:程序博客网 时间:2024/06/08 04:19

网络是由节点和连线构成,表示诸多对象及其相互联系。在数学上,网络是一种图,一般认为专指加权图。网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型。在计算机领域中,网络是信息传输、接收、共享的虚拟平台,通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。网络是人类发展史来最重要的发明,提高了科技和人类社会的发展。——摘自百度百科

(好吧,以上全是废话,下面进入主题)

网络的分层

网络的通信被分为很多层,将网络分为很多层,就可以修改甚至替换某一层的软件,只要层和层之间的接口保持不变,就不会影响到其他层。

(上图代表网络不同层的协议)

分层模型实现了应用协议与网络硬件物理特性以及网络连接拓扑结构的解耦合。我们将会对适用于Internet的标准协议TCP/IP协议进行分析。

(上图为TCP/IP四层模型,另外还有七层模型-Open System Interconnection Reference Model,但是对于java程序猿来说过于复杂)

在这个模型中,应用程序(例如Firefox)运行在应用层,只与传输层通话,传输层只与应用层和网际层通话,以此类推。

主机网络层:host-to-work layer

也称为链路层、数据链路层或者网络接口层。主机网络层定义了一个特定的网络接口(如以太网卡或者是WIFI天线)如何通过物理连接向本地网络或者世界其他地方发送IP数据报。作为java程序员,不需要担心这一层,因为java从来不看物理层。

网际层:network layer

网络的下一层,这是java程序员要考虑的第一层,因为网络层协议定义了数据位和字节如何组织为更大的分组,称为包,还定义了寻址机制。网际协议(IP)是世界上最广泛的网络层协议,也是java唯一理解的网络层协议。实际上,IP是两个协议:IPv4和IPv6,IPv4使用32位地址,IPv6使用128位地址。在IPv4和Ipv6中,数据按照包在网际层传输,这些包称为数据报(datagram)。每个IPv4数据报包含一个长度为20到60字节的首部,以及一个包含多大65515字节数据的有效载荷。实际上,大多数IPv4数据报都很小,从几十字节到8K字节不等,IPv6则包含一个更大的首部,数据可以多大4g字节。

上图展示各个部分在IPv4数据报中是如何排列的,所有位和字节都采用big-endian方式,由左至右为最高位到最低位。

传输层:transport layer

负责确保各包以发送的顺序接收,并保证没有数据丢失或者迫坏。如果丢包,传输层会请求发送方重传这个包。

应用层:application layer

向用户传送数据的层称为应用层,应用层确定了数据传输后的操作。应用层协议就像一盆字母汤,除了用于web的http,还有用于电子邮件的smtp、pop和imap,用于传输文件的ftp、fsp和tftp,用于文件访问的nfs,文件共享的Gnutella和BitTorrent,用于语音通信的绘画启动协议Sip和Skype等。此外,java程序员的程序可以在必要时定义自己的应用层协议。

IP  TCP UDP

iP是开放的,与平台无关,允许任意两点之间有多个路由,可以绕过被破坏的路由器实现数据包的路由。但是ip由于两点之间存在多个路由,并且两点间的最短路径可能由于网络业务流量或者其他因素而随时间改变,所以构成某个特定数据流的包不会采用相同的路由,以至于即使数据全部到达,但是也可能不会以发送的顺序到达,为了改进这种机制,将TCP置于Ip之上,使两端能够确认接收到Ip包,以及请求重传丢失或被破坏的包。此外,TCP允许接收端的包按发送时的顺序重新组合在一起。所以tcp是可靠的传输协议,但是tcp的开销很大,因此如果对于数据的顺序要求不是很重要,而且单个包的丢失不会完全破坏数据流,那么就可以采用UDP,UDP是不可靠的传输协议 ,它不能保证包一定会到达目的地,也不会保证包会以发送时的顺序到达目的地,,例如视频或者音频中的一些数据位丢失不会造成太大影响,但会造成质量下降等问题,此外,可以在应用层的UDP数据流中建立纠错码,来解决数据丢失问题。

java 只支持tcp/UDp协议,以及建立在TCp和UDP之上的应用层协议,所有其他传输层、网际层、和更底层的协议在java中都智能通过链接到原生代码实现。

此外还有ip地址、域名、端口问题,但是这些和java程序员都是非必要的,如果感兴趣,可以从网上搜集信息来了解。

原创粉丝点击