软件开发架构、OSI七层协议
目录软件开发架构
软件开发架构是在编写项目之前需要遵循的代码层面上的规范,包括运行流程、环节、步骤等等。
软件开发架构分类
- 软件开发架构:C/S架构与B/S架构
#C/S架构
client:客户端(即将消费的客人)
Server:服务端(给客人提供服务的店)
APP就是各大互联网公司的客户端软件,通过这些客户端软件就可以体验到各个互联网公司给我们提供的服务。
"""
eg:
下载淘宝客户端打开 体验淘宝服务端提供的购物服务
下载抖音客户端打开 体验抖音服务端提供的视频服务
"""
作为服务端必备的多个条件:
1.24小时不间断提供服务
2.固定的地址
3.能够服务多个客人(高并发)
#B/S架构
Broswer:浏览器
Server:服务器
浏览器可以充当所有服务端的客户端,B/S架构本质还是C/S架构。
架构优劣
C/S架构:优势在于通过下载客户端app可以在app软件中高度定制相关服务,劣势就是需要先下载客户端,占用存储、也比较繁琐。
B/S架构:优势在于不需要下载客户端可直接通过浏览器快速体验服务,劣势是定制一些功能的服务较为繁琐。
架构发展趋势
发展趋势必然是统一接口原则,例如微信、支付宝中的小程序可以直接体验这些小程序的服务,将C/S与B/S交错使用来避免各自的弊端。(利益至上)
网络编程前戏
1.什么是网络编程
基于网络编写代码,能够实现数据的远程交互。
2.网络编程的起源
最早起源于美国军事领域,想实现计算机之间的交互最早的时候只能用硬盘拷贝,之后发明了网络编程。
3.网络编程必备条件——数据的远程交互
实现数据的远程交互必备的基础条件是物理连接介质。
OSI七层协议简介
OSI七层协议规定了所有的计算机在远程数据交互的时候必须经过相同的处理流程、在制造过程中必须拥有相同的功能硬件。
计算机在进行数据交互的标准体系,它将网络分为七成从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
物理层:两个硬件之间的通信,定义物理设备标准。常见的物理媒介有光纤、电缆来保证物理连接介质。(IEEE 802.1A, IEEE 802.2到IEEE 802.11)
数据链路层:决定访问网络介质的方式,定义了数据化格式化传输,提供信息的检测和纠正以确保数据的可靠性传输。(FDDI, Ethernet, Arpanet, PDN, SLIP, PPP)
网络层:对在不同地理位置的网络中的两个主机系统提供连接和路径选择。(IP,IPv6, ICMP, ARP, RARP, AKP, UUCP)
传输层:接受上一层的数据,将上层数据进行分割。当到达目的地址时在重组,我们一般将这个数据叫做段。(TCP,UDP)
会话层:通过传输层(端口:传输端口与接受端口)建立不同的会话请求,主要是在系统之间建立对话及接收对话。(SMTP, DNS)
表示层:对信息进行语法处理,确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。(Telnet, Rlogin, SNMP, Gopher)
应用层:为用户程序提供网络服务(HTTP、TFTP, FTP, NFS, WAIS、SMTP)
OSI七层协议之物理连接层
通过物理连接组网,传送比特流0和1
两个不同局域网(移动、联通)通信,需要ISP互联网服务供应商提供的物理连接
OSI七层协议之数据链路层
作用:根据以太网协议将一组电信号组装成数据包,称为‘帧’,并控制传输
两部分:
标头head+数据data,‘标头’包含数据包的一些说明项,如:发送者、接受者、数据类型等等。
MAC地址:
即网卡地址,48位的二进制,通常用12个16进制位数表示,前六个表厂商,后6个表流水号。定位数据包的路径,如发送者和接受者。
广播方式:
发送者把数据包发送给局域网内所有PC,让PC根据MAC地址自动匹配;广播是在发送者所在的局域网内广播的,如果两台计算机没有在一个子网内,就无法广播。
流程:
一台计算机向本局域网内的所有电脑均发送相同的数据包,其他计算机收到这个数据包之后,会读取这个数据包的‘标头’,找到其中接收接收方(目标方)的MAC地址,与自身的MAC地址比对,若两者相同则是发送给自己的,就接受这个包并做进一步处理,否则丢弃这个包。
发送媒介:分组交换机、网络交换机
网络交换机:扩展网络的机器,为子网提供更多的接口,以连接更多的PC
OSI七层协议之网络层
网络层建立主机与主机的连接
因此我们必须找到一种方式以区分哪些MAC地址属于同一个子网。若是同一个子网就采用广播的方式,不是,则采用‘路由’的方式发送——这就导致了网络层的出现,他的作用是引入一套新的地址,使我们能够区分哪些计算机属于同一个子网,这个机制就叫做‘网络地址’,也就是‘IP地址’。
新的地址模式:IP地址/网络地址,可以区分哪些PC在同一个局域网内
IP地址分类:
IPV4:32个二进制,4字节*8位,前24位表示网络,同一子网下必须相同;后8位表示主机
255=11111111
IPV6:128个二进制,8字节*16位
子网掩码:
IP and 255.255.255.0,判断是否在同一子网下
路由
路由:通过网络把数据从源地址传送到目的地址;引导分组传送,经过一些中间节点后,到达目的地(原地址和目标地址是在两个不同的子网中)
实现方式:
定义一条路径,经过internet把网络包发到目的地,不指定完全路径,只指定两个网关之间的路径段。
路由器:
连接两个或多个网络实现路由的机器,可看作配有多个网卡的专用电脑,让网卡接入不同的网络中。
网关:
网络层使用的路由器,通常指路由器的IP (个人感觉应该是一种概念,即在网络层连接两个子网的概念,并不存在实体,真正实现路由功能还是得靠路由器)
步骤:
A:发送地址 B:接收地址
若在同一局域网内,通过广播方式可找到
若不在:
首先将网关添加给路由器/主机地址,通过交换机的广播方式发给主机;
A的主机将数据包传送给B所在的主机,再由主机根据MAC广播给B;
注:IP包不断被路由封装和拆开(添加和删除地址)
网络交换机:
是一个扩大网络的器材,能为子网中提供更多的连接端口,以便连接更多的电脑。
交换机与路由器的区别:
1.工作层次不同
交换机主要工作在数据链路层(第二层)
路由器工作在网络层(第三层)。
2.转发依据不同
交换机转发所依据的对象是:MAC地址。(物理地址)
路由转发所依据的对象是:IP地址。(网络地址)
3.主要功能不同
交换机主要用于组建局域网,连接同属于一个(广播域)子网的所有设备,负责子网内部通信(广播)。
路由主要功能是将由交换机组好的局域网相互连接起来,或者将他们接入Internet。
"""
交换机能做的,路由都能做。
交换机不能分割广播域(子网),路由可以。
路由还可以提供防火墙的功能。
路由配置比交换机复杂。
"""
ARP协议
ARP协议:
作用:将局域网内IP和MAC地址对应,介于数据链路层和网络层之间。
仅限于IPV4,IPV6用Neighbor Discovery Protocol替代
IP地址与MAC地址的对应是通过ARP协议传播到局域网的每个主机和路由。
每一台主机或路由中都有一个ARP cache,用以存储局域网内IP地址和MAC地址如何对应。
ARP协议(ARP介于数据链路层和网络层之间,ARP包需要包裹在一个帧中)的工作方式如下:
主机发出一个ARP包,该ARP包中包含有自己的IP地址和MAC地址。通过ARP包,主机以广播的形式询问局域网上所有的主机和路由:我是IP地址xxxx,我的MAC地址是xxxx,有人知道199.165.146.4的MAC地址吗?拥有该IP地址的主机会回复发出请求的主机:哦,我知道,这个IP地址属于我的一个NIC(网卡),它的MAC地址是xxxxxx。由于发送ARP请求的主机采取的是广播形式,并附带有自己的IP地址和MAC地址,其他的主机和路由会同时检查自己的ARP cache,如果不符合,则更新自己的ARP cache。
这样,经过几次ARP请求之后,ARP cache会达到稳定。如果局域网上设备发生变动,ARP重复上面过程。ARP协议只用于IPv4。IPv6使用Neighbor Discovery Protocol来替代ARP的功能。
OSI七层协议之传输层
传输层建立端口到端口的连接。
端口号:0-65535 (16个二进制)
同一台主机上许多程序(进程)都需要用到网络,需要判断是哪个端口。
当一个数据包从网上发送过来的时候,我们需要一个参数来区分,他到底是提供哪个进程使用的。这个参数就叫做“端口号”,他其实就是每一个使用网卡的程序的编号。每个数据包发送到主机特定的端口,所以不同的程序就能取到自己想要的数据包。
0-1023被系统占用,应用程序随机选取
Http:80
代理服务:8080
指定IP包具体给哪个进程;另外一个进程可能与多个计算机连接,会有多个端口
Socket
进程间通信需要双方IP、端口号、通信采用的协议栈
进程间通信分为主机内部(终端内部)进程间通信和跨主机进程间通信(Socket通信)
Unix系统把主机+端口,叫做"套接字"(socket)
格式:无符号整型变量,用来表示一个通信进程
本质是编程接口API,是对TCP/IP协议的封装
TCP/UDP
TCP/UDP:在数据包标头加上端口号
TCP:复杂、稳定,有包遗失会重发
UDPO:简单、不稳定、不能确定对方是否成功接受
标签:ARP,架构,软件开发,七层,MAC,OSI,地址,主机,路由
From: https://www.cnblogs.com/zhiliaowang/p/16893527.html