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 此类表示数 ...
随机推荐
- Java日期工具类DateUtils详解(转)
jar包 appache下的 common-lang3 一. 对指定的日期新增年.月.周.日.小时.分钟.秒.毫秒 public static Date addDays(Date date, int ...
- Educational Codeforces Round 33 (Rated for Div. 2) D题 【贪心:前缀和+后缀最值好题】
D. Credit Card Recenlty Luba got a credit card and started to use it. Let's consider n consecutive d ...
- Educational Codeforces Round 33 (Rated for Div. 2) B题
B. Beautiful Divisors Recently Luba learned about a special kind of numbers that she calls beautiful ...
- 解决ubuntu安装软件has install-snap change in progress错误
解决ubuntu安装软件has install-snap change in progress错误 2018年05月06日 13:45:39 山间明月江上清风_ 阅读数:14316 标签: ubunt ...
- vue-element-admin平时使用归纳
message提示的使用 import { Message } from 'element-ui'; Message({ message: res.data.message || 'Error', t ...
- vue中用watch监听当前路由
之前做项目时,特别是后台项目,左边都有侧边栏,我们需要做到点击某个侧边栏的项让这个项高亮,之前采用的是给每个项绑定一个值,点击某个项时,就将这个值付给一个变量,在每一项上判断这个变量是否与每项上的值相 ...
- Python3 Address already in use 解决方法
1.查看使用端口号netstat -ntlp 2.根据端口号找到pid 3.杀死程序 kill -9 pid 4.重新启动程序 简单粗暴 我使用python3时编写Socket,linux系统下使用c ...
- redis基础操作概念等笔记
Redis常用配置 daemonize ->是否是后台进程 port ->对外端口 logfile ->Redis 系统日志 dir ->Redis 工作目录 Redis的链接 ...
- 2018-2019-2 20165330《网络对抗技术》Exp10 Final 基于PowerShell的渗透实践
目录 实验内容 实验步骤 实验中遇到的问题 实验总结与体会 实验内容 PoweShell简介 PowerShell入门学习 PowerShell渗透工具介绍 相关渗透实践分析 ms15-034之Pow ...
- Mybatis传递多个参数进行SQL查询的用法
当只向xxxMapper.xml文件中传递一个参数时,可以简单的用“_parameter”来接收xxxMapper.java传递进来的参数,并代入查询. 但是,如果在xxxMapper.java文件中 ...