面向无连接的传输UDP协议
面向无连接的传输:UDP协议
上次我们简单的介绍了一下传输层以及相关协议,这次我们就来详细的研究一下UDP,研究一下该协议是怎么工作,具有哪些功能。
最开始还是关于UDP的定义,首先看来自百度百科的:
UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17。
UDP协议全称是用户数据报协议[1] ,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
这段时间在网上查了一下关于UDP的资料,有人把UDP比作IP协议的傀儡,因为UDP也是不可靠传输,也只是尽力而为服务,而且值得注意的是,使用UDP时,在发送报文段之前,发送方和接收方的运输层实体之间没有握手。正因为如此,UDP才被称为无连接的。关于这个比喻更加详细的信息的话,大家可以看看这个:https://www.geek-share.com/detail/2565716120.html
正因为如此,我们在选择传输层协议的时候,一定注意选择正确的,适宜的协议,关于选择协议时有一下几个建议:
1.是否需要连接建立;
2.是否需要从连接状态中获取参数;
3.分组的首部开销。(每个TCP报文段都有20字节的首部开销,而UDP仅有8字节的开销)
流行的因特网应用及其下面的运输协议:
应用 |
应用层协议 |
运输层协议 |
电子邮件 |
SMTP |
TCP |
远程终端访问 |
Telnet |
TCP |
Web |
HTTP |
TCP |
文件传输 |
FTP |
TCP |
远程文件服务器 |
NFS |
通常UDP |
流式多媒体 |
通常专用 |
UDP或TCP |
因特网电话 |
通常专用 |
UDP或TCP |
网络管理 |
SNMP |
通常UDP |
路由选择协议 |
RIP |
通常UDP |
名字转换 |
DNS |
通常UDP |
UDP报文结构:
UDP首部字段中只有4个字段,每个字段由两个字节组成,故UDP首部长度应为64bit(即一开始所说的8个字节)。
长度字段就如同它的名称一样相当于整个UDP报文段的字节数。
而检验和则提供了差错检测的功能。
那么在UDP首部中唯一值得注意的就是UDP检验和的计算。
UDP检验和的具体计算步骤是:发送方对报文段中的所有16bit字的和进行反码运算,求和时遇到的任何一处都被回卷。
回卷及时将超出16位的数字1与后16位数字相加。
比方说一共有3个16bit的字:
0110011001100000
0101010101010101
1000111100001100
那么前两个之和是:
0110011001100000+0101010101010101=1011101110110101
再将其与第三个相加,得出:
1011101110110101+1000111100001100=0100101011000010
由于最后一次相加有溢出,我们就把它回卷,因此最后一个就可以得出以上的结果,那么在接收方我们将以上的4个16bit字(包括检验和)全部加在一起,如果没有出现差错就应该是1111111111111111。
虽然根据UDP的检验和,UDP提供了相应的差错检测,但它对差错恢复无能无力。UDP的某种实现知识丢弃受损的报文段;其他实现是将受损的报文段交给应用程序并给出警告。
- 基于 TCP (面向连接)和无连接UDP协议的 socket 套接字编程
- 基于 TCP (面向连接)和无连接UDP协议的 socket 套接字编程
- 网络编程的概述2 网络通信中的三要素3 InetAddress的概述和测试,IP地址:InetAddress 传输协议(网络协议)TCP 可靠协议,需要连接,效率会稍低 没有大小的限制UDP 不:
- Java 网络编程(二) 两类传输协议:TCP UDP
- UDP协议的数据传输
- UDT协议-基于UDP的可靠数据传输协议
- HTTP 协议本身也是无连接的,虽然它使用了面向连接的 TCP 向上提供的服务。
- Java学习笔记 UDP协议传输信息
- 已知端口ip 基于UDP协议 通过局域网连接接收信息
- java使用UDP协议传输数据
- tcp协议是面向连接的,而http是无状态的,面向连接和无状态怎么感觉好像优点矛盾呢?
- UDP传输协议
- IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
- 【Linux网络编程】无连接和面向连接协议的区别
- linux网络协议栈(六)传输层 (3)UDP协议 4)报文接收 recv/recvfrom/recvmsg
- 网络层,传输层都提供了面向连接和无连接的服务方式
- 设计一个在UDP之上提供面向连接服务的可靠传输协议
- Java NIO实例-DatagramChannel实现UDP协议传输
- 传输层中的协议 TCP & UDP
- Websocket协议数据帧传输和关闭连接