简单介绍了TCP/IP协议族的基本概念以及分层模型,以及数据传输的封装和分用!
虽然Java是一种高级计算机语言,平时编程的时候很难接触到网络协议等比较底层的知识,但是在Web应用开发过程中难免和Web网络打交道,具备一定的网络基础知识对于扩充Java程序员的知识面来说是非常不错的。
在系统的学习Java EE之前,简单的学习一些重要的网络协议基础知识是非常有必要的。特别是TCP/IP协议族,以及内部的TCP协议、IP协议、HTTP协议。
我们首先学习TCP/IP协议族,以及分层模型,以及数据传输时的封装和分用。
计算机与网络设备要相互通信,双方就必须基于相同的方式。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。
我们通常使用的网络(包括互联网)是在TCP/IP协议族的基础上运作,或者说TCP/IP协议族是一个包含了一系列构成互联网基础的相关网络协议的集合。简单的说,TCP/IP 是在 IP 协议的通信过程中,使用到的协议的统称。
TCP/IP 协议族里重要的知识点之一就是TCP/IP分层模型。 把 TCP/IP 层次化是有好处的。比如,如果互联网只由一个协议统筹,某个地方需要改变设计时,就必须把所有部分整体替换掉。而分层之后只需把变动的层替换掉即可。把各层之间的接口部分规划好之后,每个层次内部的设计就能够自由改动了。
值得一提的是,层次化之后,设计也变得相对简单了。处于应用层上的应用可以只考虑分派给自己的任务,而不需要弄清对方在地球上哪个地方、对方的传输路线是怎样的、是否能确保传输送达等问题。
分层模型显示协议如何在每个层上工作,以及层如何与它们上方或下方的层交互。因此,这对于后来学习的人来说,能够更好地理解各种协议以及它们如何相互协作。
在现代计算机网络中,常备使用的分层模型是两个:
TCP/IP四层模型和OSI七层模型有比较明确对应的关系:
OSI七层模型 | TCP/IP四层模型 |
应用层:为应用软件提供各种通用应用服务 | 应用层 |
表示层:对接收的数据进行解释、加密与解密、压缩与解压缩等 | |
会话层:发起、接受、终止会话(连接) | |
传输层:为端到端连接提供传输服务 | 传输层 |
网络层:IP地址(如例192.168.0.1)的封装与解封装服务,寻找传输路线和选择路由 | 网络层 |
数据链路层:MAC地址(网卡的地址)的封装与解封装服务 | 数据链路层 |
物理层:将比特流中的0、1,与电压的高低、灯光的闪灭之间的转换,以及规定连接器、网线等物理接口、规格 |
TCP/IP 协议族各层的作用如下:
利用 TCP/IP 协议族进行网络通信时,会通过分层顺序与对方进行通信。发送端从应用层往下走,接收端则从数据链路层往上走。
用 HTTP 举例来说明,首先作为发送端的客户端在应用层 (HTTP 协议)发出一个想看某个 Web 页面的 HTTP 请求。接着,为了传输方便,在传输层(TCP 协议)把从应用层处收到的数据(HTTP 请求报文)进行分割,并在各个报文上打上标记序号及端口号后转发给网络层。在网络层(IP 协议),增加作为通信目的地的 MAC 地址后转发给链路层。这样一来,发往网络的通信请求就准备齐全了。接收端的服务器在链路层接收到数据,按序往上层发送,一直到应用层。当传输到应用层,才能算真正接收到由客户端发送过来的 HTTP请求。
实际上,当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络,其中每一层对收到的数据都要增加一些首部信息(以太网包括尾部),这个过程称作封装(Encapsulation)。
当目的主机收到一个以太网数据帧时,并且通过匹配帧中的MAC地址发现目的地就是本机,那么数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(Demultiplexing)。
如有需要交流,或者文章有误,请直接留言。另外希望点赞、收藏、关注,我将不间断更新各种Java学习博客!