随笔 - 54, 文章 - 0, 评论 - 4, 阅读 - 8402
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

软件开发架构,OSI七层协议(五层),TCP协议,UDP协议

Posted on   ~sang  阅读(228)  评论(0编辑  收藏  举报
复制代码
"""
对象:数据与功能的结合体
类:多个对象公共的数据与功能的结合体
父类:多个类公共的数据与功能的结合体
对象必须要由类产生!!!
"""

import json
from datetime import datetime,date

json.JSONEncoder

# 定义字典
d={'t1':str(datetime.today()),'t2':str(date.today())}
print(d) # {'t1': '2022-01-11 16:41:03.768618', 't2': '2022-01-11'}
# 序列化
res=json.dumps(d)
print(res)  # {"t1": "2022-01-11 16:41:03.768618", "t2": "2022-01-11"}
"""
时间类型默认不支持json序列化
方式1:人工智能转换    str()
方式2:面向对象之继承

对象查找属性和方法的时候一定要遵循一个顺序
    先从对象自身查找 再去产生该对象的类中查找 最后去类的父类中查找
"""

import json
from datetime import datetime,date

class MyJsonClass(json.JSONEncoder):
    def default(self, o):
        if isinstance(o,datetime):
            return o.strftime('%Y-%m-%d %X')
        elif isinstance(o,date):
            return o.strftime('%Y-%m-%d')
        return super().default(o)   # 调用父类的方法

# 定义字典
d={'t1':datetime.today(),'t2':date.today()}

# 序列化
res=json.dumps(d,cls=MyJsonClass)
print(res)  # {"t1": "2022-01-11 18:57:45", "t2": "2022-01-11"}
复制代码

一、软件开发架构

  c/s架构(客户端,服务端)

    将客户端看成是去店里消费的客人,将服务端看成是提供服务的店面

    eg:收集各种app其实就是各大软件的客户端

  服务端需要具备的三大特征

    1.24小时不间断提供服务(24小时监听)

    2.固定的地址(IP地址)

    3.能够服务多个用户(高并发)

  b/s架构(浏览器,服务器)

    浏览器统一充当各个服务端的客户端,本质:bs架构本质上也是cs架构

  # 网络编程其实研究的就是程序之间的数据通信

  # 要想实现远程数据交互的前提是必须要有物理连接介质

  # 除了有物理连接介质之外还应该有一些能够保证数据彼此无障碍交互的东西(标准) OSI七层协议

二、OSI七层协议

  # 所有的计算机都必须要有这七层

  # 开发层面可以归纳为五层

    应用层

    传输层

    网络层

    数据链路层

    物理连接层

复制代码
"""
从小往上研究

1.物理连接层
    提供一个物理连接接口(网线口 无线网卡)
2.数据链路层
    1.规定了电信号的分组方式
    2.以太网协议
        规定了计算机必须有一块网卡 并且网卡上面要有一个固定的一串数字
        12位16进制数 
            前六位:产商编号
            后六位:流水线号
        上述的数字也称之为计算机的mac地址(类似于身份证号)
"""
复制代码

·常见硬件

复制代码
交换机:能够使接入该机器的所有计算机之间彼此互联
局域网:有交换机组成的网络
互联网:可以简单的理解为是多个局域网之间彼此互联
"""
基于mac地址的数据传输
    1.广播风暴
    2.mac地址不能跨局域网传输
"""
路由器:能够连接多个局域网并实现局域网之间的数据传输
复制代码

2.1、网络层

复制代码
IP协议:规定了接入互联网的计算机都必须有一个IP地址用于唯一标识
    IPV4版本
        最小    0.0.0.0
        最大  255.255.255.255
    IPV6版本
        能够表示出地球上每一粒沙子
 
# IP地址能够唯一标识接入互联网的一台独一无二的计算机
公网IP与私网IP
    公网IP需要花钱购买并申请
    私网IP自带的但是无法直接基于互联网访问
"""
arp协议
    将IP地址转换成mac地址(基于网络请求)
"""
复制代码

2.2、传输层

复制代码
端口协议
    范围:0~65535
    特性:动态分配
        eg:第一次运行微信 系统随机取一个端口号2022
           然后关闭微信重新启动 系统随机取一个端口号
    端口号基本使用
        0~1024系统默认需要使用的端口号
        1024~8000常见软件端口号
        以后我们开发的软件最后使用8000之后的端口号
    
# 端口号(port):能够唯一标识一台计算机上面正在运行的一款应用程序
"""
端口号在同一台计算机同一时刻不能重复
"""


总结
    ip+port   127.0.0.1:8080
"""
能够唯一标识世界上某一台接入互联网的计算机上面的某一个正在运行的应用程序
"""
复制代码

2.3、应用层

  都是人为自定义的协议标准,可遵循可不遵循

  HTTP协议、FTP协议 ...

三、TCP协议

复制代码
流式协议 可靠协议

三次握手    建立链接
    重要状态
        listen监听态:等待对方发请求
        syn_rcvd态:忙于恢复确认建立请求
            # 洪水攻击:服务端在同一时间接收到了大量的要求建立链接的请求

四次挥手    断开链接
    不能合并成三次
复制代码

四、UDP协议

复制代码
不可靠协议

数据发送没有通道的概念 发送出去了就不管了

"""
TCP协议相当于打电话 你一句我一句 你侬我侬
UDP协议相当于发短信 发了就完事 管你看不看
"""
早期的QQ使用的就是UDP
复制代码
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示