谈谈java中的网络协议

905 阅读10分钟

本文正在参与 “网络协议必知必会”征文活动

前言

OSI网络七层协议是一个国际范围的网络体系结构标准,其从最底层开始依次是物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。

7.jpg 各层含义如下:

物理层:使原始的数据比特流能在物理介质上传输,常见的物理媒介有光纤、电缆、中继器等。它主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。

数据链路层:通过校验,确认和反馈重发等手段,形成稳定的数据链路。在计算机网络中由于各种干扰的存在,物理链路是不可靠的。它的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。

网络层:进行路由选择和流量控制(IP协议)。主要作用:通过路由选择算法,为报文(该层的数据单位,由上一层数据打包而来)通过通信子网选择最适当的路径。这一层定义的是IP地址,通过IP地址寻址,所以产生了IP协议。

传输层:提供可靠的端口到端口的数据传输服务(TCP/UDP协议)。当出现丢包的情况,另一台电脑要告诉是否完整接收到全部的包。如果缺了,就告诉丢了哪些包,然后再发一次,直至全部接收为止。主要功能就是:监控数据传输服务的质量,保证报文的正确传输。

会话层:负责建立,管理和终止进程之间的会话和数据交换。因为不可能每次都要调用传输层协议去打包,然后再调用IP协议去找路由,所以要建立一个自动收发包,自动寻址的功能。

表示层:负责数据格式转换,数据加密和解密,压缩与解压缩等,将应用处理的信息转换为适合网络传输的格式,或者将来自下一层的数据转换为上层能处理的格式。

应用层:为用户的应用进程提供网络服务。应用层是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。

TCP/IP

TCP/IP,即传输控制协议/因特网互联协议,是Internet最基本的协议、Internet国际互联网络的基础。

TCP/IP协议是一个开放的网络协议簇,协议定义了用户如何连入因特网,以及数据如何在它们之间传输的标准。

TCP/IP四层模型

TCP/IP参考模型采用4层的层级结构,每一层都依赖它的下一层所提供的协议来完成自己的需求:应用层,传输层,网络层,数据链路层。

TCP/IP4层模型、5层模型和OSI七层模型的区别:

8.png

应用层 :应用层决定了向用户提供应用服务时通信的活动。TCP/IP协议族内预存了各类通用的应用服务。比如,FTP和DNS服务就是其中两类。

传输层 :传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。在传输层有两个性质不同的协议:TCP和UDP。

网络层 :网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或网络设备进行传输时,网络层所起的作用就是在众多的选项内选择一条传输路线。

链路层(又名数据链路层,网络接口层) :用来处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、网卡及光纤等物理可见部分,硬件上的范畴均在链路层的作用范围之内。

常见的网络协议

TCP协议

TCP是面向连接的传输层协议。TCP层是位于IP层之上,应用层之下的中间层。 不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

TCP报文段包括协议首部和数据两部分,协议首部的固定部分有20个字节,首部的固定部分后面是选项部分。

一.PNG

当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文。之后TCP把数据包传递给IP层,由它来通过网络将包传送给接收端实体的TCP层。

TCP具有以下特点:

基于流的方式;

面向连接;

可靠通信方式;

在网络情况不佳的时候尽量降低系统由于重传带来的带宽开销;

通信连接维护是面向的两个端点的,而不考虑中间网段和节点。

为满足TCP协议的这些特点,TCP协议做了以下规定:

数据分片:在发送端对用户数据进行分片,在接收端进行重组,由TCP确定分片的大小并控制分片和重组;

到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;

超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有接收到对应的确认,重发分片;

滑动窗口:TCP连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,TCP在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出;

失序处理:作为IP数据报来传输的TCP分片到达时可能会失序,TCP将对接收的数据进行重新排序,将接收到的数据以正确的顺序交给应用层;

重复处理:作为IP数据报来传输的TCP分片会发生重复,TCP的接收端必须丢弃重复的数据;

数据校验:TCP将保持它首部和数据的校验和,这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到分片的校验和由差错,TCP将丢弃这个分片,并确认接收到此报文段导致对端超时并重发。

TCP的三次握手与四次握手不再展开讲,感兴趣的可以自己查找资料学习。

UDP

UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点。 它有以下几个特点:

面向无连接:首先UDP是不需要像TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。

单播,多播,广播的功能:UDP不止支持一对一的传输方式,还支持一对多,多对多,多对一的方式,也就是说UDP提供了单播,多播,广播的功能。

面向报文:发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。

不可靠性:无连接本身就不靠谱,并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。不考虑网络环境,UDP没有拥塞控制,一直会以恒定的速度发送数据。 头部开销小,传输数据报文时是很高效的:

UDP头部包含了以下几个数据:

两个十六位的端口号,分别为源端口(可选字段)和目标端口

整个数据报文的长度

整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误

UDP的头部只有八字节,相比TCP的至少二十字节要少得多,在传输数据报文时是很高效的。

HTTP协议

HTTP超文本传输协议,是互联网上应用最为广泛的一种网络协议。HTTP是一种应用层协议,它是基于TCP协议之上的请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。现在使用的HTTP协议是HTTP/1.1版本。HTTP连接在1.0版本中采用非持续连接工作方式,1.1版本采用的是持续连接工作方式,持续连接是指服务器在发送响应后仍然在一段时间内保持这条由TCP运输层协议建立起来的连接,使客户机和服务器可以继续在这条连接上传输HTTP报文。

目前大部分浏览器都是用HTTP1.1协议,也就是说默认都会发起Keep-Alive的连接请求了,所以是否能完成一个完整的Keep- Alive连接就看服务器设置情况。

HTTP报文

HTTP协议是基于TCP协议之上的请求/响应式协议,下面主要介绍HTTP报文的格式,HTTP报文主要有请求报文和响应报文两种。

请求报文的格式:

9.1.png

HTTP请求报文由请求行、首部行和实体主体组成,由浏览器发送给服务器。上面这张图中SP表示空格,cr lf表示回车和换行。

响应报文格式

9.png

HTTP请求方法和响应状态码

在上面的HTTP请求报文例子中,我们可以看到请求方法是GET,这表示请求读取由URL所标志的信息,除了GET,还有其它几种常用的方法。

方法.PNG

http状态码用来告诉客户端发生了什么事情。状态码是在每条响应报文的起始行返回的,会返回一个数字状态和一个可读的状态。数字码便于程序进行差错处理,原因短语便于人们理解

200到299之间的的状态码表示成功,300到399之间的代码表示资源已经被转移走啦,400到499之间的代码表示客户端请求出错了,500到599之间的代码表示服务器出错了。

200 OK:客户端请求成功。 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。 403 Forbidden:服务器收到请求,但是拒绝提供服务。 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。 500 Internal Server Error:服务器发生不可预期的错误。 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

总结

对于开发而言,重点关注应该是TCP/IP的四层模型,然后在看具体的协议。