A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 想学跑的猪 中级黑马   /  2013-4-13 13:07  /  4170 人查看  /  20 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

udp与tcp这两个协议的概念很模糊,他们之间有什么区别呢?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

20 个回复

倒序浏览
本帖最后由 张先龙 于 2013-4-13 13:13 编辑

tcp协议和udp协议的差别
                       TCP                     UDP
   是否连接    面向连接           面向非连接
传输可靠性      可靠                   不可靠
   应用场合   传输大量数据      少量数据
速         度       相对慢                   快

TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
学习学习!
回复 使用道具 举报
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,在正式收发数据前,必须和对方建立可靠的连接。TCP协议能为应用程序提供可靠的通信连接,使一台 计算机发出的数据包无差错地发送给另一台计算机
UDP(User Data Protocol,用户数据报协议)是面向非连接的协议,不与对方建立连接,直接发送数据,因为UDP协议没有建立连接的过程,它的通讯效率高,但可靠性不如TCP协议。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立1个TCP连接,之后才可以传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。 UDP---用户数据报协议,是1个容易的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,可是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立1个连接,且木有超时重发等机制,故而传输速度很快目前Internet上流行的协议是TCP/IP协议,该协议中对低于1024的端口都有确切的定义,他们对应着Internet上有些常见的服务。这类常见的服务可以分为用TCP端口(面向连接)和用UDP端口(面向无连接)两种。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
TCP面向连接、UDP无连接。
简单点讲UDP把需要发送的包往网络上一扔就不管它了,主要用于一些突发的小数据包,比如OICQ;而TCP还要实现差错控制、流量控制等,主要用于持续的数据流,比如HTTP、FTP等协议。

目前在中国宽带有线网上开展的一些业务,如视频、咨询、股票等(用computer接受,需要特殊硬件卡),用的几乎全都是UDP协议,这是基于UCP的单向特性;至于互联网上,UDP协议相对TCP协议的应用就少得多,因为TCP协议的双向互动特性能满足用户的实时需求,而UDP则太过于被动,UDP协议的突出之处是在它的强大的组播及广播功能上,做到‘一呼百应’。
技术上讲,实现起来区别不大,tcp需要首先建立连接,而udp只要绑定端口发送就行,tcp如果建立连接以后,能够保证传送的数据包次序,而udp则不能保证数据包到达的先后次序,甚至会丢包,就这点而言,udp的客户端所要做的接收工作要更复杂(如接收文件等)

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
        一.UDP:
                1、将数据源和目的地封装到数据包中,不需要建立连接
                2、每个数据包的大小限制在64k以内
                3、因无连接,是不可靠协议
                4、不需要建立连接,速度快
        二.TCP:
                1、建立连接,形成传输数据的通道
                2、在连接中进行大量数据的传输
                3、通过三次握手完成连接、是可靠协议
                4、必须建立连接,效率会稍低

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 奋斗2013 于 2013-4-13 18:46 编辑

以下是我从网络上百度的资料,希望对你有所帮助。
面向连接的TCP

      “面向连接”就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。我们来做一个实验,用计算机A(安装Windows 2000 Server操作系统)从“网上邻居”上的一台计算机B拷贝大小为8,644,608字节的文件,通过状态栏右下角网卡的发送和接收指标就会发现:虽然是数据流是由计算机B流向计算机A,但是计算机A仍发送了3,456个数据包,如图2所示。这些数据包是怎样产生的呢?因为文件传输时使用了TCP/IP协议,更确切地说是使用了面向连接的TCP协议,计算机A接收数据包的时候,要向计算机B回发数据包,所以也产生了一些通信量。
如果事先用网络监视器监视网络流量,就会发现由此产生的数据流量是9,478,819字节,比文件大小多出10.96%(如图3所示),原因不仅在于数据包和帧本身占用了一些空间,而且也在于TCP协议面向连接的特性导致了一些额外的通信量的产生。
编辑本段
    面向非连接的UDP协议

       “面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。
UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
       UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。  以下区别总结如下:




评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
李程 中级黑马 2013-4-13 18:51:54
9#
这个问题很大,明显可以在百度啊谷歌啊什么的地方查到,搜索一个好一点的教程可能比在这里让大家回答更有效果
回复 使用道具 举报
如果不是搞网络的话,确实很难说清楚这部分,建议还是先面向网络层理解下即可
回复 使用道具 举报
  UDP(User Datagram Protocol)的特点是:无连接,尽最大努力交付。面向报文,报文内容整体交付不可靠。
*单个报文校验只能保证报文的正确性,不保证报文按顺序运输,不保证报文不丢失或重复。
*支持多种进程通信模式:一对一、一对多,多对一,多对多。开销小,字节头部简单。处理速度快,进程发送的报文较短
*没有流量控制和拥塞控制。
*    TCP:(Transmission Control Protocol)的主要特点
* 面向连接 ,完备的连接管理用“三次握手”双向连接。用“二次握手”单向关闭连接。连接时双向协商起始字节序号,关闭连接时指示相应的(字节)序号。
*进程端口到进程端口:一对一进程通信
*全双工通信:分别缓存发送和接收的数据;发送数,据时可捎带应答
*   完全可靠的数据交付:每个报文有应答与超时重发,单向连接关闭后不发送数据,延迟接收应收(字节)序号的数据,量化到字节的流量控制,
*智能的网络拥塞控制。
*面向应用进程的字节流的端:发送时从用户进程按顺序接收任意字节的数据,接收时恢复成字节流,按发送顺序提交给用户进程。
*可缓存非常多的接收数据。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 李程 于 2013-4-13 22:46 编辑

楼主!!!!!!
第一步,先看osi七层模型

file:///C:/Users/licheng/Desktop/QQ%E6%88%AA%E5%9B%BE20130413220614.png
第二步,看tcp/ip模型
当然,由于tcp和udp所在的层次是传输层,传输层在两个协议体系中都差不多,但是应该大概了解,这样才能做到心中有数
第三部,看下传输层的主要作用及其上下层的功能
1,网络层
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。
它是由若干个网络节点按照任意的拓扑结构相互连接而成的。网络层关系到通信子网的运行控制,体现了网络应用环境中资源子网访问通信子网的方式。网络层从物理上来讲一般分布地域宽广,从逻辑上来讲功能复杂,因此是OSI模型中面向数据通信的下三层(也即通信子网)中最为复杂也最关键的一层。
TCP/IP网络层的核心是IP协议,它是TCP/IP协议族中最主要的协议之一。IP协议非常简单,仅仅提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。

2,应用层
属于应用的概念和协议发展得很快,使用面又很广泛,这给应用功能的标准化带来了复杂性和困难性。比起其它层来说,应用层需要的标准最多,但也是最不成熟的一层。但随着应用层的发展,各种特定应用服务的增多,应用服务的标准化开展了许多研究工作,ISO已制定了一些国际标准(IS)和国际标准草案(DIS)。因此,通过介绍一些具有通用性的协议标准,来描述应用层的主要功能及其特点。
主要是提供网络任意端上应用程序之间的接口。

了解了以上内容以后,就可以看看夹在他们中间的传输层了
3,传输层
传输层,是两台计算机经过网络进行数据通信时,第一个端到端的层次,具有缓冲作用。当网络层服务质量不能满足要求时,它将服务加以提高,以满足高层的要求;当网络层服务质量较好时,它只用很少的工作。传输层还可进行复用,即在一个网络连接上创建多个逻辑连接。
传输层的任务是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接的功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。
网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。
计算机网络中的资源子网是通信的发起者和接收者,其中的每个设备称为端点;通信子网提供网络中的通信服务,其中的设备称为结点。OSI参考模型中用于通信控制的是下面四层,但它们的控制对象不一样。
提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送,即耳熟能详的“三次握手”过程,从而提供可靠的数据传输。
传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。

了解到这,仅仅是对协议的来龙去脉知道了一些,这个时候在看这两个协议就明白了它们的基础是什么,又是为谁服务的!!!!!!!!!
1,TCP
TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。
首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,它是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。
在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。
在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法),该算法主要包括三个主要部分:1,加性增、乘性减;2,慢启动;3,对超时事件做出反应。
根据他的特点,服务类型为:
FTP 文件传送
RLogin 远程登录
SMTP POP3 电子邮件
NFS 网络文件系统
远程打印
远程执行
终端服务器

2,UDP
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。
UDP是OSI参考模型中一种无连接的传输层协议,它主要用于不要求分组顺序到达的传输中,分组传输顺序的检查与排序由应用层完成[1],提供面向事务的简单不可靠信息传送服务。UDP 协议基本上是IP协议与上层协议的接口。UDP协议适用端口分别运行在同一台设备上的多个应用程序。
在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。

说道这里,就不再多说了,对于这两个协议的对比,我认为在写代码的时候没有太多的意义,而真正应该掌握的是什么时候使用哪个协议来为自己服务!!!!!!!

希望可以帮助到你,如果还没有明白,可以直接回复,我也许可以针对你的具体问题回答

QQ截图20130413220614.png (10.73 KB, 下载次数: 9)

QQ截图20130413220614.png

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
UDP
    发送的是数据包。
    不需要建立连接。
    数据不可靠。
    效率高,速度快。
UDP案例
发送端的步骤:
   A:创建发送端的Socket对象
   B:把数据打包
   C:发送数据
   D:释放资源
   代码体现:
    DatagramSocket ds = new DatagramSocket();
    byte[] bys = "hello,udp,我来了".getBytes();
    DatagramPacket dp = new DatagramPacket(bys,bys.length,
     InetAddress.getByName("192.168.1.100"),10000);
   
    ds.send(dp);
    ds.close();
  接收端的步骤:
   A:创建接收端的Socket对象
   B:创建数据包,用于接收数据
   C:接收数据
   D:解析数据
   E:释放资源
   代码体现:
    DatagramSocket ds = new DatagramSocket(10000);
    byte[] bys = new byte[1024];
    DatagramPacket dp = new DatagramPacket(bys,bys.length);
    ds.receive(dp);
    String text = new String(dp.getData(),0,dp.getLength());
    String ip = dp.getAddress().getHostAddress();
    Sysetm.out.println(ip+"***"+text);
    ds.close();

TCP
    建立通道发送数据。
    需要建立连接。
    数据可靠。
    效率低,速度慢。
TCP案例
客户端步骤
   A:创建客户端的Socket对象
   B:获取输出流对象
   C:写数据
   D:释放资源
   代码体现:
    Socket s = new Socket(InetAddress.getByName("192.168.1.100"),12345);
    OutputStream os = s.getOutputStream();
    os.write("hello,tcp,我来了".getBytes());
    s.close();
  服务器端的步骤
   A:创建服务器端的Socket对象
   B:获取输入流对象
   C:读数据
   D:释放资源
   代码体现:
    ServerSocket ss = new ServerSocket(12345);
    Socket s = ss.accept();
    InputStream is = s.getInputStream();
    byte[] bys = new byte[1024];
    int len = is.read(bys);
    String text = new String(bys,0,len);
    System.out.println("text:"+text);
    s.close();
    ss.close();

评分

参与人数 1技术分 +2 收起 理由
冯海霞 + 2

查看全部评分

回复 使用道具 举报
{:soso_e149:}都加分了。
回复 使用道具 举报
授人以鱼不如授人以渔。
回复 使用道具 举报
Sword 金牌黑马 2013-4-14 01:27:09
16#
*UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去,
*不需要验证,服务端直接发包,包的到达客户端的顺序也不一定是按照发包时候的顺序一样,相对容易丢包 .
*TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,
*也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来
*也就是说需要验证,有三次握手,服务端发包的时候有优化,小包会等到一起发,相对较安全不容易丢包 ,UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
//答题开始:
//首先可以简单理解为
//TCP可靠, UDP不可靠
//TCP性能低,UDP性能高
//具体的不同
//TCP面向对象连接
//UDP面向非连接
//TCP传输大量的数据时使用
//UDP传输小量数据时使用
//TCP协议传输慢
//UDP协议传输快
//TCP协议是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。
//一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用.
//TCP协议“面向连接”就是在正式通信前必须要与对方建立起连接。比如你给别人打电话,必须等线路接通了、对方拿起话筒才能相互通话。
//UDP协议“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。
//这和手机短信非常相似:你在发短信的时候,只需要输入对方手机号就能发送了了。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
UDP,TCP自己的理解
简单概括:
UDP是一种面向无连接传输协议,比如我跟你说话,我直接对着你说就是了,也不问你是不是睡着了;
TCP不同,他是需要双方应答的,比如经典的三次握手。意思就是说,我跟你说话前,我询问你能听得到吗,你说:"能",然后我在不停的说··
回复 使用道具 举报
TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,我们这里只做简单、形象的介绍,你只要做到能够理解这个过程即可。我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。

TCP协议能为应用程序提供可靠的通信连接,使一台计算机发出的字节流无差错地发往网络上的其他计算机,对可靠性要求高的数据通信系统往往使用TCP协议传输数据。

“面向非连接”就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。这与现在风行的手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!
UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。比如,我们经常使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实 “ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。例如,在默认状态下,一次“ping”操作发送4个数据包(如图2所示)。大家可以看到,发送的数据包数量是4包,收到的也是4包(因为对方主机收到后会发回一个确认收到的数据包)。这充分说明了UDP协议是面向非连接的协议,没有建立连接的过程。正因为UDP协议没有连接的过程,所以它的通信效果高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。
回复 使用道具 举报
zZZ~~ 中级黑马 2013-4-21 02:27:13
20#
上面说的都不错 我总结补充一下
tcp在正式收发数据前,必须和对方建立可靠的连接。一个tcp经过三次“对话”才建立起来。主机a向b发出连接请求数据,这是第一次会话,主机b同意主机a的请求并要求同步,这是第二次会话,然后主机a就会再次发出一个数据包请求确认主机b的同步,第三次会话。这种面向连接的tcp协议会慢一些,但是更加可靠和安全。例如,迅雷就是tc协议连接的,会验证数据有没有被接收到,如果没有的话,还可以再发。
   upd是和tcp相对立的协议,是面向非连接的协议。不用和对方建立连接就直接发给对方数据,不保证对方能不能接收到。它适用于一些数据量小,对安全性可靠性不高的应用中。由于没有建立连接的过程,所以它通信效率较高。但是安全可靠性就不如tcp高了。腾讯QQ就是应用udp发消息的,所以会有接不到消息的现象。
tcp与udp各有所长,适用于不同通讯环境下,方便了我们的生活。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马