软件开发架构即程序员在编写软件的时候应该遵循的架构设计
我们了解的涉及到两个程序之间通讯的应用大致可以分为两种:
第一种是应用类: qq、微信、网盘、优酷这一类是属于需要安装的桌面应用
第二种是web类: 比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用
这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构~
# C : Client(客户端) # S : Server(服务端) # C/S即:Client与Server,中文意思:客户端与服务器端架构 # 这种架构是从用户层面(也可以是物理层面)来划分的。 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。
# B : browser(浏览器) # S : server(服务器) # B/S即:Browser与Server,中文意思:浏览器端与服务器端架构 # 这种架构是从用户层面来划分的。 Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。 ''' B/S架构本质也是C/S架构,只不过端口是浏览器 '''
优势:针对客户端,功能全面 劣势:必须用户下载才能使用
优势:无需下载,可以直接使用浏览器 劣势:客户能够使用的功能很少
''' 目前的趋势其实更加偏向于B/S架构 微信小程序 只需要下载一个微信就可以通过微信去访问很多服务端 支付宝诸多应用 只需要下载一个支付宝就可以通过支付宝体验很多服务 统一提供接口服务>>>:获取大量用户及数据 中途还可以提供广告服务 '''
# 基于互联网编写代码,基于网络跨区传输信息 # 最先源于美军研发使用后转向民用 # 远程通信的前提是必须具备一个物理链接介质,如 电话线 网线 无限网卡
通过掌握网络编程知识开发C/S架构的软件
# 什么是互联网 将计算机彼此链接到一起的介质。 # 互联网建立的目的 基于互联网进行数据交互。 # 上网的本质 基于网线去访问其他计算机上面的资源
我们的计算机也可以称之为是服务器/服务端(专门对外提供服务)
不同计算机之间要想实现无障碍交互,除了需要有物理链接介质之外还需要一套公有的标准 # 这个标准是>>>:互联网协议(OSI七层协议)
所有的计算机在生产过程中必须有相同的部分和相同的功能。分为应、表、会、传、网、数、物,分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理链接层。
上述的七层也有很多人总结为五层,应用层(三层)、传输层、网络层、数据链路层、物理链接层。
1.交换机 让接入交互机的多台计算机之间彼此互联 2.局域网 由交换机组成的网络称之为局域网(一个区域) 3.广播与单播 广播:在交换机中群发 单播:定向回复消息(记录mac地址) 4.路由器 将局域网彼此链接起来并支持数据交互 互联网其实可以看成是由多个局域网链接在一起 """ 在局域网中可以直接基于mac地址实现数据交互 但是可能会产生广播风暴:交换机中同一时间出现太多广播操作 mac地址只能用于局域网交互数据,不能跨局域网传输 """
OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程
物理链接介质,传递电信号
遵循ARP协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
# 基于物理链接层接收到一串二进制数据,规定二进制数据的分组方式 # 规定了'以太网协议',但凡能够接入互联网的计算机都必须有一块网卡,每块网卡在出厂的时候都会被烧制一个全世界独一无二的编号,该编号是由12位16进制数组成,前六位是产商编号,后六位是流水线号 ''' “以太网协议”:将一组电信号称为一组数据报或者数据帧。 ''' 这个独一无二的编号也有一个称呼>>>:'mac地址'(类似于身份证号)
# 单播:定向回复消息(记录mac地址) # 广播:在交换机中群发 缺点:广播:只能在局域网内实现通信, 无法跨局域实现通信
基于mac地址就可以实现计算机之间的数据通信
规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线)
IP地址目前有两个版本:
# IPV4:点分十进制 最小:0.0.0.0 最大:255.255.255.255 随着社会的进步,计算机的使用越来越普遍,IPV4地址不够用 # IPV6:十六进制 IPV6可以表示出地球上每一粒沙子,用于表示计算机绰绰有余。
IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机
公网 IP 是可以直接被浏览器访问到的,但是私网 IP 是不可以的,我们所有人的电脑默认使用的都是私网 IP ,公网 IP 需要花钱购买并且需要实名认证并备案,很多非法网站都是在国外注册备案。
一台计算机上面可以运行很多数据交互软件,它们都是从内存中获取数据,为什么不会错乱,就是因为端口协议的存在。
用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号)
端口号的范围是:0~65535 0~1024:系统经常使用的端口号 1024~8000:常用软件端口号 我们以后在写项目的时候推荐使用8000之后的端口 1.同一时间同一台计算机上面端口号不能冲突 2.端口号是动态分配的 eg:打开微信随机分配一个没有被使用的端口号8888 关闭微信重新打开那么会随机分配可能还是8888也可能是其他
很多常见的服务端都不需要指定端口 只要访问了ip地址内部去会自动映射
""" IP地址:用于标识全世界独一无二的一台接入互联网的计算机 PORT号:用于标识一台计算机上面的某一个应用程序 IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序 """ # 我们日常生活使用浏览器访问的各个网址其实就是IP+PORT
将好记的地址解析成真正的地址
www.baidu.com 解析 202.108.22.5:80
这里完全可以取决于程序员自己 # HTTP协议 HTTPS协议 FTP协议 自定义协议
都属于传输层
面向链接
# 流式协议、可靠协议 基于TCP协议进行数据交互之前需要做一系列复杂的操作>>>: 三次握手,传输确认,四次挥手 三次握手是建立连接的过程,四次挥手断开连接. # 挥手必须是四次,中间的两次不能合并成一次,原因就在于需要检查是否还有数据需要给对方发送 # 洪水攻击:服务端接收到了大量的syn请求 处于rcvd状态 控制很多台计算机同一时刻去访问服务端 造成服务端瞬间过载瘫痪
1)在建立通道时,客户端首先要向服务端发送一个SYN同步信号。 2)服务端在接收到这个信号之后会向客户端发出SYN同步信号和ACK确认信号。 3)当服务端的ACK和SYN到达客户端后,客户端与服务端之间的这个“通道”就会被建立起来。
tcp协议为每一个连接建立了发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1。发送数据时,从数据缓冲区取一部分数据组成发送报文,在tcp协议头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ack等于接受序列号加长度,也就是下包数据发送的起始序列号,这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到,发送端也可以发送一次的连续的多包数据,接受端只需要回复一次ack就可以了。
1)在数据传输完毕之后,客户端会向服务端发出一个FIN终止信号。 2)服务端在收到这个信号之后会向客户端发出一个ACK确认信号。 3)如果服务端此后也没有数据发给客户端时服务端会向客户端发送一个FIN终止信号。 4)客户端在收到这个信号之后会回复一个确认信号,在服务端接收到这个信号之后,服务端与客户端的通道也就关闭了。
无连接
# 丢包协议、不可靠协议 不需要建立双下通道,数据的传输速度快,但是可能会丢失 eg: qq使用的就是UDP协议 所以有时候会产生数据丢失现象 但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全 # udp还有一个非常重要的引用场景就是隧道网络,比如:vpn,VXLAN.
# tcp传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件,浏览网页等等 # udp的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高但是对少量丢包并没有太大要求的场景。比如:域名查询,语音通话,视屏直播等
""" IP地址:用于标识全世界独一无二的一台接入互联网的计算机 PORT号:用于标识一台计算机上面的某一个应用程序 IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序 TCP协议类似于打电话:在正式通信前必须要与对方建立起连接,你一句我一句 UDP协议类似于发短信:在正式通信前不必与对方先建立连接,不管对方状态就直接发送。 """
# TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对? 描述的不够精确 不对 TCP协议之所以比UDP协议可靠,原因在于TCP协议发送消息有反馈机制 基于TCP发送的消息会在本地先保存该消息,如果地方确认收到才会删除,否则在一定的时间内会频繁的多次发送知道确认或者超时为止 UDP协议发送数据之后会立刻删除内存数据,不会保留