二、Python-网络编程(极速回顾)


返回

1、OSI七层模型

  1. 应用层(http、ftp)
    • 表示层
    • 会话层
  2. 传输层(TCP、UDP)
    • 端口通信:0-1023-65535
  3. 网络层(IP协议)
    • IP地址(32位:4段十进制)
    • 子网掩码(32位:网络位1、主机位0)
  4. 数据链路层(以太网协议enternet)
    • head(发送者mac6字节+接受者mac6字节+数据类型6字节)
    • data(46字节~1500字节)
    • 广播
  5. 物理层(01010101)

2、socket

  1. TCP(数据流)
    • 服务端

      sever = socket(AF_INET, SOCK_STREAM)
      sever.bind((IP, port))
      sever.listen(5)
      conn, addr = sever.accept()
      conn.recv(1024)
      conn.send(str.encode('utf-8'))
      conn.close()
      sever.close()

    • 客户端

      client = socket(AF_INET, SOCK_STREAM)
      client.connect((IP, port))
      client.send(str.encode('utf-8'))
      client.recv(1024)
      client.close()

  2. UDP(数据报)
    • 服务端

      sever = socket(AF_INET, SOCK_DGRAM)
      sever.bind((IP,port_sever))
      msg, addr = sever.recvfrom(1024)
      sever.sendto(msg,(IP,port_client))
      sever.close()

    • 客户端

      client = socket(AF_INET,SOCK_DGRAM)
      client.bind((IP,port_sever))
      client.sendto(msg,(IP,port_client))
      msg, addr = client.recvfrom(1024)
      client.close()

3、粘包

  1. 原因
    • 用户态

      分包

    • 内核态

      粘包(仅TCP)

  2. 解决
    • 规范传输协议
    • 加head

      struct模块
      bytes = struct.pack('i',int)
      int = struct.unpack('i',bytes)

返回