网编
概念
- 
- 
不变的:mac地址(在网卡上),能够唯一标识你这台机器 
- 
变化的:ip地址,能够更好地更方便的找到你这的机器 
 
- 
- 
局域网 - 
一个局域网内: - 
交换机:只理解mac地址,不理解ip地址,通过arp协议获取目标mac地址进行通信 
- 
交换机三种工作方式: - 
广播 
- 
单播 
- 
组播 
 
- 
- 
arp协议:地址解析协议。广播的方式发送数据包,获取目标主机的mac地址(计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送) 
- 
网段:ip地址前三位,用子网掩码判断,见后图 
 
- 
- 
局域网之间: - 
路由器:可以理解IP地址 
- 
网关:ip前两位 
 
- 
 
- 
- 
IP地址 - 
ipv4:四位点分十进制(实际是四个八位二进制) 
- 
公网地址:需要我们自己购买 
- 
内网地址:保留字段 - 
192.168.0.0 — ~.255 
- 
172.16.0.0 — 172.31.255.255 
- 
10.0.0.0 — ~.255 
 
- 
- 
特殊的ip地址: 127.0.0.1:本地回环地址,回到自己计算机,测试用 
- 
查看自己ip:ipconfig/ifconfig 
- 
ipv6:六位冒分十六进制(FFFFFF:FFFFFF:FFFFFF:FFFFFF:FFFFFF:FFFFFF) 
 
- 
网络开发结构
- 
C/S架构:需要安装一下 client:客户端 server:服务端 好处:功能更完善,可以离线使用,安全性更高 
- 
B/S架构: browser:浏览器 server:服务端 好处:不用安装就可以使用,统一PC端用户的入口 
- 
两者的关系:B/S也是C/S的一种 
- 
端口port:用来连接电脑的应用 
socket套接字
两个模块
server模块
1 import socket 2  3 sk = socket.socket() # 创建一个server端的对象 4 sk.bind(('127.0.0.1',9001)) # 给server端绑定一个地址 5 sk.listen() # 开始监听(可以接收)客户端给我的连接了 6  7 conn,addr = sk.accept() # 建立连接 conn是连接 8 conn.send(b'hello') 9 msg = conn.recv(1024) 10 print(msg) 11 conn.close() # 关闭连接 12  13 sk.close()
client模块
1 import socket 2  3 sk = socket.socket() 4 sk.connect(('127.0.0.1',9001)) 5  6  7 msg = sk.recv(1024) 8 print(msg) 9 sk.send(b'byebye') 10  11 sk.close()
osi七层协议(应表会传网数物)
- 
osi5层协议(前三层为一层) 应用层 python (内容) 传输层 port udp tcp 四层路由器 四层交换机 (端口) 网络层 ipv4 ipv6 路由器 三层交换机 (ip) 数据链路层 mac arp协议 网卡 二层交换机 (mac) 物理层 转化交流电信号 一层一层封装,一层一层解析,每层都有自己封装解析的内容,封装与解析顺序相反 
- 
tcp和udp - 
tcp(全双工)(语音聊天/视频聊天) — 线下缓存高清电影/qq远程控制/发邮件 - 
先建立连接,然后才能通信 
- 
占用连接,可靠(消息不会丢失),实时性高,慢 
- 
建立连接 — 三次握手 请求连接服务SYN,同意ACK 
- 
断开连接 — 四次挥手 请求结束服务FIN 
 为什么握手三次,挥手四次? - 
可能有遗留数据没有传送完,所以断开的两步必须分开 
 三次握手四次挥手实例 
- 
- 
udp(发消息) — 在线播放视频/qq发消息/微信消息 - 
不需要建立连接就可以通信 
- 
不占用连接,不可靠(消息因为网络不稳定丢失),快 
 
- 
 
- 
包的导入
导入一个包(文件夹)相当于执行了这个包下的__init__文件并不相当于把这个包下的所有文件都导入进来了
- 
要想直接导入某个包(文件夹)下的文件 - 
import as语句 1 # import glance.api.policy as policy 2 # policy.get() 
- 
from import 1 # from glance.api import policy # 直接从一个包中导入文件 2 # policy.get() 3 # from glance.api.policy import get # 直接从包的文件中导入函数名/变量名 4 # get() 
 
- 
- 
进阶:绝对导入,相对导入 - 
绝对导入:以glance作为起始 - 
当你需要写一个功能,这个功能不是直接运行的,而是被别人导入之后使用的,这种情况如果你的这个独立功能形成文件夹,文件夹内的所有文件都需要使用相对导入 
 
- 
- 
相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)在相对导入时不能执行文件 - 
但是如果我们自己开发一个项目,这个项目有一些文件是需要直接运行的,这种情况下不适合用相对导入,适合用绝对导入 
- 
 
- 
 
- 
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号