软件开发架构,网络编程简介,OSI七层协议,TCP和UDP协议
软件开发架构
什么是软件开发架构
1.软件架构是一个系统的草图。
2.软件架构描述的对象是直接构成系统的抽象组件。
3.各个组件之间的连接则明确和相对细致地描述组件之间的通讯。
4.在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。
5.在面向对象领域中,组件之间的连接通常用接口来实现。
总结:软件架构是软件系统的基础结构,这个结构中包含了软件的元素,元素间的关系,元素及其关系的属性。
![](https://s1.ax1x.com/2022/04/14/L18ouQ.png)
CS架构模式
CS(Client/Server):客户端----服务器结构。C/S结构在技术上很成熟,它的主要特点是交互性
强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。因为客户端要负责绝大多数的
业务逻辑和UI展示,又称为胖客户端。它充分利用两端硬件,将任务分配到Client 和Server两端,降低了系
统的通讯开销。C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分
快,已经很难适应百台电脑以上局域网用户同时使用。
C/S 架构是一种典型的两层架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两
种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器
端的程序通过Socket与客户端的程序通信。
CS模式最大的好处就是可以相对灵活实现各种预期的功能和特效,所受的限制为系统提供的底层功能或
开发工具的限制。
CS模式最大的缺点就是大部分功能新增、界面调整、逻辑变更需要更新客户端来实现。当然,通过良好
的设计可以一定程度上实现不更新客户端来实现新功能、逻辑变更等,但相对来说在不升级客户端的情况下
对架构设计要求较高。
![](https://s1.ax1x.com/2022/04/14/L18bEn.png)
BS架构模式
BS(Browser/Server):浏览器----服务器结构,是目前应用系统的发展方向。BS是伴随着
Internet技术的兴起,对C/S架构的改进,为了区别于传统的C/S 模式,特意称为B/S模式。在这种结构下,
通过W3浏览器来进入工作界面,极少部分事务逻辑在前端(Browser)实现,主要事务逻辑在服务器端
(Server)实现,形成三层(3-tier)结构。这样使得客户端电脑负荷大大简化(因此被称为瘦客户端),
减轻了系统维护、升级的支出成本,降低了用户的总体成本(TCO)。
BS的主要特点是分布性强、维护方便、开发简单且共享性强、总体拥有成本低。但数据安全性问题、对服
务器要求过高、数据传输速度慢、软件的个性化特点明显降低,难以实现传统模式下的特殊功能要求。它是瘦
客户端,对大量的数据输入以及报表的应答等都需要通过浏览器与服务器进行交互,通信开销大,而且对于实
现复杂的应用构造有较大的困难。
BS模式产品最大的好处就是可以灵活实现逻辑变更、内容动态变更、界面布局调整等。
BS模式产品的不足是受限于实现的浏览器标记集和浏览器能力,许多特殊效果无法通过浏览器实现。虽然
可以一定程度上通过自定义开发来实现功能新增,但此种方法却丧失了BS的灵活性,而偏向于CS模式的客户端。
'''
目前的趋势其实更加偏向于B/S架构
微信小程序
只需要下载一个微信就可以通过微信去访问很多服务端
支付宝诸多应用
只需要下载一个支付宝就可以通过支付宝体验很多服务
统一提供接口服务>>>:获取大量用户及数据 中途还可以提供广告服务
'''
网络编程
简介
网络编程的本质是两个设备之间的数据交换,当然,在计算机网络中,设备主要指计算机。数据传递本身没
有多大的难度,不就是把一个设备中的数据发送给两外一个设备,然后接受另外一个设备反馈的数据。现在的
网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另外一个,然后接收另一个设备
的反馈。在网络编程中,发起连接程序,也就是发送第一次请求的程序,被称作客户端(Client),等待其他程
序连接的程序被称作服务器(Server)。客户端程序可以在需要的时候启动,而服务器为了能够时刻相应连接,
则需要一直启动。
例如以打电话为例,首先拨号的人类似于客户端,接听电话的人必须保持电话畅通类似于服务器。连接一旦
建立以后,就客户端和服务器端就可以进行数据传递了,而且两者的身份是等价的。在一些程序中,程序既
有客户端功能也有服务器端功能。
互联网协议
![](https://s1.ax1x.com/2022/04/14/L1GhI1.png)
互联网协议按照功能不同可以分为osi (开放系统互联(Open System Interconnection)) 七层或
tcp/ip五层或tcp/ip四层
物理层:
物理链接介质,接收和传递电信号(高低电平),即一堆二进制字符0111010101010
物理层无法获取具体数据内容以及分解字符串,故将电信号传给数据链路层
物理链接介质,传递电信号
数据链路层(遵循ARP协议)
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
“以太网协议”:将一组电信号称为一组数据报或者数据帧。
(1)规定一套分组的方式:
获取电信号真实数据。
电信号是一个数据报。
报头(head): 18个字节,发送者(源地址), 6个: 接收者(目标地址),6个: 数据类型6个
数据(data):电信号具体的数据(最短45个字节,最长1500字节)
(2)规定每一台电脑必须要有一个网卡(电脑插入网线的地方):
每一块网卡都会有一串世界上独一无二的数字: - 12位16进制的数字,称之为 "mac地址" : - 前6位: 产商号 - 后6位: 流水号
mac地址作用(*******): 标识全世界上一台独一无二的计算机。(类似于身份证号)
ps:基于mac地址就可以实现计算机之间的数据通信了!!!
(3)工作的方式:
单播:定向回复消息(记录mac地址)
广播:在交换机中群发
缺点:广播:只能在局域网内实现通信, 无法跨局域实现通信
网络层
规定计算机都必须有一个ip地址(取决于网线),ip协议可以跨局域网传输
ip的版本:
IPV4:
ip地址(ip协议):点分十进制的数字组成 180.101.49.11
最小范围: 0.0.0.0
最大范围: 255.255.255.255
IPV6:
'''IPV6可以表示出地球上每一粒沙子'''
ip的作用:IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机,用于表示全世界某一台计算机的
位置在局域网的位置。
总结: ip地址 + mac地址: 标识全世界某一个局域网内的,某一台计算机。
"""
IP地址分为公网IP和私网IP
公网IP是可以直接被浏览器访问到的 但是私网IP是不可以的
我们所有人的电脑默认使用的都是私网IP
公网IP需要花钱购买并且需要实名认证并备案
很多非法网站都是在国外注册备案
"""
传输层
PORT协议(端口协议)
port端口: 0~65535用来标识一台计算机之上基于网络通信的应用软件,0~1024操作系统自己用的,一般情况下8000之后的端口我们可以任意使用,8000之前的通常会有相应的程序默认使用 用于标识计算机中某一个独一无二软件。
用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号)
端口号的范围是: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
"""
TCP与UDP协议
TCP协议
tcp是如何保证以上过程的:分为三个步骤,三次握手,传输确认,四次挥手。三次握手是建立连接的过程。
三次握手:
![](https://s1.ax1x.com/2022/04/14/L1twad.png)
当客户端向服务端发起连接时,会先发一包连接请求数据,过去询问一下,能否与你建立连接?这包数据称之
为SYN包,如果对端同意连接,则回复一包SYN+ACK包,客户端收到之后,发送一包ACK包,连接建立,因
为这个过程中互相发送了三包数据,所以称之为三次握手。
为什么要三次握手而不是两次握手?
**这是为了防止,因为已失效的请求报文,突然又传到服务器,引起错误,**这是什么意思?
假设采用两次握手建立连接,客户端向服务端发送一个syn包请求建立连接,因为某些位置的原因,并没
有到达服务器,在中间某个网络节点产生了滞留,为了建立连接,客户端会重发syn包,这次的数据包正常送
达,服务端发送syn+ack之后就建立起了连接,但是第一包数据阻塞的网络突然恢复,第一包syn包又送达到
服务端,这是服务端会认为客户端又发起了一个新的连接,从而在两次握手之后进入等待数据状态,服务端认
为是两个连接,而客户端认为是一个连接,造成了状态不一致,如果在三次握手的情况下,服务端收不到最后
的ack包,自然不会认为连接建立成功,所以三次握手本质上来说就是为了解决网络信道不可靠的问题,为了
在不可靠的信道上建立起可靠的连接,经过三次握手之后,客户端和服务端都进入了数据传输状态。
数据传输:
![](https://s1.ax1x.com/2022/04/14/L1tIGq.png)
数据传输:
一包数据可能会被拆成多包发送,如何处理丢包问题,这些数据包到达的先后顺序不同,如何处理乱序问
题?针对这些问题,tcp协议为每一个连接建立了发送缓冲区,从建立链接后的第一个字节的序列号为0,后
面每个字节的序列号就会增加1,发送数据时,从数据缓冲区取一部分数据组成发送报文,在tcp协议头中会
附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ack等于接受序列号加长度,也就
是下包数据发送的起始序列号,这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到,发
送端也可以发送一次的连续的多包数据,接受端只需要回复一次ack就可以了。
四次挥手:
![](https://s1.ax1x.com/2022/04/14/L1NEod.png)
建立一个连接需要三次握手,而终止一个连接要经过四次挥手
当服务端或者客户端不想再与对方进行通信之后,双方任意一方都可以主动发起断开链接的请求,我们还
是以客户端主动发起为例
客户端由于已经没有任何需要发送给服务端的消息了,所以发起断开客户端到服务端的通道请求
服务端收到该请求后同意了 至此客户端到服务端的单项通道断开
服务端这个时候不会立刻朝客户端发器请求说那我也断开到你家的通道吧,服务端需要想想我手上还有没
有需要发送给客户端的消息,如果还有的话,那我不能立马断开,先把数据发完才能断
等服务端检查完毕之后也没有数据要发送给客户端了,这个时候就会朝客户端发起断开服务端到客户端的
通道请求
客户端同意该请求,至此四次挥手完成
挥手必须是四次,中间的两次不能合并成一次,原因就在于需要检查是否还有数据需要给对方发送
UDP协议
UDP协议 (User Datagram Protocol) : 用户数据报协议,是一个简单的面向数据报的运输层协议。
UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于
UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快,但
是对于网络传输过程中产生的丢包,udp并不能保证,所以udp在传输稳定性上要弱于tcp,所以,tcp和udp
的主要区别:tcp传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,
比如,传输文件,发送邮件,浏览网页等等,udp的优点是速度快,但是可能产生丢包,所以适用于对实时性
要求较高但是对少量丢包并没有太大要求的场景。比如:域名查询,语音通话,视屏直播等。udp还有一个
非常重要的引用场景就是隧道网络,比如:vpn,VXLAN.
"""
TCP协议类似于打电话:你一句我一句 你侬我侬
UDP协议类似于发短信:发了之后不管你看不看 只要发了就行
"""
![](https://s1.ax1x.com/2022/04/14/L1UuN9.png)
面试题
# TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
描述的不够精确 不对!!!
TCP协议之所以比UDP协议可靠 原因在于TCP协议发送消息有反馈机制
基于TCP发送的消息会在本地先保存该消息 如果地方确认收到才会删除
否则在一定的时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立刻删除内存数据 不会保留