数据通讯与网络 第五版第24章 传输层协议-UDP协议部分要点
24.1 介绍
本章节主要集中于传输层协议的解读,图24.1展示TCP、UDP、SCTP在TCP\IP协议栈的位置
24.1.1 服务(Service)
每个协议都提供不同的服务,所以应该合理正确的使用
UDP:UDP 是一种不可靠,不面向连接的协议,UDP具有简单,高效的特点,传输过程中的差错控制有应用层来提供
TCP:TCP是一个可靠,面向连接的协议,适用于那种对传输可靠性要求较高的应用
SCTP:是一个新的传输层协议,结合了UDP和TCP两者之间的特征
24.1.2 端口号(Port Number)
像之前章节讨论一样,传输层在协议中承担几个任务。第一是提供基于过程到过程的通讯,这个过程使用端口号来完成,在传输层中,端口号提供了端对端的地址信息,从而允许该层使用多路复用和多路分解。表格24.1 给出了这三种协议比较常见的端口号
24.2 用户数据报协议(USER DATAGRAM PROTOCOL)
UDP一种不需要连接,不可靠的通讯协议。UDP协议较为简单,如果一个程序想要发送对可靠性要求不高的数据,它可以使用UDP,使用UDP协议发送信息时,发送者和接受者之间的交互会比用TCP协议发送要少。
24.2.1 用户数据报(user datagram)
UDP 数据包,简称用户数据报,拥有8个字节固定长度的头部,包括四个字段,每个字段2个字节,图24.2 给出了数据报的格式,前两个字段定义了源地址和目的地址的端口号,第三个字段定义了数据报的整个长度,即头部加上数据的长度,数据长度理论上可以达到65535字节,但是实际的长度会比这个少,因为IP数据包的长度最大为65535字节,最后一个字段是可选的校验码
24.2.2 UDP服务
过程到过程的通讯(Process-to-Process Communication)
UDP使用socket地址提供基于过程到过程的通讯,结合了ip地址和端口号
不需面向连接的服务(Connectionless Service)
UDP提供不需连接的服务,意味着每个数据报都是一个独立的数据报,即使源地址是一样的,数据报间是没有关联的,数据报不会进行编号,和TCP不同,UDP通讯没有连接创建和连接终止过程,意味着数据报可以在不同的链路进行传输。UDP不能把像TCP一样进行数据流的传输,你也不用指望UDP能把数据切块传输,而且,要传输的数据长度要小于65507字节(65535-8(UDP头)-20(IP头))
流量控制(Flow Control)
UDP是一个简单的协议,不存在流量控制,接受者接收数据是可能溢出的,所以使用UDP的应用应该提供流量控制,需要的话。
错误控制(Error Control)
UDP没有错误控制机制,除了校验码之外。这个意味着发送方不知道数据是否丢失或者损坏。当接受者通过校验码发现数据错误时,数据报就会被丢弃,这个丢弃过程是不会通知发送方的。如果需要的话,使用UDP协议的程序自身一个考虑这个问题。
校验和(Checksum)
UDP数据报校验和的计算涉及三个部分:伪头部、UDP头部和数据。伪头部是IP数据包头的部分信息,数据报进行校验和计算时,会把伪头部默认填充0。
阻塞控制(Congestion Control)
UDP没有提供阻塞控制服务,UDP假设数据报在通讯链路中不存在阻塞。这个假设在如今通讯组或许是不正确的,因为如今UDP一般用于实时的视频和音频传输
24.2.3 UDP应用
UDP的典型特征:1、不需要连接,2、缺乏冲突控制。虽然UDP是一种不可靠的通讯协议,但是有些应用却更偏向与UDP,如DNS,DNS需要发送一个短的请求到服务器,并且需要接受一个快速的响应,请求和响应的数据在一个数据报中就可以封装起来,不用考虑发送的顺序问题。像SMTP电子邮箱服务就不能使用UDP服务了,因为发送的信息可能很长,需要分包处理,而且还需要考虑发送的顺序问题,UDP协议无法处理。
数据通讯与网络 第五版第24章 传输层协议-UDP协议部分要点的更多相关文章
- 数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点
上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Contr ...
- 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 更多请看专栏, ...
- C primer plus 第五版十二章习题
看完C prime plus(第五版)第十二章,随带完成了后面的习题. 1.不使用全局变量,重写程序清单12.4的程序. 先贴出12.4的程序,方便对照: /* global.c --- 使用外部变量 ...
- 网络协议学习笔记(四)传输层的UDP和TCP
概述 传输层里比较重要的两个协议,一个是 TCP,一个是 UDP.对于不从事底层开发的人员来讲,或者对于开发应用的人来讲,最常用的就是这两个协议.由于面试的时候,这两个协议经常会被放在一起问,因而我在 ...
- 网络通信协议八之(传输层)TCP协议详解
传输层协议 分段是为了提高传输效率,封装是指给每个数据段添加一个编号 端到端的传输是逻辑上的端到端,并不是真正意义上的发送方某层与接收方某层之间的传输 IP协议只是保证数据报文发送到目的地,为主机之间 ...
- day31——recv工作原理、高大上版解决粘包方式、基于UDP协议的socket通信
day31 recv工作原理 源码解释: Receive up to buffersize bytes from the socket. 接收来自socket缓冲区的字节数据, For the opt ...
- 【知识强化】第五章 传输层 5.3 TCP协议
这节课我们来学习一下TCP协议的特点以及TCP报文段的格式. 首先呢我们来看一下TCP有哪些特点呢.之前我们说过TCP它是一个比较可靠的面向连接的协议,所以最主要的特点它是可以面向连接的一种传输层协议 ...
- 【知识强化】第五章 传输层 5.2 UDP协议
这节课我们来学习一下UDP协议. 那在上节课呢我们学了这样一个打油诗. 啊,就是传输层有两个好兄弟,大哥TCP和二弟UDP.大哥很靠谱,二弟不靠谱.那只要说到UDP协议我们就要知道它的一个重要的特点, ...
随机推荐
- git 如何创建一个分支
参考: https://jingyan.baidu.com/article/adc81513b95a20f723bf73bf.html 首先进入本地git仓库目录下,打开git bash环境 使用gi ...
- CWnd* pParent
Dlg(CWnd* pParent = NULL)的意思是:构造函数.创建对象时第一个调用的地方.CWnd* pParent=NULL是构造的参数,可以不传入,默认为NULL 构造函数(constru ...
- @viewChild
https://www.cnblogs.com/mttcug/p/8004359.html
- CentOS下使用yum安装配置和使用svn
安装说明 系统环境:CentOS-6.3安装方式:yum install (源码安装容易产生版本兼容的问题)安装软件:系统自动下载SVN软件 检查已安装版本 ? 1 2 3 4 5 6 7 8 9 1 ...
- thinkphp里模版文件js无法使用if condition的问题
/** * @example thinkphp里模版文件js无法使用if condition的问题 * @example 参考地址:https://segmentfault.co ...
- git学习(1)
一.git fetch 和git pull 的差别 1.git fetch 相当于是从远程获取最新到本地,不会自动merge,如下指令: git fetch orgin master //将远程仓库的 ...
- springboot 使用idea打包 遇到问题
找了很久错误后来发现添加这三句话就可以了 需要在项目的pom.xml文件中加上第47-49行的3句话
- [HDU] 4507 恨7不成妻
吉哥系列故事——恨7不成妻 Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- PHP常用系统设置整理
1.设置时间脚本执行时间 set_time_limit(0); 2.设置最大执行内存 ini_set('memory_limit','1024M');//设置内存 memory_get_usage() ...
- Vue动态组件&异步组件
在动态组件上使用keep-alive 我们之前曾经在一个多标签的界面中使用is特性来切换不同的组件: Vue.js的动态组件模板 <component v-bind:is="curre ...