Python_网络编程

UDP总结

使用udp发送/接收数据步骤:
1.创建客户端套接字
2.发送/接收数据
3.关闭套接字

import socket
def main():
    # 创建udp套接字  # socket.AF_INET 表示IPv4协议 AF_INET6 表示IPv6协议  socket.SOCK_DGRAM 数据报套接字,只要用于udp协议 
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
   # 准备接收方的地址  # 元组类型 ip是字符串类型 端口号是整型 
    dest_addr = ('192.168.113.111', 8888) 
    # 要发送的数据             
    send_data = "我是要发送的数据"
    # 发送数据 
    udp_socket.sendto(send_data.encode("utf-8"), dest_addr)  
    # 等待接收方发送的数据 如果没有收到数据则会阻塞等待,直到收到数据  
    # 接收到的数据是一个元组 (接收到的数据, 发送方的ip和端口) 
    # 1024 表示本次接收的最大字节数 
     recv_data, addr = udp_socket.recvfrom(1024) 
     # 关闭套接字 
    udp_socket.close() 
if __name__ == '__main__': 
    main()    

编码的转换
str -->bytes: encode编码
bytes--> str: decode()解码


UDP绑定端口号:
1.创建socket套接字
2.绑定端口号
3.接收/发送数据
4.关闭套接字

import socker
def main:
    # 1、创建udp套接字
    # socket.AF_INET 表示IPv4协议 AF_INET6 表示IPv6协议 
    # socket.SOCK_DGRAM 数据报套接字,只要用于udp协议 
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
    # 2、绑定端口 
    # 元组类型 ip一般不写 表示本机的任何的一个ip 
    local_addr = ('', 7777) 
    udp_socket.bind(local_addr) 
    # 3、准备接收方的地址 
    # 元组类型 ip是字符串类型 端口号是整型 
    dest_addr = ('192.168.113.111', 8888)
    # 要发送的数据 
    send_data = "我是要发送的数据" 
    # 4、发送数据 
    udp_socket.sendto(send_data.encode("utf-8"), dest_addr) 
    # 5、等待接收方发送的数据 如果没有收到数据则会阻塞等待,直到收到数据 
    # 接收到的数据是一个元组 (接收到的数据, 发送方的ip和端口) 
    # 1024 表示本次接收的最大字节数 
    recv_data, addr = udp_socket.recvfrom(1024) 
    # 6、关闭套接字
    udp_socket.close() 
if __name__ == '__main__':
     main()
    

怎么实现强行关闭客户端和服务器之间的连接? 

在socket通信过程中不断循环检测一个全局变量(开关标记变量),一旦标记变量变为关闭,则 调
用socket的close方法,循环结束,从而达到关闭连接的目的。

简述TCP和UDP的区别以及优缺点? 

UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息。
优点:UDP速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送
缺点:UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数
据是否会正确接收,也不重复发送,不可靠。
TCP是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手
优点:TCP在数据传递时,有确认、窗口、重传、阻塞等控制机制,能保证数据正确性,较为可靠。
缺点:TCP相对于UDP速度慢一点,要求系统资源较多。

简述浏览器通过WSGI请求动态资源的过程? 

1.发送http请求动态资源给web服务器
2.web服务器收到请求后通过WSGI调用一个属性给应用程序框架
3.应用程序框架通过引用WSGI调用web服务器的方法,设置返回的状态和头信息。
4.调用后返回,此时web服务器保存了刚刚设置的信息
5.应用程序框架查询数据库,生成动态页面的body的信息
6.把生成的body信息返回给web服务器
7.web服务器吧数据返回给浏览器

描述用浏览器访问www.baidu.com的过程

先要解析出baidu.com对应的ip地址
要先使用arp获取默认网关的mac地址
组织数据发送给默认网关(ip还是dns服务器的ip,但是mac地址是默认网关的mac地址)
默认网关拥有转发数据的能力,把数据转发给路由器
路由器根据自己的路由协议,来选择一个合适的较快的路径转发数据给目的网关
目的网关(dns服务器所在的网关),把数据转发给dns服务器
dns服务器查询解析出baidu.com对应的ip地址,并原路返回请求这个域名的client

得到了baidu.com对应的ip地址之后,会发送tcp的3次握手,进行连接
使用http协议发送请求数据给web服务器
web服务器收到数据请求之后,通过查询自己的服务器得到相应的结果,原路返回给浏览器。
浏览器接收到数据之后通过浏览器自己的渲染功能来显示这个网页。
浏览器关闭tcp连接,即4次挥手结束,完成整个访问过程

说说HTTP和HTTPS区别

HTTP 协议传输的数据都是未加密的,也就是明文的,因此使用HTTP 协议传输隐私信息非常不安
全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于
对HTTP 协议传输的数据进行加密,从而就诞生了HTTPS。简单来说,HTTPS协议是由SSL+HTTP 协
议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
HTTPS和HTTP 的区别主要如下:
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP 协议构建的可进行加密传输、
身份认证的网络协议,比http协议安全。

 

简述 OSI 七层协议。

 

 

物理层:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0

数据链路层:定义了电信号的分组方式

网路层:引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址

传输层:建立端口到端口的通信

会话层:建立客户端与服务端连接

表示层:对来自应用层的命令和数据进行解释,按照一定格式传给会话层。如编码、数据格式转换、加密解密、压缩解压
应用层:规定应用程序的数据格式

 

什么是C/S和B/S架构?

c/s架构,就是client(客户端)与server(服务端)即:客户端与服务端的架构。

b/s架构,就是brosver(浏览器端)与sever(服务端)即:浏览器端与服务端架构

优点:统一了所有应用程序的入口、方便、轻量级

简述浏览器访问HTTP服务器的过程。

 

 

    1.    用户输入网址.
    2.    浏览器请求DNS服务器, 获取域名对应的IP地址.
    3.    请求连接该IP地址服务器.
    4.    发送资源请求. (HTTP协议)
    5.    web服务器接收到请求, 并解析请求, 判断用户意图.
    6.    获取用户想要的资源.
    7.    将资源返回给web服务器程序.
    8.    web服务器程序将资源数据通过网络发送给浏览器.
    9.    浏览器解析请求的数据并且完成网页数据的显示.

 

简述 三次握手、四次挥手的流程。

三次握手:
    第一次握手
1:客户端先向服务端发起一次询问建立连接的请求,并随机生成一个值作为标识
    第二次握手
2:服务端向客户端先回应第一个标识,再重新发一个确认标识
    第三次握手
3:客户端确认标识,建立连接,开始传输数据


四次挥手 ---> 断开连接
第一次挥手
    客户端向服务端发起请求断开连接的请求
第二次挥手
    服务端向客户端确认请求
第三次挥手
    服务端向客户端发起断开连接请求
第四次挥手
    客户端向服务端确认断开请求

 



TCP和UDP的区别?


TCP/UDP区别
 TCP协议是面向连接,保证高可靠性传输层协议
 UDP:数据丢失,无秩序的传输层协议(qq基于udp协议)

为何基于tcp协议的通信比基于udp协议的通信更可靠?

tcp:可靠,因为只要对方回了确认收到信息,才发下一个,如果没收到确认信息就重发
UDP:不可靠,它是一直发数据,不需要对方回应
流式协议: TCP协议,可靠传输
数据报协议: UDP协议,不可传输

 

什么是socket?简述基于tcp协议的套接字通信流程

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。
在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,
对用户来说,一组简单的接口就是全部。

服务端:
创建socket对象,
绑定ip端口bind(), 
设置最大链接数listen(),  
accept()与客户端的connect()创建双向管道,等到联接, 
send(), recv(), 收发数据
close()

客户端:
创建socket对象,
connect()与服务端accept()创建双向管道 , 
 send(),
 recv(),
close()

什么是粘包? socket 中造成粘包的原因是什什么? 哪些情况会发生粘包现象?

 
只有TCP有粘包现象,UDP永远不会粘包
粘包:在获取数据时,出现数据的内容不是本应该接收的数据,如:对方第一次发送hello,第二次发送world,
  我方接收时,应该收两次,一次是hello,一次是world,但事实上是一次收到helloworld,一次收到空,这种现象叫粘包

原因
粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。

什么情况会发生:
1、发送端需要等缓冲区满才发送出去,造成粘包(发送数据时间间隔很短,数据了很小,会合到一起,产生粘包)

2、接收方不及时接收缓冲区的包,造成多个包接收(客户端发送了一段数据,服务端只收了一小部分,
服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包)

简述 进程、线程、协程的区别 以及应用场景?

线程是指进程内的一个执行单元,
# 进程
进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调度。
# 线程
线程拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程亦由操作系统调度
# 协程和线程
协程避免了无意义的调度,由此可以提高性能;但同时协程也失去了线程使用多CPU的能力

进程与线程的区别
(1)地址空间:线程是进程内的一个执行单位,进程内至少有一个线程,他们共享进程的地址空间,而进程有自己独立的地址空间
(2)资源拥有:进程是资源分配和拥有的单位,同一个进程内线程共享进程的资源
(3)线程是处理器调度的基本单位,但进程不是
(4)二者均可并发执行
(5)每个独立的线程有一个程序运行的入口

协程与线程
(1)一个线程可以有多个协程,一个进程也可以单独拥有多个协程,这样Python中则能使用多核CPU
(2)线程进程都是同步机制,而协程是异步
(3)协程能保留上一次调用时的状态

 

GIL锁是什么?

GIL本质就是一把互斥锁,既然是互斥锁,所有互斥锁的本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务所修改,进而保证数据安全。

GIL保护的是解释器级的数据,保护用户自己的数据则需要自己加锁处理

 

 

Python中如何使用线程池和进程池

 

进程之间如何进行通信

现在最常用的进程间通信的方式有信号、信号量、消息队列、共享内存。所谓进
程通信,就是不同进程之间进行一些“接触”。这种接触有简单,也有复杂。机制不同,复杂
度也不一样。通信是一个广义上的意义,不仅仅指传递一些message。它们的使用方法是基
本相同的,所以只要掌握了一种使用方法,然后记住其他的使用方法就可以了。信号和信号
量是不同的,它们虽然都可用来实现同步和互斥,但前者是使用信号处理器来进行的,后者
是使用P、V操作来实现的。消息队列是比较高级的一种进程间通信方法,因为它真的可以
在进程间传送message,连传送一个“I seek you”都可以。
一个消息队列可以被多个进程所共享(IPC就是在这个基础上进行的);如果一个进程
的消息太多,一个消息队列放不下,也可以用多于一个的消息队列(不过可能管理会比较复
杂)。共享消息队列的进程所发送的消息中除了message本身外还有一个标志,这个标志可
以指明该消息将由哪个进程或者是哪类进程接受。每一个共享消息队列的进程针对这个队列
也有自己的标志,可以用来声明自己的身份。

 

如何修改本地hosts件?

Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,
当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,
一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。

浏览器访问网站,要首先通过DNS服务器把要访问的网站域名解析成一个唯一的IP地址,之后,浏览器才能对此网站进行定位并且访问其数据。

文件路径:C:\WINDOWS\system32\drivers\etc。
将127.0.0.1   www.163.com  添加在最下面
修改后用浏览器访问“www.163.com”会被解析到127.0.0.1,导致无法显示该网页。

 

 

posted @ 2020-03-15 23:43  Tracydzf  阅读(132)  评论(0编辑  收藏  举报