一、

UDP用户数据报协议,它是一个无连接的,面向数据报的协议,它不提供可靠性但传输速度比TCP要快。

UDP数据报中的“UDP长度”为两个字节,所以我们要发送的UDP数据最多支持65507大约68K的数据,超过该大小的话需要自己来分割发送。 使用UDP必须关心IP数据报的长度,因为如果它超过MTU的话,会对IP数据报进行分片。

在UDP数据报文中,头部占8个字节,报文具体格式如下:


UDP适合一次只传送少量数据、对可靠性要求不高的场景:
  发送小尺寸的数据,如DNS通讯使用的是UDP以提高通信速度。
  流媒体、VOD、IPTV、音视频通讯等常采用UDP。
  UDP的高级应用:广播/多播、P2P、TCP over UDP。

二、广播/多播

1、

利用广播可以将数据发送到子网内所有计算机上,广播几乎占用了子网内网络的所有带宽,所以如果有多个进程来同时发送广播数据则网络会阻塞。路由器会隔绝广播。

对于广播发送方需额外设置两点:一个是设置套接字的SO_BROADCAST选项(BOOL bBroadcast = TRUE; setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(BOOL));),一个是发送数据的地址设为"255.255.255.255",其它按照UDP发送方模型来编程即可。

对于广播数据接收方按照UDP接收者模型来编程即可接收广播数据。

2、

多播地址即代表了一个组,用户可以加入或退出这个组,多播地址使用D类IP地址,范围是从224.0.0.0到239.255.255.255,而且有一些地址是保留作为特殊的地址所使用。网络中的交换机和路由器只向加入多播组的主机复制并转发数据,这样可以不影响其他不需要(未加入组)的主机的其他通讯。

多播编程方法与UDP模型也大体相同,对于发送端需要增加设置数据的TTL生存时间功能(使用函数setsockopt),对于接收端需要增加加入多播组的功能(使用函数setsockopt)。

多播需要网络硬件(如路由器)的支持或者硬件开启了多播服务。

3、

单播是主机之间一对一的通讯模式,可以使用TCP或UDP,网络中的交换机和路由器对数据只进行转发不进行复制。网络上大部分的数据都是以单播的形式传输的,如浏览网页、收发邮件等。对于广播或多播数据,网络中的交换机和路由器会对其进行复制并转发。

广播和多播一般只适合向不同客户传送相同数据的应用,如有线电视使用广播,网络电台使用多播,如果需要对每个客户的不同请求发送不同的数据的话只能使用单播服务器。因为广播和多播是仅发送一次数据所有的接收方就都能收到数据,所以发送方(服务器)流量负载很低,而单播服务器要向所有客户发送数据,即发送多次数据才能到达多个客户上,所以服务器网络负载大。

因为广播和多播使用的是UDP,发生丢包错包后无法重传。

三、P2P

NAT使只能内网中计算机去连接外网,然后二者再进行通信,而外网中的计算机是无法主动连接内网计算机进行通信的,所以产生了P2P通信技术来解决这个问题,这种方法也被称为NAT打洞。P2P技术广泛存在于基于UDP的应用中,但本质上,相同的技术也应该
支持TCP。

以UDP打洞为例,假设A要向B发送数据,A和B都已经登陆上了S服务器,则S能够知道A和B的外网地址、端口号(通过recvfrom()的sockaddr_in结构,我们称为公共终端)和本地地址、端口号(A、B登陆的时候向S发送,我们称为私有终端):

1、A通过S获得B的公共终端和私有终端后分别向两个终端发送数据以建立A和B的好友关系。
    2、A通过S让B向A的两个终端分别发送数据(B可以通过S获得A的两个终端)以确认A和B的好友关系。
    3、A收到B发来的数据后二者已成功建立好友关系,A可以直接向B发送数据了。
  在1和2中之所以要向对方的公共终端和私有终端都发送数据是防止A和B在同一子网中。

四、TCP over UDP

TCP over UDP具有UDP速度快、实时性高的特点,同时又兼备TCP的可靠性,它主要是在UDP之上参考TCP协议算法来实现。

TCP/IP协议(6):传输层之UDP的更多相关文章

  1. TCP/IP 协议图--传输层中的 TCP 和 UDP

    TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP. TCP 是面向连接的.可靠的流协议.流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但 ...

  2. 从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造

    在<在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP>里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以 ...

  3. TCP/IP中的传输层协议TCP、UDP

    TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请 ...

  4. TCP/IP五层模型-传输层-TCP协议

    ​1.定义:TCP是一种面向连接.可靠的.基于字节流的传输控制协议. 2.应用场景:TCP为可靠传输,适合对数据完整性要求高,对延时不敏感的场景,比如邮件. 3.TCP报文:①TCP报文格式: ②TC ...

  5. TCP/IP入门(3) --传输层

    原文:http://blog.csdn.net/zjf280441589/article/category/1854365 传输层的主要功能 1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主 ...

  6. TCP/IP 协议:链路层概述

    我们以一个常见的查看IP指令为出发点(ifconfig -a):   1.链路层是什么 链路层是指硬件层协议.也即网络所使用的硬件,比如:以太网(后文主要讨论对象),令牌环网,FDDI已经RS-232 ...

  7. TCP/IP协议族各层的作用

    从协议分层模型方面来讲,TCP/IP由四个层次组成:数据链路层.网络层.传输层.应用层一.数据链路层 数据链路层是负责接收IP数据报并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层 ...

  8. TCP/IP 协议 OSI七层协议

    ------------------你来自何处并不重要,重要的是你要去往何方,人生最重要的不是所站的位置,而是所去的方向.人只要不失去方向,就永远不会失去自己! day 27 # # -------- ...

  9. TCP/IP五层模型-传输层-UDP协议

    ​1.定义:UDP:是非面向连接.不可靠的用户数据包协议. 2.应用场景:适合对数据完整性要求不高,但对延迟很敏感,比如即时通信(语音视频聊天等). 3.UDP报文格式: 4.用UDP传输数据的应用层 ...

  10. 网络编程的基本概念,TCP/IP协议简介

    8.1.1 网络基础知识 计算机网络形式多样,内容繁杂.网络上的计算机要互相通信,必须遵循一定的协议.目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议. 网络编程的目的就是指直接或 ...

随机推荐

  1. java web获取客户端外网ip和所在区域

    @参考文章1.@参考文章2.@参考文章3.@参考文章4,@之前同事的项目 controller @Controller @RequestMapping("/home") publi ...

  2. Gradle 实战(1)—— 配置环境变量

    背景:Gradle 是一款构建工具,继 Ant .Maven 之后的现代构建工具,我会在接下来的博文中陆续介绍,我在工作中是如何使用 Gradle 的. 下载 Gradle 下面是 Gradle 的官 ...

  3. wk1&2 字符串

    [CQ] 自增怎么样都增了,赋值不一定: int x = 2; int y = 2; int i = ++x; int j = y++; System.out.println(x); System.o ...

  4. swift - 解析三方 - ObjectMapper

    // // JYQueryBespeakModel.swift // rtb // // Created by chen on 2018/3/30 // 查询预约信息 import UIKit imp ...

  5. 纯css实现div中未知尺寸图片的垂直居中

    1.淘宝的方法 在曾经的"淘宝UED招聘"中有这样一道题目: “使用纯CSS实现未知尺寸的图片(但高宽都小于200px)在200px的正方形容器中水平和垂直居中.” 当然出题并不是 ...

  6. HTTP协议介绍(POST、GET、Content-Type)

    什么是HTTP?超文本传输协议(HyperText Transfer Protocol -- HTTP)是一个设计来使客户端和服务器顺利进行通讯的协议.HTTP/1.1 协议规定的 HTTP 请求方法 ...

  7. sqlserver的数据库状态——脱机与联机

    1.数据库状态: online:可以对数据库进行访问 offline:数据库无法访问 2.查看数据库状态的方法: (1)使用查询语句: SELECT state_desc FROM SYS.datab ...

  8. js 箭头函数

    箭头函数 ES6标准新增了一种新的函数:Arrow Function(箭头函数). x => x * x相当于: function (x) { return x * x; }箭头函数相当于匿名函 ...

  9. Liunx touch

    http://blog.csdn.net/tanga842428/article/category/6355419 linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时 ...

  10. PAT 1042 字符统计(20)(思路)

    1042 字符统计(20)(20 分) 请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过1000的字符串.字符串由ASCII码表中任意可见字符及空格 ...