今日内容详细

软件开发架构

概念

软件开发架构即程序员在编写软件的时候应该遵循的架构设计

我们了解的涉及到两个程序之间通讯的应用大致可以分为两种:

第一种是应用类: qq、微信、网盘、优酷这一类是属于需要安装的桌面应用

第二种是web类: 比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用

这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构~

软件开发架构的分类

C/S架构

# C : Client(客户端)
# S : Server(服务端)
# C/S即:Client与Server,中文意思:客户端与服务器端架构
# 这种架构是从用户层面(也可以是物理层面)来划分的。
这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。

B/S架构

# B : browser(浏览器)
# S : server(服务器)
# B/S即:Browser与Server,中文意思:浏览器端与服务器端架构
# 这种架构是从用户层面来划分的。
Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。 '''
B/S架构本质也是C/S架构,只不过端口是浏览器
'''

两种架构的优缺点

C/S架构:

优势:针对客户端,功能全面
劣势:必须用户下载才能使用

B/S架构:

优势:无需下载,可以直接使用浏览器
劣势:客户能够使用的功能很少

tip

 	'''
目前的趋势其实更加偏向于B/S架构
微信小程序
只需要下载一个微信就可以通过微信去访问很多服务端
支付宝诸多应用
只需要下载一个支付宝就可以通过支付宝体验很多服务
统一提供接口服务>>>:获取大量用户及数据 中途还可以提供广告服务
'''

网络编程

概念

# 基于互联网编写代码,基于网络跨区传输信息
# 最先源于美军研发使用后转向民用 # 远程通信的前提是必须具备一个物理链接介质,如 电话线 网线 无限网卡

通过掌握网络编程知识开发C/S架构的软件

互联网

# 什么是互联网
将计算机彼此链接到一起的介质。 # 互联网建立的目的
基于互联网进行数据交互。 # 上网的本质
基于网线去访问其他计算机上面的资源

我们的计算机也可以称之为是服务器/服务端(专门对外提供服务)

互联网协议

不同计算机之间要想实现无障碍交互,除了需要有物理链接介质之外还需要一套公有的标准
# 这个标准是>>>:互联网协议(OSI七层协议)

OSI七层协议简介

所有的计算机在生产过程中必须有相同的部分和相同的功能。分为应、表、会、传、网、数、物,分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理链接层。

上述的七层也有很多人总结为五层,应用层(三层)、传输层、网络层、数据链路层、物理链接层。

专业设施名词

1.交换机
让接入交互机的多台计算机之间彼此互联
2.局域网
由交换机组成的网络称之为局域网(一个区域)
3.广播与单播
广播:在交换机中群发
单播:定向回复消息(记录mac地址)
4.路由器
将局域网彼此链接起来并支持数据交互
互联网其实可以看成是由多个局域网链接在一起
"""
在局域网中可以直接基于mac地址实现数据交互
但是可能会产生广播风暴:交换机中同一时间出现太多广播操作
mac地址只能用于局域网交互数据,不能跨局域网传输
"""

OSI七层协议

OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程

物理链接层

物理链接介质,传递电信号

数据链路层

遵循ARP协议

地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。

# 基于物理链接层接收到一串二进制数据,规定二进制数据的分组方式
# 规定了'以太网协议',但凡能够接入互联网的计算机都必须有一块网卡,每块网卡在出厂的时候都会被烧制一个全世界独一无二的编号,该编号是由12位16进制数组成,前六位是产商编号,后六位是流水线号 ''' “以太网协议”:将一组电信号称为一组数据报或者数据帧。 ''' 这个独一无二的编号也有一个称呼>>>:'mac地址'(类似于身份证号)
工作的方式
# 单播:定向回复消息(记录mac地址)

# 广播:在交换机中群发

缺点:广播:只能在局域网内实现通信, 无法跨局域实现通信

基于mac地址就可以实现计算机之间的数据通信

网络层

IP协议

规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线)

IP地址目前有两个版本:

# IPV4:点分十进制
最小:0.0.0.0
最大:255.255.255.255
随着社会的进步,计算机的使用越来越普遍,IPV4地址不够用 # IPV6:十六进制
IPV6可以表示出地球上每一粒沙子,用于表示计算机绰绰有余。

IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机

公网 IP 和私网 IP
公网 IP 是可以直接被浏览器访问到的,但是私网 IP 是不可以的,我们所有人的电脑默认使用的都是私网 IP ,公网 IP 需要花钱购买并且需要实名认证并备案,很多非法网站都是在国外注册备案。

传输层

PORT协议(端口协议)

一台计算机上面可以运行很多数据交互软件,它们都是从内存中获取数据,为什么不会错乱,就是因为端口协议的存在。

用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号)

端口号的范围是: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与UDP协议

都属于传输层

TCP协议

面向链接

# 流式协议、可靠协议
基于TCP协议进行数据交互之前需要做一系列复杂的操作>>>:
三次握手,传输确认,四次挥手 三次握手是建立连接的过程,四次挥手断开连接.
# 挥手必须是四次,中间的两次不能合并成一次,原因就在于需要检查是否还有数据需要给对方发送 # 洪水攻击:服务端接收到了大量的syn请求 处于rcvd状态
控制很多台计算机同一时刻去访问服务端 造成服务端瞬间过载瘫痪
通道的建立——三次握手
1)在建立通道时,客户端首先要向服务端发送一个SYN同步信号。

2)服务端在接收到这个信号之后会向客户端发出SYN同步信号和ACK确认信号。

3)当服务端的ACK和SYN到达客户端后,客户端与服务端之间的这个“通道”就会被建立起来。

传输确认
tcp协议为每一个连接建立了发送缓冲区,从建立链接后的第一个字节的序列号为0,后面每个字节的序列号就会增加1。发送数据时,从数据缓冲区取一部分数据组成发送报文,在tcp协议头中会附带序列号和长度,接收端在收到数据后需要回复确认报文,确认报文中的ack等于接受序列号加长度,也就是下包数据发送的起始序列号,这样一问一答的发送方式,能够使发送端确认发送的数据已经被对方收到,发送端也可以发送一次的连续的多包数据,接受端只需要回复一次ack就可以了。

通道的关闭——四次挥手
1)在数据传输完毕之后,客户端会向服务端发出一个FIN终止信号。

2)服务端在收到这个信号之后会向客户端发出一个ACK确认信号。

3)如果服务端此后也没有数据发给客户端时服务端会向客户端发送一个FIN终止信号。

4)客户端在收到这个信号之后会回复一个确认信号,在服务端接收到这个信号之后,服务端与客户端的通道也就关闭了。

UDP协议

无连接

# 丢包协议、不可靠协议
不需要建立双下通道,数据的传输速度快,但是可能会丢失
eg: qq使用的就是UDP协议 所以有时候会产生数据丢失现象 但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全 # udp还有一个非常重要的引用场景就是隧道网络,比如:vpn,VXLAN.

区别

# tcp传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,需要准确无误的传输给对方,比如,传输文件,发送邮件,浏览网页等等

# udp的优点是速度快,但是可能产生丢包,所以适用于对实时性要求较高但是对少量丢包并没有太大要求的场景。比如:域名查询,语音通话,视屏直播等

小总结

"""
IP地址:用于标识全世界独一无二的一台接入互联网的计算机
PORT号:用于标识一台计算机上面的某一个应用程序 IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序 TCP协议类似于打电话:在正式通信前必须要与对方建立起连接,你一句我一句
UDP协议类似于发短信:在正式通信前不必与对方先建立连接,不管对方状态就直接发送。
"""

面试题

# TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
描述的不够精确 不对
TCP协议之所以比UDP协议可靠,原因在于TCP协议发送消息有反馈机制
基于TCP发送的消息会在本地先保存该消息,如果地方确认收到才会删除,否则在一定的时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立刻删除内存数据,不会保留

python学习-Day32的更多相关文章

  1. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  2. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  3. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  4. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

  5. python学习笔记-python程序运行

    小白初学python,写下自己的一些想法.大神请忽略. 安装python编辑器,并配置环境(见http://www.cnblogs.com/lynn-li/p/5885001.html中 python ...

  6. Python学习记录day6

    title: Python学习记录day6 tags: python author: Chinge Yang date: 2016-12-03 --- Python学习记录day6 @(学习)[pyt ...

  7. Python学习记录day5

    title: Python学习记录day5 tags: python author: Chinge Yang date: 2016-11-26 --- 1.多层装饰器 多层装饰器的原理是,装饰器装饰函 ...

  8. [Python] 学习资料汇总

    Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大且完善的通用型语言,已经有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用 ...

  9. Python学习之路【目录】

    本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! 目录: Python学习[第一篇]python简介 Python学习[第二篇]p ...

随机推荐

  1. java == 和 equals

  2. 什么是GUI?

    图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面.图形用户界面是一种人与计算机通信的界面显示格式,允许用户使用鼠 ...

  3. 如何在不使用BasePACKAGE过滤器的情况下排除程序包?

    过滤程序包的方法不尽相同.但是弹簧启动提供了一个更复杂的选项,可以在不接触组件扫描的情况下实现这一点. 在使用注释@ SpringBootApplication时,可以使用排除属性. 请参阅下面的代码 ...

  4. Kafka 的高可靠性是怎么实现的?

    可以参见我这篇文章:Kafka 是如何保证数据可靠性和一致性

  5. java-設計模式-抽象工場模式

    抽象工廠模式AbstractFactory 一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类. 工廠方法模式中考虑的是一类产品的生产,如畜牧场只养动物.电视机厂只生产电视机,同种类 ...

  6. 如何获取所有的参数名和参数值?用request.getParameterNames(); Enumeration enu=request.getParameterNames(); while(enu.hasMoreElements()){ String paraName=(String)enu.nextElement(); System.out.println(paraName+"

    用request.getParameterNames();  Enumeration enu=request.getParameterNames();  while(enu.hasMoreElemen ...

  7. vulnhub靶机djinn:1渗透笔记

    djinn:1渗透笔记 靶机下载地址:https://www.vulnhub.com/entry/djinn-1,397/ 信息收集 首先我们嘚确保一点,kali机和靶机处于同一网段,查看kali i ...

  8. 用一个文件,实现迷你 Web 框架

    当下网络就如同空气一样在我们的周围,它以无数种方式改变着我们的生活,但要说网络的核心技术变化甚微. 随着开源文化的蓬勃发展,诞生了诸多优秀的开源 Web 框架,让我们的开发变得轻松.但同时也让我们不敢 ...

  9. python模块 | 时间处理模块—datetime模块

    在python中,与时间处理相关的模块有 time,datetime,calendar. 时间的两个概念: UTC(世界协调时): 整个地球分为二十四时区,每个时区都有自己的本地时间.格林威治天文时间 ...

  10. 删除html标签或标签属性以及样式

    JavaScript module for stripping HTML tags and/or HTML element attributes from strings. 安装 npm instal ...