python网络编程(一)
TCP/IP协议
TCP/IP协议的全称:Transmission Control Protocol/Internet Protocol (传输控制协议/因特网互联协议 or 网络通信协议)。TCP/IP是代表一组协议,因此TCP/IP又被称为TCP/IP协议簇。其中TCP/IP只是其中的两个比较重要的协议。
TCP/IP协议5层结构
应用层 --> 提供应用程序的网络接口 (多种协议:HTTP协议,FTP协议,SMTP协议,DNF协议,SSH协议等)
传输层 --> 建立端到端的连接 (提供应用程序之间的通信:TCP/UDP)
网络层 --> 寻址和路由选择 (IP协议)
数据链路层 --> 物理介质访问
物理层 --> 二进制数据流传输
数据链路层
数据链路层和物理层也称为网络接口层,这一层主要用于主机连接网卡以及驱动程序,主要用于物理接口。
物理层传输数据
-
发送端把网络层发的数据会封装为帧,在将数据帧转换为二进制的比特流,通过物理媒介(网线光纤等)传到接收端。接收端收到比特流之后,会组装成数据帧传递到数据链路层,数据链路层会将帧中的数据取出并交给网络层。
-
二进制的比特流是计算机可以看懂的语言。
-
数据帧是给数据链路层用的语言。
数据帧的格式
Preamble(先导字段,用于同步。7个字节) + SFD(一个字节) + DestAddr(目的Mac地址,4个字节) + SrcAddr(源Mac地址,4个字节) + type(类型,标示网络层) + Data(网络层封装的数据,最小64字节,最大10500字节) + FCS(校验,判断该数据帧是否出现问题)
-
Mac地址:主机物理网卡地址,俗称网卡。
-
Windows:
ipconfig /all
,Linux/Mac:ifconfig -a
-
网络设备都是安装的有网络适配器,即网卡,数据是从一块网卡传送到另一块网卡。
-
网卡地址就是数据的发送地址和接收地址,也就是数据帧所包含的Mac地址
-
Mac地址是每块网卡的身份标示,具有唯一性。Mac地址是采用了十六进制标示,共6个字节,前三个字节是厂商编号,后三个字节是网卡流水号。
-
-
Type:IPV4:
0x0800
,IPv6:0x86dd
,ARP:0x0806
,PPPoE:0x8864
数据链路层传输数据
网络内部采用广播的形式将数据发给子网内所有主机,每台主机接收到这个包后,后回去读取数据里的目标Mac地址,然后和自己的Mac地址地址进行对比,如果相同,就继续往下走,否则就丢弃。
通信方式
- 主机作为数据发送方时,数据链路层负责将来自本机网络层的数据封装为数据帧进行发送,接收方在收到数据帧之后会给数据发送方发送反馈信息,如果数据传输有误,发送方需要重新发送出错的数据帧。
- 主机作为数据接收方时,数据链路层负责对接受到的数据帧进行CRC校验,并给数据发送方发送反馈信息,如果数据无误,会将接收到的数据帧中的目标Mac地址,源Mac地址和CRC部分去掉后递交给网络层处理。
- 数据链路层通信使用Mac地址识别主机,主机之间通过交换数据帧的方式进行通信。
Python plutil 获取系统信息
plutil 模块介绍
能够轻松实现获取系统运行的进程和系统利用率(包括CPU、内存、磁盘、网络等)信息。它主要应用于系统监控,分析和限制系统资源及进程的管理。
plutil 安装
pip install plutil
得到系统信息
import psutil
psutil.net_if_addrs()
# AddressFamily.AF_INET IPv4地址信息
# AddressFamily.AF_INET6 IPv6 地址信息
# AddressFamily.AF_LINK Mac地址信息