day33 网络编程之UDP与进程了解
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与进程了解的更多相关文章
- 网络编程之UDP编程
网络编程之UDP编程 UDP协议是一种不可靠的网络协议,它在通信的2端各建立一个Socket,但是这个Socket之间并没有虚拟链路,这2个Socket只是发送和接受数据的对象,Java提供了Data ...
- Java网络编程之UDP
Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...
- java网络编程之UDP通讯
详细介绍了java中的网络通信机制,尤其是UDP协议,通过对UDP的基本使用进行举例说明如何使用UDP进行数据的发送接收,并举了两个小demo说明UDP的使用注意事项. UDP协议原理图解: UDP协 ...
- (28)网络编程之UDP
介绍UDP通信协议的编程之前,先介绍一下网络编程,socket相关的概念: 网络编程:网络编程主要用于解决计算机与计算机(手机平板等)之间的数据传输问题. 网络编程:不需要基于html网页就可以达到数 ...
- 网络编程之UDP(3)丢包总结
读书笔记 from here UDP socket缓冲区满造成的UDP丢包 如果socket缓冲区满了,应用程序没来得及处理在缓冲区中的UDP包,那么后续来的UDP包会被内核丢弃,造成丢包.在sock ...
- 网络编程之UDP中一个包的大小最大能多大
读书笔记:here 结论1:局域网环境下,建议将UDP数据控制在1472字节以下 一定要知道 因为链路层的传输单元(MTU)是1500字节,1500字节中并不包含链路层的首尾18个字节.1500字节是 ...
- java 25 - 4 网络编程之 UDP协议传输的代码优化
UDP协议的输出端: /* UDP发送数据: A:创建Socket发送端对象 B:创建数据报包(把数据打包) C:调用Socket对象发送数据报包 D:释放资源(底层是IO流) */ public c ...
- java 25 - 4 网络编程之 UDP协议传输思路
UDP传输 两个类:DatagramSocket与DatagramPacket(具体看API) A:建立发送端,接收端. B:建立数据包. C:调用Socket的发送接收方法. D:关闭Socket. ...
- Java:网络编程之UDP的使用
java.net 类 DatagramSocket 此类表示用来发送和接收数据报包的套接字,数据报套接字是包投递服务的发送或接收点. java.net 类 DatagramPacket 此类表示数 ...
随机推荐
- am335x system upgarde ddr3 capacity configuration base on TI DDR3 Software Leveling Tool (二十)
follow test is use ti DDR Software Leveling op log. AM335x DDR3 Software Leveling -- Version: Beta ...
- HDU - 6150 构造题
最近的vj好垃圾,老崩,实名吐槽 HDU - 6150 题意:给出一个错误的求最小点覆盖的函数,需要来构造一组样例,使得那个函数跑出来的答案是正解的3倍以上. 很巧妙的构造技巧,首先想法就是弄一个二分 ...
- c语言if-else的效率比较
闲着没事测试下if-else的执行效率 测试环境:Mac pro i7 2.3Ghz ...编译器gcc 4.9,代码没有进行优化-O0: 测试代码:c代码1: int main(){ int n=1 ...
- 编译参数(-D)
程序中可以使用#ifdef来控制输出信息 #include<stdio.h> #define DEBUG int main() { ; ; int sum = a + b; #ifdef ...
- Codeforces 1051 D.Bicolorings(DP)
Codeforces 1051 D.Bicolorings 题意:一个2×n的方格纸,用黑白给格子涂色,要求分出k个连通块,求方案数. 思路:用0,1表示黑白,则第i列可以涂00,01,10,11,( ...
- response 下载文件火狐浏览器文件名乱码问题
string path = Server.MapPath(Url.Content("~/") + "UploadFiles/Template/"); ...
- Java后端开发规范
基于阿里巴巴JAVA开发规范整理 一.命名风格 [强制]类名使用 UpperCamelCase 风格,必须遵从驼峰形式,但以下情形例外:DO / BO / DTO / VO / AO 正例:Marco ...
- sentinel控制台监控数据持久化【InfluxDB】
根据官方wiki文档,sentinel控制台的实时监控数据,默认仅存储 5 分钟以内的数据.如需持久化,需要定制实现相关接口. https://github.com/alibaba/Sentinel/ ...
- kotlin array
(1)Kotlin语言使用Array表示数组. (2)[] 可以用于访问数组的元素, [] 被进行了操作符的重载,调用的是 Array 类的 setter 和 getter 方法 2.创建数组 (1) ...
- 数据结构之链表(Linked list)
1, 无序链表(Unordered linked list) 链表是有若干个数据节点依次链接成的数据结构,如下图所示,每一个数据节点包括包括数据和一个指向下一节点的指针.(python中的list就是 ...