UDP

  1. 用户数据报协议UDP只在IP的数据报服务之上增加了很少的一个功能,就是复用,分用,差错检测功能。UDP的主要特点是:

    1. UDP是无连接的,即在发送数据报之前不需要建立连接(当然发送数据结束的时候也不会有连接释放),因此减少了开销和发送数据之前的时延。

    2. UDP是尽自己最大努力交付,且并不提供可靠服务,因此主机并不需要维持复杂的链接状态表。

    3. UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部之后就可以交付给IP层。UDP对于应用层交付下来的报文,既不拆分,也不合并,只是只是保留这些报文的边界。意思就是,不管上层传给UDP多长的报文,UDP照样发送,至于是否进行切片处理等等,那是IP层的事情。

    4. UDP没有拥塞控制,因此网络上出现拥塞不会使得源主机的发送速率降低。这种就特别的适合实时场景的使用。例如视频通话,语音通话等等。

    5. UDP支持一对一,一对多,多对一,多对多的交互通信。

    6. UDP的首部开销小,相比TCP的20字节,只有8字节。

  2. UDP首部的格式:

    1. 源端口(两个字节):源端口号。不需要的时候用全0
    2. 目的端口(两个字节):目的端口号。
    3. 长度(两个字节):UDP用户数据报的长度,其最小值为8(仅含首部)。
    4. 检验和(2字节):检测UDP用户数据包在传输中是否出错。有错就丢弃。
  3. 当运输层从IP层接收到UDP数据报的时候,就根据首部中的目的端口,把UDP数据报通过响应的端口,最终交付给相应的用用进程处理。如图

  4. 如果接收方UDP接收到的目的端口号不明确(即不存在相应的目的端口号),就丢弃这个UDP报文,并由网际控制协议(ICMP)发送端口不可达差错报文给发送方。

  5. 请注意,虽然在UDP之间的通信需要使用到端口号,但由于UDP通信是无连接的,因此并不需要使用socket(TCP之间就要必须使用socket建立连接)。

  6. UDP用户数据报首部中校验和的计算方法有些特殊。在计算校验和的时候,要在UDP用户数据报之前加上12字节的伪首部(伪首部的第三个字段全是0,第四个字段是IP首部中的协议字段,以前讲过,对于UDP,就是17;第五个字段是UDP用户数据包的长度。因此检验和,既检查了UDP用户数据报的源端口号和目的端口号以及检查了UDP用户数据包的数据部分,又检查了IP数据报的源IP地址和目的IP地址)。所谓的伪长度是因为者追踪伪长度并不是UDP用户数据真正的首部。只是在校验和的时候,临时加到UDP数据报的前面,得到一个临时的UDP用户数据报,检验和就是根据这个UDP临时数据报来计算的,伪长度既不向下传送也不向上递交,而仅仅是为了计算校验和。,至于怎么校验呢?其实UDP计算校验和的方法和计算IP数据报的首部校验和的方法类似。但不同的是:IP数据报的检验和只校验IP数据报的首部,但是UDP检验和是把首部和数据部分一起校验。在发送方,首先把全0放到校验和字段中。再把伪首部UDP用户数据报看成是由许多16位的字符拼接起来的。若UDP用户数据报的数据部分不是偶数字节,则要填入一个全零字节(但此字节不发送),然后按照二进制反码计算出这些16位字的和,将此和的二进制反码写入校验和字段后,就发送这样的UDP用户数据报。在接收方,把收到的UDP用户数据报连同伪首部一起,按二进制反码求出16位字的和,当无差错时,其结果为1,否则就是出现差错,接收方就应该丢弃这个UDP报文,并把错误信息通过ICMP(网际控制协议)差错报告给上层。

  7. 这种简单的差错检测方法能力并不强,但它的好处是简单,处理起来比较快。

UDP用户数据报的更多相关文章

  1. 【RL-TCPnet网络教程】第16章 UDP用户数据报协议基础知识

    第16章      UDP用户数据报协议基础知识 本章节为大家讲解UDP(User Datagram Protocol,用户数据报协议),需要大家对UDP有个基础的认识,方便后面章节UDP实战操作. ...

  2. udp用户数据报协议

    UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层 ...

  3. 【TCP/IP详解 卷一:协议】第十一章 UDP 用户数据报协议

    11.1 引言 UDP 是一个简单的 面向数据报 的运输层协议:进程的每个 输出操作 都正好产生一个 UDP数据报,并且组装成一份待发送的IP数据报. 这与 TCP 不一样,它是 面向流字符 的协议, ...

  4. TCP/IP详解学习笔记(8)-- UDP:用户数据报协议

    1.UDP概述 UDP是一种无连接的, 即发送数据前不需要建立连接,因此减小的开销和发送数据的延迟. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表. UDP是面向报文 ...

  5. 运输层2——用户数据报协议UDP

    目录 1. UDP概述 2. UDP首部格式 3. UDP首部检验和计算方法 写在前面:本文章是针对<计算机网络第七版>的学习笔记 运输层1--运输层协议概述 运输层2--用户数据报协议U ...

  6. 《TCP/IP详解卷1:协议》第11章 UDP:用户数据报协议-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  7. 《TCP/IP具体解释卷2:实现》笔记--UDP:用户数据报协议

    用户数据报协议.即UDP,是一个面向数据报的简单运输层协议:进程的每次输出操作仅仅产生一个UDP数据报,从而发送 一个IP数据报. 进程通过创建一个Internet域内的SOCK_DGRAM类型的插口 ...

  8. UDP:用户数据报协议

    UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报.这与面向流字符的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数 ...

  9. TCP/IP详解 卷一(第十一章 UDP:用户数据报协议)

    UDP是一个简单的面向数据报的运输层协议. UDP不提供可靠性:它把应用程序传给IP层的数据发送出去,但是并不保证它们能到达目的地. UDP首部的个字段如下图所示

随机推荐

  1. uwp 的work project 的 取消闹钟

    private void initalAlarmHanle() { string cancelAlarm = "CancelAlarmEvent"; ConnectionManag ...

  2. 关于对String中intern方法的理解

    在java的String中有个一直被我们忽视了的方法intern方法:它的官方解释是:一个初始时为空的字符串池,它由类 String 私有地维护. 当调用 intern 方法时,如果池已经包含一个等于 ...

  3. 真实机中安装CentOS

    前言 最近在b站上看了兄弟连老师的Linux教程,非常适合入门:https://www.bilibili.com/video/BV1mW411i7Qf 看完后就自己来试着玩下,正好手上有台空闲的电脑就 ...

  4. Learning ROS: Recording and playing back data

    本文主要部分来源于ROS官网的Tutorials. Description: This tutorial will teach you how to record data from a runnin ...

  5. kubebuilder实战之八:知识点小记

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. python--接口自动化经常用到的pytest框架

    pytest常用的方法和原理 1.pytest的原理 pytest插件基于pluggy模块:pluggy有三个重要概念:HookspecMarker(用来定义hook函数),HookimplMarke ...

  7. Django的form组件——ModelForm实战

    模型: from django.db import models class Book(models.Model): book_name = models.CharField(max_length=3 ...

  8. 离线安装Windows Terminal

    Windows Terminal颜值高.适配好.速度快,是Windows 10下命令行工具的不二选择. 最近在公司电脑上安装Windows Terminal时遇到一个问题,由于公司电脑不能直接连接外网 ...

  9. Easy-ARM IMX283 移植RTL8192CU驱动

    测试平台 宿主机平台:Ubuntu 12.04.4 LTS 目标机:Easy-ARM IMX283 目标机内核:Linux 2.6.35.3 无线网卡驱动下载地址:http://www.comfast ...

  10. ubuntu安装glusterFS

    以2台服务器为例: node1: 172.18.1.10 node2: 172.18.1.20 1) 修改主机名,修改hosts文件添加IP地址映射 hostname node1/node2vim / ...