上节说的TCP协议虽然提供了可靠的传输,但是也有一个缺点,发送速度慢。那么有没有一种协议能快速发送的呢?这节要讨论的就是UDP协议,它提供了更加快的发送速度,但也牺牲了可靠性,它是一种无连接的传输协议。比起TCP,UDP更像是我们用手机发送短信,只管发送出去,但不能保证对方收到,不会建立连接,也没有确认环节。

图2-2-4-1为UDP协议报文结构。比起TCP,UDP报文的结构相对简单,只有源端口、目的端口、报文长度、校验和四个字段。其中源端口跟校验和是可选的,由于UDP不用接收端回复确认信息,所以源端口不是必须的,如果不需要验证数据的准确性,校验和也是可以忽略的。报文长度单位是字节,最小长度为8字节。报文结构的简单也就决定了它只能简单的发送数据,发出后基本就没能力对其进行管理,同时也缺乏拥塞控制,它不像TCP能检测拥塞程度,进而调整发送数据包的大小。

图2-2-4-1 UDP协议报文格式

那么UDP一般适用哪些场景呢?虽说其是不可靠的传输协议,但UDP具有TCP望尘莫及的速度优势,同时UDP把安全和排序(UDP不能保证数据发送和接收的顺序,在网络非常拥挤的情况下,用UDP协议接收端接收到的数据顺序可能与发送端发送的顺序不同)功能交给了应用层来完成,系统开销很小,这些都是UDP的优势。所以UDP适用于一次只传少量数据、对可靠性要求不要的应用程序里。例如我们熟悉的QQ,经常会用消息框来骚扰我们,这里用的就是UDP协议,我们不一定能收到。

以上讨论了UDP协议的特点,那么简单的列出它跟TCP协议两者的对比。两者各有所长、各有所短,在实际运用中要根据不同通信环境要求来确定要使用哪种协议传输数据。

TCP协议

UDP协议

是否连接

面向连接

面向非连接

传输可靠性

可靠

不可靠

速度

系统开销

是否保证数据顺序

应用场合

大量数据,可靠传输

少量数据,容许接收不到

是否全双工

能否检测拥塞程度

不能

跟IP协议不同,IP协议提供从机器到机器的点对点寻址方式,而TCP协议跟UDP协议则是提供端口的寻址,在用IP协议找到点后,就用这两个协议找相应的端口。它们可以将进程与端口绑定,当数据到来时发往对应的端口的进程的缓冲区里。根据端口段,TCP一般将端口分为三种:知名端口(1-1023)、临时端口(1024-5000)、预留端口(5001-65355)。知名端口固定分配给一些服务,例如21端口分给FTP,80端口分给HTTP。临时端口一般是应用程序在运行时使用的端口,如socket客户端建立连接时需要端口,会随机从临时端口分配一个。

喜欢研究java的同学可以交个朋友,下面是本人的微信号:

协议系列之UDP协议的更多相关文章

  1. 运输层协议--TCP及UDP协议

    TCP及UDP协议 按照网络的五层分级结构来看,TCP及UDP位于运输层,故TCP及UDP是运输层协议.TCP协议--传输控制协议UDP协议--用户数据报协议 多路复用及多路分解 图多路复用及多路分解 ...

  2. Netty4.x中文教程系列(七)UDP协议

    将近快一年时间没有更新Netty的博客.一方面原因是因为项目进度的问题.另外一方面是博主有一段时间去熟悉Unity3D引擎. 本章节主要记录博主自己Netty的UDP协议使用. 1. 构建UDP服务端 ...

  3. 协议系列之IP协议

    1.协议 协议(protocol)的定义:为计算机网络中进行数据交换而建立的规则.标准或约定的集合.两个终端相互通信时双方达成的一种约定,规定了一套通信规则,双方通信必须遵守这些规则.这些规则规定了分 ...

  4. 网络编程协议(TCP和UDP协议,黏包问题)以及socketserver模块

    网络编程协议 1.osi七层模型 应用层  表示层  会话层  传输层  网络层  数据链路层  物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...

  5. 网络编程协议(TCP和UDP协议,粘包问题)以及socketserver模块

    网络编程协议 1.osi七层模型 应用层  表示层  会话层  传输层  网络层  数据链路层  物理层 2.套接字 socket 有两类,一种基于文件类型,一种基于网络类型 3.Tcp和udp协议 ...

  6. Python中的端口协议之基于UDP协议的通信传输

    UDP协议: 1.python中基于udp协议的客户端与服务端通信简单过程实现 2.udp协议的一些特点(与tcp协议的比较)        3.利用socketserver模块实现udp传输协议的并 ...

  7. 协议系列之HTTP协议

    什么是HTTP\HTTPS HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.HTTP协议用于从WWWserver传输超文本到本地浏览器的传输协议,它能使浏览 ...

  8. 协议系列之TCP协议

    3.TCP协议 从上一节我们了解了什么是IP协议,以及IP协议的一些特性,利用IP协议传输都是单向的,不可靠的,无连接状态的.正是这些特性,于是便产生了TCP协议.TCP协议属于传输层,在IP协议网络 ...

  9. 网络基础 二 (TCP协议代码,UDP协议代码)

    TCP  三次握手,四次断开 三次握手(必须先由客户端发起) 客户端:发送请求帧给服务器. 服务器:收到客户端的请求,并回复可以建立连接 客户端:与服务器建立连接 四次断开 (谁先发起都行,以客户端为 ...

随机推荐

  1. pymysql实现从a表过滤出有效信息添加至b表

    # Author: yeshengbao # -- coding: utf-8 -- # @Time : 2018/4/16 19:23 import pymysql # 创建连接 conn = py ...

  2. Linux(四)使用Xshell5远程登录

    Xshell5和Xftp5的安装包 链接:https://pan.baidu.com/s/1q3-ch75TW3lvC3KX25klNQ 密码:m31n 说明: 公司开发的时候,具体情况是这样的: 1 ...

  3. 线程基础(CLR via C#)

    1.线程基础  1.1.线程职责  线程的职责是对CPU进行虚拟化.Windows 为每个进程豆提供了该进程专用的线程(功能相当于一个CPU).应用程序的代码进入死循环,于那个代码关联的进程会&quo ...

  4. [POI 2004]SZP

    Description Byteotian 中央情报局 (BIA) 雇佣了许多特工. 他们每个人的工作就是监视另一名特工.Byteasar 国王需要进行一次秘密行动,所以他要挑选尽量多的信得过的特工. ...

  5. Codeforces April Fools Contest 2017

    都是神题,我一题都不会,全程听学长题解打代码,我代码巨丑就不贴了 题解见巨神博客 假装自己没有做过这套

  6. Linux上安装Libssh2

    由于项目需要使用libssh2,在安装时,遇到一些问题,发现网上的都是互相抄,把自己遇到的问题,记下来,希望可以帮助到别人,自己下次使用时候,也方便查找,节约时间. 安装的流程: 1.下载源码,wge ...

  7. VC++ 6.0中添加库文件和头文件

    附加头文件包含 VC6.0中: VC6.0默认include包含路径:Tools>Options>Directories>Include files. 对于特定项目的头文件包含,在& ...

  8. TensorFlow + Keras 实战 YOLO v3 目标检测图文并茂教程

    运行步骤 1.从 YOLO 官网下载 YOLOv3 权重 wget https://pjreddie.com/media/files/yolov3.weights 下载过程如图: 2.转换 Darkn ...

  9. Missing URI template variable 'XXXX' for method parameter of type String

    原因:就是spring的controller上的@RequestMapping的实参和方法里面的形参名字不一致 方法:改成一样就可. ps.还能用绑定的方法,不建议,因为太麻烦了 @RequestMa ...

  10. Exchange Server 2010升级到Exchange Server 2016

    Hello各位小伙伴们,失踪人口回归啦~~~这次和大家分享Exchange Server 2010升级到Exchange Server 2016的方法.正式开始前先啰嗦几句,为什么我要写这篇文章呢?一 ...