软件开发架构,OSI七层协议,TCP与UDP协议

1. 软件开发架构

# 什么是软件开发架构
    程序员在编写软件的时候应该遵循的架构设计
      类似于我们写ATM和选课系统所采用的三层架构

# 我们了解的涉及到两个程序之间通讯的应用大致可以分为两种:

第一种是应用类:qq、微信、网盘、优酷这一类是属于需要安装的桌面应用
C/S

第二种是web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用
B/S

这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构~


# 软件开发架构的分类    
1.C/S架构
    C:client(客户端)
    S:server(服务端)
    C/S意思: 客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)分的。
    这种的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作环境依赖较大。
      """
      类比学习:
          客户端相当于是需要体验服务的客人
          服务端相当于是对外提供服务的店面
      
      我们手机上下载的各种app其实是各大厂家的客户端
          打开app使用功能的时候其实就是相当于是基于网络去到厂家的店里面让                 服务员给你提供服务!!!
      """
2.B/S架构
    B:browser(浏览器)
    S:server(服务器)
    B/S意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。
    Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。
      """
      B/S架构本质也是C/S架构
    让浏览器充当各个厂家的客户端 用户无需对应下载相应客户端
      """

# 两种架构的优缺点
  C/S架构:
    优势:针对客户端可以高度定制
    劣势:需要用户去下载才能使用
  B/S架构:
    优势:无需下载 急速体验
    劣势:无法做到高度定制 体验效果较差
     '''
     目前的趋势其实更加偏向于B/S架构
         微信小程序
             只需要下载一个微信就可以通过微信去访问很多服务端
         支付宝诸多应用
             只需要下载一个支付宝就可以通过支付宝体验很多服务
     统一提供接口服务>>>:获取大量用户及数据 中途还可以提供广告服务
     '''

 

2. 网络编程简介

# 什么是网络编程
    网络编程的研究前提就是基于互联网 网络编程就是基于互联网编写代码,程序之间的数据通信
# 学习网络编程的目的/结果
    学习完网络编程之后就可以开发C/S架构的软件(掌握原理 使用框架)
# 网络编程发展史 
    该技术源于美国军方>>>:很多先进的技术都是由军事发明后续转为民用
  实际应用:
    军方想要实现不同计算机之间数据交互
        没有网络编程技术的时候只能拿U盘拷贝并携带
      为了跨区域交互数据所以发明了网络编程
# 早期远程通信
  1.座机电话
      彼此打电话需要电话线
  2.大屁股电脑
      数据交互需要插网线
  3.智能手机
      数据交互需要无限网卡
  '''
  电话线 网线 无限网卡
  远程通信的前提是必须具备一个物理链接介质
  '''
# 互联网协议
    不同计算机之间要想实现无障碍交互 
      除了需要有物理链接介质之外还需要一套公有的标准
        '''
        思考为什么不同厂家的手机零部件几乎是一样的
        '''
    这个标准是>>>:互联网协议(OSI七层协议)

 

 

 

3. OSI七层协议

OSI(Open System Interconnect),即开放式系统互联。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联。


"""
所有的计算机在生产过程中必须有相同的部分和相同的功能
    应、表、会、传、网、数、物
"""
  1.应用层
  2.表示层
  3.会话层
  4.传输层
  5.网络层
  6.数据链路层
  7.物理链接层
# 上述的七层也有很多人总结为五层
  1.应用层(三层)
  2.传输层
  3.网络层
  4.数据链路层
  5.物理链接层

 

 

 

4. OSI七层协议

OSI七层的本质其实就是规定了数据要想基于网络发送出去必须在计算机上经历一些固定的流程
# 物理链接层
    物理链接介质,传递电信号

 

# 数据链路层
    定义了数据化格式化传输,如何控制对物理介质的访问,这层提供信息的检测和纠正,以确保数据的可靠性传输
    """
    基于物理链接层接收到一串二进制数 如何切分才能正常解析?
    """
  1.规定了二进制数据的分组方式
  2.规定了'以太网协议'
      但凡能够接入互联网的计算机都必须有一块网卡
        每块网卡在出厂的时候都会被烧制一个全世界独一无二的编号
      该编号是由12位16进制数组成
          前六位是产商编号
        后六位是流水线号
    这个独一无二的编号也有一个称呼>>>:'mac地址'(类似于身份证号)
  ps:基于mac地址就可以实现计算机之间的数据通信了!!!


专业设施名词

1.交换机
  让接入交互机的多台计算机之间彼此互联
2.局域网
  由交换机组成的网络称之为局域网(一个区域)
3.广播与单播
  广播:在交换机中群发
  单播:定向回复消息(记录mac地址)
4.路由器
  将局域网彼此链接起来并支持数据交互
  互联网其实可以看成是由多个局域网链接在一起
"""
在局域网中可以直接基于mac地址实现数据交互
但是可能会产生广播风暴:交换机中同一时间出现太多广播操作
mac地址只能用于局域网交互数据 不能跨局域网传输
"""

 

 

# 网络层
    对在不同地理位置的网络中的两个主机系统提供连接和路径选择
    IP协议
      规定了每台接入互联网的计算机都必须有一个IP地址(取决于网线)
        IP地址目前有两个版本
          IPV4:点分十进制
              最小:0.0.0.0
            最大:255.255.255.255
            # 随着社会的进步 计算机的使用越来越普遍 IPV4地址不够用
        IPV6:十六进制
          '''IPV6可以表示出地球上每一粒沙子'''
   ps:IP地址可以唯一标识地球上独一无二的一台接入互联网的计算机
   """
   IP地址分为公网IP和私网IP
           公网IP是可以直接被浏览器访问到的 但是私网IP是不可以的
               我们所有人的电脑默认使用的都是私网IP
           
           公网IP需要花钱购买并且需要实名认证并备案
               很多非法网站都是在国外注册备案
   """

 

 

# 应用层
    这里完全可以取决于程序员自己
      HTTP协议 HTTPS协议 FTP协议 自定义协议

 

 

# 传输层
    接受上一层的数据,将上层的数据进行分割操作,在当到达目的地址的时候再进行重组
    PORT协议(端口协议)
      """
      一台计算机上面可以运行很多数据交互软件 比如微信、qq、钉钉
      它们都是从内存中获取数据 为什么不会错乱
      
      就是因为端口协议的存在!!!
      """
    用于标识一台计算机上面正在运行的应用程序(端口号类似于手牌号)
    端口号的范围是:0~65535
      0~1024:系统经常使用的端口号
      1024~8000:常用软件端口号
      我们以后在写项目的时候推荐使用8000之后的端口
   1.同一时间同一台计算机上面端口号不能冲突
   2.端口号是动态分配的
        eg:打开微信随机分配一个没有被使用的端口号8888
         关闭微信重新打开那么会随机分配可能还是8888也可能是其他
"""
IP地址:用于标识全世界独一无二的一台接入互联网的计算机
PORT号:用于标识一台计算机上面的某一个应用程序

IP+PORT:能够标识全世界独一无二的一台计算机上面的某一个应用程序

我们日常生活使用浏览器访问的各个网址其实就是IP+PORT
    14.215.177.29:80      难记
    ip:port
    很多常见的服务端都不需要指定端口 只要访问了ip地址内部去会自动映射
    

域名解析
    将好记的地址解析成真正的地址
        www.baidu.com      解析        202.108.22.5:80
"""

 

5.  网络知识补充

# 1.什么是互联网?
    将计算机彼此链接到一起的介质
# 2.互联网建立的目的?
    基于互联网做数据交互
# 3.上网的本质
    基于网线去访问其他计算机上面的资源
"""其实我们的计算机也可以称之为是服务器/服务端(专门对外提供服务)"""

 

6. TCP与UDP协议

# 都属于传输层

# TCP协议
  流式协议、可靠协议
  基于TCP协议进行数据交互之前需要做一系列复杂的操作>>>:三次握手四次挥手
  """
三次握手建立链接
eg:彼此挖通道
1. 客户端会朝服务端发送一个请求询问服务端:"我能不能挖一条通往你家的地道"

2. 服务端收到请求,回复说:"好吧 你挖吧",由于TCP是双向通道,客户端挖向服务端的通道只能给客户端朝服务端发消息使用,服务端要向给客户端发消息是没办法走这一条通道的,需要自己挖一条通往客户端的通道

 所以服务端在回复同意客户端挖通道的同时还会问一句:"那我能不能也挖一条通往你家的通道"

3. 客户端收到服务端请求后客户端到服务端的通道就挖成功了,然后也会同意服务端的请求,服务端挖向客户端的通道也会成功

总结:之所以称之为三次握手就是因为中间的服务端的同意,和请求合并成了一次请求
          
四次挥手断开连接
eg:彼此切断通道
1. 客户端由于已经没有任何需要发送给服务端的消息了,所以发起断开客户端到服务端的通道请求

2. 服务端收到该请求后同意了 至此客户端到服务端的单项通道断开

服务端这个时候不会立刻朝客户端发器请求说那我也断开到你家的通道吧,服务端需要想想我手上还有没有需要发送给客户端的消息,如果还有的话,那我不能立马断开,先把数据发完才能断

3. 等服务端检查完毕之后发送也没有数据要给客户端了,这个时候就会朝客户端发起断开服务端到客户端的通道请求

4. 客户端同意该请求,至此四次挥手完成
          
  洪水攻击:服务端接收到了大量的syn请求 处于rcvd状态
      控制很多台计算机同一时刻去访问服务端 造成服务端瞬间过载瘫痪
  """

总结:挥手必须是四次,中间的两次不能合并成一次,原因就在于需要检查是否还有数据需要给对方发送
  
# UDP协议
  丢包协议、不可靠协议
  不需要建立双下通道 数据的传输速度快 但是可能会丢失
  数据发送没有通道的概念 发送出去了就不管了
  qq使用的就是UDP协议 所以有时候会产生数据丢失现象
      但是我们可以在UDP协议的基础之上做很多额外的扩展来保证数据的安全
  
"""
TCP协议类似于打电话:你一句我一句 你侬我侬
UDP协议类似于发短信:发了之后不管你看不看 只要发了就行
"""

 

posted @ 2022-04-14 15:56  thrombus  阅读(78)  评论(0)    收藏  举报