首页 > 编程语言 >python基础day36 软件开发架构

python基础day36 软件开发架构

时间:2023-07-03 21:01:01浏览次数:42  
标签:协议 软件开发 python day36 地址 IP地址 com 服务端 客户端

软件开发架构

网络编程:

我们要基于网络来编写一款B/S或者C/S架构的软件,比如ATM,我们现在写的都是单机版本的,没有接入网络的系统,别人是无法访问到的

目的:

以ATM为例,现在我们想把之前写的ATM系统变成基于网络传输的,别人如果想用,就必须把客户端下载到本地电脑上,以登录为例,用户把用户名和密码在客户端完成输入,然后把用户名和密码传到服务端进行用户名和密码的验证,这就是一款基于网络开发出的软件。

客户端(C)----------网络传输---------->服务端(S)

client                                                     server

B/S的由来

客户端和服务端存在的问题:当我们下载大量的软件的时候,会占用用户电脑的大量资源,时间长了之后,电脑就会受到影响,用户想要使用软件就必须下载,而每次下载都是成本很高的

 

B/S

browser                                                server

浏览器---------------网络传输---------------服务端

由于之前的客户端都要让用户去下载,所以后来就有人站出来,开发出来了一款浏览器,以后你再开发的软件可以直接在浏览器中打开,不用下载任何的客户端,浏览器我们也称之为万能客户端、超级客户端

B/S

  浏览器(browser):就类似于用户

  服务端(server):类似饭店中的工作人员

C/S

  客户端(client):就类似于用户

  服务端(server):类似饭店中的工作人员

PS:客户端时可以有多个的,服务端一般是只有一个(针对一款软件)

本质上B/S架构也是C/S架构

目前我们所使用的软件是二者兼有

服务端所要具备的特征:

  1. 24小时不间断对外提供服务

  2. 服务端要有一个公网IP(服务器:理解成另外一台计算机就行,是需要去买的,阿里云、腾讯云之类的)

 

OSI七层协议

1. 什么是网络?

  上网的本质就是:上传和下载数据的过程

  最开始的时候,世界上的计算机时不能互相通信,只是在局域网中通信,后来随着技术的发展,世界范围的计算机开始通信了,通过网络来通信,这就是我们现在所说的互联网。

网络的组成部分:物理连接设备(网线、交换机、路由器等)+ 计算机通信协议(英语)

2. 互联网通信协议:

OSI的七层协议

物理层

数据链路层

网络层

传输层

会话层

表示层

应用层

 

五层协议

物理层

数据链路层

网络层

传输层

应用层

 

物理层:

  它是专门用来发送高低电频的

  (01)1010(10101110)101010(1010)

PS:单独的发送高低电频是没有意义的,需要对电频进行分组,来表示不同的意思

    物理层是不能做分组的

数据链路层:

专门用来做分组使用的

  该层中的数据称之为是一个数据帧,数据帧由两部分组成:head(报头)+data(真实数据)

head部分:固定18个字节

○ 发送者/源地址,6个字节
○ 接收者/目标地址,6个字节
○ 数据类型,6个字节

data:

  最短46字节,最高1500字节

数据包的具体内容:head长度 + data长度 = 最短64字节,最高1518字节

该层使用的是以太网协议,以太网协议规定,任何接入互联网的计算机都应该有一个网卡,默认的就叫以太网

 

物理地址(Mac)地址

  每一个网卡都要有一个Mac地址,每块网卡出厂时都会被烧制上一个世界上唯一的Mac地址,长度为48位2进制,通常由12位16进制数表示

PS:Mac地址可以确定局域网中唯一一台计算机

 

网络层:

这一层使用的是IP协议,该协议规定接入互联网的计算机都必须要有一个IP地址,该层的数据被称之为是数据包,IP地址的分类:IPv4、IPv6

  IP地址:ip地址可以确定世界范围内任意的一个局域网

  IP地址的组成:

    IPv4地址的格式:

      0.0.0.0----------------------------------------->255.255.255.255

      00000000.00000000.00000000.00000000---------------------------------------------------------------11111111.11111111.11111111.11111111

如何查看自己电脑的IP地址:

  Windows系统:ipconfig

  Linux(macOS):ifconfig

1. 公网IP:固定的,不变,需要购买的(服务器),阿里云、腾讯云、百度云等,eg:172.12.1.101

2. 内网IP:eg:192.168.1.63,会变的

子网掩码:IP+子网掩码

IP地址+Mac地址可以确定世界范围内唯一一台计算机

其实,这里只需要IP地址就可以确定世界范围内唯一一台计算机了,为什么?

因为有一个叫arp协议,可以根据IP地址计算出Mac地址,所以,有了IP地址就像与有了Mac地址

 

本地回环地址:127.0.0.1(就是找自己的电脑,需要记忆)

 

传输层

  该层使用的是TCP协议和UDP协议,也称为是端口协议,我们一般使用端口来表示一个个的应用程序,一个端口表示一个正在运行的程序

端口:0-65535

PS:

  1. 0-1024之间的端口号一般是系统使用的,我们尽量不要使用,否则有可能会造成端口冲突

  2. 1025-8000之间的端口号一般是常用软件的端口号

    MySQL的默认端口号:3306

    Django的默认端口号:8000

  3. 以后我们自己开发的软件,尽量使用8000之后的 

常用软件的端口号:
应用程序:FTP     TFTP  TELNET     SMTP     DNS     HTTP     SSH     MYSQL
熟知端口:21,20     69         23             25          53          80         22        3306

DNS:域名解析
  baidu.com
  jd.com
  taobao.com
域名的本质其实就是IP地址,域名最终还是要解析成对应的IP地址,才能找到IP地址对应的计算机
baidu.com -------------------DNS--------------------------------------->172.1.1.1


我们有一个地方保存了域名和IP地址的对应关系(host文件)
baidu.com 127.0.0.1
jd.com 127.0.0.2
taobao.com 127.0.0.3


文件的后缀名是给我们看的,文件可以有后缀名也可以没有,Linux中,一切皆文件.

1. 先从你自己电脑的host文件中查找的
2. 如果hosts文件没有找到对应的关系, 在去对应平台的关系中去找
3. 域名是需要去购买的,并且是需要备案的

 

应用层

Application

才是跟我们程序员离得最近的一层

1. 客户端,想用什么协议就用什么协议,客户端是我们自己开发的

2. 浏览器,我们就不能随便使用协议了,要按照浏览器的协议(HTTP协议)

3. HTTP协议

 HTTPS协议

网址:https://www.baidu.com/?tn=49055317_42_hao_pg
协议://域名:端口/v1/v2?参数

http特征:

1. 不安全,因为经过jttp协议的数据都是明文传输的

https特征:

2. 安全,经过https协议传输的数据都是密文传输

 

https = http + ssl证书
ssl证书:要去机构申请,国际组织,怎么用呢?
NGINX服务器,需要在nginx服务器的配置文件中配置一些代码才能使用.

 

TCP协议和UDP协议

TCP协议的三次握手和四次挥手

TCP协议也叫可靠协议、流式协议(数据是可以分多次发送的)

 

三次握手----------------------------->为了建立链接

四次挥手----------------------------->断开链接

 

 

TCP协议的三次握手为什么可以保证数据安全?是因为建立双向通道吗

原因是:TCP协议的反馈机制

 

面试题:
1. 为什么建立连接是三次握手,关闭连接确是四次挥手呢?

 

 

客户端与服务端之间一定是客户端先向服务端发起请求,而不能返回来
特殊情况:服务端可以主动向客户端发起请求 websocket协议,一般用在即时通信软件中

 

UDP协议:
1. 不建立双向连接,也没有三次握手
2. 速度快

 

标签:协议,软件开发,python,day36,地址,IP地址,com,服务端,客户端
From: https://www.cnblogs.com/zfq132/p/17524026.html

相关文章

  • 怎样在C语言软件开发代码中加入音乐?
    在使用C语言编写游戏时,许多朋友遇到了添加音乐的问题,不知道该如何处理。今天我将一次性向大家分享解决方法!使用mciSendString函数播放音乐mciSendString函数支持多种媒体格式,如mp3、wma、wav、mid等。使用起来非常简单。下面是一个简单的示例,使用mciSendString函数播放MP3格式的......
  • Python web 框架对比:Flask vs Django
    哈喽大家好,我是咸鱼今天我们从几个方面来比较一些现在流行的两个pythonweb框架——Flask和Django,突出它们的主要特性、优缺点和简单案例到最后,大家将更好地了解哪个框架更适合自己的特定需求参考链接:https://djangocentral.com/flask-vs-django-selecting-the-perfect-pyt......
  • flask run 和python xxx 两种方式的区别
    在Flask项目中,flaskrun和pythonxxx(其中xxx是Python文件名)是两种不同的方式来运行Flask应用程序。flaskrun:这是Flask提供的命令行工具,用于在开发环境中运行Flask应用程序。当你在项目目录下运行flaskrun命令时,Flask会自动检测应用程序的入口文件(通常是app......
  • python requests
    参考资料菜鸟Pythonrequests模块PythonRequests库进阶用法——timeouts,retries,hooks中文文档地址:http://cn.python-requests.org/zh_CN/latest/英文文档地址:https://2.python-requests.org/en/master/api/后台接口packagecom.laolang.shop.modules.admin.controller;imp......
  • python连接Oracle数据库实现数据查询并导入MySQL数据库
    1.项目背景由于项目需要连接第三方Oracle数据库,并从第三方Oracle数据库中查询出数据并且显示,而第三方的Oracle数据库是Oracle11的数据库。而django4.1框架支持支持Oracle数据库服务器19c及以上版本,需要7.0或更高版本的cx_OraclePython驱动;django3.2支持Oracle数据库......
  • 简单的python面向对象案例——跑步或吃饭
    个人学习,仅供参考要求对象:小明a.属性:姓名,体重b.方法:跑步,吃东西(每次跑步会减掉0.1kg,每次吃东西增加0.2kg)输入名字以初始体重选择跑步或吃东西,输入次数打印当前体重代码如下:#定义一个类classPerson(object):#公共属性def__init__......
  • 在Jupyter笔记本中使用Python与GPT-4进行交互
    在这篇文章中,我们将讨论如何在Jupyter笔记本中使用Python与GPT-4(一种强大的自然语言处理模型)结合进行处理。尽管OpenAI并未特地发布名为"GPT-4"的模型,但我们可以使用现有的GPT-3作为参考。如OpenAI未来发布了GPT-4,其与GPT-3的用法将会非常相似。在Jupyter笔记本中使用Python与GPT......
  • 记一次python消费kafka进程持续消耗内存问题
    前提:python写了一个kafka消费的脚本,脚本中消费kafka消息并将消费到的数据放在一个线程池中进行业务代码处理,使用supervisor管理这个脚本进程遇到问题:这个进程占用的内存会越来越大,知道将机器内存消耗完排查:网上找了一堆内存分析工具,好像都需要预埋代码,或者重新启动一个进程,全扯......
  • python基础35 网络编程 软件开发架构和七层协议
    软件开发架构网络编程我们要基于网络来编写一款B/S或者C/S架构的软件,比如:ATM,我们写的只是ATM的单机版本,没有接入网络系统,别人无法访问到的目的以ATM为例,现在我们想把之前写的ATM系统编程基于网络传输的,别人如果想用,就必须把客户端下载到本地电脑上,已登录为例,用户把用......
  • Python之Mixins机制
    Mixins机制classVehicle:#交通工具passclassFlyMinix:"""将主类中有多个子类要继承的方法单独拿出来,重新定义一个类,将这个有给有需要的子类继承,在主类中不再写这个方法"""deffly(self):"""跟飞行相关的功能......