UDP

什么是UDP协议

在上节课的练习中,使用TCP进行网络编程时,我们会遇到粘包问题,这是因为TCP是流式协议,而今天学习的UDP协议不是流式协议,其发送的数据是数据报格式的,在进行数据发送时该协议会自动加上报头及报尾,使每次发送的数据之间都是有间隔的,这样在进行接收时就会每次接收一条数据。

为什么会有UDP协议?

在使用TCP协议进行通讯时,由于TCP协议需要进行三次握手建连接,四次挥手断连接,这个过程虽然十分可靠,但是这个过程十分的繁琐,会影响数据之间的通讯效率,对于一些对于数据的可靠性要求较高的通讯,使用TCP协议十分的合理,但是对于那些对通讯的可靠性要求不高,而对通讯的效率要求较高的程序,使用TCP通讯协议就会产生效率的问题,此时使用UDP协议进行通讯就显得十分的合理

UDP协议与TCP协议的比较

在使用UDP及TCP进行通讯时,这两种协议并没有好坏之分,只是根据对于通讯要求的侧重点不同而选择不同的通讯协议

TCP协议:

优点:

  • TCP协议是可靠协议,使用TCP协议进行通讯时,其基本上不会丢包,这是因为在发送数据时,客户端与服务器之间会进行确认,如果服务器收到了来自服务器的确认信息,才会删除缓存中的信息,确保服务器可以收到来自对方的消息

  • TCP协议可以传输数据量较大的数据

缺点:

  • 需要进行三次握手,传输效率较低

UDP协议

优点:

  • 使用UDP进行数据传输时,传输效率较高

缺点:

  • UDP是不可靠传输,传输时容易发生丢包,这是因为,在发送数据时,客户端与服务器端之间没有建立连接,没有进行信息的确认,在发送完数据后就将缓存中的数据删除了,不管对方有没有收到,容易丢包

  • 使用UDP进行数据传输,传输的数据量不能太大,这是因为数据传输时,在数据链路层会进行数据的切割,将其切割成帧的形式进行发送,而每个数据帧最大为1518个字节,在将OSI所加的所有报头信息减去后,确认数据的大小最好小于1472个字节,这样在发动端不会进行数据切割,减少丢包的概率

如何使用UDP协议?

在程序中使用UDP客户端及服务端较TCP协议简单,这是因为UDP协议不需要建立连接,这就不需要监听端口,也不需要接收客户端发来的链接,只需要接收就可以

import socket
server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server.bind(("127.0.0.1",8088))

server.recv_from(1024)
server.sendto("信息".encode("utf-8"),客户端的地址及端口元组)

UDP使用案例之DNS服务

DNS的全名为域名解析系统,是将域名解析为ip地址的服务,其对于速度的要求较高而对稳定性要求不高,所以其使用的就是UDP协议

进程了解

进程指的是正在进行中的程序,进程是一个虚拟的概念,当程序从硬盘加载到内存上来以后就称之为进程

进程时依据操作系统而存在的,在发明多道技术之前根本没有进程的概念,这是因为所有的计算机只能在同一时间运行一个程序,当这个程序运行完之后,才能运行下一个程序

那什么是多道技术呢?

多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。

多道技术时间以及空间上的复用

时间上的复用:计算机在同一时间可以运行多个程序(看上去时同时)

空间上的复用:在同一时间可以将多个程序加载到内存中,这是因为将内存进行物理层面的分割,使每个只能占有其中的一块空间,其所有的数据都会放在这个空间,这个空间在这个时间是这个程序独用的,数据之间不会相互影响,所以可以在同时加载进多个程序。

day33 网络编程之UDP与进程了解的更多相关文章

  1. 网络编程之UDP编程

    网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...

  2. Java网络编程之UDP

    Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...

  3. java网络编程之UDP通讯

    详细介绍了java中的网络通信机制,尤其是UDP协议,通过对UDP的基本使用进行举例说明如何使用UDP进行数据的发送接收,并举了两个小demo说明UDP的使用注意事项. UDP协议原理图解: UDP协 ...

  4. (28)网络编程之UDP

    介绍UDP通信协议的编程之前,先介绍一下网络编程,socket相关的概念: 网络编程:网络编程主要用于解决计算机与计算机(手机平板等)之间的数据传输问题. 网络编程:不需要基于html网页就可以达到数 ...

  5. 网络编程之UDP(3)丢包总结

    读书笔记 from here UDP socket缓冲区满造成的UDP丢包 如果socket缓冲区满了,应用程序没来得及处理在缓冲区中的UDP包,那么后续来的UDP包会被内核丢弃,造成丢包.在sock ...

  6. 网络编程之UDP中一个包的大小最大能多大

    读书笔记:here 结论1:局域网环境下,建议将UDP数据控制在1472字节以下 一定要知道 因为链路层的传输单元(MTU)是1500字节,1500字节中并不包含链路层的首尾18个字节.1500字节是 ...

  7. java 25 - 4 网络编程之 UDP协议传输的代码优化

    UDP协议的输出端: /* UDP发送数据: A:创建Socket发送端对象 B:创建数据报包(把数据打包) C:调用Socket对象发送数据报包 D:释放资源(底层是IO流) */ public c ...

  8. java 25 - 4 网络编程之 UDP协议传输思路

    UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端. B:建立数据包. C:调用Socket的发送接收方法. D:关闭Socket. ...

  9. Java:网络编程之UDP的使用

    java.net  类 DatagramSocket 此类表示用来发送和接收数据报包的套接字,数据报套接字是包投递服务的发送或接收点. java.net  类 DatagramPacket 此类表示数 ...

随机推荐

  1. 【CUDA 基础】6.3 重叠内和执行和数据传输

    title: [CUDA 基础]6.3 重叠内和执行和数据传输 categories: - CUDA - Freshman tags: - 深度优先 - 广度优先 toc: true date: 20 ...

  2. CUDA-F-5-5-常量内存

    title: [CUDA 基础]5.5 常量内存 categories: - CUDA - Freshman tags: - CUDA常量内存 - CUDA只读缓存 toc: true date: 2 ...

  3. 利用Python构建时间序列模型解决实际问题的正确姿势

    要本着应用到实际工作中目的去学时间序列分析,才能深入浅出的学会,不要纠结于理论,只听我的,我有信心说明白. 本章内容 趋势分析 序列分解 序列预测 序列分解 统计学基础铺垫 划分 时间序列按照季节性划 ...

  4. Contos 安装Tomcat

    # 下载安装包 wget http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.40/bin/apache-tomcat-8. ...

  5. 【Android】【踩坑日记】RecyclerView获取子View的正确姿势

    开发过程中发现RecyclerView.getChildAt(position)为空的情况,但是明明这个position却没有越界. 解决办法:用recycler.getLayoutManager() ...

  6. Netfilter 之 连接跟踪钩子函数分析

    ipv4_conntrack_defrag ipv4_conntrack_defrag对输入包进行检查,如果是分片包,则调用nf_ct_ipv4_gather_frags函数进行重组: static ...

  7. Netfilter 之 table、rule、match、target

    概述 本文主要分析table,rule,match,target的作用和其数据结构之间的关系,为后面的匹配流程做铺垫,通过本文中代码流程的分析,可以得到如下的关系图: 详细分析 table iptab ...

  8. linux系统空间不足,不重启进程,清理僵尸文件。

    问题:通过lsof |grep delete命令可以看到状态为delete的进程文件占用了较多的空间,导致系统磁盘空间不足,而du 命令看到的磁盘空间占用没那么高. 得到僵尸文件名称:catalina ...

  9. 关于jenkins

    启动不了时可更改端口 java -jar jenkins.war –httpPort=8090

  10. SpringCloud(七)之SpringCloud的链路追踪组件Sleuth实战,以及 zipkin 的部署和使用

    一.前言 Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案 ,并且兼容了zipkin,提供了REST API接口来辅助我们查询跟踪数据以实现对分布式系统的监控程序 . ...