疫情环境下的网络学习笔记 python 4.16

4.16

昨日回顾

  1. 反射:动态的条件下,在运行的时候可以通过某种方法获取到数据内部的信息
  2. 实现反射:hasattr,getattr(obj,x,None)指定none,不存在返回none,不报错,setattr,delattr
  3. 内置方法:定义在类内,某些情况下自动触发
  4. 定义元类的意义:控制类的产生,初始化,调用方式

今日内容

  1. 异常处理

  2. 网络编程:套接字编程

    C / S,B /S 架构

    OSI 七层协议(重要)

正课

异常处理

异常是程序发生错误的信号,程序一旦发生错误就会抛出异常,随即中止程序

异常分为几个部分

  1. Trace back:异常的追踪信息
  2. Error type:异常的类型
  3. 异常的信息

为何处理异常:为了增强程序的健壮性,出错了不应该中止程序,而是捕捉异常并处理,将出错信息纪录到日志内

如何处理异常

语法上的错误:SyntaxError

  • 写错了,必须在运行之前改正

逻辑上的错误:NameError,IndexError,ZerodivisionError,KeyError

针对逻辑上的异常,又分成两种处理方式

  1. 错误发生的条件是可以预知的:在逻辑上判断,直接解决
  2. 错误发生的条件无法预知的

try + except

try:
	子代码块  # 有可能会抛出异常的代码
    # 如果子代码块中出现异常,则异常改行及以下的代码块不会运行
except 异常类型1 as e:
	print(e)
except 异常类型2:
	pass
except 异常类型3 as e:
	pass
else:
    # 如果被监测的子代码块没有异常,则会运行else里的代码
    pass
finally:
    代码块  # 无论被检测的子代码块有无异常,最后都会执行finally的代码块

只用来做异常处理。会降低代码可读性,用的越少越好

  • try可以单独跟finally,except连用,不能和else单独连用

  • 可以在异常后面 as e:得到异常的信息,在except里面打印

  • 可以在一个except里加多个异常类型,异常类型放在元组里

    except(IndexError,NameError) as e:

  • 万能异常 Exception 可以匹配所有的异常,上面指定异常种类可以对单独一个异常特殊处理,最下面适用Exception对不需要特殊处理的异常统一处理

  • finally不处理异常,只是在try之后运行,try代码块结束后整个程序还是会结束

  • 涉及到占用系统资源的操作,如果在代码中出错,则程序直接中止,没办法运行到回收系统资源的代码,所以可以把回收系统资源的代码放在finally里面

网络编程

CS/BS架构

CS架构:客户端软件

BS架构:浏览器

网络通信:网络存在的意义就是数据传输

网络 = 物理连接介质 + 互联网通信协议

互联网通信协议

OSI七层协议

应表会传网数物,也被分为五层

应用,传输,网络,数据链路,物理

协议:规定数据的组织格式

  • 格式:头部 + 数据
  • 网络传输类似于发包裹,加头部类似于封装快递盒。收到数据也需要进行解包

在每一层,有不同的名字用于区分

  1. 数据段:传输层
  2. 数据包:网络层
  3. 数据帧:链路层
  4. 数据位:物理层

不同层的用途

每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件

物理层

  • 负责发送电信号 010101
  • 单纯的电信号毫无意义,必须对其进行分组
  • 一组物理层数据称之为

数据链路层

ethernet以太网协议

  • 干对物理层数据进行分组的活,规定一组数据称之为一个数据帧

  • 用一个统一的标准对数据进行分组:以太网ethernet

    以太网规定了几个概念:

    • 一组电信号构成一个数据包,称为

    • 以太网协议规定但凡接入互联网的主机必须有一块网卡,每块网卡出厂时都烧制一个全世界唯一的id,称为mac地址

    • 一个帧中包含两部分,数据

      头包含

      • 发送者 / 源地址 6个字节
      • 接收者 / 目标地址 6个字节
      • 数据类型 6个字节

      数据

      • 数据的内容

广播:计算机通信基本靠吼,即以太网协议的工作方式。在同一个局域网内,吼了之后所有人都能听得见,于是开始识别你的数据中的接收者,发现接收者不是自己就不管了,接收者识别到是自己,才会做出响应,获取数据

当然这种广播的方式不能直接用在全世界计算机通信

全世界的网络是由许多个子网组成的,在子网中广播只能在当前广播域下起作用,而服务端跟客户端当然是分散于不同的子网的,所以不能通过广播通信

从当前的子网出发找别的子网下的接收者,需要另一种地址,找到对方的子网,再找到对方:IP地址

数据链路层的协议是以太网,解决不了找别的子网的工作,于是我们去到上一层,网络层

网络层

引入一套新的地址来区分不同的子网:网络地址,规定网络地址的协议叫IP协议

IP协议

  • 与以太网协议类似,也要有一个报头,只是里面放的不是mac地址,放的是IP地址
  • IP地址被分为网络部份和主机部分,单独拿哪一部分都不能找到一IP所在的子网

子网掩码

子网络特征的一个属性,通过运算可以判断IP是局域网还是广域网

总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络

到这里,从本机传输出去的网路数据已经被包了两层,第一层是IP,第二层是以太网头。

ARP协议

在通信时,获取通信对象的mac地址的方法:通过广播的方式发送数据包,获取目标主机的mac地址

猜你喜欢

转载自www.cnblogs.com/telecasterfanclub/p/12715116.html