网络编程01
回顾
变量与常量
数据基本类型
内置方法
字符编码,文件操作
函数
函数参数,闭包函数,装饰器
面向对象
封装,继承,多态
- 什么是对象
- 数据与功能的集合体
- 什么是类
- 多个对象公共的数据与功能的集合体
- 什么是父类
- 多个了公共能够的数据与功能的集合体
- 对象必须要有类产生
回顾类的代码
import json
form datatime import data, datatime
class MyJsonClass(json.JSONEcoder):
def default(self, o):
if isinstance(o, datatime):
return o.strftime('%Y-%m-%s %X')
elif isinstance(o,date):
return o.strftime('%Y-%m-%d')
return super().default(o)
dic = {'t1': datemime.today(), 't2': data.today()}
res = json.dumps(dic, cls=MyJsonClass)
print(res)
1、软件开发架构
1.1、c/s架构
c/s架构
- c:cilent 服务端
- s:server 客户端
'''
将客户端看成是去店里消费的客人
将服务端看成是提供服务的店面
- eg:手机各种的app就是各种软件的客户端
服务端需要具备的三大特征:
- 24小时不间断你的提供服务(24小时监听)
- 固定的地址(IP地址,唯一标识)
- 能够服务多个用户(高并发)
'''
1.2、b/s架构
- b:brwser 浏览器
- s:server 服务器
"""
浏览器统一充当各个服务器的客户端端
本质:b/s架构本质上也是c/s架构
"""
统一(统一思想):统一接口,听雨收揽用户
- 各大互联网巨头正在做的事情
eg:微信小程序(微信提供开发微信小程序的软件)
支付宝小程序
1.3、总结
c/s架构:
- 网络编程之后就可以开发c/s架构的软件(简易版本)
b/s架构:
- 并发编程,前端,数据库,后端框架之后就可以开发b/s架构的软件(任意类型的软件)
2、网络编程概念
网络编程其实研究的就是程序之间的数据通信
由来:
- 最早是要分享本地数据,但不能通过网络传输,只能通过硬件,但相隔很远就没办法分享数据源
基于远程(网络)传输数据的技术最早诞生于M国军方(前沿技术最早运用于军方,之后转为民用)
远程数据传输发展史(民用):
- 有线电话 电话线互联
- 无线电话 信号发射器
- 大头电脑 网线
- 笔记本电脑 网卡
要想实现远程数据交互的前提是必须要有物理链接介质
处理有物理链接介质之外,还需要有一些能够保证数据彼此无障碍交互的东西(标准)
- osi七层协议
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理链路层
3、OSI七层协议
规定只要有远程交互数据都必须要有七层协议
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理链接层
开发角度也可以归纳为五层
- 应用层(应用层,表示层,会话层)
- 传输层
- 网络成
- 数据链路层
- 物理链路层
3.1、物理链路层
提供物理链接接口
- 网线,无线网卡
3.2、数据链路层
-
规定电信号的分组方式
-
以太网协议:
- 规定了计算机必须有一块网卡,并且网卡上面要由一个固定的一串数字
- 12位16进制数
- 前六位:厂商编号
后六位:流水线号
- 前六位:厂商编号
- 12位16进制数
上述数字称之为计算机的mac地址(类似于计算机的身份证号,计算机的唯一标识)
- 规定了计算机必须有一块网卡,并且网卡上面要由一个固定的一串数字
3.2.1、常见硬件
交换机:
- 能够始接入该机器所有的计算机之间彼此互联
局域网:
- 多个交换机组成的网络可以称之为局域网
路由器:
- 连接多个局域网,并实现局域网之间的数据传输
互联网:
- 简单的理解所有的局域网连接起来
mac地址:基于mac地址的数据传输
- 只能在局域网内使用
- 广播风暴
广播风暴:
- 交换机内多个请求同时发送,交换机可能会崩溃
3.3、网络层
IP协议:
- 规定接入互联网的计算机都必须有一个IP地址,用于唯一标识
- IPV4版本
- 点分十进制
最小:0.0.0.0
最大:255.255.255.255
- 点分十进制
- IPV6版本
- 能够标识出地球上每一粒沙子
- IPV4版本
IP地址能够唯一标识全世界一台独一无二的计算机
公网IP与私网IP
- 典型私网IP:192.168...。10.0...
自带的,没办法基于互联网访问 - 公网IP:需要花钱购买申请
arp协议:地址解析协议
- 通过IP地址解析出mac地址(基于网络请求)
3.4、传输层
- TCP协议
- UDP协议
- 端口协议
3.4.1、TCP协议
别名:流式协议,可靠协议
远程交互可以有协议,可以没有协议。
TCP协议远程交互
三次握手————————建立连接
- 状态(重要)
listen监听态:等待对方发送请求
syn_rcvd态:忙于恢复确认请求- 洪水攻击:服务端在用一时间接收到了大量的请求(要求建议链接的请求)
- 通过压力,通过数量,使服务器崩溃
- 洪水攻击:服务端在用一时间接收到了大量的请求(要求建议链接的请求)
四次挥手————————断开连接
- 每一步都需要执行
遵循协议可以使用协议带来的东西
面试题:
- TCP协议之所以可靠的原因在于有双向通道,对不对
错误。
原因:
- TCP协议接受数据的时候有反馈机制
反馈机制:
- 发送端发送数据之后会保留一份,接收端收到之后会给发送端反馈接收到数据,发送端就会删除保留的数据,如果接收端一直没有反馈,发送端会在一定时间内发送一定次数的数据,过时间之后就不会发送,并删除保留的数据
流式协议:
- 数据如同水流,持续不断传送
3.4.2、UDP协议
别名:不可靠协议
数据发送没有通道概念,发送出去就不管了。
好处:节省资源
坏处:可能会丢包(可以通过代码解决)
“
TCP协议相当于打电话,你一句我一句
UDP协议相当发短信,发了就完事,不管你看不看
”
3.4.3、端口协议
计算机管理应用程序就是基于端口管理
范围:0-65535
特性:动态分配
- 第一次运行某个程序,系统随机抽取一个端口号,关闭之后重新启动,系统再次随机分配一个端口号
端口号使用原则:
- 0-1024:一般系统默认需要使用
1024-8000:常用软件端口号
开发的软件使用8000之后的端口号
端口号(prot):
- 能够唯一标识计算机上面运行的一款应用程序
eg:
- 当计算机程序莫名其面运行不起来,可能是端口冲突,端口号在同一台计算机启用的程序不能相同
总结:
- IP+prot唯一标识世界上某一个接入互联网的计算机上面的某一个正在运行的应用程序
3.5、应用层
人为自定义协议标准,可遵循可不遵循
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通