zoukankan      html  css  js  c++  java
  • 疫情环境下的网络学习笔记 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地址

  • 相关阅读:
    Spring AOP功能
    EasyUI组件treegrid构建树形组织机构
    EasyUI树形表格显示Json数据
    Java 操作Redis
    Linux安装Redis、后台运行、系统自启动
    SpringBoot-Helloworld
    中小后台系统UI框架--EasyUI
    Spring注解--实现applicationContext.xml效果
    Mybatis XML映射文件
    python初学者必看学习路线图!!!
  • 原文地址:https://www.cnblogs.com/telecasterfanclub/p/12715116.html
Copyright © 2011-2022 走看看