首页 > 编程语言 >python基础35 网络编程 软件开发架构和七层协议

python基础35 网络编程 软件开发架构和七层协议

时间:2023-07-03 16:23:05浏览次数:43  
标签:协议 浏览器 python 七层 端口 35 IP地址 服务端 客户端

软件开发架构

网络编程

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

目的

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

C/S

  客户端(client)-------------------------------------网络传输---------------------------------服务端(server)

B/S

  客户端和服务端存在的问题:

    当我们下载大量的软件的时候,会占用用户电脑的大量资源,时间长了之后,电脑就会受影响。用户想要使用软件就必须下载,而每次下载都是成本很高。

  浏览器(browser)----------------------------------------------------网络传输---------------------------------服务端(server)

  由于之前的客户端都要让用户去下载,所以,后来就有人站出来,开发出浏览器,以后使用软件都在浏览器中打开,不用下载软件,浏览器我们也称之为万能客户端、超级客户端。

浏览器:类似于用户

客户端:类似于用户

服务端:饭店以及饭店工作人员

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

服务端所具备的特征:

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

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

OSI七层协议

什么是网络

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

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

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

互联网通信协议

  osi七层协议

 物理层:用来发送高低电频的

  单纯的发送高低电频没有意义,需要对电瓶分组,表示把不同的意义。物理层不能分组

数据链路层:专门用来做分组使用的

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

  head部分:固定18个字节

    发送者,源地址,6个字节

    接收者,目标地址,6个字节

    数据类型,6个字节

  data部分:

    最短46字节

  数据报具体内容:head长度+data长度=最短64字节

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

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

(前六位是厂商编号,后六位是流水线号)

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

网络层:

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

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

  IP地址组成:

    IPv4地址格式:0.0.0.0--------------->255.255.255.255

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

      windows系统:ipconfing

      linux(macos):ifconfig

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

    内网IP:192.168.1.63,会变的

  子网掩码:IP+子网掩码

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

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

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

  需要记忆:本地回环地址127.0.0.1(查找自己电脑)

传输层

  该层使用的是tcp协议和udp协议,也称之为端口协议,一般那一个端口表示一个程序

  一个端口表示一个正在运行的应用程序

  端口:0-65535

    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

    域名本质就是IP地址,域名最终被解析成对应的IP地址,才能找到对应的计算机

  保存域名和IP地址对应关系

    1.先从自己电脑的host文件中查找的

      C盘----windows----system32----drivers----ect----hosts

    2.如果housts文件没有对应的关系,在去对应平台的关系中去找

    3.域名是需要去购买的,并且是需要备案

应用层(application)

  离程序员最近的一层

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

  2.浏览器,我们就不能随便使用协议,就要按照浏览器协议,http协议

  3.http和https协议

    http和https特征:

      1.http不安全,传输的是明文

      2.https安全,传输的加密的

    https=http+ssl证书

    ssl证书:要去机构申请,国际组织

    怎么使用:

    nginx服务器:需要在nginx服务器的配置文件中配置一些代码才能使用.

TCP协议和UDP协议

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

  三次握手--------建立连接

  四次挥手---------断开连接

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

面试题

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

 

  客户端与服务端之间一定是客户端先向服务端发起请求,而不能返回来

  特殊情况;服务端可以主动向客户端发起请求 websocket协议,一般用在即时通信软件中

UDP协议

  1.不建立双向连接,也没有三次握手

  2.速度快

 

 

 

 

 

 

 

 

 

 

 

 

    

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

标签:协议,浏览器,python,七层,端口,35,IP地址,服务端,客户端
From: https://www.cnblogs.com/shanghaipudong/p/17523202.html

相关文章

  • Python之Mixins机制
    Mixins机制classVehicle:#交通工具passclassFlyMinix:"""将主类中有多个子类要继承的方法单独拿出来,重新定义一个类,将这个有给有需要的子类继承,在主类中不再写这个方法"""deffly(self):"""跟飞行相关的功能......
  • python 文件操作
    文件介绍文本文件可以使用记事本软件打开txt,py,md,json二进制文件不能使用记事本软件打开音频文件mp3视频文件mp4....图片png,jpg,gif,exe文件操作打开文件open()rwa是⽂本⽅式打开,适⽤于⽂本⽂件,会对⼆进制进⾏编码转换rbwbab是⼆进制......
  • python configparser模块的应用
    1、获取所有sectionimportconfigparser config=configparser.ConfigParser()config .read('文件所在的路径',encoding='utf-8')ret=config .sections()print(ret) 2、获取指定section下所有的键值对importconfigparser config=configparser.ConfigParser()......
  • python pytest 参数化的几种方式
    在pytest框架中,可以使用多种方式进行参数化测试。以下是一些常见的参数化方式及其示例:使用@pytest.mark.parametrize装饰器:可以使用pytest提供的@pytest.mark.parametrize装饰器来指定参数化测试的参数。下面是一个示例:[email protected]("num,expecte......
  • Python 转 Byte
    Python转Byte:详细介绍Python是流行的编程语言之一,拥有广泛的用途。在Python中,我们经常需要将数据从一种格式转换为另一种格式。其中一个转换的方式是将Python对象转换为字节数据,或者反过来。这篇文章将深入介绍Python转换为字节数据。什么是Byte?在计算机科学中,字......
  • python pytest框架文件结构
    pytest框架的文件结构相对灵活,没有强制要求特定的文件结构。然而,以下是一种常见的pytest框架文件结构示例:测试文件:测试文件是编写测试用例的主要部分,通常以test_开头,并以.py为扩展名。例如,test_example.py。测试函数:在测试文件中,测试用例通常以函数的形式存在。测试函数的命......
  • 关于python 跨域处理方式详解
    关于Python跨域处理方式详解跨域是指在浏览器中,一个网页的脚本试图访问另一个网页的脚本时,由于浏览器的同源策略,会出现跨域问题。Python作为一种常用的后端语言,也需要处理跨域问题。本文将详细讲解Python跨域处理的方式。什么是跨域在浏览器中,同源策略是一种安全机制,它限制了一......
  • Python错误:selenium自带click方法点击不到元素
    问题描述:selenium自带click方法,有的时候不好用,元素定位到了,但是就是点不上。 解决办法:原因分析:点击不到元素!解决办法:(1).selenium自带的click()方法:fromseleniumimportwebdriverel=driver.find_element(By.ID,ID)#找到元素el.click()#执行点击缺陷:不稳定......
  • python 实现 ctrl + 左键 单击刷新网页
    importsysfrompywinauto.applicationimportApplicationimportmouseimportkeyboardimporttimeclassApp(object):def__init__(self,pid):app=Application(backend='uia').connect(process=int(pid))self.win=app.top_w......
  • [oeasy]python0070_动态类型_静态类型_编译_运行_匈牙利命名法
     动态类型_静态类型回忆上次内容 上次了解了帮助文档的生成开头的三引号注释可以生成帮助文档文档可以写成网页 python3本身也有在线的帮助手册 目前的程序提高了可读性   ​ 添加图片注释,不超......