• 博客整理day26


    python day26

    软件开发架构

    开发软件,要有一套客户端和一套服务端

    ​ 服务端:24小时不间断提供服务

    ​ 客户端:需要访问时,向服务端发起访问

    软件开发架构:

    C/S架构

    Client:客户端

    Server:服务端

    优点:

    ​ 软件的使用稳定.并且可以节省网络资源

    缺点:

    ​ 1.若用户想在同一个设备上使用多个软件,必须下载多个客户端

    ​ 2.软件的每一次更新,客户端也必须跟着更新

    B/S架构

    Browser: 浏览器(客户端)

    Server: 服务端

    优点:

    ​ 以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新

    ​ 直接在浏览器上访问软件

    缺点:

    ​ 消耗网络资源过大,当网络不稳定时,软件的使用也会不稳定

    互联网协议

    互联网协议又称为网络七层协议,OSI七层协议

    OSI七层协议:

    应用层

    表示层

    会话层

    传输层

    传输层:帮助区分子网,以太网的Mac帮我们找到主机

    传输层的功能:建立端口到端口的通信

    ​ 端口号:标识电脑上的某一个软件

    ​ 端口号范围: 0-65535

    开发中常用软件的默认端口号:

    ​ mysql : 3306

    ​ mongodb : 27017

    ​ Django : 8000

    ​ Tomcat : 8080

    ​ Flack : 5000

    ​ Redis : 6379

    若想服务端与客户端进行通信,必须要建立连接,产生双向通道

    ​ 一条是客户端通往服务端发送消息的

    ​ 另一条是服务端通往客户端发送消息的

    TCP工作原理

    三次握手

    第一次握手:建立连接时,客户端发送syn包(syn=x)到服务器,并进入SYN_SENT状态,等待服务器确认

    第二次握手:服务器收到syn包,必须确认客户端的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),此时服务器进入SYN_RECV状态

    第三次握手:客户端收到服务器的SYN+ACK包,并向服务器发送ACK确认包,此包发送完毕,客户端和服务器都进入 ESTABLISHED 状态(TCP连接成功)

    四次挥手

    1. 客户端进程发送连接释放报文,并且停止发送数据.释放数据报文首部,FIN=1,此时客户端进入FIN-WAIT-1状态
    2. 服务器收到连接释放报文,发送确认报文,ACK=1,ack=u+1,并且带上自己的序列号,此时服务端进入CLOSE-WAIT(关闭等待)状态.客户端收到服务器的确认请求之后,此时,客户端就进入FIN-WAIT-2状态,等待服务器发送连接释放报文(在这之前还需要接收服务器发送的最后数据)
    3. 服务器将所有的数据发送完毕之后,就像客户端发送连接释放报文,FIN=1,ack=u+1.此时服务器进入LAST-ACK(最后确认)状态,等待客户确认
    4. 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,此时客户端就进入了TIME-WAIT(时间等待)状态.(此时TCP连接还没有释放,需经过2MSL的时间后,才进入CLOSED状态).服务器只要收到了客户端发出的确认请求,就立刻进入CLOSED状态

    网络层

    IP协议:规定网络地址的协议叫IP协议

    ​ IP地址,用于表示唯一的一台进算计(局域网)的地址

    ​ IP地址分为:网络部分(标识子网),主机部分(标识主机)

    IP:点分十进制

    ​ 最小值 0,0,0,04

    ​ 最大值 255,255,255,255

    ARP协议功能:广播的方式发送数据包,获取目标主机的Mac地址

    协议工作方式:每台主机IP都是已知的

    数据链路/层

    ​ 数据链路层的功能: 定义了电信号的分组(识别电信号)

    以太网协议
    1. 规定好电信号数据的分组方式

    2. 每一台连接网线的电脑都必须要由一块'网卡'

      每块网卡都会有一个独一无二的12位编号(mac地址)

      ​ 前六位:厂商号

      ​ 后六位:流水号

    交换机:

    ​ 可以让多台电脑连接到一起

    基于以太网协议发送数据:

    ​ 特点:

    ​ 广播,单播

    ​ 弊端:

    ​ 广播风暴,不能跨局域网通信

    互联网:

    ​ 让局域网之间进行通信

    物理连接层

    物理层功能:主要是基于电器特性发送高低电压(二进制数据)

    Socket

    什么是Socket

    socket是一个模块,可以用于编写C/S架构的套接字

    为什么要是用Socket

    socket套接字会封装好各层协议的工作

    优点:

    ​ 可以节省开发成本

    Socket的使用

    ​ 基于TCP开发一款远程CMD程序
    客户端连接服务器后,可以向服务器发送命令
    服务器收到命令后执行,无论执行是否成功,无论执行几遍,都将执行结果返回给客户端

    #客户端
    import socket
    
    client = socket.socket()
    client.connect(('192.168.13.161',8888))
    while True:
        cmd_msg = input('请输入CMD命令:')
        client.send(cmd_msg.encode('utf-8'))
    
        if cmd_msg == 'q':
            break
    
        data = client.recv(1024).decode('utf-8')
    
        print(data)
    client.close()
    
    #服务端
    import socket
    import subprocess
    
    server = socket.socket()
    server.bind(('192.168.13.161',8888))
    server.listen(3)
    conn,addr = server.accept()
    while True:
        data = conn.recv(1024).decode('utf8')
    
        if data == 'q':
            break
    
        retcode, output = subprocess.getstatusoutput(data)
        print(retcode, output)
        output = output.encode('utf8')
    
        conn.send(output)
    
    conn.close()
    
  • 相关阅读:
    实现Runnable接口和继承Thread类的区别
    图的DFS和BFS
    图建模
    数据结构-图的基本知识和表示
    除自身以外的乘积数组(力扣第238题)
    MapReduce源码分析--Shuffle阶段
    转到博客园
    vue中使用剪切板插件 clipboard.js
    vue中使用vue-qrcode生成二维码
    h5中嵌入视频自动播放的问题
  • 原文地址:https://www.cnblogs.com/samoo/p/11694172.html
Copyright © 2020-2023  润新知