python 17 异常处理、网络编程

day 17 异常处理、网络编程

1.异常处理

  1. 什么是异常

    异常是程序发生错误的信号,一旦程序出错python解释器就会产生一个异常,如果该异常没有被处理,该异常就会被抛出来,程序的运行也随即终止

    具体来说错误分为两大类

    • 语法错误SyntaxError:在程序运行前必须改正,不允许出现

    • 逻辑错误:程序运行中出现的问题

      1. 尽量避免
      2. 针对无法预防的错误,解决方案使用try——except
      # TypeError:数字类型无法与字符串类型相加
      1+’2’
      
      # ValueError:当字符串包含有非数字的值时,无法转成int类型
      num=input(">>: ") #输入hello
      int(num)
      
      # NameError:引用了一个不存在的名字x
      x
      
      # IndexError:索引超出列表的限制
      l=['egon','aa']
      l[3]
      
      # KeyError:引用了一个不存在的key
      dic={'name':'egon'}
      dic['age']
      
      # AttributeError:引用的属性不存在
      class Foo:
          pass
      Foo.x
      
      # ZeroDivisionError:除数不能为0
      1/0
      
  2. 为何要处理异常

    增强程序的健壮性、鲁棒性

  3. 如何处理异常

    print("start...")
    
    try:
        代码1
        代码2
        代码3
    except 异常类型1 as e:
        处理异常1
    except 异常类型2 as e:
        处理异常2
    except (异常类型3,异常类型4) as e:
        处理异常
    except Exception as e:
        处理异常
    else:
        print('被检测代码块没有异常发生时运行')
    finally:
        print("无论有没有异常都会运行")
    
    print("end...")
    

主动抛出异常

raise TypeError("名字必须是str类型")

# 自定义错误类型
class StrError(BaseException):
    def __init__(self, v):
        self.v = v

    def __str__(self):
        return f"<{self.v}>"


raise StrError("名字必须是str类型")


# 断言:用来调试程序,调试结束可以删除

l = [11, 22]

# if len(l) != 3:
#     raise TypeError("错误")

assert len(l) ==3

print(111)
print(222)
    

2.网络编程

学习网络编程的目的是为了开发一个CS架构或者BS架构的软件
Client————————————网络————————————Server
Browser———————————网络————————————Server

1、什么是网络?

​ 网络=物理连接设备+互联网通信协议(就是计算机界的英语)

2、为何要有网络?

​ 网络——>信息高速公路
​ 为了方便数据传输

3、osi七层协议

image

tcp/ip五层模型
物理层

转成二进制数据进行传输

数据链路层——数据帧

内有mac地址(只在局域网中用)——标识了哪台电脑

​ 定义了电信号的分组方式

以太网协议:

​ 早期的时候各个公司都有自己的分组方式,后来形成了统一的标准,即以太网协议ethernet

​ ethernet规定

​ 一组电信号构成一个数据包,叫做'帧',每一数据帧分成:报头head和数据data两部分

​ head包含:(固定18个字节):发送者的mac地址,6个字节、接收者的mac地址,6个字节

​ data包含:(最短46字节,最长1500字节)

​ 数据包的具体内容:

​ head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送

网络层——数据包

内有ip——>判断是否在一个局域网、获取目标mac地址

ip协议

ipv4:0.0.0.0——255.255.255.255

传输层——数据段

内有端口——>标识了那个应用程序

tcp/udp协议

应用层

处理数据

image

总结:

4、socket

​ socket把传输层及其以下都封装好

5、arp协议——> 数据到底是如何发出去的

arp:负责把ip解析成mac地址

储备知识1:通信分为两大类:

  1. 目标主机在局域网内
  2. 目标主机不在局域网内

储备知识2:IP地址与子网掩码

源主机

​ 11000000.10101000.00001011.00011100<——192.168.11.28

​ 11111111.11111111.11111111.00000000<——255.255.255.0

子网地址====>11000000.10101000.00001011.00000000——>192.168.11.0

目标主机

​ 11000000.10101000.00001011.00011101<——192.168.11.29

​ 11111111.11111111.11111111.00000000<——255.255.255.0

子网地址====>11000000.10101000.00001011.00000000——>192.168.11.0

IP的作用:

  1. arp协议会依据ip地址解析成mac地址
  2. ip+子网掩码按位与运算会得到网络地址,以此来判断源于目标是否在一个局域网内

通信的前提是:先拿到目标的ip与端口

arp协议的工作步骤

  1. 依据自己的ip与子网掩码计算出自己的网络地址

  2. 依据对方的ip与子网掩码计算出对方的网络地址

  3. 判断1和2的网络地址是否一样

    1. 如果一样,证明源于目标在同一个局域网内,只需要走交换机即可

      发arp协议的包:拿到目标主机的mac地址

      自己的mac、FF-FF-FF-FF-FF-FF、自己的ip地址、对方的ip地址、数据

      发送真实数据包

      自己的mac、目标主机的mac地址、自己的ip地址、对方的ip地址、源端口、目标端口、数据

    2. 如果不一样,证明源于目标不在同一个局域网内,需要走交换机,再发给路由器,路由器再转发给运营商的网络

      发arp协议的包:拿到网关的mac地址

      自己的mac、FF-FF-FF-FF-FF-FF、自己的ip地址、网关的ip地址、数据

      发送真实数据包

      自己的mac、目标主机的mac地址、自己的ip地址、对方的ip地址、源端口、目标端口、数据

    局域网中ip地址类似于电话号码,mac地址类似于收货地址,通过电话号码得到对方的收货地址

交换机只有两种情况广播:

  1. 目标mac为FF-FF-FF-FF-FF-FF
  2. 目标mac地址不在mac地址表中
6、tcp协议

基于tcp协议通信,在传数据之前必须建立双向通路

7、dns
8、dhcp

通过解析域名得到ip地址

9、网络通信流程
10、ip的子网划分

C类ip默认24为子网掩码(255.255.255.0)可以将24为改为25位(255.255.255.128)可将C类的网络地址变为2段192.168.11.{0-127}——192.168.11.0、192.168.11.{128-255}——192.168.11.128

借主机位给网络位用,把原来一个网段变成多个网段去用

效果:

  1. 减少了ip的浪费
  2. 缩小了广播域

image

posted @ 2021-04-26 15:36  橘丶阳菜  阅读(50)  评论(0编辑  收藏  举报