程序员在编写软件的时候应该遵循的架构设计 类似于我们写ATM和选课系统所采用的三层架构
C:client(客户端) S:server(服务端) ''' 客户端一般是指应用程序EXE或者是手机端的应用程序,程序需要先安装后才能运行在用户的电脑或手机上 ''' 类比: 客户端相当于是需要体验服务的客人 服务端相当于是对外提供服务的店面 打开应用程序的时候其实就是相当于是基于网络去到厂家的店里面让服务员给你提供服务
B:browser(浏览器),也算是一种客户端 S:server(服务器) """ B/S架构本质也是C/S架构 让浏览器充当各个厂家的客户端,用户无需对应下载相应的客户端 """
C/S架构: 优势:针对客户端可以高度定制 劣势:需要用户去下载才能使用 B/S架构: 优势:无需下载,急速体验 只要有网络、浏览器,可以随时随地进行查询、浏览等业务处理。 维护简单方便,只需要改变网页,即可实现所有用户的同步更新。 劣势:无法做到高度定制,体验效果较差 个性化特点明显降低,无法实现具有个性化的功能要求。 ''' 目前的趋势更加偏向于B/S架构 微信小程序,只需要下载一个微信就可以通过微信去访问很多服务端 支付宝诸多应用,只需要下载一个支付宝就可以通过支付宝体验很多服务 统一提供接口服务>>>:获取大量用户及数据,中途还可以提供广告服务 '''
网络编程的研究前提就是基于互联网, 网络编程就是基于互联网编写代码
学习完网络编程之后就可以开发C/S架构的软件(掌握原理,使用框架)
该技术源于美国军方>>>:很多先进的技术都是由军事发明后续转为民用 实际应用: 军方想要事项不同计算机之间数据交互 没有网络编程技术的时候只能拿U盘拷贝并携带 为了跨区域交互数据所以发明了网络编程 # 早期远程通信 ''' 1.座机电话 彼此打电话需要电话线 2.大屁股电脑 数据交互需要插网线 3.智能手机 数据交互需要无线网卡 ''' # 电话线、网线、无线网卡等在远程通信的前提是必须具备一个物理链接介质 '''互联网协议''' 不同计算机之间要想要实现无障碍交互 除了需要由物理链接介质之外还需要一台公有的标准 这个标准就是>>>:互联网协议(OSI七层协议)
互联网的核心就是由一层协议组成,协议就是标准,如果计算机都学会了互联网协议,那所有的计算机都就可以按照统一的标准去收发信息从而完成通信了。 ''' 所有的计算机在生产过程中必须有相同的部分和相同的功能 应、表、会、传、网、数、物 ''' 1.应用层 2.表示层 3.会话层 4.传输层 5.网络层 6.数据链路层 7.物理链接层 # 上述的七层也可以总结成为五层 1.应用层(包括表示层、会话层) 2.传输层 3.网络层 4.数据链路层 5.物理链接层
internet表示的意思是互联网,又称网际网络,根据音译也被叫做因特网(Internet),指的是网络与网络之间所串联成的庞大网络 是将计算机彼此链接到一起的介质
基于互联网做数据交互
基于网线去访问其他计算机上面的资源 ''' 其实我们的计算机也可以称之为是服务器/服务端(专门对外提供服务) '''
1.交换机 让接入交换机的多台计算机之间彼此互联 2.局域网 由交换机组成的网络称之为局域网(一个区域) 3.广播与单播 广播:在交换机中群发 单播:定向回复消息(记录mac地址) 4.路由器 将局域网彼此链接起来并支持数据交互 互联网其实可以看成是由多个局域网链接在一起 ''' 在局域网中可以直接基于mac地址实现数据交互 但是可能还会产生广播风暴:在交换机中同一时间出现太多广播操作mac地址只能用于局域网交互数据,不能跨局域网传输 '''
OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历了一些固定的流程
主要是定义设备标准,如网线的额接口类型、管线的接口类型、各种传输介质的传输速率等。 '''物理链接介质,传递电信号'''
基于物理链接层接收到了一串二进制数,如何切分才能正常解析 1.规定了二进制数据的分组方式 2.规定了'以太网协议' 但凡能够接入互联网的计算机都必须有一块网卡 每块网卡在出场的时候都会烧制一个全世界独一无二的编号 该编号是由12位16进制数组成 前六位是厂商编号 后六位是流水线号 这个编号独一无二的编号也有一个称呼>>>:'mac地址'(类似于身份证号) ps:基于mac地址就可以实现计算机之间的数据通信了
'''也就是路由器,交换那些具有寻址功能的设备所实现的功能。这一层定义的是IP复制,通过IP地址寻址,所以产生了协议。''' IP协议 规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线) # IP地址目前有两个版本 # IPV4:点分十进制 最小:0.0.0.0 最大:255.255.255.255 '随着社会的进步,计算机的使用越来越普遍 IPV4地址不够用' # IPV6十六进制 '''IPV6可以表示出地球上每一粒沙子''' ps:IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机 ''' IP地址可以分为公网IP和私网IP 公网IP是可以直接被浏览器访问到的,但是私网IP是不可以的 我们所有人的电脑默认使用的都是私网IP 公网IP需要花钱购买并且需要实名认证并备案 很多非法的网站都是国外注册备案 '''
PORT协议(端口协议) ''' 一台计算机上面可以运行很多数据交互软件,比如微信、qq、钉钉 他们都是从内存中获取数据,因为端口协议的存在才会使每个软件的数据交互不会错乱,能够识别出是哪个软件的数据 ''' 用于标识一台计算机上正在运行的应用程序(端口号类似于手牌号) 端口号的范围是:0~65535 0~1024:系统经常使用的端口号 1024~8000:常用软件端口号 我们以后在写项目的时候推荐使用8000之后的端口 1.同一时间同一台计算机上面端口号不能冲突 2.端口号是动态分配的 eg:打开微信随机分配一个没有被使用的端口号8888 关闭微信重新打开会重新随机分配,可能还是8888也可能是其他 ''' IP地址:用于标识全世界独一无二的一台接入互联网的计算机 PORT号:用于标识一台计算机上面的某一个应用程序 IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序 日常使用楼兰其访问的各个网址其实就是IP+PORT eg: www.baidu.com 好记 202.108.22.5:80 难记 ip:port 很多常见的服务端都不需要指定端口,只要访问了ip地址内部去会自动映射 域名解析: 将好几的地址解析称真正的地址 www.baidu.com 解析 202.108.22.5:80 '''
应用层应该是直接面向用户的程序或服务,包括系统程序和用户程序,HTTP协议 HTTPS协议 FTP协议 自定义协议 使用什么协议完全取决于程序员自己
都属于传输层
又叫流式协议、可靠协议 基于TCP协议进行数据交互之前需要做一系列复杂的操作>>>:三次握手,四次挥手 # 三次握手建立链接 三次挥手含义: 彼此建立单向通道 ''' 第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。 确认号:其数值等于发送方的发送序号+1(即接收方期望接收的下一个序列号)。 ''' 四次挥手断开连接 eg:彼此切断通道 # 四次挥手含义: ''' 与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次挥手”。 第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据。 第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。 第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。 第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。 TCP的四次挥手过程(简言之):主动关闭方向被动关闭方发送不会再给你发数据了的信息;被动关闭方对收到的主动关闭方的报文段进行确认;被动关闭方向主动关闭方发送我也不会再给你发数据了的信息;主动关闭方再次对被动关闭方的确认进行确认。 ''' 洪水攻击:服务端接收到了大量的sys请求,处于rcvd状态 控制很多太计算机同一时刻去访问服务端,造成服务端瞬间过载瘫痪
三次握手流程图:
四次挥手断开连接流程图
# 又叫丢包协议、不可靠协议 ''' 不需要建立双下通道,数据的传输速度快,但是可能会丢失 就是在正式通信前不必与对方先建立连接,不管对方状态就直接发送。与手机短信非常相似:你在发短信的时候,只需要输入对方手机号就OK了。 ''' QQ使用的就是UDP协议,所以有时候会产生数据丢失现象 但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全
小总结:
""" TCP协议类似于打电话:你一句我一句 又问有答 UDP协议类似于发短信:发了之后不管你看不看 只要发了就行 """
# TCP协议之所以比UDP协议可靠 就是因为有双向通道 对不对? 这个问题描述的不够精确 1.TCP协议之所以比UDP协议可靠 原因在于TCP协议发送消息有反馈机制 2.基于TCP发送的消息会在本地先保存该消息 如果地方确认收到才会删除 3.否则在一定的时间内会频繁的多次发送知道确认或者超时为止 4.UDP协议发送数据之后会立刻删除内存数据 不会保留
什么是域名
域名:域名是互联网基础架构的关键部分,它是由一串用点分隔的名字组成的Internet上某一台计算机的名称,用于在数据传输时标识计算机的电子方位,比如www.baidu.com就是一个就是一个域名。
''' 域名解析就是域名到IP地址的转换过程。IP地址是网路上标识您站点的数字地址,为了简单好记,采用域名来代替ip地址标识站点地址。域名解析由专门的域名解析服务器来完成,整个过程是自动进行的 互联网中的地址是数字的IP地址,域名解析的作用主要就是为了便于记忆。 '''
DNS是进行域名和与之相对应的IP地址转换的服务器、DNS中保存了一张域名和和与之相对应的IP地址的表,以解析消息的域名。