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. Springboot使用JdbcTemplate RowMapper查询,直接返回实体列表

    ManagerRowMapper.java public class ManagerRowMapper implements RowMapper<Manager>{ @Override p ...

  2. IntelliJ IDEA之windows下载安装、卸载

    系统要求 系统支持:Microsoft Windows 8 / 7 / Vista / 2003 / XP(每个系统版本的 32 位和 64 位都可以) JDK 版本:Oracle JDK 1.6 或 ...

  3. 无需编写代码,用接口管理工具 eoLinker 高效完成API测试流程相关业务

    引言 作为开发人员,有时需要协助市场部门进行开发,比如在市场推广中,经常通过给用户赠送优惠券来提高复购率.这篇文章,将介绍如何使用接口管理工具 eoLinker 的自动化测试 [UI模式] 构建此业务 ...

  4. (C/C++学习)13.C语言字符串处理函数(一)

    说明:字符串处理的函数很多,本文将例举经常遇到的一些函数加以说明. 一.字符串的输入输出 头文件:<stdio.h> 1.利用标准输出函数 printf() 来输出,将格式设置为 s% . ...

  5. Windows Phone开发(18):变形金刚第九季

    变换不是一个好理解的概念,不是吓你,它涉及很多有关代数,几何,以及线性代数的知识.怎么?被我的话吓怕了?不用怕,尽管我们未必能够理解这些概念,只要我们知道怎么使用它们就是了.其实,变换就是平面上一种坐 ...

  6. LINQ简记(3):子句

    LINQ查询表达式的子句如select,where,from等都是比较简单的子句,相信各位多练习练习,再结合MSDN的例子,基本上是可以理解的,因此,本文只挑几个有代表性的,以及有些难理解的子句来简述 ...

  7. IDEA git commit push revert

    Revert uncommitted changes You can always undo the changes you've done locally before you have commi ...

  8. jquery源码分析(五)——Deferred 延迟对象

    javascript的异步编程 为什么要使用异步编程? JS是单线程语言,就简单性而言,把每一件事情(包括GUI事件和渲染)都放在一个线程里来处理是一个很好的程序模型,因为这样就无需再考虑线程同步这些 ...

  9. 【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 ...

  10. 2.1.5、SparkEnv中创建MapOutputTracker

    SparkEnv中创建MapOutputTracker def registerOrLookupEndpoint( name: String, endpointCreator: => RpcEn ...