`
long_yu2
  • 浏览: 334506 次
社区版块
存档分类
最新评论

java网路编程【1】 TCP与UDP 区别与比较

 
阅读更多

第一种解释:


TCP和UDP都是传输层协议

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。

当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。

TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。


UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。

UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,

但是并不能保证它们能到达目的地。

由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,

且没有超时重发等机制,故而传输速度很快

第二种解释:

两类传输协议:TCP;UDP


TCP是Tranfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议。

通过TCP协议传输,得到的是一个顺序的无差错的数据流。

发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送 或接收操作。


UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。


比较:


UDP:1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。


2,UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。


3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方


TCP:1,面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中需要连接
时间。



2,TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的
数据。

3,TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。


应用:


1,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。但是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此TCP传输的效率不如UDP高。


2,UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。


第三种解释:

要了解俩个概念,首先了解面向连接的服务和无连接的服务,

(1)应用面向连接的服务时,客户和服 务器在进行数据发送前,彼此向对方发送控制分组,这就是所谓的握手过程,使得客户和服务器都做好分组交换准备。这个准备是很松散的,面向连接服务与很多其 他的服务捆绑在一起,包括可靠的数据传输,流量控制和拥塞控制等,依赖连接以正确的顺序无错地传递所有数据。
还要使用确认和重传机制实现来可靠性。

(2)而无连 接服务侧是没有握手过程的,当一方想发送数据时就直接了当地发送,因为没有握手过程也就没有什么流量控制和拥塞控制,这样数据可能传输得更快,但是,由于 也没有确认过程,源端就不知道那些分组到达了目的端。因此可能在传输过程中丢失数据,不适合用在一些文件的传输,可以用在因特网电话,视频会议什么的。


TCP(传输控制协议)和UDP(拥护数据报协议)是传输层的俩个传输协议,它们俩个的最大区别就是是否面向连接。


【1】 TCP包括了面向连接和可靠数据传输服务,在客户端和服务器端进行通信前,要先交换传输层控制信息,为双方的通信做好准备。
在这个握手阶段后,我们就可以 认为在这俩个进程间存在一个TCP连接,且是一个全双工的连接,
在消息发送完后,应用程序会告诉TCP拆除这个连接。
可靠的传输服务为了保障彼此通信能无 差错地顺序传递所有数据。


当其中任何一个应用程序把一个字节流传如套接字时,它可以指望TCP把同样的字节流传递到对方的套接字,中间不回丢失和重传。
TCP是因特网的一种公益服 务,其目的是能调节数据传输过程中的一些问题,因此还要包含一个拥塞机制。
TCP拥塞机制在网络变得拥塞时阻止发送进程。确切地说,TCP拥塞控制试图把 每个TCP连接限定在它所公平共享的网络带宽上。对于有最小带宽需求限制的实时音频或视频应用来说,阻止其带宽那就让它们不能正常工作,此外,我们能想象 一下,在网络电话通话时,偶尔的不连续是可以容忍的,可见实时应用可以容忍丢失少部分数据,不需要完全可靠服务。


说了这么多,TCP能提供的好的服务,再看一下其缺点吧,
首先,TCP不保证最小传输率,通俗点说,TCP不允许发送进程以想要的速率发送数据,
受到 TCP拥塞控制的调节,发送进程有可能被迫以一个较低的平均速率发送。
其次,TCP不提供任何延时保障,具体点说,发送进程把数据传入自己的TCP套接字 后,这个数据将最终到达其接受套接字,
但是中间所经历的时间就不能保证了 ,花几秒或则几分钟都不一定。


UDP是一个非面向连接的轻量级传输协议,具有一个最简单的服务模型。
UDP是无连接的,因此两个进程彼此通信之前没有握手过程。
UDP提供不可靠的数据 传输服务,也就是说当一个进程往自己套接字发送一个消息时,UDP不能保障这个消息回最终到达接受套接字。
另外,就确实到达接收套节字的消息而言,他们的 到达顺序也可能不是有序的。

UDP不含拥塞控制机制,因此发送进程能够以任意速率往UDP套接字发送数据,尽管不能保证所有数据都到达接收套接字,但是会有相当比列的数据到达。

实时应用程序的开发人员往往选择在UDP上运行他们的应用。与TCP类似,UDP也不提供任何延迟保证。

说了这么多,我们可以通过下表来体会一下上面说的真正含义。

应用

应用层协议

用来支撑的传输协议

电子邮件

SMTP(RFC82)

TCP

远程终端访问

Telenet

TCP

WEB

HTTP

TCP

文件传送

FTP

TCP

远程文件服务器

NFS

TCP或UDP

流多媒体

专属

UDP或TCP

因特网电话

专属

一般为UDP

在表中我们看到,电子邮件,远程终端访问,WEB和文件传送都使用TCP协议,这些应用选择TCP的主要原因是在于TCP提供了可靠的数据传输服务,能够 保证所有数据最终到达其目的地。我们还看到,因特网电话一般运行在UDP协议上面,一个因特网电话应用的俩端都得以某个最小速率跨越网络发送数据;另外, 因特网电话可以容忍数据丢失,从这个俩个条件来看,都适合UDP,不需要可靠的TCP传输服务。

总的来说,TCP能保证传递全部数据,而UDP不能,且他们都不提供延迟保证。他们不提供延迟保证,并不意味着时间敏感的应用不能运行在现在的因特网上,而是应用是通过一些其他的方法来保证这些需要。


UDP
UDP 与 TCP 的主要区别在于 UDP 不一定提供可靠的数据传输。事实上,该协议不能保证数据准确无误地到达目的地。UDP 在许多方面非常有效。当某个程序的目标是尽快地传输尽可能多的信息时(其中任意给定数据的重要性相对较低),可使用 UDP。ICQ 短消息使用 UDP 协议发送消息。
许多程序将使用单独的TCP连接和单独的UDP连接。重要的状态信息随可靠的TCP连接发送,而主数据流通过UDP发送。


TCP
TCP的目的是提供可靠的数据传输,并在相互进行通信的设备或服务之间保持一个虚拟连接。

TCP在数据包接收无序、丢失或在交付期间被破坏时,负责数据恢复。它通过为其发送的每个数据包提供一个序号来完成此恢复。记住,较低的网络层会将每个数据包视为一个独立的单元,因此,数据包可以沿完全不同的路径发送,即使它们都是同一消息的组成部分。这种路由与网络层处理分段和重新组装数据包的方式非常相似,只是级别更高而已。
为确保正确地接收数据,TCP要求在目标计算机成功收到数据时发回一个确认(即 ACK)。如果在某个时限内未收到相应的 ACK,将重新传送数据包。如果网络拥塞,这种重新传送将导致发送的数据包重复。但是,接收计算机可使用数据包的序号来确定它是否为重复数据包,并在必要时丢弃它。


TCP与UDP的选择


如果比较UDP包和TCP包的结构,很明显UDP包不具备TCP包复杂的可靠性与控制机制。与TCP协议相同,UDP的源端口数和目的端口数也都支持一台主机上的多个应用。一个16位的UDP包包含了一个字节长的头部和数据的长度,校验码域使其可以进行整体校验。(许多应用只支持UDP,如:多媒体数据流,不产生任何额外的数据,即使知道有破坏的包也不进行重发。)
很明显,当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP协议是当然的选择。当强调传输性能而不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP也是一个好的选择,如:DNS交换。把SNMP建立在UDP上的部分原因是设计者认为当发生网络阻塞时,UDP较低的开销使其有更好的机会去传送管理数据。TCP丰富的功能有时会导致不可预料的性能低下,但是我们相信在不远的将来,TCP可靠的点对点连接将会用于绝大多数的网络应用。

分享到:
评论

相关推荐

    java网络编程使用tcp、udp实现多用户对话

    总之,Java网络编程使用TCP和UDP实现多用户对话,涉及到客户端与服务器的连接建立、数据传输、异常处理、多线程或异步编程、以及安全性等多个方面。通过学习和实践,可以掌握这些关键技术,为开发高效、稳定的网络...

    Java TCP和 UDP测试代码

    在IT行业中,网络编程是至关重要的一个领域,尤其是在开发服务器端和客户端应用时。Java作为一门广泛使用的编程语言,提供了丰富的API来支持TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)这...

    java-tcp-udp编程

    Java是世界上最流行的编程语言之一,尤其在服务器端和网络编程领域有着广泛的应用。TCP(传输控制协议)和UDP(用户数据报协议)是网络通信中的两种主要协议,它们各有特点,适应不同的应用场景。本篇文章将深入探讨...

    网络编程-基于tcp和udp

    网络编程是计算机科学中的一个重要领域,它涉及到计算机之间的通信,特别是在互联网上。在这个实例中,我们将探讨两种主要的传输协议:TCP(传输控制协议)和UDP(用户数据报协议),它们都是Internet协议套件的核心...

    tcp_udp_socket.zip_Java TCP/UDP_java Tcp _java socket _java tcp

    在IT行业中,网络编程是不可或缺的一部分,特别是在Java开发中,TCP和UDP协议是网络通信的基础。本实验项目“tcp_udp_socket.zip”旨在帮助开发者理解如何使用Java实现TCP和UDP的Socket通信。以下将详细讲解这两个...

    TCP与UDP的区别 用途 例子

    理解TCP与UDP的区别及其用途,对于网络编程和系统设计至关重要。 首先,TCP是一种面向连接的协议,它在数据传输前会建立一个可靠的连接。这个过程包括三次握手,确保通信双方都准备好进行数据交换。TCP提供顺序传输...

    网络分布式编程 TCP UDP

    本篇文章将深入探讨TCP和UDP在实现网络通信中的特点、应用场景以及如何在Java中进行相关操作。 首先,TCP是一种面向连接的、可靠的协议,它确保了数据的正确性和顺序。TCP在建立连接前会执行三次握手,确保双方都能...

    javaTCPUDP编程.zip_DEMO_java udp编程_tcp

    Java是世界上最流行的编程语言之一,尤其在开发网络应用程序时,其强大的网络库使得TCP和UDP编程变得简单。在这个"javaTCPUDP编程.zip_DEMO_java udp编程_tcp"的压缩包中,包含了一个用Java实现的TCP和UDP通信的示例...

    读书笔记:C#网络编程与JAVA网络通信。TCP, UDP的Socket编程多线程阻塞非阻塞等。.zip

    读书笔记:C#网络编程与JAVA网络通信。TCP, UDP的Socket编程多线程阻塞非阻塞等。

    Java网络编程:深入理解TCP,UDP通信机

    Java网络编程是Java开发中的一个重要领域,它涉及到Socket编程、TCP/UDP通信协议等多个方面。通过掌握Java网络编程的基础知识和技能,开发者可以构建出功能强大、性能优异的网络应用程序。随着技术的不断发展,Java...

    Java网络编程案例教程习题参考答案 .pdf

    Java网络编程案例教程习题参考答案涵盖了Java网络编程的基础知识点,包括Socket编程、TCP/IP协议、Java Socket类、ServerSocket类、Java网络编程模型、网络编程常见问题、多线程编程、并发编程、Socket选项、网络...

    java网络编程UDP和TCP.pdf

    Java网络编程涵盖了两种主要的通信协议:UDP(User Datagram Protocol)和TCP(Transmission Control Protocol)。这两者都是Internet协议的一部分,用于在不同的设备间传输数据。 TCP是一种面向连接的、可靠的传输...

    基于UDP和TCP协议的Socket(网络编程/套接字)案例

    Socket,也被称为套接字,是网络编程中的一个重要概念,它是不同计算机进程间通信的一种机制。在Java中,Socket提供了一种标准的方式来实现基于TCP(传输控制协议)和UDP(用户数据报协议)的网络通信。这两种协议在...

    JAVA TCP和UDP Socket通信框架

    Java中的TCP和UDP Socket通信是网络编程的基础,用于在不同设备之间建立可靠的数据传输通道。TCP(Transmission Control Protocol)提供的是面向连接、有序且无损的服务,而UDP(User Datagram Protocol)则是无连接...

    Java网络编程/Java网络编程实例

    Java网络编程是Java开发中的重要领域,它涵盖了网络应用程序的设计、实现和调试。在这个主题下,我们可以探讨多个关键知识点: 1. **Java Socket编程**:Java的Socket类提供了基于TCP/IP协议的网络通信能力。通过...

    基于TCP或UDP的客户端与服务器编程网络聊天-课程设计(含课程报告和代码).rar

    在IT领域,网络编程是计算机通信的核心部分,而TCP(传输控制协议)和UDP(用户数据报协议)是两种广泛使用的传输层协议。本课程设计的主题聚焦于利用这两种协议进行客户端与服务器之间的实时聊天应用开发,旨在让...

    Socket_TCP_UDP.rar_java socket tcp udp_java socket 协议_java tcp u

    总之,Java Socket编程是网络编程的基础,理解和掌握TCP和UDP协议的使用,能够帮助开发者构建高效、稳定的网络应用。无论你是开发文件传输服务、在线聊天应用,还是实时视频平台,Socket编程都会是你不可或缺的工具...

    基于java的TCP 和 UDP 协议源代码

    在计算机网络中,TCP(传输控制协议)和UDP(用户数据报协议)是两种主要的传输层协议,它们各自有着不同的特性和...通过仔细研究并运行这些源代码,你可以加深对TCP和UDP协议的理解,同时提升你的Java网络编程能力。

    java实现的tcpudp通信

    本次实验旨在通过实践操作,帮助学生深入理解 TCP 和 UDP 的工作原理,并掌握使用 Java 进行网络编程的方法。 #### 实验目的 1. **熟悉 Java 开发环境**:学习如何使用 Java 实现 TCP 流通信和 UDP 数据报通信。 2...

    Socket编程-tcp&udp-测试用例.docx

    luasocket是一个为lua设计的网络编程库,提供了丰富的API和高级网络功能如HTTP、FTP,但需要额外安装,可能会占用更多资源。 在选择luasocket时,考虑到其提供的便利性和广泛的文档支持,可以更方便地实现TCP和UDP...

Global site tag (gtag.js) - Google Analytics