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

发布时间 2023-07-03 16:20:45作者: 初学程序员

软件开发架构

网络编程

  我们要基于网络来编写一款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.速度快