【网络协议】UDP协议

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都会产生一个UDP数据报,并组装成一份待发送的IP数据报,这与面向字符流的协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联系(主要是在传输层就进行分段了,因此不会受IP分片的影响)。

UDP的首部一共8个字节,很简单,可以参考书上,这里也不再详说。

UDP的校验和

至于UDP的校验和,这里注意下区别就好了,UDP对首部和数据部分都进行校验,而IP首部的校验和仅对IP的首部进行校验,顺带提下TCP,TCP的校验和也是对首部和数据部分都进行校验,另外,UDP的校验和是可选的,而TCP的是必选的。

不可靠协议

UDP是不可靠的协议,没有超时和重传功能,当UDP数据封装到IP数据报传输时,如果丢失,会发送一个ICMP差错报文给源主机,另外,如果UDP数据报的发送端没打开UDP校验和,而接收端计算校验和有差错,那么UDP数据报将会被丢掉,也不会发送ICMP差错报文。

路径MTU发现

    可以修改Traceroute程序来确定路径MTU。要做的是发送分组,并设置将IP首部设置为不分片,发送的第一个分组的长度正好于出口MTU相等,每次收到ICMP不可分片的差错报文时,就减小分组长度,使新的ICMP不可分片差错报文中返回更小的MTU,每次用更小的MTU值来传送,这样能找到更小的MTU值。

利用路径MTU发现机制,应用程序可以充分利用更大的MTU来发送报文。

UDP最大长度

理论上IP数据报的最大长度为65535字节,因此理论上的UDP数据报的最大长度为65507(65535-20-8)字节,但是,大多数实现所提供的长度比这个最大值小。一般有两个因素的限制(书上给出了一些例子,见P120):

1、应用程序可能胡受到其程序接口的限制,一些API的实现中可能有限定UDP数据报的最大长度。另外,现在大部分系统都默认提供了可读写大于8192字节的UDP数据报。

2、受限于TCP/IP内核的实现,可能存在一些实现特性,使IP数据报长度小于65535字节。

数据报截断

正是由于UDP最大数据报的限制(受限于上面的两个因素,一般都会小于65507),大于这个限制的数据报会被截断,从而发生数据丢失,且不会有任何数据丢失的通知,这也是UDP协议不可靠传输的另一个体现。而TCP则没有任何信息边界,TCP首部中没有对TCP最长报文段的限制,因此TCP以应用程序读操作时所要求的长度来传送数据(理论上一次可以发送很大的数据,但考虑到网络的传输性能,最好不要一次传输太大的数据),当然在超过MSS值时会产生分段,因此不会发生数据截断。

ICMP源站抑制差错

当一个系统中的某主机或路由器处理数据的速度赶不上接受数据的速度时,因为接收主机的IP缓存会被占满,可能会产生这个差错,从而发送一个ICMP源站抑制差错报文,这里要注意是“可能”。

PS:终于要开题了,明天上午第一个上台,希望一切顺利。

【网络协议】UDP协议,布布扣,bubuko.com

时间: 2025-01-02 17:42:12

【网络协议】UDP协议的相关文章

网络 基于UDP协议的socket编程

一.UDP协议        UDP协议的特点:用户数据包协议             1.UDP协议是无连接的.也就说在数据发送之前并不需要建立连接(当然,在发送数据结束的时候也就不存在链接的释放),因此减少了开销和数据发送之前的时延.             2.UDP使用尽最大努力的交付,但是不保证可靠性的交付,因此主机不需要维持复杂的链接状态表.(网上的的可靠性建立在应答的基础上,不提供可靠性交付,即不需要应答,因此不需要维护状态表)             3.UDP是面向报文.发送方

Java 网络编程 UDP协议

网络编程 TCP/IP协议:多台计算机网络连接的规则 包括:TCP协议.IP协议.UDP协议和其它协议的协议组 层次结构: 链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤.网线提供的驱动.硬件方面的 网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络. 传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议. 应用层:主要负责应用程序的协议,例如HTTP协议.F

网络编程 UDP协议 TCP局域网客户端与服务端上传下载电影示例

UDP协议 (了解) 称之为数据包协议. 特点: 1) 不需要建立链接. 2) 不需要知道对方是否收到. 3) 数据不安全 4) 传输速度快 5)能支持并发 6) 不会粘包 7) 无需先启动服务端再启动客户端 优点: - 传输速度快 - 能支持并发 - 不会粘包 缺点: - 数据不安全, 容易丢失 应用场景: 早期的QQ聊天室. # server端 import socket # socket.SOCK_DGRAM ---> UPD协议 server = socket.socket(type=s

python网络编程(通过tcp或者udp协议通信)

1.基于tcp协议传送文件: 客户端: import socketimport osimport jsonimport structclient = socket.socket()client.connect(('127.0.0.1',8080)) # 文件大小file_size = os.path.getsize(r'F:\老男孩Python7期\day32\视频\02TCP发送大文件.mp4') # 文件名字file_name = 'TCP发送大文件.mp4'# 定义一个字典d = { 'f

理解TCP和UDP协议

目录 TCP 协议 UDP协议 TCP和UDP的区别 TCP和UDP的使用场景 一 TCP协议 1.TCP的头部格式 理解TCP协议,首要的就是TCP协议的头部格式 ·        Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号:用于区别主机中的不同进程,而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一的确定一个TCP连接: ·        Sequence Number:用来标识从T

协议系列之UDP协议

上节说的TCP协议虽然提供了可靠的传输,但是也有一个缺点,发送速度慢.那么有没有一种协议能快速发送的呢?这节要讨论的就是UDP协议,它提供了更加快的发送速度,但也牺牲了可靠性,它是一种无连接的传输协议.比起TCP,UDP更像是我们用手机发送短信,只管发送出去,但不能保证对方收到,不会建立连接,也没有确认环节. 图2-2-4-1为UDP协议报文结构.比起TCP,UDP报文的结构相对简单,只有源端口.目的端口.报文长度.校验和四个字段.其中源端口跟校验和是可选的,由于UDP不用接收端回复确认信息,所

udp协议基础(转自疯狂java讲义)

第17章  网络编程 17.4  基于UDP协议的网络编程 UDP协议是一种不可靠的网络协议,它在通信实例的两端各建立一个Socket,但这两个Socket之间并没有虚拟链路,这两个Socket只是发送.接收数据报的对象.Java提供了DatagramSocket对象作为基于UDP协议的Socket,使用DatagramPacket代表DatagramSocket发送.接收的数据报. 17.4.1  UDP协议基础 UDP协议是英文User Datagram Protocol的缩写,即用户数据报

python网络(2)_Udp协议

udp协议 循环通信服务端 import socket #基于网络的udp协议的socket server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) server.bind(("127.0.0.1",8888)) while 1: print("开启UDP协议服务端") from_client_data=server.recvfrom(1024)#阻塞等待客户链接 print(f'来自客户端{from_clien

JavaSE——UDP协议网络编程(二)

在 UDP 网络编程中,发送方与接收方没有建立联系,没有明显的服务器端和客户端的区别. 类 DatagramSocket: 此类表示用来发送和接收数据报包的套接字. 主要的构造方法: DatagramSocket():创建实例,绑定本机的默认IP地址,随机选择端口.通常用于客户端编程,没有特定监听的端口,仅仅使用一个临时的.  DatagramSocket(int port):创建实例,指定端口号,即固定监听Port端口的报文.  DatagramSocket(int port, InetAdd

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③