一. 网络基础相关
1. 架构
c/s架构 : client客户端和server服务器端. 优势是可以充分发挥pc机的性能
b/s架构 : browser浏览器和server服务器端. 优势是统一了应用的接口
2. 通信
同一台电脑上的两个py文件通信. ex:打开一个文件
两台电脑如何通信. ex:连一根网线
多台电脑通信.
ex : 电脑1(源)找电脑2(目标)
电脑1发出一个请求帧,其中包含(我的ip是192.168.1.1,我的mac地址是xxxxxxx,我要找ip地址为 192.1686.1.2的主机).电脑1会将次请求发给交换机,交换机收到此消息后会向其他主机广播此消息.目标主机接收到消息后,对比发现自己就是被找的主机,会回复消息(我的ip是1192.168.1.2,我的mac地址是yyyyyyyyyy,请回复给ip地址为192.168.1.1,mac地址为xxxxxxx的主机)给交换机. 交换机收到消息后会以单播形式将消息返回给源主机.
知识点 :
1. mac地址 : 是一个物理地址,全球唯一,类似于身份证
2. ip地址 : 是一个四位以点分割的十进制数,它标识了计算机在网络中的位置.
3. 交换机的通信方式 :
广播 : 一对多(交换机对除发出请求帧的主机之外的所有主机)
单播 : 一对一(交换机对某一台主机)
组播 : 一对多(交换机对需要接收发出请求帧的主机发出的信息的所有主机)
4. arp协议 : 通过目标ip地址获取目标mac地址的一个协议(过程)
5. 端口 : 操作系统上为本机上每一个运行的程序都随机分配一个端口,其他电脑的程序可以通过端口获取到这个程序.
6. 路由器 : 连接不同的网段 ,路由
7. 网关 : 类似于一个局域网的出口和入口
8. 网段 : 一个局域网的ip地址范围
9. osi五层模型 :
应用层 协议 : http,https,ftp
传输层 协议 : tcp/udp 设备 : 四层交换机,四层路由器
网络层 协议 : ip协议 设备 : 路由器,三层交换机
数据链路层 协议 : arp协议 设备 : 以太网交换机,网卡,网桥
物理层 协议 : 传输电信号 设备 : 集线器,网线,光纤
二. socket模块
socket 又叫套接字,有很多种类型
sk = socket.socket(family = AF_INET,type = SOCK_STREAM)
family :
1. AF_UNIX基于文件类型的套接字(早期socket是源自于unix系统而研发的一个功能,主要是为了同一台电脑上,多个程序直接通信) unix系统的主心思想 : 一切皆文件
2. AF_INET基于网络类型的套接字
type :
1. 基于TCP协议 (SOCK_STREAM)
2. 基于UDP协议 (SOCK_DGRAM)
TCP协议 : 可靠的,面向连接的,面向字节流形式的传输方式,速度慢,只能一对一进行通信
UDP协议 : 不可靠的,非面向连接,面向数据报的传输方式,但是很快,允许一个服务器同时和多个客户端通信
TCP协议编码流程 :
服务器端 客户端
实例化对象 实例化对象
绑定ip地址和端口号(bind)
监听(listen)
接受客户端的连接(accept) 连接服务器(connect)
收发消息(recv/send) 收发消息(recv/send)
关闭(close) 关闭(close)
TCP三次握手 : 一定是client先发起请求
1. 客户端发起请求连接服务器
2. 服务端接受到并返回 : 接收到请求,请求连接客户端
3. 客户端回复 : 可以连接
TCP四次挥手 : 谁发起断开连接请求都可以
1. 客户端发起断开连接的请求(我想和你断开连接,我没有数据需要发送了,如果你还有数据要发送,我可以继续接收)
2. 服务器回复 : 我接收到你的请求
3. 服务器发送 : 我已经准备好和你断开连接
4. 客户端回复 : 收到你的信息,断开连接
回环地址 : 127.0.0.1 每个计算机都有这样的一个本机地址,只能被本机识别,不会被其他机器识别
三. pycharm输出带颜色的字体
33[1;31;40m 输出数据 33[0m <--1-高亮显示 31-前背景红色(即字体红色) 40-背景黑色 33[0m-取消颜色设置,采用终端默认设置>
前背景(即字体) | 背景 | 颜色 |
30 | 40 | 黑色 |
31 | 41 | 红色 |
32 | 42 | 绿色 |
33 | 43 | 黄色 |
34 | 44 | 蓝色 |
35 | 45 | 紫红色 |
36 | 46 | 青蓝色 |
37 | 47 | 白色 |
显示方法 | 意义 |
0 | 终端默认设置 |
1 | 高亮显示 |
4 | 下划线 |
5 | 闪烁 |
7 | 反白显示 |
8 | 不可见 |
print('33[0;34;42m如果我是DJ,你会爱我吗?33[0m') print('33[4;34;42m如果我是DJ,你会爱我吗?33[0m') print('33[35m如果我是DJ,你会爱我吗?33[0m') print('如果我是DJ,你会爱我吗')
练习 :
TCP实现客户端和服务器端互相通信
#服务器端 import socket sk = socket.socket() sk.bind(('127.0.0.1',12054))#IP地址,端口 sk.listen()#等待客户端链接 while 1: a ,b = sk.accept()#等待客户端传输内容 ,阻塞等待 while 1 : a_r = a.recv(2048).decode('utf-8') # 接受客户端发来的2048个字节数据 print(a_r) if a_r =='q': print('退出') break i = input('说话>>>: ') a.send(i.encode('utf-8')) if i =='q': break a.close() sk.close()
#客户端 import socket sk1 = socket.socket() sk1.connect(('127.0.0.1', 12054))#连接 while 1: i = input('输入>>> : ') sk1.send(i.encode('utf-8')) if i =='q': break i_j =sk1.recv(2048).decode('utf-8') if i_j == 'q': break print(i_j) sk1.close()
UDP实现服务器和多个客户端通信(服务器只能回复之后才可以继续接收信息)
#服务器端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.bind(('127.0.0.1',12001)) while 1: a,b = sk.recvfrom(2048) print(a.decode('utf-8')) r = input('>>>>>>') sk.sendto(r.encode('utf-8'),b) sk.close()
#客户端(可以多次运行模拟多个客户端) import socket sk = socket.socket(type=socket.SOCK_DGRAM) while 1: r = input ('>>>>') sk.sendto(r.encode('utf-8'),('127.0.0.1',12001)) a,b = sk.recvfrom(2048) print(a.decode('utf-8')) sk.close()
四. 交换机和路由器的区别
交换机主要用来组织局域网,进行同一网段之间的信息传输
路由器主要用于跨网段的信息传输,路由出最佳路径.