“TCP是一种流模式的协议,UDP是一种数据报模式的协议”,
1、TCP
打个比方比喻TCP,你家里有个蓄水池,你可以里面倒水,蓄水池上有个龙头,你可以通过龙头将水池里的水放出来,然后用各种各样的容器装(杯子、矿泉水瓶、锅碗瓢盆)接水。 上面的例子中,往水池里倒几次水和接几次水是没有必然联系的,也就是说你可以只倒一次水,然后分10次接完。另外,水池里的水接多少就会少多少;往里面倒多少水,就会增加多少水,但是不能超过水池的容量,多出的水会溢出。
结合TCP的概念,水池就好比接收缓存,倒水就相当于发送数据,接水就相当于读取数据。好比你通过TCP连接给另一端发送数据,你只调用了一次write,发送了100个字节,但是对方可以分10次收完,每次10个字节;你也可以调用10次write,每次10个字节,但是对方可以一次就收完。(假设数据都能到达)但是,你发送的数据量不能大于对方的接收缓存(流量控制),如果你硬是要发送过量数据,则对方的缓存满了就会把多出的数据丢弃。 这种情况是设置非阻塞I/O模型,会把内存耗尽,因为socket是存在内核中的。
2、UDP
UDP和TCP不同,发送端调用了几次write,接收端必须用相同次数的read读完。UDP是基于报文的,在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,如果缓冲区小于报文长度,则多出的部分会被丢弃。也就说,如果不指定MSG_PEEK标志,每次读取操作将消耗一个报文。
3、为什么
其实,这种不同是由TCP和UDP的特性决定的。TCP是面向连接的,也就是说,在连接持续的过程中,socket中收到的数据都是由同一台主机发出的(劫持什么的不考虑),因此,保证数据是有序的到达就行了,至于每次读取多少数据自己看着办。
而UDP是无连接的协议,也就是说,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一个报文的数据,则会乱套。比如,主机A向发送了报文P1,主机B发送了报文P2,如果能够读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一起,这样的数据是没有意义的。

TCP流模式与UDP数据报模式相关推荐

  1. TCP的流模式与UDP的报文模式对比

    1       案例背景 在学习TCP-IP协议详解卷一时,读到介绍TCP协议的部分,发现TCP的首部是没有报文总长度字段的,而在UDP中是有的,对这个问题的思考引出了两者之间的区别. 2    案例 ...

  2. Linux socket 流模式(STREAM)跟数据报模式(DGRAM)的区别

    "TCP是一种流模式的协议,UDP是一种数据报模式的协议", 文章目录 1.TCP 2.UDP 3.为什么 1.TCP 打个比方比喻TCP,你家里有个蓄水池,你可以里面倒水,蓄水池 ...

  3. [TCP/IP] TCP流和UDP数据报之间的区别

    TCP流和UDP数据报之间的区别 1.TCP本身是面向连接的协议,S和C之间要使用TCP,必须先建立连接,数据就在该连接上流动,可以是双向的,没有边界.所以叫数据流 ,占系统资源多 2.UDP不是面向 ...

  4. 【网络编程】Socket套接字;UDP数据报套接字编程;TCP流套接字编程

    文章目录 1. 什么是网络编程 2. 网络编程中的基本概念 3. Socket套接字 4 UDP数据报套接字编程 4.1 客户端服务器交互流程 4.2 UDP版本的回显服务 4.3 英译汉服务 5. ...

  5. 分析udp数据报_开发需知!!!TCP和UDP的特点和区别

    对于学过计算机网络的人来说,不得不提到TCP和UDP相关的概念以及知识.本节,我们简单介绍下TCP和UDP的特点. 传输控制协议TCP(Transmission Control Protocol) T ...

  6. 网络编程 数据报是什么?TCP、UDP数据报结构

    数据报 数据报是通过网络传输的数据的基本单元,包含一个报头(header)和数据本身,其中报头描述了数据的目的地以及和其它数据之间的关系.数据报是完备的.独立的数据实体,该实体携带要从源计算机传递到目 ...

  7. 【Linux网络编程】TCP 和 UDP 数据报格式详解

    TCP 报文格式 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP 报文段的报头有 10 个必需的字段和 ...

  8. 网络基础3(IP段格式,UDP数据报格式,TCP数据报格式)

    IP段格式 IP数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍. 对于IPv4,4位版本字段是4.4位首部长度的数值是以4字节为单位的,最小值为5,也就是说首部长度最小是4x5=20字节 ...

  9. 多多云手机【语音引流】创新吸粉模式 -- 语音播放功能模块开发教程

    多多云手机[语音引流]创新吸粉模式,接口完全免费开放给开发者,可用于第三方APP语音引流软件开发,互联网引流等等,例如微商语音吸粉.游戏语音推广.应用喊话推广,替代传统枯燥的文字引流方法,自动化的操作 ...

最新文章

  1. Myeclipse安装、配置、测试
  2. Python学习之While--break
  3. 使用R画桑基图(流程图)
  4. Java BigInteger类| isProbablePrime()方法与示例
  5. XML DOM 节点类型(Node Types)
  6. Mac 配置jupyter notebook 扩展 Nbextensions
  7. ffmpeg vaapi 驱动问题
  8. 高斯滤波程序编写 opencv C++ CSU
  9. 据说程序员是这样写代码的
  10. 【车辆识别】基于matlab GUI小波和盒维数车型识别【含Matlab源码 727期】
  11. 银行笔试题 java笔试题
  12. 【WPF】学习笔记(一)——做一个简单的电子签名板
  13. 区块链清明上河图 2018Q3
  14. flex实现三栏等分布局
  15. python多个if_Python之条件判断/if嵌套/如何写嵌套代码
  16. 无线网络渗透测试(一)基础知识
  17. ArcGIS Pro发布WebScene
  18. Navicate使用
  19. 软件自动化测试项目总结,自动化测试总结报告.docx
  20. 军工企业信息化建设周涛_军工企业非密信息化

热门文章

  1. Spring(三)之自动装配、表达式
  2. windows与虚拟机中的Ubuntu共享文件夹
  3. 【李宏毅2020 ML/DL】P53-55 Conditional Generation by RNN Attention Pointer Network Recursive
  4. java类可视化doxygen_安装doxygen(一个自动文档生成工具)+Graphviz图形可视化软件...
  5. 关于geekcode
  6. python执行shell脚本、执行mongodb_mongodb如何执行js
  7. SQL Server 2012安装错误案例:Error while enabling Windows feature: NetFx3, Error Code: -2146498298...
  8. 电缆桥架安装规范标准_电缆桥架安装标准分享
  9. ubuntu pcl 点云库使用
  10. 【转】SQL SERVER 获取存储过程返回值