内容概要
- 
软件开发架构
- 
网络编程简介
- 
OSI七层协议简介
- 
OSI七层协议
- 
网络相关专业名词
- 
TCP和UDP协议
软件开发架构
# 1. 软件开发架构的目的
	程序员在编写软件的时候应该遵循的架构设计——三层架构
# 2.软件开发架构的分类
	C/S架构
    C:client(客户端)
	S:server(服务端)
"""
我们使用计算机下载下来的一个个app本质是各大互联网公司的客户端软件
通过这些客户端软件我们就可以体验到各个互联网公司给我们提供的服务
	
eg:下载淘宝客户端 打开 体验淘宝服务端提供的购物服务
ps:一般情况下客户端与服务端交互需要互联网 但是有些不需要(因为客户端和服务端都在一台计算机上)	
	
客户端:即将要去消费的客人
服务端:给客人提供服务的店
作为服务端必备的多个条件
1.24小时不间断提供服务
2.固定的地址
3.能够服务多个客人(高并发)
"""
	B/S架构
    B:browser(浏览器)
    S:server(服务器)
"""
本质和C/S架构一样,只是我们在浏览器上当做客户端,没有专属的APP,通过浏览器页面去享受服务
"""

# 两种架构的优缺点
C/S架构:
    优势:不同公司的客户端由不同公司独立开发 可以高度定制化客户端功能
	劣势:需要用户去下载才能使用
B/S架构:
    优势:不用下载直接访问
    劣势:无法高度定制化 并且需要遵守很多规则
架构总结
ATM:三层架构
选课系统:三层架构
本质也属于软件开发架构的范畴
软件设计的大方向>>>:统一接口
    微信小程序
    支付宝小程序
网络编程简介
# 1.网络编程的含义
	网络编程的研究前提就是基于互联网,所以网络编程就是基于互联网来编写代码
    
# 2.网络编程的学习目的
	可以开发C/S架构的软件 掌握其中原理 使用框架
    
# 3.网络编程发展史
	属于美国军方>>>: 很多先进的技术都是由军方发明后转为民用
    实际应用:军方想要实现不同计算机之间的数据交互,在当时没有网络编程技术的时候,只能拿U盘拷贝并携带
        
# 4.早期远程通信
1.座机电话
	连接时需要电话线
2.大屁股电脑
	数据交互需要插网线
3.智能手机
	数据交互需要无线网卡
ps:实现数据的远程交互必备的基础条件是物理连接介质
    
# 5.互联网协议
	 不同计算机之间如果想要实现无障碍交互,除了需要有物理链接介质之外还需要一套公有的标准
    标准 >>>: 互联网协议(OSI七层协议)
OSI七层简介
"""
OSI七层协议:规定了所有的计算机在远程数据交互的时候必须经过相同的处理流程、在制造过程中必须拥有相同的功能软件
"""
应用层
表示层
会话层
传输层
网络层
数据链路层
物理连接层
ps:应、表、会、传、网、数、物
    
# 很多人总结成了五层
应用层(包含了表示层和会话层)
传输层
网络层
数据链路层
物理连接层
"""
接收网络消息 数据由下往上传递
发送网络消息 数据由上往下传递
"""
OSI七层协议
OSI七层协议之物理连接层
主要用于确保计算机之间的物理连接介质 接收数据(bytes类型、二进制)
OSI七层协议之数据链路层
1.规定了电信号的分组方式
2.以太网协议
    规定了计算机在出厂的时候都必须有一块网卡 网卡上有一串数字
    该数字相当于是计算机的身份证号码是独一无二的
    该数字的特征:12位16进制数据
        前6位产商编号 后6位流水线号
    我们给这个独一无二的编号称之为 —— "MAC地址"/以太网地址
小知识:
   基于Mac地址可以实现计算机之间的数据通信    
网络小知识
# 互联网含义
 将计算机彼此链接到一起的介质
    
# 互联网建立的目的
  基于互联网做数据交互
   
# 上网的本质
  基于网线去访问其他计算机上面的资源
"我们也可以把计算机称之为服务器或者服务端(专门对外提供服务)"
OSI七层协议之网络层
IP协议:规定了所有接入互联网的计算机都必须有一个IP地址 类似于身份证号(取决于网线,是可变的)
    MAC地址是物理地址可以看成永远无法修改
    IP地址是动态分配的 不同的场所IP是不同的
    
IP地址特征:
    IPV4:点分十进制
      最小: 0.0.0.0
      最大:255.255.255.255
    IPV6:十六进制
        '''能够给地球上每一粒沙分一个IP地址'''
ps:IP地址可以用来标识全世界独一无二的一台计算机   
    
"""
  IP地址分为公网IP和私网IP
   公网可以直接被浏览器访问到,但是私网不可以
   公网需要花钱购买并且需要实名认证并且备案————很多非法的网站都是在国外注册备案
"""
OSI七层协议之传输层
PORT协议(端口协议)
"""
  一台计算机上面可以运行很多数据的交互软件,比如:微信、视频软件、音乐软件
  为什么他们从内存中获取数据不会错乱,也就是因为端口协议的存在
"""
端口协议:
	用来标识一台计算机上面的某一个应用程序
    
    特征:动态分配(类似于洗浴中心的号码牌)
        
    端口号的范围是:0 ~ 65535(也就是一台计算机可以一起运行65535个应用程序)
    0 ~ 1024: 系统经常使用的端口号
    1024 ~ 8000:常用的软件端口号
    所以我们在写项目的时候,推荐使用8000之后的端口
    
# 注意事项
 1、同一时间同一台计算机上面的端口号不能重合
 2、端口号是动态分配的, 就比如这次打开QQ的端口号是8118,使用完关了,再重新打开的时候可能是8118,也有可能是8888,或者其他数字
URL:统一资源定位符(网址)
    网址本质都是由IP和PORT组成的!!!
    
IP+PORT:能够定位全世界独一无二的一台计算机上面的某一个应用程序
域名解析:将网址解析成IP+PORT
    
我们之所以不直接是同IP+PORT的原因是太难记 所以发明了域名
IP:PORT	 实际使用冒号连接
    114.55.205.139:80
OSI七层协议之应用层
应用层相当于是程序员自己写的应用程序 里面的协议非常的多
常见的有:HTTP、HTTPS、FTP
ps:后续框架部分再做介绍
网络相关专业名词
计算机之间想要实现数据交互必须要'连接'到一起
交换机
能够将所有接入交换机的计算机彼此互联起来

局域网
可以简单的理解为有单个交换机组成的网络
	在局域网内可以直接使用mac地址通信

广播
首次查找接入同一个交换机的其他计算机 需要朝交换机里面吼一嗓子
单播
首次被查找的计算机回应查找它的计算机 并附带自己的mac地址

广播风暴
接入同一台交换机的多台计算机同时发广播
广域网
可以简单的理解为范围更大的局域网
互联网
由所有的局域网、广域网连接到一起形成的网络
路由器
不同的局域网计算机之间是无法直接实现数据交互的 需要路由器连接
TCP和UDP协议
'''这两个协议都是属于传输层'''
TCP与UDP都是用来规定通信方式的
	通信的时候可以随心所欲的聊 也可以遵循一些协议符合要求的聊
  	随性所欲的聊:文字 图片 视频 
  	遵循一些协议:开头带尊称 首行空两格 只准用官话 不能随意说话
ps:不遵循上述协议也可以通信 只不过遵循了更合规合法合理!!!
TCP协议(重要)
TCP协议
三次握手:建链接 
	1.流式协议、可靠协议(数据不容易丢失)
    	造成数据不容易丢失的原因不是因为有双向通道 而是因为有反馈机制
        给对方发消息之后会保留一个副本 直到对方回应消息收到了才会删除
        否则会在一定时间内反复发送
        
	2.洪水攻击
    同一时间有大量的客户端请求建立链接 会导致服务端一直处于SYN_RCVD状态 服务端接收到了大量的syn请求,处于rcvd状态
    
    3.服务端如何区分客户端建立链接的请求
    可以对请求做唯一标识

四次挥手:断链接
    1.四次不能合并为三次
    	因为中间需要确认消息是否发完(TIME_WAIT)

UDP协议
UTP协议
	也称之为数据报协议、不可靠协议
    
   早期的QQ使用的是纯生的(没有加任何额外功能)UDP协议
  现在的QQ自己添加了很多技术和功能
 	使用UDP的原因就是因为很简单 快捷 粗暴 只要指定对方的地址就可以发消息了
  """
  TCP我们可以看成是打电话:双方你侬我侬
  UDP我们可以看成是发短信:只要发了就行 不管对方看不看
  """