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协议部分要点的更多相关文章

  1. 数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点

    上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Contr ...

  2. Linux内核--网络栈实现分析(九)--传输层之UDP协议(下)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明http://blog.csdn.net/yming0221/article/details/7549340 更多请查看专栏,地 ...

  3. Linux内核--网络栈实现分析(五)--传输层之UDP协议(上)

    本文分析基于Linux Kernel 1.2.13 原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7532512 更多请看专栏, ...

  4. C primer plus 第五版十二章习题

    看完C prime plus(第五版)第十二章,随带完成了后面的习题. 1.不使用全局变量,重写程序清单12.4的程序. 先贴出12.4的程序,方便对照: /* global.c --- 使用外部变量 ...

  5. 网络协议学习笔记(四)传输层的UDP和TCP

    概述 传输层里比较重要的两个协议,一个是 TCP,一个是 UDP.对于不从事底层开发的人员来讲,或者对于开发应用的人来讲,最常用的就是这两个协议.由于面试的时候,这两个协议经常会被放在一起问,因而我在 ...

  6. 网络通信协议八之(传输层)TCP协议详解

    传输层协议 分段是为了提高传输效率,封装是指给每个数据段添加一个编号 端到端的传输是逻辑上的端到端,并不是真正意义上的发送方某层与接收方某层之间的传输 IP协议只是保证数据报文发送到目的地,为主机之间 ...

  7. day31——recv工作原理、高大上版解决粘包方式、基于UDP协议的socket通信

    day31 recv工作原理 源码解释: Receive up to buffersize bytes from the socket. 接收来自socket缓冲区的字节数据, For the opt ...

  8. 【知识强化】第五章 传输层 5.3 TCP协议

    这节课我们来学习一下TCP协议的特点以及TCP报文段的格式. 首先呢我们来看一下TCP有哪些特点呢.之前我们说过TCP它是一个比较可靠的面向连接的协议,所以最主要的特点它是可以面向连接的一种传输层协议 ...

  9. 【知识强化】第五章 传输层 5.2 UDP协议

    这节课我们来学习一下UDP协议. 那在上节课呢我们学了这样一个打油诗. 啊,就是传输层有两个好兄弟,大哥TCP和二弟UDP.大哥很靠谱,二弟不靠谱.那只要说到UDP协议我们就要知道它的一个重要的特点, ...

随机推荐

  1. git 如何创建一个分支

    参考: https://jingyan.baidu.com/article/adc81513b95a20f723bf73bf.html 首先进入本地git仓库目录下,打开git bash环境 使用gi ...

  2. CWnd* pParent

    Dlg(CWnd* pParent = NULL)的意思是:构造函数.创建对象时第一个调用的地方.CWnd* pParent=NULL是构造的参数,可以不传入,默认为NULL 构造函数(constru ...

  3. @viewChild

    https://www.cnblogs.com/mttcug/p/8004359.html

  4. CentOS下使用yum安装配置和使用svn

    安装说明 系统环境:CentOS-6.3安装方式:yum install (源码安装容易产生版本兼容的问题)安装软件:系统自动下载SVN软件 检查已安装版本 ? 1 2 3 4 5 6 7 8 9 1 ...

  5. thinkphp里模版文件js无法使用if condition的问题

    /**     * @example   thinkphp里模版文件js无法使用if condition的问题     * @example  参考地址:https://segmentfault.co ...

  6. git学习(1)

    一.git fetch 和git pull 的差别 1.git fetch 相当于是从远程获取最新到本地,不会自动merge,如下指令: git fetch orgin master //将远程仓库的 ...

  7. springboot 使用idea打包 遇到问题

    找了很久错误后来发现添加这三句话就可以了 需要在项目的pom.xml文件中加上第47-49行的3句话

  8. [HDU] 4507 恨7不成妻

    吉哥系列故事——恨7不成妻 Time Limit: 1000/500 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  9. PHP常用系统设置整理

    1.设置时间脚本执行时间 set_time_limit(0); 2.设置最大执行内存 ini_set('memory_limit','1024M');//设置内存 memory_get_usage() ...

  10. Vue动态组件&异步组件

    在动态组件上使用keep-alive 我们之前曾经在一个多标签的界面中使用is特性来切换不同的组件: Vue.js的动态组件模板 <component v-bind:is="curre ...