网络编程之网络通信是什么——UDP与TCP的区别

版权声明:代码共享,欢迎copy https://blog.csdn.net/qq_29073921/article/details/82457243

      首先,补充一下其他的知识,会更加方便了解。

     OSI模型:是ISO(国际标准化组织)组织在1985年研究的网络互联模型,推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。

     OSI是一个开放性的通信系统互连参考模型,它是一个定义得非常好的协议规范。OSI模型有7层结构,物理层数据链路层网络层传输层会话层表示层应用层

 其内容如下:


第7层应用层—直接对应用程序提供服务,应用程序可以变化,但要包括电子消息传输
第6层表示层—格式化数据,以便为应用程序提供通用接口。这可以包括加密服务
第5层会话层—在两个节点之间建立端连接。此服务包括建立连接是以全双工还是以半双工的方式进行设置,尽管可以在层4中处理双工方式
第4层传输层—常规数据递送-面向连接或无连接。包括全双工或半双工、流控制和错误恢复服务
第3层网络层—本层通过寻址来建立两个节点之间的连接,它包括通过互连网络来路由和中继数据
第2层数据链路层—在此层将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址
第1层物理层—原始比特流的传输,电子信号传输和硬件接口数据发送时,从第七层传到第一层,接受方则相反。
1至4层被认为是低层,这些层与数据移动密切相关。5至7层是高层,包含应用程序级的数据。OSI模型用途相当广泛。

现在我能发正确的发比特流数据到另一台计算机了,但是当我发大量数据时候,可能需要好长时间,例如一个视频格式的,网络会中断好多次(事实上,即使有了物理层和数据链路层,网络还是经常中断,只是中断的时间是毫秒级别的)。

那么,我还须要保证传输大量文件时的准确性。于是,我要对发出去的数据进行封装。就像发快递一样,一个个地发。

于是,先发明了传输层(传输层在OSI模型中,是在网络层上面)

例如TCP,是用于发大量数据的,我发了1万个包出去,另一台电脑就要告诉我是否接受到了1万个包,如果缺了3个包,就告诉我是第1001,234,8888个包丢了,那我再发一次。这样,就能保证对方把这个视频完整接收了。

例如UDP,是用于发送少量数据的。我发20个包出去,一般不会丢包,所以,我不管你收到多少个。在多人互动游戏,也经常用UDP协议,因为一般都是简单的信息,而且有广播的需求。如果用TCP,效率就很低,因为它会不停地告诉主机我收到了20个包,或者我收到了18个包,再发我两个!如果同时有1万台计算机都这样做,那么用TCP反而会降低效率,还不如用UDP,主机发出去就算了,丢几个包你就卡一下,算了,下次再发包你再更新。

   

UDP协议

       UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。

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

       但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。UDP的交换过程如下图所示。

​​​​​​​​​​​​​​TCP协议

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

       由于TCP协议的面向连接特性,它可以保证传输数据的安全性,所以是一个被广泛采用的协议,例如在下载文件时,如果数据接收不完整,将会导致文件数据丢失而不能被打开,因此,下载文件时必须采用TCP协议。

总结:

  1. UDP: 传送速度快,但是容易丢数据,可用于视频聊天,语音聊天
  2. TCP: 传送稳定,不会丢失数据,可用于文件的上传、下载

     

UDP程序交互的流程

      发送端

1,创建DatagramSocket对象

2,创建DatagramPacket对象,并封装数据

3,发送数据

4,释放流资源


     接收端

1,创建DatagramSocket对象

2,创建DatagramPacket对象

3,接收数据存储到DatagramPacket对象中

4,获取DatagramPacket对象的内容

 5,释放流资源
 

TCP程序交互的流程

       客户端

1,创建客户端的Socket对象

2,获取Socket的输出流对象

3,写数据给服务器

4,获取Socket的输入流对象

5,使用输入流,读反馈信息

6,关闭流资源

       服务器端

1,创建服务器端ServerSocket对象,指定服务器端端口号

2,开启服务器,等待着客户端Socket对象的连接,如有客户端连接,返回客户端的Socket对象

3,通过客户端的Socket对象,获取客户端的输入流,为了实现获取客户端发来的数据

4,通过客户端的输入流,获取流中的数据

5,通过客户端的Socket对象,获取客户端的输出流,为了实现给客户端反馈信息

6,通过客户端的输出流,写数据到流中

7,关闭流资源

猜你喜欢

转载自blog.csdn.net/qq_29073921/article/details/82457243