TCP/IP协议(6):传输层之UDP
一、
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的更多相关文章
- TCP/IP 协议图--传输层中的 TCP 和 UDP
TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP. TCP 是面向连接的.可靠的流协议.流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但 ...
- 从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造
在<在深谈TCP/IP三步握手&四步挥手原理及衍生问题—长文解剖IP>里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以 ...
- TCP/IP中的传输层协议TCP、UDP
TCP提供可靠的通信传输,而UDP则常用于让广播和细节控制交给应用的通信传输. 传输层协议根据IP数据报判断最终的接收端应用程序. TCP/IP的众多应用协议大多以客户端/服务端的形式运行.客户端是请 ...
- TCP/IP五层模型-传输层-TCP协议
1.定义:TCP是一种面向连接.可靠的.基于字节流的传输控制协议. 2.应用场景:TCP为可靠传输,适合对数据完整性要求高,对延时不敏感的场景,比如邮件. 3.TCP报文:①TCP报文格式: ②TC ...
- TCP/IP入门(3) --传输层
原文:http://blog.csdn.net/zjf280441589/article/category/1854365 传输层的主要功能 1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主 ...
- TCP/IP 协议:链路层概述
我们以一个常见的查看IP指令为出发点(ifconfig -a): 1.链路层是什么 链路层是指硬件层协议.也即网络所使用的硬件,比如:以太网(后文主要讨论对象),令牌环网,FDDI已经RS-232 ...
- TCP/IP协议族各层的作用
从协议分层模型方面来讲,TCP/IP由四个层次组成:数据链路层.网络层.传输层.应用层一.数据链路层 数据链路层是负责接收IP数据报并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层 ...
- TCP/IP 协议 OSI七层协议
------------------你来自何处并不重要,重要的是你要去往何方,人生最重要的不是所站的位置,而是所去的方向.人只要不失去方向,就永远不会失去自己! day 27 # # -------- ...
- TCP/IP五层模型-传输层-UDP协议
1.定义:UDP:是非面向连接.不可靠的用户数据包协议. 2.应用场景:适合对数据完整性要求不高,但对延迟很敏感,比如即时通信(语音视频聊天等). 3.UDP报文格式: 4.用UDP传输数据的应用层 ...
- 网络编程的基本概念,TCP/IP协议简介
8.1.1 网络基础知识 计算机网络形式多样,内容繁杂.网络上的计算机要互相通信,必须遵循一定的协议.目前使用最广泛的网络协议是Internet上所使用的TCP/IP协议. 网络编程的目的就是指直接或 ...
随机推荐
- Android Studio生成签名安装包(Generate Signed APK)
一 打开构建对话框. 二 创建新的密钥库(key store) 可以选择已创建的密钥库,也可以选择创建新的密钥库. 创建完成后,自动导入. 三 选择签名类型. 如果不选,会提示错误. 这里将新旧两种签 ...
- privilege instruction error
检查新建的回调函数是否用了__stdcall修饰
- centos 7下部署grpc
gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计.目前提供 C.Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版 ...
- eclipse项目运行文件位置
位置:E:\eclipseWorkSpace\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps\svnadmin
- EasyUI 在Tab页用button打开新Tab
标签: <a href="javascript:void(0)" class="easyui-linkbutton" id="ipConfig& ...
- equals与“==”的区别
对于值类型,“==”比较的是不是同一数值,equals先比较是不是同一类型,在比较是不是同一数值: 对于引用类型,“==”和equals比较的都是是否引用了同一实例对象
- C#按制定的环境编译替换不出对应的配置项的解决措施。
1. 比如选择的 编译或者发布 环境是 QA ,但是QA里面配置的 替换节点 实际并没有被替换 解决方案: 在项目文件.csproj中最底部加入一下代码,应该成功.成功将QA的配置节点 替换掉默认的 ...
- materia官网地址
https://materializecss.com/autocomplete.html
- Android开发之利用ViewPager实现在Activity或Fragment中引入别的布局文件实现滑动并进行页面跳转
有些时候经常可以看到其他APP中有一排的图标,可以在一个界面中滑来滑去,并且图标可以进行点击事件进行页面的跳转.这里对这种方法的实现做出总结. 首先看一下图片: 下面这两种图片是在一个Fragment ...
- BZOJ1178或洛谷3626 [APIO2009]会议中心
BZOJ原题链接 洛谷原题链接 第一个问题是经典的最多不相交区间问题,用贪心即可解决. 主要问题是第二个,求最小字典序的方案. 我们可以尝试从\(1\to n\)扫一遍所有区间,按顺序对每一个不会使答 ...