day32
软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。 软件体系结构是构建计算机软件实践的基础。与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础
1.C/S架构
C:client(客户端) S:server(服务端) 优缺点: 优势:针对客户端可以高度定制 劣势:需要用户去下载才能使用 eg: 客户端相当于是需要体验服务的客人 服务端相当于是对外提供服务的店面 手机上下载的各种app其实是各大厂家的客户端 打开app使用功能其实就是相当于是基于网络去到厂家的店里面让服务员给你提供服务!!!
2.B/S架构
B/S架构本质也是C/S架构 B:browser(浏览器) S:server(服务器) 优缺点 优势:无需下载 急速体验 劣势:无法做到高度定制 体验效果较差 eg: 让浏览器充当各个厂家的客户端 用户无需对应下载相应客户端 直接让浏览器提供服务!
目前趋势:
更加偏向于B/S架构 微信小程序 只需要下载一个微信就可以通过微信去访问很多服务端 支付宝诸多应用 只需要下载一个支付宝就可以通过支付宝体验很多服务 统一提供接口服务>>>:获取大量用户及数据 中途还可以提供广告服务
什么是网络编程
网络编程的研究前提就是基于互联网 网络编程就是基于互联网编写代码
学习网络编程的目的/结果
学习完网络编程之后就可以开发C/S架构的软件(掌握原理 使用框架)
网络编程发展史
该技术源于美国军方>>>:很多先进的技术都是由军事发明后续转为民用 当时: 军方想要实现不同计算机之间数据交互 没有网络编程技术的时候只能拿U盘拷贝并携带 为了跨区域交互数据所以发明了网络编程
早期远程通信
1.座机电话 彼此打电话需要电话线 2.大屁股电脑 数据交互需要插网线 3.智能手机 数据交互需要无限网卡 ''' 电话线 网线 无限网卡 远程通信的前提是必须具备一个物理链接介质 '''
互联网协议
不同计算机之间要想实现无障碍交互 除了需要有物理链接介质之外还需要一套公有的标准 ''' 就好比为什么不同厂家的手机零部件几乎是一样的 ''' 这个标准是>>>:互联网协议(OSI七层协议)
网络相关知识
# 1.什么是互联网? 将计算机彼此链接到一起的介质 # 2.互联网建立的目的? 基于互联网做数据交互 # 3.上网的本质 基于网线去访问其他计算机上面的资源 """其实我们的计算机也可以称之为是服务器/服务端(专门对外提供服务)"""
""" 所有的计算机在生产过程中必须有相同的部分和相同的功能 应、表、会、传、网、数、物 """ 1.应用层 2.表示层 3.会话层 4.传输层 5.网络层 6.数据链路层 7.物理链接层 上述的七层也有很多人总结为五层 1.应用层(三层) 2.传输层 3.网络层 4.数据链路层 5.物理链接层
OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程 # 物理链接层 物理链接介质,传递电信号 # 数据链路层 """ 基于物理链接层接收到一串二进制数 如何切分才能正常解析? """ 1.规定了二进制数据的分组方式 2.规定了'以太网协议' 但凡能够接入互联网的计算机都必须有一块网卡 每块网卡在出厂的时候都会被烧制一个全世界独一无二的编号 该编号是由12位16进制数组成 前六位是产商编号 后六位是流水线号 这个独一无二的编号也有一个称呼>>>:'mac地址'(类似于身份证号) ps:基于mac地址就可以实现计算机之间的数据通信了!!!
1.交换机 让接入交互机的多台计算机之间彼此互联 2.局域网 由交换机组成的网络称之为局域网(一个区域) 3.广播与单播 广播:在交换机中群发 单播:定向回复消息(记录mac地址) 4.路由器 将局域网彼此链接起来并支持数据交互 互联网其实可以看成是由多个局域网链接在一起 """ 在局域网中可以直接基于mac地址实现数据交互 但是可能会产生广播风暴:交换机中同一时间出现太多广播操作 mac地址只能用于局域网交互数据 不能跨局域网传输
# 网络层 IP协议 规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线) IP地址目前有两个版本 IPV4:点分十进制 最小:0.0.0.0 最大:255.255.255.255 # 随着社会的进步 计算机的使用越来越普遍 IPV4地址不够用 IPV6:十六进制 '''IPV6可以表示出地球上每一粒沙子''' ps:IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机 """ IP地址分为公网IP和私网IP 公网IP是可以直接被浏览器访问到的 但是私网IP是不可以的 我们所有人的电脑默认使用的都是私网IP 公网IP需要花钱购买并且需要实名认证并备案 很多非法网站都是在国外注册备案 """ # 传输层 PORT协议(端口协议) """ 一台计算机上面可以运行很多数据交互软件 比如微信、qq、钉钉 它们都是从内存中获取数据 为什么不会错乱 就是因为端口协议的存在!!! """ 用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号) 端口号的范围是:0~65535 0~1024:系统经常使用的端口号 1024~8000:常用软件端口号 我们以后在写项目的时候推荐使用8000之后的端口 1.同一时间同一台计算机上面端口号不能冲突 2.端口号是动态分配的 eg:打开微信随机分配一个没有被使用的端口号8888 关闭微信重新打开那么会随机分配可能还是8888也可能是其他 """ IP地址:用于标识全世界独一无二的一台接入互联网的计算机 PORT号:用于标识一台计算机上面的某一个应用程序 IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序 我们日常生活使用浏览器访问的各个网址其实就是IP+PORT www.baidu.com 好记 14.215.177.29:80 难记 ip:port 很多常见的服务端都不需要指定端口 只要访问了ip地址内部去会自动映射 域名解析 将好记的地址解析成真正的地址 www.baidu.com 解析 202.108.22.5:80 """ # 应用层 这里完全可以取决于程序员自己 HTTP协议 HTTPS协议 FTP协议 自定义协议
# 都属于传输层 # TCP协议 流式协议、可靠协议 基于TCP协议进行数据交互之前需要做一系列复杂的操作>>>:三次握手四次挥手 """ 三次握手建立链接 eg:彼此挖通道 四次挥手断开连接 eg:彼此切断通道 洪水攻击:服务端接收到了大量的syn请求 处于rcvd状态 控制很多台计算机同一时刻去访问服务端 造成服务端瞬间过载瘫痪 """ # UDP协议 丢包协议、不可靠协议 不需要建立双下通道 数据的传输速度快 但是可能会丢失 qq使用的就是UDP协议 所以有时候会产生数据丢失现象 但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全 """ TCP协议类似于打电话:你一句我一句 你侬我侬 UDP协议类似于发短信:发了之后不管你看不看 只要发了就行 """
题目: TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对? 描述的不够精确 不对!!! TCP协议之所以比UDP协议可靠 原因在于TCP协议发送消息有反馈机制 基于TCP发送的消息会在本地先保存该消息 如果地方确认收到才会删除 否则在一定的时间内会频繁的多次发送知道确认或者超时为止 UDP协议发送数据之后会立刻删除内存数据 不会保留