异常处理 网络基础知识-前篇
1 异常处理
1.1 什么是异常
异常是程序发生错误的信号,一旦程序运行出错,就会抛出异常,程序随即终止运行。
异常的主要组成部分:
- Traceback 异常的追踪信息,用于定位到异常的位置。
- 异常的类型
- 异常的内容
1.2 为什么需要异常
为了增强程序的健壮性。
在程序出错时不希望终止程序运行,而是捕捉到异常并处理,将错误信息记录到日志中。
1.3 如何处理异常
错误来源:语法和逻辑
针对由语法错误引发的异常SyntaxError,必须在程序运行前处理掉。
针对由逻辑错误引发的异常,分为两种处理方式:
- 错误发生的条件是可以预知的
判断错误产生的条件并在满足条件时解决错误。 - 错误发生的条件是无法预知的
try:
子代码块
如果子代码块中产生异常,则会直接跳到下面对应异常类型的代码块中处理异常。
异常后面的同级别代码不会再执行。
except 异常类型1 as e(变量):
代码块 处理类型1的异常
except (异常类型2, 异常类型3...) as e:
代码块 处理类型2或类型3...的异常
except Exception as e:
代码块 处理其余的异常
else:
如果没有发生异常,则会执行else的子代码块。
finally:
代码块
无论是否发生异常,都会运行finally中的代码。
主要用于回收系统资源。
注意:
- else不能与try单独使用,必须搭配except;
- finally可以与try单独使用。
2 网络编程
2.1 CS架构与BS架构
架构是一个系统的框架结构,用于指导软件系统各个方面的设计。
CS架构
Client-Server架构,客户端-服务器架构。
软件由两大部分组成,即客户端软件和服务器软件。
客户端软件和服务器软件之间的通信本质上是客户端计算机与服务器之间的通信。
BS架构
Browser-Server架构,浏览器-服务器架构。
在BS架构中大部分工作用于开发服务端的软件,而对应的客户端是浏览器,只需与对应的浏览器适配即可。
CS架构与BS架构的主要区别在于
CS架构中的通信标准可以完全由自己定制;
BS架构中的通信标准必须参照对应的浏览器的标准。
2.2 网络通信
网络的两大组成部分:物理连接介质,互联网通信协议
网络用于实现跨地域数据传输,而数据传输称为通信。
2.2.1 OSI模型
OSI(Open System Interconnect)开放式系统互联
开放式系统互联OSI将网络通信的工作分为7层,OSI七层协议:
应用层,表示层,会话层,传输层,网络层,数据链路层和物理层。
应 表 会 传 网 数 物
对于一般开发,可以将应用层表示层和会话层统一为应用层,即OSI五层协议。
2.2.2 封装
协议:规定数据的组成格式
基本格式:头部 + 数据
装包:数据打上头部信息
拆包:拆掉头部获取数据
层 | 单位 | 内容 | 协议 |
---|---|---|---|
物理层 | 位 (bit) | 二进制数据 | |
数据链路层 | 帧 (frame) | 帧头 + 数据 | 以太网协议 |
网络层 | 包 (packet) | IP报头 + 数据 | IP协议 ARP协议 |
传输层 | 段 (segment) | TCP/UDP报头 + 数据 | TCP协议 UDP协议 |
应用层 | 数据 |
2.3 物理层
负责发送和接受电信号,数据为二进制数据。
一个物理层数据称为一个位。
2.4 数据链路层
2.4.1 介绍
单纯的二进制数据无法表示任何意义,
需要对二进制数据进行分组,即规定一定位数的二进制数字为一组,每组二进制数据可以表示一定的意义,而分组的标准是以太网(ethernet)协议。
数据链路层主要用于对二进制数据进行分组。
2.4.2 以太网协议
对二进制数据进行分组的标准称为以太网协议。
- 一组数据称为一个数据帧;
- 数据帧包含两部分,头部head和数据data;
head包括:
- 发送者的源地址(MAC地址)
- 接收者的目标地址(MAC地址)
- 数据类型
data包含来自网络层的数据包
- 接入到互联网的主机都需要网卡,每一块网卡在出场时都必须固定一个世界上独一无二的物理地址,即MAC地址(Media Access Control Address);
MAC地址
长度为48位2进制,通常由12位16进制数表示,其中前6位是厂商编号,后6位是流水线号。
2.4.3 广播
计算机通信基本靠吼,即以太网协议采用广播的工作方式进行通信。
广播发送过程
主机A需要向主机B发送数据,数据包含主机B的网卡的MAC地址,
数据会被拷贝并向子网中的所有主机各发送一份,即广播发送,
子网中所有的主机都会收到这个数据,然而其它主机在核对MAC地址后发现不是发给自己的,就会丢弃该数据,只有主机B会接收并保留该数据。
2.5 网络层
2.5.1 介绍
有了以太网协议、MAC地址、广播发送,世界上的计算机就可以实现通信了,但是如果所有的通信都采用广播的工作方式,那么一台计算机发送的数据会被全世界其它计算机接收到,显然这是不合理的。
必须为计算机划分广播的区域,在同一广播域中的计算机彼此之间采用广播的方式传递数据,否则采用路由的方式向不同广播子网分发数据。
然而仅依靠MAC地址是无法区分广播域的,因此需要引入一套新的地址来区分广播域,这套地址就是网络地址。
网关
- 每一个广播域都有一个出口,即网关,网关具有两个地址,一个是对内地址,与广播域中的计算机之间进行通信,一般默认是192.168.0.1或192.168.1.1,一个是对外地址,即连通外网的地址。
- 网关与外界进行通讯采用的是路由协议。
网络层主要用于为计算机划分广播域。
每一个广播域都需要一个网关,用于与外界进行通信。
2.5.2 IP协议
规定网络地址的协议称为IP协议。
- 一组数据称为一个数据包;
- 一个数据包包含两部分,头部head和数据data;
头部包含的地址称为ip地址;
数据包含的是来自传输层的数据;
IP地址(ipv4协议)
- 规定网络地址是由32位二进制数字组成;
- 范围为 0.0.0.0 - 255.255.255.255 (8bit.8bit.8bit.8bit);
- ip地址通常用四段十进制数表示,例如192.168.0.1。
子网掩码地址
- 子网掩码地址是表示子网络特征的一个参数,在形式上与IP地址相同;
- IP地址必须与子网掩码地址配合使用,用于区分广播域;
- 网络部分全部为1,主机部分全部为0,如果已知网络部分是前24位,主机部分是后8位,子网络掩码就是255.255.255.0;
- 合法的网络地址:IP地址/子网掩码地址,例如 192.168.0.1/255.255.255.0 或者 192.168.0.1/24(子网掩码地址通常是连续的1加上连续的0,24代表24个连续的1),若不加子网掩码,默认为24。
判断两个IP地址是否处于同一个子网络中。
将两个IP地址与子网掩码分别进行AND运算(按位与运算:两个位都为1,结果为1,否则为0),
然后比较结果是否相同,相同则表明它们处于同一个子网络中。
例如IP地址172.16.10.1和172.16.10.2的子网掩码都是255.255.255.0,
172.16.10.1 10101100.00010000.00001010.00000001
255.255.255.0 11111111.11111111.11111111.00000000
AND 10101100.00010000.00001010.00000000
172.16.10.2 10101100.00010000.00001010.00000010
255.255.255.0 11111111.11111111.11111111.00000000
AND 10101100.00010000.00001010.00000000
结果都是172.16.10.0,因此它们处于同一个子网络中。
IP协议的作用
- 为每一台计算机分配IP地址;
- 确定哪些IP地址处于同一个子网络中。
2.5.3 ARP协议
在同一个局域网内,一般只知道对方的ip地址,但计算机底层通信是基于以太网协议,即基于mac地址进行通信,所以需要一种解决方案通过ip地址获取mac地址,该解决方案称为ARP协议(Address Resolution Protocol, 地址解析协议)。
- ARP协议首先通过自己的和目标的ip地址和子网掩码地址,判断本主机与目标主机是否处于同一个子网中。
- 如果处于同一个子网中,本主机通过广播的方式发送广播包,获取目标主机的mac地址。
广播包格式
源mac | 目标mac | 源ip | 目标ip | 数据部分 | |
---|---|---|---|---|---|
发送端主机 | 发送端mac | FF:FF:FF:FF:FF:FF | 172.16.10.10/24 | 172.16.10.11/24 | 数据 |
目标mac为FF:FF:FF:FF:FF:FF,意思是需要获取mac地址。
- 广播包会以广播的方式在发送端所处的子网内发布,所有主机都能接收广播包,目标主机发现广播包中的目标ip地址为自己的ip地址,就返回自己的mac地址。
数据包的格式
源mac | 目标mac | 源ip | 目标ip | 数据部分 | |
---|---|---|---|---|---|
发送端主机 | 发送端mac | 目标主机mac | 172.16.10.10/24 | 172.16.10.11/24(目标主机ip) | 数据 |
- 如果不处于同一个子网中,本主机需要通过网关进行数据传输,此时需要通过网关的ip地址获取网关的mac地址。
数据包的格式
源mac | 目标mac | 源ip | 目标ip | 数据部分 | |
---|---|---|---|---|---|
发送端主机 | 发送端mac | 网关mac | 172.16.10.10/24 | 172.16.10.11/24(目标主机ip) | 数据 |
2.5.4 mac地址与ip地址总结
- mac地址用于标识子网内的一台主机,ip地址用于定位子网;
- 在子网内部,ip地址的作用只是用于获取mac地址,子网内部的通信是基于mac地址的;
- ip地址分为私网ip地址和公网ip地址,私网ip地址只能用于子网内,公网ip地址用于与外界进行通信;
- mac地址是固定的,但是ip地址可以变,计算机接入不同的局域网中可能需要配置不同的ip地址;
- ip地址 + mac地址 可以标识定位世界上独一无二的一台主机,也可以说仅通过ip地址就能定位世界上独一无二的一台主机,因为通过ARP协议可以根据ip地址获取mac地址;
- 补充:ip地址 + mac地址 + port地址可以标识世界上的独一无二的一个基于网络通信的应用程序。