标签:架构 32 编程 网络 连接 发送 day 服务端 客户端
今日内容概要
今天我们是我们 python基础结束的一天、、、
迎来了新的内容,不知不觉过得好快、、、
今日内容详细
软件开发架构
首先要知道什么是软件开发架构呢?、、
程序员在编写软件的时候应该遵循的架构设计
那什么是架构设计呢
从业务方面来讲,为了让业务能够更好,更平滑的落地,同时具有一定的扩展性。
从团队内部来讲,架构设计的过程就是共识达成的过程,最终能够让团队高效的并行
软件架构的分类、
也是今天刚学到的一些知识
1.C/S架构和2.B/S架构
说先说一下c/s架构
1. C/S架构及其背景
C:client(客户端)
S:server(服务端)
C/S架构是一种比较早的软件架构,主要应用于局域网内。。
C/S架构软件(即客户机/服务器模式)分为客户机和服务器两层:第一层是在客户机系统上结合了表示与业务逻辑,第二层是通过网络结合了数据库服务器。简单的说就是第一层是用户表示层,第二层是数据库层。客户端和服务器直接相连,这两个组成部分都承担着重要的角色。
"""
类比学习:
客户端相当于是需要体验服务的客人
服务端相当于是对外提供服务的店面
我们手机上下载的各种app其实是各大厂家的客户端
打开app使用功能的时候其实就是相当于是基于网络去到厂家的店里面让 服务员给你提供服务!!!
2.B/S架构
B:browser(浏览器)
S:server(服务器)
1. B/S架构及其背景
随着Internet和WWW的流行,以往的主机/终端和C/S都无法满足当前的全球网络开放、互连、信息随处可见和信息共享的新要求,于是就出现了B/S型模式,即浏览器/服务器结构。B/S架构本质也是C/S架构 它是C/S架构的一种改进,可以说属于三层C/S架构。主要是利用了不断成熟的WWW浏览器技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本,是一种全新的软件系统构造技术。让浏览器充当各个厂家的客户端 用户无需对应下载相应客户端
两大架构的优缺点
C/S 可以看做是胖客户端架构
因为客户端需要实现绝大多数的业务逻辑和界面展示。作为客户端的部分需要承受很大的压力,因为显示逻辑和事务处理都包含在其中,
B/S 可以看做是瘦客户端架构
B/S架构中,显示逻辑交给了Web浏览器,事务处理逻辑在放在了WebApp上,这样就避免了庞大的胖客户端,减少了客户端的压力。因为客户端包含的逻辑很少,因此也被成为瘦客户端。
C/S 优点和缺点:
优点:针对客户端可以高度定制
由于只有一层交互,因此响应速度较快。
缺点:需要用户去下载才能使用, 用户群固定。由于程序需要安装才可使用,因此不适合面向一些不可知的用户, 维护成本高。发生一次升级,则所有客户端的程序都需要改变。
b/S 优点和缺点
优点:(1)客户端无需安装,有Web浏览器即可 (2)BS架构可以直接放在广域网上,通过一定的权限控制实现多客户访问的目的,交互性较强
缺点:在速度和安全性上需要花费巨大的设计成本,这是BS架构的最大问题 ,无法做到高度定制 体验效果较差
'''
目前的趋势其实更加偏向于B/S架构
微信小程序
只需要下载一个微信就可以通过微信去访问很多服务端
支付宝诸多应用
只需要下载一个支付宝就可以通过支付宝体验很多服务
统一提供接口服务>>>:获取大量用户及数据 中途还可以提供广告服务
'''
网络编程简介
对于我这种初学者来说,或者没有接触过网络编程的程序员,会觉得网络编程涉及的知识很高深,很难,其实这是一种误解,前辈们说:当你的语法熟悉以后,其实基本的网络编程现在已经被实现的异常简单了
网络编程发展史
回顾历史任何先进的技术最早都来源与军事,该技术源于美国军方简单的额概括
实际应用:
军方想要实现不同计算机之间数据交互
没有网络编程技术的时候只能拿U盘拷贝并携带
为了跨区域交互数据所以发明了网络编程
# 早期远程通信
1:早期的电话: 通过电话线来实现通信
2:早期的大型计算机: 通过网线连接
3:如今的笔记本电脑,无线电话 网线 网卡
# 互联网协议
想要实现远程无障碍通信第一个需要具备的条件是:物理连接介质,还需要一套公共的标准和协议规范
什么是网络编程
网络编程从大的方面就是说对信息的发送接收。
网络编程的研究前提就是基于互联网 网络编程就是基于互联网编写代码 ,网络编程从大的方面就是说对信息的发送接收。
# 学习网络编程的目的/结果
学习完网络编程之后就可以开发C/S架构的软件(掌握原理 使用框架)
OSI七层协议简介
OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程
OSI七层协议简介分别是
应用层 表示层 回话层 传输层 网络层 数据链路层 物理连接层
也可以加OSI五层协议: 应用层 传输层 网络层 数据链路层 物理连接层
物理连接层
物理链接层
物理链接介质,建立、维护、断开物理连接。(由底层网络定义协议)
基于电信号传输0101010101二进制数据
数据链路层:
(1):规定的电信号的分组方式
(2):规定了任何一台接入互联网的计算机都必须有一块网卡,每一块网卡上面都刻有世界上独一无二的编号
满足以上条件的合称为”以太网协议“
每块网卡在出厂的时候都有一个全世界独一无二的编号 ,也就是
mac地址:12位16进制数:前6位是厂商编号,后6位是流水线的编号,这个数字称为Mac地址,
# 1.什么是互联网?
将计算机彼此链接到一起的介质
# 2.互联网建立的目的?
基于互联网做数据交互
# 3.上网的本质
基于网线去访问其他计算机上面的资源
"""其实我们的计算机也可以称之为是服务器/服务端(专门对外提供服务)"""
专业设施名词
这些专业设施名词有些第一次听到有些就经常听到
1.交换机
让接入交互机的多台计算机之间彼此互联
、(基于以太网协议通信,不能跨局域网通信)
.交换机的功能
交换机的功能是连接计算机、服务器、网络打印机、网络摄像头、IP电话等终端设备,并实现与其它交换机、无线接入点、路由器、网络防火墙等网络设备的互联,从而构建局域网络,实现所有设备之间的通信。
2.局域网
由交换机组成的网络称之为局域网(一个区域)
局域网由网络硬件(包括网络服务器、网络工作站、网络打印机、网卡、网络互联设备等)和网络传输介质,以及网络软件所组成。
局域网一般为一个部门或单位所有,建网、维护以及扩展等较容易,系统灵活性高。其主要特点是:
1. 覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内。
2. 使用专门铺设的传输介质进行联网,数据传输速率高(10Mb/s~10Gb/s)
3. 通信延迟时间短,可靠性较高
4. 局域网可以支持多种传输介质
3.广播与单播
广播:在同一网络可达范围内,一个网络设备向本网络内所有设备进行通信就是广播。 单播:在同一网络内,两个设备点对点的通信就是单播通信。
4.路由器
将局域网彼此链接起来并支持数据交互
互联网其实可以看成是由多个局域网链接在一起
在局域网中可以直接基于mac地址实现数据交互
但是可能会产生广播风暴:交换机中同一时间出现太多广播操作
mac地址只能用于局域网交互数据 不能跨局域网传输
OSI七层协议02
网络层:
(1):IP地址是指互联网协议地址,是一个32位的二进制,特点通常用”点分十进制“表示成a,b,c,d)的形成,是动态匹配的
(2):IP地址的最小值:0.0.0.0,最大地址为:255.255.255.255
(3):IP地址目前有两个版本 :ipv4 IPv6 (由于IP v4已经不够表示目前存在的计算机了,所以推出了ipv6)
(4):一个ip地址通常写成四段十进制数,例:172.16.10.1
IP地址分为公网IP和私网IP:
公网IP是可以直接被浏览器访问到的 但是私网IP是不可以的
我们所有人的电脑默认使用的都是私网IP
公网IP需要花钱购买并且需要实名认证并备案
很多非法网站都是在国外注册备案
传输层:
PORT都是基于端口工作的协议,
端口:可以认为是设备与外界通讯交流的出口,是用来唯一标识一台计算机上某个应用程序:就是因为端口的存在 所以运行多个程序才不会错乱。
端口号的范围:
MySQL默认端口:3306
redis默认端口:6379
Diango默认端口:8000
flask默认端口:50000
端口号的范围是:0~65535
0~1024:系统经常使用的端口号
1024~8000:常用软件端口号
我们以后在写项目的时候推荐使用8000之后的端口
1.同一时间同一台计算机上面端口号不能冲突
2.端口号是动态分配的
eg:打开微信随机分配一个没有被使用的端口号8888
关闭微信重新打开那么会随机分配可能还是8888也可能是其他
端口是动态分配的:特点是:第一次启动分配的端口和关闭再次启动端口号可能都在变化
总结:IP地址:用来唯一标识接入互联网的一台技算机,port端口:用来唯一标识一台计算机的某个应用程序
IP+port:唯一标识接入互联网一台计算机上的某个应用程序
(因此ip地址精确到具体的一台电脑,而端口精确到具体的程序。)
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协议 自定义协议
(1):HTTP协议和 FTP协议 HTTP协议就加不加S的区别加“s”代表是经过认证的:如常看到的https:// 和http://
(2):TCP协议:流式协议,可靠协议,基于TCP协议通信 必须先建立双向通道
TCP协议传输数据之所以可靠的原因就在于有双向通道??
不只是基于网络的双向通道,还有是基于反馈机制,有请求的同时也有反馈的请求返回
(反馈机制就是我给你一直发送请求,你必须有回应的消息,收到了才会删除内存里的内容然后传送给请求者)
TCP与UDP协议
一键三连,取消三连加取关
1. 一键三连
在三连之前服务器和客户端都为CLOSED状态.通信开始前,双方都得创建各自的传输控制块(TCB)
服务器创建完TCB后便进入LISTEN状态此时准备接受客户端发来的连接请求
点赞(第一次握手)
客户端向服务端发送连接请求报文段.该保温段的头部中SYN=1,ACK=0,seq=X.请求发送后客户端便进入SYN-SENT状态
SYN = 1,ACK = 0表示该报文段位连接请求报文
x为本次TCP通信的字节流的初始序号
**TIP:**TCP规定SYN = 1的报文段不能有数据部分,但要消耗一个序号
投币(第二次握手)
服务端收到连接请求报文段后,如果同意连接,则会发送一个应答:SYN = 1,ACK = 1,seq = y,ack = x + 1
该应答发送完成后便进入SYN-RCVD状态.
SYN=1,ACK=1表示该报文段为连接同意的应答报文
seq=y表示服务端作为发送者时,发送字节流的初始序号
ack=x+1表示服务端希望下一个数据报发送序号从x+1开始的字节
收藏(第三次握手)
当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示服务端发来的连接同意应答已经收到
该报文头部为:ACK = 1, seq = x + 1, ack = y + 1.
客户端发完这个报文后便进入ESTABLSHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成
2. 取消三连加取关
TCP连接的释放一共需要四部,因为TCP连接时双向的,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向连接
取消点赞(第一次挥手)
若客户端认为数据发送完成,则它需要向服务端发送连接释放请求.该请求只有报文头,头中携带的主要参数为:
FIN = 1,seq = u此时,客户端将进入FIN-WAIT-1状态
FIN = 1表示该保温是一个连接释放请求
seq = u,u - 1是A向B发送的最后一个字节的序号
取消投币(第二次挥手)
服务端收到连接释放请求后,会通知相应的应用程序,告诉它客户端向服务端这个方向的连接已经释放.此时服务端进入CLOSE-WAIT状态,并向客户端发送连接释放的回答,其报文头包含:
ACK = 1,seq = v, ack = u + 1
ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答。
seq=v,v-1是B向A发送的最后一个字节的序号。
ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节
客户端收到应答进入FIN-WAIT-2状态,等待服务端发送连接释放请求
第二次挥手完成后,客户端到服务端方向的连接已经释放,服务端不会接受数据,客户端也不会发送数据,但服务端到客户端的连接仍然存在,服务端可以继续向客户端发送数据
取消收藏(第三次挥手)
当服务端发送完所有数据后,向客户端发送连接释放请求,请求头:FIN = 1,ACK, seq = w,ack = u+1.服务端便进入LAST-ACK状态.
取消关注(第四次挥手)
当客户端收到释放请求后向B发送确认应答,此时客户端进入TiME-WAIT状态,该状态会持续2MSL(2分钟)时间,若该时间没有服务端重发请求的话,就进入CLOSED状态,撤销TCB.当服务端收到确认应答后,也进入CLOSED状态撤销TCB
面试题
# TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对?
描述的不够精确 不对!!!
TCP协议之所以比UDP协议可靠 原因在于TCP协议发送消息有反馈机制
基于TCP发送的消息会在本地先保存该消息 如果地方确认收到才会删除
否则在一定的时间内会频繁的多次发送知道确认或者超时为止
UDP协议发送数据之后会立刻删除内存数据 不会保留
标签:架构,32,编程,网络,连接,发送,day,服务端,客户端 来源: https://www.cnblogs.com/ister/p/16146618.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。