一篇文带你深度了解TCP/UDP协议使用!

这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

目录

TCP与UDP协议

端口和套接字

Hello!大家好,我是灰小猿!

在Java编程开发中,网络通信的开发是很重要的一部分,它是两台或多台计算机进行网络的基础,网络程序编写的目的也就是为了与其他计算机之间进行网络通信,所以今天大灰狼就来和大家分享一下Java网络通信中要的知道的一些知识。

其实在Java的发展过程中,为了更加方便的进行网络通信,开发者逐渐的将网络编程中所需要的一些内容封装成了不同的类,用户在进行网络编程时,只需要创建相应类的对象,并且调用相应的方法即可。

TCP与UDP协议

在TCP/UDP协议栈中,有两个高级协议是我们在进行网络应用程序的编写中应该要了解的,即传输控制协议TCP和用户数据报协议UDP。

TCP协议是一种以固接连线为基础的协议,它提供两台计算机间可靠的数据传输,TCP可以保证从一端数据送至连接的另一端时,数据能够准确送达,而且抵达的数据的排列顺序和送出时的顺序相同,

因此TCP协议适合可靠性要求非常高的场合,打个比方来说:这就像我们双方在打电话,我必须先拨号给对方,等两端确定连接之后,双方才能互相听到对方讲话,也能够知道对方用的是什么内容。

**而UDP协议是无连接通信协议,不保证数据的可靠传输,但能够向若干个目标发送数据,或者接收来自若干个园的数据,UDP以独立发送数据包的方式进行,**这种方式就像快递员送快递给客户,可以寄出很多个包裹给同一个人,每一个包裹都是相互独立的个包裹,送达的顺序并不重要,快递员小哥接收包裹的顺序也不能保证与愁包裹的顺序相同。

因此,UDP协议适用于一些对数据准确性要求不高,但对数据传输速度和时效性要求非常高的网络,例如我们常见的网络聊天室,在线影片等。

这其中的原因就是因为TCP协议在认证上存在额外耗费,可能是传输速度减慢,而UDP协议即使有一小部分数据包损失,或者传输顺序有所不同,也不会造成严重的危害该通信。

这也就是为什么常说TCP可靠而非安全,UDP安全而非可靠了。

在这里我们需要注意一点,就是一些防火墙和路由器会设置成不允许就地被数据包传输,因此,若遇到UDP连接方面的问题,应该先确定所在的网络是否允许UDP协议

端口和套接字

刚听到这两个名词的时候,小伙伴可能不是特别了解,在这里打个通俗一点的比方,套接字就好比电源插座,将原本复杂的客户端服务器端通过这个插座连接在一起。

一般而言,对于一台计算机来说,只有单一的连接到网络的物理连接,所有的数据都通过此连接对内、对外送达特定的计算机。这就是端口的定义,网络程序设计中的端口(Port)并非真实存在的,他只不过是一个假想的连接装置,端口被规定为在一个0~65535之间的整数。例如HTTP服务一般使用80端口,FTP服务使用21端口,所以当一台计算机提供了多种不同的服务时,客户机就会通过不同的端口来确定连接到服务器上的哪项服务上面。

其实在端口上也有一定的讲究,如0~1023之间的端口,一般用于一些知名的网络服务和应用,而用户的普通网络应用程序应该使用1024以上的端口数,这样做的目的也是避免端口号与另一个应用或系统服务所用的端口所造成冲突。

端口的使用如下图所示

在网络程序中的套接字(Socket)表示用于将应用程序与端口连接起来,同样套接字也是一个假想的连接装置,在JAVA编程中将套接字可以抽象为类,我们在进行程序开发的时候,只需要创建Socket类对象,就可以使用套接字了。

可以用下面这个图来简单的表示套接字:

好啦,关于网络通信基础的讲解就是这些了,之后大灰狼也会和大家分享如何使用TCP和UDP以及MQTT协议进行网络程序的编写。

觉得有用记得点赞关注哟(^~^)

大灰狼期待与你一同进步^ω^

猜你喜欢

转载自juejin.im/post/7032822667170299917