s21day28 python笔记

一、内容回顾

二、tcp / udp 协议

2.1 tcp协议

  1. 特点:
    • 可靠,慢,全双工通信
    • 建立连接时:三次握手
    • 断开连接时:四次挥手
    • 在建立起连接之后
      • 发送的每一条信息都有回执
      • 为了保证数据的完整性,还有重传机制
    • 长连接:会一直占用双方的端口
    • IO(input,output)操作,输入和输出是相对内存来说的
      • write send - output
      • read recv - input
    • 能够传递的数据长度几乎没有限制
  2. 应用场景:
    • 文件的上传下载
      • 发送邮件,网盘,缓存电影等

2.2 udp协议

  1. 特点:
    • 无连接的,速度快
    • 可能会丢消息
    • 能够传递的数据长度是有限的,是根据数据传递设备的设置有关系
  2. 应用场景:
    • 即时通信类
      • qq,微信,飞秋等

三、osi七层模型/osi五层协议

3.1 osi七层模型

  • 第七层:应用层
  • 第六层:表示层
  • 第五层:会话层
  • 第四层:传输层
  • 第三层:网络层
  • 第二层:数据链路层
  • 第一层:物理层

3.2 osi五层协议

层数 名称 内容 协议 物理设备
第五层 应用层 python代码 http/https/ftp/smtp协议
第四层 传输层 port端口 tcp/udp协议 四层路由器,四层交换机
第三层 网络层 ip地址 ipv4/ipv6协议 (三层)路由器,三层交换机
第二层 数据链路层 mac地址 arp协议 网卡,(二层)交换机
第一层 物理层

四、socket(套接字)

  1. 基本知识:

    • 通过python的socket模块,完成socket的功能
    • 工作在应用层和传输层之间的抽象层,帮助我们完成了所有信息的组织和拼接
    • sokcet对于程序员来说,已经是网络操作的底层了
    • socket历史
      • 早期:基于文件,同一台机器上的两个服务之间的通信
      • 现在:基于网路,多台机器之间的多个服务通信
  2. 基于tcp协议的socket:

    SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
    • tcp是基于链接的,必须先启动服务端,然后再启动客户端去链接服务端
    # server.py 服务端
    import socket
    sk = socket.socket()
    sk.bind(('127.0.0.1',8898))  # 把地址绑定到套接字
    sk.listen()                  # 监听链接
    conn,addr = sk.accept()      # 接受客户端链接
    ret = conn.recv(1024)        # 接收客户端信息
    print(ret)                   # 打印客户端信息
    conn.send(b'hi')             # 向客户端发送信息
    conn.close()                 # 关闭客户端套接字
    sk.close()                   # 关闭服务器套接字(可选)
    
    # client.py 客户端
    import socket
    sk = socket.socket()              # 创建客户套接字
    sk.connect(('127.0.0.1',8898))    # 尝试连接服务器
    sk.send(b'hello!')
    ret = sk.recv(1024)               # 对话(发送/接收)
    print(ret)
    sk.close()                        # 关闭客户套接字
    
    # 注意:运行时,先执行server.py,再执行client.py
  3. 基于udp协议的socket:

    • udp是无链接的,启动服务之后可以直接接受消息,不需要提前建立链接
    # server.py 服务端
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)   # 创建一个服务器的套接字
    sk.bind(('127.0.0.1',9000))                  # 绑定服务器套接字
    msg,addr = sk.recvfrom(1024)
    print(msg)
    sk.sendto(b'hi',addr)                        # 对话(接收与发送)
    sk.close()                                   # 关闭服务器套接字
    
    # client.py 客户端
    import socket
    sk = socket.socket(type=socket.SOCK_DGRAM)
    sk.sendto(b'hello',('127.0.0.1',9000))
    msg = sk.recv(1024)
    print(msg.decode('utf-8'))
    sk.close()
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄