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

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

        •  

  • 相关阅读:
    关于html5的一些知识。
    常见的http状态码总结。
    踩坑记录-安装node-sass运行报错TypeError: this.getResolve is not a function at Object.loader
    踩坑记录-!!vue-style-loader!css-loader错误
    koa-passport做登录注册验证
    nuxt项目里使用vuex状态树
    node(koa、nuxt等项目)中使用import报错问题
    koa+nodemailer实现邮箱验证注册功能
    踩坑记录-nuxt引入vuex报错store/index.js should export a method that returns a Vuex instance.
    常用shell命令积累
  • 原文地址:https://www.cnblogs.com/zhangxiangning/p/10268768.html
Copyright © 2011-2022 走看看