QQ 中的 广播与单播

今天简单地学习了一下 广播和多播(组播) 的知识。关于 单播和多播 的概念,可以用 QQ 中的一些例子来解释。

单播,就像 两个人聊QQ 一样,信息的接收和传递只在两个节点之间进行。

多播(组播)。采用多播方式,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。
那么在QQ中,可以认为是 在QQ群中发送消息,将消息发送给群组里面所有的成员。而取代了 一个个地 向群组里的每一个成员 发送相同的消息。

QQ 中 TCP 与 UDP 的区别

TCP 和 UDP 简单的区别:

  • 1.基于连接与无连接;
  • 2.对系统资源的要求(TCP较多,UDP少);
  • 3.UDP程序结构较简单;
  • 4.流模式与数据报模式 ;
  • 5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
  • 6.使用 UDP 传送数据 会快于 使用 TCP 传送数据。(UDP 没有三次握手,窗口机制等等TCP具有的机制)

QQ即时视频

QQ视频 是 QQ 开发的一种 即时通讯功能,通过摄像头完成 “面对面” 的交流。

那么,比如有两位:翔翔(是我的朋友) 和 他的女朋友(唉) 正在通过视频秀恩爱。

首先,翔翔 先发送视频请求,在一段时间之后,他的女朋友确认了,于是乎,他们开始了 “面对面的聊天”。

  • 这里用到了 TCP 的相关内容:在收发数据前,必须和对方建立可靠的连接。它是 面向连接 的传输层协议。

于是乎,翔翔和他的女朋友愉快的开始了聊天。突然,翔翔发现 突然黑屏了一下。

这里突然黑屏,是 数据报丢失的结果,那么 这个时候 传输层协议 如果使用的是 TCP 或者 UDP,会是怎么样的场景?

使用TCP

翔翔:哎呀,怎么突然黑屏了,这下怎么办呀,我得等好久。
10min 过去了。(有些夸张,真实情况可能就2-3s,但是如果累积起来的话,就会出现很明显的延迟)
翔翔:终于恢复了,诶,老婆,我刚刚这里黑屏了。
然而,翔翔的女朋友好像在自顾自的说话,“喂喂?你在听吗” 之后挂掉了。
这个时候,翔翔收到了来自女朋友的QQ消息:你这么不在乎我,我们分手吧。
翔翔:5555

使用UDP

翔翔:哎呀,怎么突然黑屏了,这下怎么办呀,我得等好久。
然而,过了没多久,通信又恢复了。
翔翔:不好意思呀老婆,不知道为什么我刚刚这边视频卡住了,你能再说一遍吗?
于是,他们继续愉快的秀了下去。

  • 读到这里,可以很明显的看到 UDP 和 TCP 的区别了。TCP 对数据的安全性可谓是做到了极致,但这并不是 即时视频所希望看到的:在 黑屏 也就是数据报丢失了之后,TCP 选择了重新发送,但是 当数据报重新到达的时候,造成了延迟。1s 2s 的区别可能不是很大,但是如果是 不断黑屏 慢慢积累起来的话,就会到人难以忍受的地步了。
  • 而 UDP 就不是那么在意数据报的安全性了:丢了就丢了呗,我继续发送。这样的话,虽然丢失了一部分的数据,在例子中,翔翔没有听到那个时候女朋友说了什么,但是没有关系,可以继续愉快的聊下去。
  • 因此,在即时数据的通信中,TCP数据的可靠性 反而成了缺点,而UDP这种“无赖式”的发送方法(发了就发了,丢了我不管) 深得开发者的喜爱。

QQ 上传文件

好了,翔翔成功的通过了视频聊天,把他的女朋友约了出来,去吃饭看电影,然后去逛街,压马路,去爬山。翔翔留下了 青春中 最美好的回忆,一起留下的,还有那些诉说着他们感情的照片。
但是,非常可惜的是,翔翔的手机 是 苹果6 16G的,拍了这么多张照片,导致内存已满。无奈的他想到了除了换手机之外,更好的方法:上传到空间相册里面去。

那么此时使用 UDP 和 TCP 的情况会是怎么样的呢?

使用 UDP

翔翔:哎呀,挺快的嘛,500+张照片这么快就传完了。让我看看。
翔翔:???怎么少了这么多张ヾ(。`Д´。) 不行,我一张都不能少!重来!

使用 TCP

翔翔:好慢啊···
1h 过去了
翔翔:终于传好了,让我看看。···恩我很满意,都传上来了,看到一张都没有少我很开心,这么长时间的等待是值得的!

  • 上传文件,要确保的是,保证数据的完整性。时间 现在 相比较而言 看起来 并不是那么的重要(毕竟这可是翔翔宝贵的回忆啊,不能丢)。好了,现在 TCP 的 reliable 派上用场了,于是开发者此时选择了 TCP 作为传输层的协议,确保翔翔的照片 一张不落的 上传到空间相册中。而 不管数据丢失的 UDP 同学,就被冷落了。

小结

所以,我们能够从上面的 QQ即时视频 和 上传文件 看到 TCP 和 UDP 的区别:TCP 很可靠,它通过三次握手建立联系,在发送数据的时候在发送端复制一份保存,如果出现数据丢失,会进行重传,非常的可靠。但是 也正是因为它 实现可靠性 的机制太多,导致了速度相对 UDP 较慢一点。而 UDP 速度比起 TCP 来说是更快了,但是它只负责传输数据,并不保证数据能够安全无误的到达,丢了也不管。所以,在开发APP的时候,开发者会根据不同的需求(速度快,或者要求重传 等等) 对 UDP 和 TCP 进行选择。

2016/8/6 七夕前夕(唉)

以QQ举例 说明计算机网络中的一些概念区别(TCP与UDP,广播与单播)的更多相关文章

  1. TCP/IP中的传输层协议TCP、UDP

    TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请 ...

  2. 计算机网络中的TCP/UDP协议到底是怎么回事(一)

    TCP/IP五层网络结构模型 物理层:物理层建立在物理通信介质的基础上,作为系统和通信介质的接口,用来实现数据链路实体间透明的比特 (bit) 流传输.只有该层为真实物理通信,其它各层为虚拟通信 数据 ...

  3. 在类似qq或者微信聊天中。如何根据不同的手机发送图片

    原文:在类似qq或者微信聊天中.如何根据不同的手机发送图片   前一段时间,公司自己要求做多客服开发,但是对于发送图片这一块,当时很苦恼,我用自己的手机(米2)测试,不管是本地,还是云相册,最新照片. ...

  4. 《计算机网络 自顶向下方法》 第8章 计算机网络中的安全 Part2

    SSL(使 TCP 连接安全) SSL(Secure Socket Layer),即安全套接字层,是对 TCP 的强化 HTTPS 使用 SSL,而 HTTP 不使用 SSL 通过采用机密性.数据完整 ...

  5. 举例讲解Python中的死锁、可重入锁和互斥锁

    举例讲解Python中的死锁.可重入锁和互斥锁 一.死锁 简单来说,死锁是一个资源被多次调用,而多次调用方都未能释放该资源就会造成死锁,这里结合例子说明下两种常见的死锁情况. 1.迭代死锁 该情况是一 ...

  6. 利用三层交换机实现VLAN间路由(计算机网络中速率、带宽、吞吐量的概念)

    1.速率 速率是指计算机网络中的主机在数字信道上,单位时间内从一端传送到另一端的数据量,即数据传输率,也称数据率或比特率.比特(bit)是数据量的最小单位,s(秒)是时间的最小单位.所以速率单位为bi ...

  7. 【极客思考】计算机网络:Wireshark抓包分析TCP中的三次握手与四次挥手

    [摘要]本文重点分析计算机网络中TCP协议中的握手和挥手的过程. [前提说明] 前段时间突然看到了一篇关于TCP/IP模型的文章,心想这段时间在家里也用wireshark抓了点包,那么想着想着就觉得需 ...

  8. 计算机网络中的TCP/UDP协议到底是怎么回事(二)

    上一篇博客阐述了TCP/IP五层网络结构模型以及一些关于TCP.UDP的基础知识,这篇博客会接着写一些关于TCP拥塞控制的算法以及对TCP中常有的疑问进行解答. TCP拥塞控制 首先了解几个概念,为下 ...

  9. 举例讲解Linux中tcpdump工具的应用

    先来看一个比较基本的用法: tcpdump -i eth0 其中,eth0为参数值,表示需要抓包的网口,这是个必需参数哦. tcpdump的具体参数及意义: -i:指定tcpdump监听的网络接口 - ...

随机推荐

  1. PythonWeb 开发记录(一)

    安装Django Sudo apt-get install python-django 验证安装Django成功 创建Django应用程式的方式 创建的是解决方案 ,然后创建的是Hi 模块 运行项目: ...

  2. jquery 实现iframe 自适应高度

    转自: http://www.cnblogs.com/luluping/archive/2009/04/17/1437843.html 超级简单的方法,也不用写什么判断浏览器高度.宽度啥的.下面的两种 ...

  3. e.printStackTrace() ; 是什么意思?

    catch(Exception e){e.printStackTrace() ;} 当try语句中出现异常是时,会执行catch中的语句,java运行时系统会自动将catch括号中的Exception ...

  4. 2.TypeScript 基础入门(二)

    变量类型的那些事 1.基本注解 类型注解使用:TypeAnnotation 语法.类型声明空间中可用的任何内容都可以用作类型注解. const num: number = 123; function ...

  5. C#中DataTable

    .C#中DataTable技术学习 2009-09-10 14:37:18 阅读1496 评论0   字号:大中小 订阅 . 1.在DataTable中执行DataTable.Select(" ...

  6. css样式表--样式表分类

    样式表分类 1.内联式.写在body里.控制精确,可重复性差. <body> <div style="color:#90F">更好发挥的返回结果还 < ...

  7. sql server2012重复执行创建表视图sql及带行号的视图

    1.可重复操作(创建表,视图)的sql语句判断 IF EXISTS ( SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[re ...

  8. ARM中的汇编指令

    Arm指令,32位的指令集,一共有16条的基本指令,每条指令都可以按条件执行, 指令都是32bit的,高四位是条件码[31:28], Thumb指令,16位的指令集,执行效率比arm指令集要低,但是节 ...

  9. VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)

    上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...

  10. 数据仓库基础(九)Informatica小技巧(1)

    本文转载自:http://www.cnblogs.com/evencao/p/3148373.html link path:查看某个字段的来源去处,非常有参考的价值.右击你想要看的字段,选择 sele ...