软件开发架构

发布时间 2023-10-13 21:50:36作者: 无聊闲作

软件开发架构

网络编程:我们要编写一款基于网络传输的软件,你现在写的项目都不是基于网络的,比如ATM

# 举个案例:
"""
	我们现在以ATM为例,你现在写的ATM别人是不能够访问的,只能你自己用,但是,这不是目的,目的是我们要写一款ATM,然后让所有人都能够访问.
	
	如果想让别人下载使用我们的软件,我们需要开发一款客户端,然后让用户在自己的电脑上下载这个客户端就能用了,还需要有一个服务端,比如,以ATM为例,用户下载客户端之后,用户需要输入用户名和密码登录,然后把用户名和密码提交到服务端做校验,提交到的地方就是服务端
"""
client																server
客户端--------------------------网络传输-----------------------------------服务端
我们通常称为这种架构为C/S架构

客户端服务端是存在一定的问题的:
	# 当我们需要下载大量的软件的时候,会占用大量的资源,其次,就是使用起来不方便,因此,这个时候,就有人站出来开发了浏览器,那么,这个浏览器其实也是一个客户端,浏览器它是一个万能客户端,超级客户端

browser																server
浏览器(客户端)-----------------------网络传输-------------------------------服务端
我们通常称为这种架构为B/S架构
"""本质上B/S架构也是C/S架构!!!"""

# 当下我们使用的软件架构模式是二者兼有!
"""很多的公司开发的软件都是小程序(微信), 为了转换更加容易一些"""

# 扩展一个知识点
服务端的特征:
	1. 24小时不间断对外提供服务
    2. 服务端要有一个公网IP(服务器部署、它就是另外一台计算机,系统:Linux系统, centos、乌班图等)
    3. 常见的服务器:阿里云、腾讯云、百度云、华为云等

osi七层协议

1. 什么是网络? 什么是上网?
	# 上网其实就是上传和下载数据的过程
    背景:
    	在早期的时候,其实世界范围内的计算机是不能够互相通信的,当时的计算只是在'局域网'中通信,后来呢,世界范围内的计算机也通信了,在广域网中通信,这就是互联网.
    
	网络的组成:物理链接设备(路由器、交换器、网线等) + 计算机界的英语(互联网通信协议)
    
2. 互联网通信协议(osi七层协议)
	# 互联网的本质就是一系列的网络协议,这个协议就叫OSI协议(一系列协议),按照功能不同,分工不同,人为的分层七层。实际上这个七层是不存在的。没有这七层的概念,只是人为的划分而已。区分出来的目的只是让你明白哪一层是干什么用的。
    
   """协议是干什么的,协议就是标准。"""
七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
五层划分为:应用层、传输层、网络层、数据链路层、物理层。
四层划分为:应用层、传输层、网络层、网络接口层

"""物理层"""
	它是专门用来发送高低电频的,其实就是01二进制 (0101010)101010101111010(1010)0101(01)
    # 物理层单纯的发送电频是没有任何的意义的,因为不知道发送的电频什么意思,所以,需要对发送的电频进行分组,但是呢,物理层做不了分组
"""数据链路层"""
	它就是专门用来对物理层发送过来的数据进行分组的,该层使用的以太网协议ethernet
    一组电信号构成一个数据报,叫做帧,或者叫数据帧,数据帧的组成:报头head和数据data两部分
    ● head包含:(固定18个字节)
      ○ 发送者/源地址,6个字节
      ○ 接收者/目标地址,6个字节
      ○ 数据类型,6个字节
    # 数据报的具体内容:head长度+data长度=最短64字节,最长1518字节,超过最大限制就分片发送
   

	Mac地址:
    	以太网协议规定,每一个接入互联网的设备都必须要有一个网卡,发送端和接收端的地址便是指网卡的地址,即Mac地址
        
        Mac地址:每块网卡出厂时都被烧制上一个世界唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号。
    # 通过一个Mac地址能不能确定局域网中得唯一一台计算机? 能确定
    
"""网络层"""
	该层使用的是IP协议,规定每一个接入互联网的计算机都必须要有一个IP地址,网络层中的数据我们称为是数据包,IP地址的组成格式
    分类:IPv4、IPv6, 目前大多数用的都是IPv4,由于IPv4地址即将耗尽,所以,其他场景开始使用IPv6了
    IPv4:
    0.0.0.0------------------------------------->255.255.255.255
00000000.00000000.00000000.00000000    ---------->    11111111.11111111.11111111.11111111
	
    192.168开头的地址基本上都是局域网中得ip地址
    公网ip:需要购买的,阿里云、腾讯云的,人家或给你一个公网ip地址,固定的,不会变。172.0.1.200
    内网ip:192.168开头的地址基本上都是局域网中得ip地址
    
	IPv6:十六进制表示法
    """
    	如何查看自己的IP地址:
    		windows: cmd----->ipconfig
    		linux(macOS): ifconfig
    """
    # 其实通过一个IP地址它是可以定位唯一一个局域网
    """IP+Mac地址确定世界范围内的唯一一台计算机? 是的"""
    但是我们知道,现在只需要一个IP地址就能够确定唯一一台计算机,那是因为:arp协议的玩意儿,它能够通过你的IP地址计算出Mac地址,归根结底还是:IP+Mac地址
    
    记忆:本地回环地址:127.0.0.1(你自己的电脑)
    192.168.1.252 127.0.0.1  localhost (这两个有时候会有区别)
 

"""传输层"""
	该层使用的是TCP协议或者是UDP协议,暂且忽略. 它也称之为是端口协议,一个端口可以代码一个应用程序
端口的范围:0-65535
     """
     	1. 0-1024之间的端口号都是系统自己使用的
     	2. 1024-8000之间的端口号一般是常用软件的端口号
     		MySQL:3306
     		Django:8000
     		flask:5000
     		...
    	3. 我们自己开发的软件,端口一般选择8000之后的到65535
     """
同一个端口号只能够表示一个正在运行的应用程序,端口号不能够冲突,但是,软件一旦关闭,就会释放出来占用的端口号,别的应用程序就能够使用了.
	
    常用软件的端口号:
    	应用程序	FTP	 TFTP	TELNET	SMTP   DNS	   HTTP		SSH			MYSQL
		熟知端口	21,20 69	23		25	   53	  80	   22		    3306
		传输层协议	TCP	UDP	    TCP		TCP		UDP	  TCP	  TCP			TCP
        
"""应用层"""
Application App
    该层就是离用户最近的一层,比如,微信、QQ、腾讯会议、pycharm等都是一个一个的应用,他们都在应用层
    
    1. 客户端:你想使用什么协议都行,自己开发的软件,协议你自己选择
    2. 浏览器:你就不能够随便使用了,就要安装浏览器规定的协议使用,而浏览器使用的协议恰好事HTTP协议
    3. Https协议
    	HTTP协议 HTTPS协议
        https://www.baidu.com/
        协议://域名/v1/v2?参数
        https://www.baidu.com/s?wd=%E7%BE%8E%E5%A5%B3
        
        """
        	HTTP协议
        		1. 是明文传输数据
        		2. 不安全
       		HTTPS协议
       			1. 是密文传输数据
       			2. 安全
       		https = http + ssl证书(它是需要申请的,国际机构,公钥、私钥等)
       		nginx服务器:配置文件,需要在配置文件中配置一些东西,就能够把你的http改成https
        """
   域名解析:
		DNS服务器它就是用来解析域名的,域名的本质其实就是IP地址,域名比IP地址好记,最终还是需要把域名解析成IP地址
         baidu.com				110.242.68.66
   域名的解析过程:
		1. 首先会先从本地开始解析hosts文件
    	2. 会去对应平台的域名关系表中取查询

TCP协议和UDP协议

客户端    服务端
"""客户端要想给服务端发送消息,肯定需要建立链接"""
tcp协议它也称为是可靠协议(三次握手), 流式协议(发送数据可以分多次发送 100M数据  10M 10次)
三次握手--------------------> 建立链接


四次挥手---------------------> 断开链接
"""一定是客户端先给服务端发送消息,然后,服务端给客户端做返回信息"""
# 有个个例,服务端可以先给客户端发送消息,需要使用websocket协议,一般用在即时通信软件
客服系统、微信、QQ等都是

客户端可以是多个的,服务端(饭店)只有一个

面试题:
	1. TCP协议的可靠性,是因为建立了双向通道?
    		不是。是因为TCP协议的反馈机制
    2. 四次挥手能不能省略为三次挥手?
  
UDP协议:
	它不可靠、是因为它不建立链接,没有三次握手、四次挥手
     速度快
远程控制