定义:
是一种协议,中文翻译为用户数据报协议,是传输层的以一层协议,是一种不可靠快速传输协议. 一般适合比较小数据之间的传递
优点:
传输速度快 不会产生粘包问题
缺点:
无法保证数据传输的完整性 不提供数据包分组、组装和不能对数据包进行排序的缺点
应用场景:一般游戏中 和 视频通讯中 运用较多
二 UDP和TCP比较:
TCP 可靠传输 能够保证数据的完整性 传输内容较大 传输速度慢 效率慢 会产生粘包问题 适合需要完整信息的传递 如 线上支付 文本信息传输等
UDP 不可靠快速传输 无法保证数据传输的完整性 传输的内容较小 效率快 不会产生粘包问题 适合那些对数据不要求完整的数据传输
三 基于UDP的socket
和tcp一样 可以理解为某个过程 根据UDP特点 可以把建立socket的udp协议当做一个传呼机通讯的过程
客户端版本 from socket import * # 导入socket下的所有用法 client = socket(AF_INET,SOCK_DGRAM) # 1 买传呼机 指定格式是基于UDP while True: msg = input('输入信息:') client.sendto(msg.encode('utf-8'),('127.0.0.1',1988)) # 2 传输的内容和具体接口 相当与数据和频道 data,addr =client.recvfrom(1472) # 3 接收的时候 print(data)
服务器版本 from socket import * server= socket(AF_INET,SOCK_DGRAM) # 1 买传呼机 指定是udp格式 server.bind(('127.0.0.1',1988)) # 2 确定自己的频道和端口 绑定ip和端口号 while True: data,addr = server.recvfrom(1472) # 3 接收信息 需要确定是从哪传输过来的 需要保存数据和地址 # 1472一般是默认最优 server.sendto(data,addr) # 4 发送数据 地址 给对方 信息 其中1472是udp最大数据长度
基于UDP的时间服务器练习 客户端 from socket import * client = socket(AF_INET,SOCK_DGRAM) while True: client.sendto('%Y-%m-%d'.encode('utf-8'), ('127.0.0.1',1988)) data = client.recvfrom(1472) print(data) 服务器 from socket import * import time server= socket(AF_INET,SOCK_DGRAM) server.bind(('127.0.0.1',1988)) while True: data,addr = server.recvfrom(1742) res = time.strftime(data.decode('utf-8'),time.localtime()) # 转化的是字符串可是 server.sendto(res.encode('utf-8'),addr) # 在解码成utf-8格式
基于UDP格式socket的注意点
注意1:发送方的数据长度应与接收方的接受长度统一,否则将丢失数据,windows下直接报错。
注意2:缓存区大小不可能无限大,如果要传输大数据超过UDP数据报大小,则需要在UDP基础上加上额外的应用层协议。
四 基于UDP应用DNS (了解)
我们都知道,两台计算机要通讯则必须知道对方的IP地址,但是IP地址较复杂不方便记忆,造成用户上网成本高,体验差,于是就想到了给IP地址取别名的办法,这就是域名。如www.baidu.com
域名:
是给IP地址取的别名,同时为了在查询名字与地址对应关系时更快,所以给域名也划分了不同区域。
分类
1.1 国际顶级域名,工商企业.com .top,网络提供商.net,非营利性组织.org,教育.edu
1.2 国际域名,中国.cn,美国.us,日本.jp
但随之而来的问题是域名虽然简化了记忆,但是数据传输依然要依赖IP地址和端口,所以想要还要提供一个可以通过域名获取ip的机制,这就是DNS
DNS
全称域名解析服务器,其本质上就是一个大型数据库系统
DNS访问流程:
当我们要访问一个地址如www.baidu.com时
1.浏览器首先会询问本地DNS服务器(即网络运营商如电信,联通),以获取对应的IP,
2.如果本地DNS中没有想要的记录,则本地DNS,会询问根(1级)域名服务器,全球有13台
根域名服务器中不可能存储全世界所有IP所以它仅存储顶级(2级)域名服务器的IP
例如:COM域主服务器的IP,NET域主服务器的IP
3.于是本地DNS得到COM域服务器IP后向其发送请求,
4.由于一个域名可以对应多个IP所以还需要向三级域名主机发出请求
5.最后将返回的IP信息缓存到本地DNS中备用
五 进程篇
什么是进程 :
指的是正在运行的程序 是一系列过程的的统称 也是操作系统在调度和进行资源分配的接班单位
进程的概念来自于操作系统 简单介绍下
操作系统的作用
1)屏蔽复杂繁琐的硬件接口 为应用程序提供简单应用的系统接口
2) 操作系统将应用程序对资源的分配的竞争变得有序起来
多线程中的多道技术:
多线程 指的是多个应用程序同时进行 (其实也是有先后顺序的 因为计算机速度特别快,给人的感觉上就像是同时进行)
多道技术:
多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如cpu)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。
空间上的复用:将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序。
时间上的复用:当一个程序在等待I/O时,另一个程序可以使用cpu,如果内存中可以同时存放足够多的作业,则cpu的利用率可以接近100%,类似于我们小学数学所学的统筹方法。(操作系统采用了多道技术后,可以控制进程的切换,或者说进程之间去争抢cpu的执行权限。这种切换不仅会在一个进程遇到io时进行,一个进程占用cpu时间过长也会切换,或者说被操作系统夺走cpu的执行权限)
空间上的复用最大的问题是:程序之间的内存必须分割,这种分割需要在硬件层面实现,由操作系统控制。如果内存彼此不分割,则一个程序可以访问另外一个程序的内存,
首先丧失的是安全性,比如你的qq程序可以访问操作系统的内存,这意味着你的qq可以拿到操作系统的所有权限。