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)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。
多道技术时间以及空间上的复用
时间上的复用:计算机在同一时间可以运行多个程序(看上去时同时)
空间上的复用:在同一时间可以将多个程序加载到内存中,这是因为将内存进行物理层面的分割,使每个只能占有其中的一块空间,其所有的数据都会放在这个空间,这个空间在这个时间是这个程序独用的,数据之间不会相互影响,所以可以在同时加载进多个程序。