day38 软件开发架构-客户端
day 37 网络编程
今日学习
软件开发架构
-
1.什么是软件开发架构
编写项目之前需要遵循的代码层面上的规范(代码运行的流程,环节,步骤)
-
2.软件开发架构
C/S 客户端 - 服务端
B/S 浏览器 - 服务端 本质也是c/s 架构
客户端顾名思义就是app,服务端就是24小时不停提供服务的服务层
-
3.服务端的特征:
1.24小时不间断提供服务
2.固定的地址(不能经常改变)
3.可以同一时间服务很多人
-
4.架构的优劣
cs 架构
优势:下载对应的客户端,可以在客户端软件内高度定制相关服务
劣势:使用必须先下载客户端,比较繁琐
bs架构
优势: 不需要下载客户端,能够快速体验服务
劣质:定制花里胡哨的功能较为繁琐
架构发展趋势
-
再次申明: 上述架构与我们之前所学的三层架构其实一样
发展趋势:统一接口原则
微信
里面有很多小程序 可以直接体验其他服务
支付宝
里面有恁多小程序 可以直接体验其他服务
后续就是cs和bs交错使用 避免各自的劣势!!! 比如抖音
ps:可以方便用户使用 更重要的是可以给自己圈用户便于后期收割
网络编程简介
-
1.如何理解网络编程
基于互联网编写代码 程序可以实现远程数据交互
-
2.网络编程的目的
网络编程的本质是为了解决计算机之间远程数据交互
-
3.网络编程的意义
学习完网络编程之后 我们就可以编写一个c/s架构的软件
-
4.网络编程的起源
军事,美国军方 数据通讯
-
5.网络编程的要求
计算机直接想要实现远程数据交互,首要条件就是要有物理连接介质
网络相关名词
-
1交换机
能够让接入交换机的多台计算机实现彼此互联
-
2.以太网通信(mac通信)
原理
有了交换机之后 根据电脑的mac地址就可以实现数据交互接入交换机的设备过多可能会造成广播风暴
一对一主机 进行数据传输 单播
一对所有主机发送数据包 广播
-
3.广播
主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉。有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面。在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过路由器,防止广播数据影响大面积的主机。
-
4.广播风暴
简单来说广播数据充斥网络无法处理,并且占用大量带宽,导致业务不能正常运行,甚至瘫痪
导致原因:
网络蠕虫,或者交换机故障,网络拓扑设计的问题
-
5.局域网
有某个固定区域组成的网络
广域网可以看成是更大区域的局域网
-
路由器
将多个局域网连接到一起的设备
OSI七层模型
规定了计算机涉及到数据远程交互的时候 必须要经过的部件/流程
所有的计算机在涉及到网络传输这块必须要有相同的零部件
osi七层模型 或者分为TCP/IP 五层 或者四层
七层协议的分层功能【从下到上】
物理层: 建立,维护,断开物理连接
数据链路层:建立逻辑链接,进行硬件地址寻址,差错校验等功能
网络层: 进行逻辑地址寻址,实现不同网络之间的路径选择
传输层: 定义传输协议端口号,流量控制和差错校验
会话层 建立,管理,中止会话
表示层: 数据的表示(文字,图片,mp4)安全,压缩
应用层: 网络服务与最终用户的一个接口
四层的传输特征 从下往上的顺序
数据发送出去的时候是从上往下走
数据接收回来的时候是从下往上走
-
物理层
特点:保证物理连接介质的条件 传递电信号(主要研究插网线情况)
解决比特流的传输
-
数据链路层
简单理解:规定了电信号的分组方式,规定了每台计算机必须有网卡;
流量控制,寻址,
网上必须有一串记录 >>>: 电脑的以太网址
mac地址 :12位16进制数组成的,前6位:产商编号 后6位:生产流水线号
既然mac地址相当于电脑的身份证,也就意味着可以根据该地址查找计算机(基于mac地址实现数据交互)
-
网络层
IP协议
规定了任何接入互联网的计算机都必须有一个IP地址(护照)iP地址 IPV4:点分十进制 最小: 0.0.0.0 最大: 255.255.255.255 ps:随着社会的发展 同时能够上网的人越来越多 上述地址不够分
IPV6: 能够给地球上每一粒沙分一个IP地址 IP特征 每个IP都自带定位 ps:ip代理!!!
1.什么是网址 网址(URL):统一资源定位符 2.url的本质 其实就是IP+PORT(ip:port) www.baidu.com 124.12.11.232
-
传输层
PORT协议
端口协议:规定了一台计算机上的每一个正在运行的应用程序都必须有一个 端口号,端口号相当于是计算机用来管理多个应用程序的标记
端口号特征
1.端口号范围:0-65535 2.端口号是动态分配的 3.同一时间同一台计算机端口号不能冲突 0-1024:一般是操作系统内部需要使用的 1024-8000:一般是常见的软件已经使用了 8000+:我们平时写代码可以使用8000之后的端口号
域名解析过程
.浏览器先检查自身缓存中有没有被解析过的这个域名对应的ip地址,如果有,解析结束。
2.如果浏览器缓存中没有(专业点叫还没命中),浏览器会检查操作系统缓存中有没有对应的已解析过的结果。而操作系统也有一个域名解析的过程。在windows中可通过c盘里一个叫hosts的文件来设置,如果你在这里指定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址。
但是这种操作系统级别的域名解析规程也被很多黑客利用,通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,造成所谓的域名劫持。所以在windows7中将hosts文件设置成了readonly(只读),防止被恶意篡改。
3.如果至此还没有命中域名,才会真正的请求本地域名服务器(LDNS)来解析这个域名,这台服务器一般在你的城市的某个角落,距离你不会很远,并且这台服务器的性能都很好,一般都会缓存域名解析结果,大约80%的域名解析到这里就完成了。
4.如果LDNS仍然没有命中,就直接跳到Root Server 域名服务器请求解析
5.根域名服务器返回给LDNS一个所查询域的主域名服务器(gTLD Server,国际顶尖域名服务器,如.com .cn .org等)地址
6.此时LDNS再发送请求给上一步返回的gTLD
7.接受请求的gTLD查找并返回这个域名对应的Name Server的地址,这个 Name Server就是网站注册的域名服务器
8. Name Server根据映射关系表找到目标ip,返回给LDNS
9.LDNS缓存这个域名和对应的ip
10.LDNS把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中, 域名解析过程至此结束
TCP/IP
-
TCP3次握手
所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。
三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。
-
tcp4次挥手
三次握手是建立TCP连接,四次挥手是断开TCP连接,即客户端和服务端总共要收发4个包才能确定断开连接。
-
1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的连接请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可能未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。