为了对应用程序开发人员和最终用户隐藏网络发送数据的复杂性,将网络通信的的不同方面被分解为多个层。理论上,每一层都只与紧挨着的上下层对话。将网络分层,这样就可以修改甚至替换某一层的软件,只要层与层之间的接口保持不变,就不会影响到其他层(类比MVC模式、分布式系统内部通信的模式)。

TCP/IP五层模型:应用层、传输层、网际层、主机网络层(链路层、物理层)。

OSI七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

关系:OSI模型的应用层、表示层、会话层对应TCP/IP模型的应用层。

 

在TCP/IP模型中,应用程序如Google和Warcraft运行在应用层,只与传输层对话。传输层只与应用层和网际层对话。网际层只与主机网络层和传输层对话,绝不与应用层对话。主机网络层通过线缆、光纤或其他介质将数据移动到远程系统的主机网络层。

例如:当Web浏览器向Web服务器发送获取网页的请求时,浏览器实际上只与本地客户端的传输层对话。传输层将请求分解为TCP片,向数据添加序列号和校验和,然后将请求传递给本地网际层。网际层根据本地网络所需的大小将各TCP片分成IP数据报,并传递到主机网络层(链路和物理层)以便通过线缆传输数据。主机网络层将数字数据编码为适合特定物理介质的模拟信号,将请求发送到线缆,目标地址的远程系统的主机网络层可以由此读取请求。

远程系统的主机网络层将模拟信号解码为数字数据,将生成的IP数据报传递给服务器的网际层。网际层简单的检查IP数据报是否被破坏,如果已经分片,则重组数据,然后传递给服务器的传输层。服务器的传输层检查是否所有的数据都已到达,对于丢失或破坏的部分则要求重传(这个请求实际上是服务器的网际层->服务器的主机网络层->客户端系统主机网络层->客户端网际层->客户端的传输层进行重传)。一旦服务器的传输层接收到足够多的的连续顺序数据报,就将其重组写入一个流,由服务器应用层上运行的Web服务器读取。服务器响应这个请求,再通过服务器系统的各个分层发回响应。

实际的过程会比上述更复杂,不过在任何情况下,Java的代码只工作在应用层和传输层,其中90%的情况下代码将在应用层工作,只需要和传输层对话,另外10%会在传输层工作,与应用层和网际层进行对话。主机网络层的复杂性是隐藏的,这是分层模型的关键。

 

主机网络层:

  也称为链路层、数据链路层或网络接口层。主机网络层定义了一个特定的网络接口如何通过物理连接向本地网络或世界其他地方发送IP数据报。其中由连接不同计算机的硬件(线缆、光纤、无线电波)组成的部分也称为网络的物理层。

网际层:

  也成为网络层。定义了数据位和字节如何组织为更大的分组,称为包,还定义了寻址机制,不同计算机要按这个寻址机制查找对方。网际协议(IP)是世界上使用最广泛的网络层协议,也是Java唯一理解的网络层协议。

  IP协议分为IPv4和IPv6,IPv4使用32位地址,IPv6使用128位地址。在IPv4和IPv6中,数据按包在网络层传输,这些包被称为IP数据报。在IPv4中每个IP数据报包含一个长度为20至60字节的首部,以及一个包含多达65515字节数据的有效载荷。

  除了路由和寻址,网络层的第二个作用是支持不同类型的主机网络层相互对话(WIFI和Ethernet、Ethernet和DSL、DSL和光纤往返等协议的转换),使用同构协议将异构网络相互连接。

传输层:

  传输层负责确保各包以发送的顺序接收,并保证数据的完整性。如果丢包,传输层会请求发送方重传这个包。这一层上有两个协议,TCP和UDP。

  TCP,传输控制协议,支持对丢失或破坏的数据进行重传,并按照发送时的顺序进行传送。

  UDP,用户数据报协议,允许接收方检测被破坏的包,但不保证这些包以正确的顺序传送(或者包有可能根本未传送)。

应用层:

  向用户传送数据的层成为应用层。应用层确定了数据传输后的操作,例如,应用层协议如HTTP可以确保web浏览器将图像显示为图片,而不是一长串数字。包含http(超文本传输)、ftp,fsp,tftp(文件传输)、telnet(远程登录协议)、smtp(简单邮件传输协议)、dns(域名解析协议)、tftp(简单文件传输协议)、snmp(简单网络管理协议)、dhcp(动态主机配置协议)、nfs(文件访问)、Gnutella,BitTorrent(文件共享)

参考:《Java网络编程》