数据通讯与网络 第五版第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协议我们就要知道它的一个重要的特点, ...
随机推荐
- Springboot使用JdbcTemplate RowMapper查询,直接返回实体列表
ManagerRowMapper.java public class ManagerRowMapper implements RowMapper<Manager>{ @Override p ...
- IntelliJ IDEA之windows下载安装、卸载
系统要求 系统支持:Microsoft Windows 8 / 7 / Vista / 2003 / XP(每个系统版本的 32 位和 64 位都可以) JDK 版本:Oracle JDK 1.6 或 ...
- 无需编写代码,用接口管理工具 eoLinker 高效完成API测试流程相关业务
引言 作为开发人员,有时需要协助市场部门进行开发,比如在市场推广中,经常通过给用户赠送优惠券来提高复购率.这篇文章,将介绍如何使用接口管理工具 eoLinker 的自动化测试 [UI模式] 构建此业务 ...
- (C/C++学习)13.C语言字符串处理函数(一)
说明:字符串处理的函数很多,本文将例举经常遇到的一些函数加以说明. 一.字符串的输入输出 头文件:<stdio.h> 1.利用标准输出函数 printf() 来输出,将格式设置为 s% . ...
- Windows Phone开发(18):变形金刚第九季
变换不是一个好理解的概念,不是吓你,它涉及很多有关代数,几何,以及线性代数的知识.怎么?被我的话吓怕了?不用怕,尽管我们未必能够理解这些概念,只要我们知道怎么使用它们就是了.其实,变换就是平面上一种坐 ...
- LINQ简记(3):子句
LINQ查询表达式的子句如select,where,from等都是比较简单的子句,相信各位多练习练习,再结合MSDN的例子,基本上是可以理解的,因此,本文只挑几个有代表性的,以及有些难理解的子句来简述 ...
- IDEA git commit push revert
Revert uncommitted changes You can always undo the changes you've done locally before you have commi ...
- jquery源码分析(五)——Deferred 延迟对象
javascript的异步编程 为什么要使用异步编程? JS是单线程语言,就简单性而言,把每一件事情(包括GUI事件和渲染)都放在一个线程里来处理是一个很好的程序模型,因为这样就无需再考虑线程同步这些 ...
- 【codeforces 509A】Maximum in Table
[题目链接]:http://codeforces.com/contest/509/problem/A [题意] 给你一个递推式f[i][j] = f[i-1][j]+f[i][j-1]; 让你求f[i ...
- 2.1.5、SparkEnv中创建MapOutputTracker
SparkEnv中创建MapOutputTracker def registerOrLookupEndpoint( name: String, endpointCreator: => RpcEn ...