zoukankan      html  css  js  c++  java
  • 网编

    网络编程

    概念

    1. 两个地址

      1. 不变的:mac地址(在网卡上),能够唯一标识你这台机器

      2. 变化的:ip地址,能够更好地更方便的找到你这的机器

    2. 局域网

      1. 一个局域网内:

        1. 交换机:只理解mac地址,不理解ip地址,通过arp协议获取目标mac地址进行通信

        2. 交换机三种工作方式:

          1. 广播

          2. 单播

          3. 组播

        3. arp协议:地址解析协议。广播的方式发送数据包,获取目标主机的mac地址(计算机通信基本靠吼,即广播的方式,所有上层的包到最后都要封装上以太网头,然后通过以太网协议发送)

        4. 网段:ip地址前三位,用子网掩码判断,见后图

      2. 局域网之间:

        1. 路由器:可以理解IP地址

        2. 网关:ip前两位

       

    3. IP地址

      1. ipv4:四位点分十进制(实际是四个八位二进制)

      2. 公网地址:需要我们自己购买

      3. 内网地址:保留字段

        1. 192.168.0.0 — ~.255

        2. 172.16.0.0 — 172.31.255.255

        3. 10.0.0.0 — ~.255

      4. 特殊的ip地址:

        127.0.0.1:本地回环地址,回到自己计算机,测试用

      5. 查看自己ip:ipconfig/ifconfig

      6. ipv6:六位冒分十六进制(FFFFFF:FFFFFF:FFFFFF:FFFFFF:FFFFFF:FFFFFF)

    网络开发结构

    1. C/S架构:需要安装一下

      client:客户端

      server:服务端

      好处:功能更完善,可以离线使用,安全性更高

    2. B/S架构:

      browser:浏览器

      server:服务端

      好处:不用安装就可以使用,统一PC端用户的入口

    3. 两者的关系:B/S也是C/S的一种

    4. 端口port:用来连接电脑的应用

    socket套接字

    两个模块

    server模块

     1  import socket
     2  3  sk = socket.socket()          # 创建一个server端的对象
     4  sk.bind(('127.0.0.1',9001))  # 给server端绑定一个地址
     5  sk.listen()                   # 开始监听(可以接收)客户端给我的连接了
     6  7  conn,addr = sk.accept()  # 建立连接 conn是连接
     8  conn.send(b'hello')
     9  msg = conn.recv(1024)
    10  print(msg)
    11  conn.close()     # 关闭连接
    12 13  sk.close()

    client模块

     
     1 import socket
     2  3  sk = socket.socket()
     4  sk.connect(('127.0.0.1',9001))
     5  6  7  msg = sk.recv(1024)
     8  print(msg)
     9  sk.send(b'byebye')
    10 11  sk.close()

    osi七层协议(应表会传网数物)

    1. osi5层协议(前三层为一层)

      应用层 python (内容)

      传输层 port udp tcp 四层路由器 四层交换机 (端口)

      网络层 ipv4 ipv6 路由器 三层交换机 (ip)

      数据链路层 mac arp协议 网卡 二层交换机 (mac)

      物理层 转化交流电信号

      一层一层封装,一层一层解析,每层都有自己封装解析的内容,封装与解析顺序相反

    2. tcp和udp

      1. tcp(全双工)(语音聊天/视频聊天) — 线下缓存高清电影/qq远程控制/发邮件

        • 先建立连接,然后才能通信

        • 占用连接,可靠(消息不会丢失),实时性高,慢

        • 建立连接 — 三次握手

           

          请求连接服务SYN,同意ACK

        • 断开连接 — 四次挥手

           

          请求结束服务FIN

        为什么握手三次,挥手四次?

        • 可能有遗留数据没有传送完,所以断开的两步必须分开

        三次握手四次挥手实例

         

      2. udp(发消息) — 在线播放视频/qq发消息/微信消息

        • 不需要建立连接就可以通信

        • 不占用连接,不可靠(消息因为网络不稳定丢失),快

    包的导入

    导入一个包(文件夹)相当于执行了这个包下的__init__文件并不相当于把这个包下的所有文件都导入进来了

    1. 要想直接导入某个包(文件夹)下的文件

      1. import as语句

        1  # import glance.api.policy as policy
        2  # policy.get()
      2. from import

        1  # from glance.api import policy    # 直接从一个包中导入文件
        2  # policy.get()
        3  # from glance.api.policy import get # 直接从包的文件中导入函数名/变量名
        4  # get()
    2. 进阶:绝对导入,相对导入

      1. 绝对导入:以glance作为起始

        • 当你需要写一个功能,这个功能不是直接运行的,而是被别人导入之后使用的,这种情况如果你的这个独立功能形成文件夹,文件夹内的所有文件都需要使用相对导入

      2. 相对导入:用.或者..的方式最为起始(只能在一个包中使用,不能用于不同目录内)在相对导入时不能执行文件

        • 但是如果我们自己开发一个项目,这个项目有一些文件是需要直接运行的,这种情况下不适合用相对导入,适合用绝对导入

        •  

  • 相关阅读:
    LeetCode Best Time to Buy and Sell Stock
    LeetCode Scramble String
    LeetCode Search in Rotated Sorted Array II
    LeetCode Gas Station
    LeetCode Insertion Sort List
    LeetCode Maximal Rectangle
    Oracle procedure
    浏览器下载代码
    Shell check IP
    KVM- 存储池配置
  • 原文地址:https://www.cnblogs.com/zhangxiangning/p/10268768.html
Copyright © 2011-2022 走看看