java ->网络通讯协议(UDP协议、TCP协议)

网络通讯协议

经过计算机网络可使多台计算机实现链接,位于同一个网络中的计算机在进行链接和通讯时须要遵照必定的规则,这就比如在道路中行驶的汽车必定要遵照交通规则同样。在计算机网络中,这些链接和通讯的规则被称为网络通讯协议,它对数据的传输格式、传输速率、传输步骤等作了统一规定,通讯双方必须同时遵照才能完成数据交换。安全

网络通讯协议有不少种,目前应用最普遍的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互联协议),它是一个包括TCP协议和IP协议,UDP(User Datagram Protocol)协议和其它一些协议的协议组,在学习具体协议以前首先了解一下TCP/IP协议组的层次结构。服务器

在进行数据传输时,要求发送的数据与收到的数据彻底同样,这时,就须要在原有的数据上添加不少信息 ,以保证数据在传输过程当中数据格式彻底一致。TCP/IP协议的层次结构比较简单,共分为四层,如图所示。
网络

图1-1      TCP/IP网络模型oracle

 

上图中,TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不一样的通讯功能,接下来针对这四层进行详细地讲解。学习

链路层链路层是用于定义物理传输通道,一般是对某些网络链接设备的驱动协议,例如针对光纤、网线提供的驱动。spa

网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。计算机网络

传输层:主要使网络程序进行通讯,在进行网络通讯时,能够采用TCP协议,也能够采用UDP协议。3d

应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。视频

IP地址和端口号

要想使网络中的计算机可以进行通讯,必须为每台计算机指定一个标识号,经过这个标识号来指定接受数据的计算机或者发送数据的计算机。对象

在TCP/IP协议中,这个标识号就是IP地址,它能够惟一标识一台计算机,目前,IP地址普遍使用的版本是IPv4,它是由4个字节大小的二进制数来表示,如:00001010000000000000000000000001。因为二进制形式表示的IP地址很是不便记忆和处理,所以一般会将IP地址写成十进制的形式,每一个字节用一个十进制数字(0-255)表示,数字间用符号“.”分开,如 “192.168.1.100”。

随着计算机网络规模的不断扩大,对IP地址的需求也愈来愈多,IPV4这种用4个字节表示的IP地址面临枯竭,所以IPv6 便应运而生了,IPv6使用16个字节表示IP地址,它所拥有的地址容量约是IPv4的8×1028倍,达到2128个(算上全零的),这样就解决了网络地址资源数量不够的问题。

经过IP地址能够链接到指定计算机,但若是想访问目标计算机中的某个应用程序,还须要指定端口号。在计算机中,不一样的应用程序是经过端口号区分的。端口号是用两个字节(16位的二进制数)表示的,它的取值范围是0~65535,其中,0~1023之间的端口号用于一些知名的网络服务和应用,用户的普通应用程序须要使用1024以上的端口号,从而避免端口号被另一个应用或服务所占用。

接下来经过一个图例来描述IP地址和端口号的做用,以下图所示。

 

从上图中能够清楚地看到,位于网络中一台计算机能够经过IP地址去访问另外一台计算机,并经过端口号访问目标计算机中的某个应用程序。

InetAddress

了解了IP地址的做用,咱们看学习下JDK中提供了一个InetAdderss类,该类用于封装一个IP地址,并提供了一系列与IP地址相关的方法,下表中列出了InetAddress类的一些经常使用方法。

 

 

上图中,列举了InetAddress的四个经常使用方法。其中,前两个方法用于得到该类的实例对象,第一个方法用于得到表示指定主机的InetAddress对象,第二个方法用于得到表示本地的InetAddress对象。经过InetAddress对象即可获取指定主机名,IP地址等,接下来经过一个案例来演示InetAddress的经常使用方法,以下所示。

 

public class Example01 {

    public static void main(String[] args) throws Exception {

        InetAddress local = InetAddress.getLocalHost();

        InetAddress remote = InetAddress.getByName("www.oracle.cn");

        System.out.println("本机的IP地址:" + local.getHostAddress());

        System.out.println("oracle的IP地址:" + remote.getHostAddress());

        System.out.println("oracle的主机名为:" + remote.getHostName());

    }

}

UDP与TCP协议

在介绍TCP/IP结构时,提到传输层的两个重要的高级协议,分别是UDP和TCP,其中UDP是User Datagram Protocol的简称,称为用户数据报协议,TCP是Transmission Control Protocol的简称,称为传输控制协议

UDP协议

UDP是无链接通讯协议,即在数据传输时,数据的发送端和接收端不创建逻辑链接。简单来讲,当一台计算机向另一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,一样接收端在收到数据时,也不会向发送端反馈是否收到数据(只规定发送端与接收端)。

因为使用UDP协议消耗资源小,通讯效率高,因此一般都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,由于这种状况即便偶尔丢失一两个数据包,也不会对接收结果产生太大影响。

可是在使用UDP协议传送数据时,因为UDP的面向无链接性,不能保证数据的完整性,所以在传输重要数据时不建议使用UDP协议。UDP的交换过程以下图所示。

UDP传输数据被限制在64K之内

TCP协议

TCP协议是面向链接的通讯协议,即在传输数据前先在发送端和接收端创建逻辑链接,而后再传输数据,它提供了两台计算机之间可靠无差错的数据传输。在TCP链接中必需要明确客户端与服务器端,由客户端向服务端发出链接请求,每次链接的建立都须要通过“三次握手”。第一次握手,客户端向服务器端发出链接请求,等待服务器确认第二次握手,服务器端向客户端回送一个响应,通知客户端收到了链接请求第三次握手,客户端再次向服务器端发送确认信息,确认链接。整个交互过程以下图所示。

 

 

因为TCP协议的面向链接特性,它能够保证传输数据的安全性,因此是一个被普遍采用的协议,例如在下载文件时,若是数据接收不完整,将会致使文件数据丢失而不能被打开,所以,下载文件时必须采用TCP协议

相关文章
相关标签/搜索