8.UDP协议
- 传输层协议:TCP UDP
TCP和UDP有什么区别?
- TCP是面向连接的 UDP是面向无连接。在互通之前,面向连接的协议会先建立连接,如TCP会三次握手。所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。
- TCP提供可靠传输,而UDP继承了IP包的特性,不保证不丢失,不保证按顺序到达
- TCP是面向字节流,而UDP继承了IP的特性,基于数据包的,一个一个的发,一个一个的收
- TCP是可以有拥塞控制,如果包丢失或者网络环境不好会调整行为。UDP则不会。
UDP包头是怎么样的?
UDP包到达服务端,发现MAC地址匹配会取下来,将剩下的包传给处理ip层的代码,把ip头取下来,发现ip地址匹配。ip头里面有个8位协议会存放是UDP/TCP。然后再将数据包传给端口号
UDP的三大特点
- 沟通简单(不需要大量的数据结构、处理逻辑、包头字段)
- 容易欺骗(可以给任何人传数据。任何人都可以传数据给他,还可以同时传给多个)
- 不懂改变(不会根据网络的具体情况进行拥塞控制,也不会理会丢包现象)
UDP的三大使用场景
- 需要资源少,在网络情况比价好的内网,或者对于丢包不敏感的应用。(DHCP就是基于UDP协议)
- 不需要1对1沟通,建立连接,而是可以广播的应用(DHCP就是一种广播的形式)
- 需要处理速度快,时延低,可以容忍少数丢包,但是要求即便网络拥塞,也毫不退缩,一往无前的时候
基于UDP的五个使用例子
- 网页或者APP的访问。
QUIC(quick UDP Internet connections 快速UDP互联网连接)
- 流媒体协议。
直播协议RTMP是基于TCP的,但是由于TCP的严格顺序传输,会导致掉帧。
- 实时游戏
自定义可靠UDP协议,自定义重传策略。能够把丢包产生的时延降到最低,尽量减少网络问题对游戏性造成的影响
- loT物联网
物联网通信协议Thread就是基于UDP协议的
- 移动通信领域。
4G网络里,移动流量上网的数据面对的协议GTP-U是基于UDP的。
- 以上应用针对的是TCP协议传输过程中造成的卡顿时延掉帧现象,而且维护TCP协议代价太大(维护TCP连接需要在内核维护一些数据结构),而改用UDP协议
8.UDP协议的更多相关文章
- TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...
- 闲来无事,写个基于UDP协议的Socket通讯Demo
项目一期已经做完,二期需求还没定稿,所以最近比较闲. 上一篇写的是TCP协议,今天写一下UDP协议.TCP是有连接协议,所以发送和接收消息前客户端和服务端需要建立连接:UDP是无连接协议,所以发送消息 ...
- UDP协议开发
UDP是用户数据报协议(User Datagram Protocol,UDP)的简称,其主要作用是将网络数据流量压缩成数据报形式,提供面向事务的简单信息传送服务.与TCP协议不同,UDP协议直接利用I ...
- 基于UDP协议模拟的一个TCP协议传输系统
TCP协议以可靠性出名,这其中包括三次握手建立连接,流控制和拥塞控制等技术.详细介绍如下: 1. TCP协议将需要发送的数据分割成数据块.数据块大小是通过MSS(maximum segment siz ...
- TCP协议与UDP协议的区别
TCP协议与UDP协议的区别(转) 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! ...
- 采用UDP协议的PIC32MZ ethernet bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 经过千辛万苦,今天终于 ...
- 采用UDP协议实现PIC18F97J60 ethernet bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). TCP/IP Stac ...
- 网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程
Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服 ...
- Linux内核--网络栈实现分析(九)--传输层之UDP协议(下)
本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7549340 更多请查看专栏,地 ...
- Linux内核--网络栈实现分析(五)--传输层之UDP协议(上)
本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7532512 更多请看专栏, ...
随机推荐
- 【Linux】安装openssh-server依赖openssh-client版本错误的解决办法
这是因为,openssh-server是依赖于openssh-clien的,ubuntu自带了openssh-client,自带的openssh-clien与所要安装的openssh-server所依 ...
- 了解java虚拟机—串行回收器(6)
串行回收器 串行回收器只有一个工作线程,串行回收器可以在新生代和老年代使用,根据作用于不同的堆和空间,分为新生代串行回收器和老年代串行回收器. 1.新生代串行回收器 串行收集器是所有垃圾回收器中最古老 ...
- Docker入门及基本指令
Docker概念 Docker就相当于一个Github账号,不过最开始的工程不能自己建立,要从DockerHub这个中央仓库pull过来,这个工程Docker称之为image,这个image竟然是个l ...
- 微信小程序 发现之旅(三)—— 组件之间的参数传递
一.URL 传参 当使用 navigateTo() 方法跳转页面的时候,可以在 url 后面接 query 参数 然后在 Page 页面的生命周期函数 onLoad 中可以接收到这些参数 这种方式只能 ...
- PHP中类和对象的相关函数
class_exists 判断一个类是否存在,参数为一个名字! interface_exists 判断一个接口是否存在,参数也是为一个名字! method_exists 判断一个方法是否存在! 需要两 ...
- 【代码笔记】iOS-NSLog的使用
代码: // 在debug模式下输出NSLog,在release模式下不输出NSLog #ifndef __OPTIMIZE__ #define NSLog(...) NSLog(__VA_ARGS_ ...
- Js获取地址栏参数值
function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...
- Vue.js $nextTick
最近在学习vue.js.了解1.x的基础上再学习2.x的vue.两个版本的确是不会像angular这样1.x和2.x相差甚远.所以学习起来其实还是有很大的关联.但是,终归来说.两者还是有语法上的细微差 ...
- Oracle 远程链接oracle数据库服务器的配置
远程链接oracle数据库服务器的配置 by:授客 QQ:1033553122 原理: 一.Oracle客户端与服务器端的通讯机制 1.OracleNet协议 如下图所示,Oracle通过Oracle ...
- C#和C++互相操作 结构体数组的传递
C++中结构体定义: typedef struct // 平面 { double time; float normal[3]; float center[3]; } plane; C++中方法声明 ...