zoukankan      html  css  js  c++  java
  • python — TCP协议与UDP协议

    1. TCP协议 / UDP协议

    1.1 TCP协议

    • 1.可靠、慢、全双工通信

    • 2.建立连接的时候 : 三次握手

    • 3.断开连接的时候 : 四次挥手

    • 4.在建立起连接之后

      • 发送的每一条信息都有回执

      • 为了保证数据的完整性,还有重传机制

    • 5.长连接 :会一直占用双方的端口

    • 6.IO(input,output)操作,输入和输出是相对内存来说的

      • write / send -----> 输出 output

      • read / recv ------> 输入 input

    • 7.能够传递的数据长度几乎没有限制

    1.2 UDP协议

    • 1.无连接的 速度快
    • 2.可能会丢消息
    • 3.能够传递的数据的长度是有限的,是根据数据传递设备的设置有关系

    1.3 应用场景

    • TCP 文件的上传下载(发送邮件、网盘、缓存电影)
    • UDP 即时通信类的(qq、微信、飞秋)

    2. osi七层模型 /osi五层协议

    osi七层模型 osi五层协议 协议 物理设备
    应用层
    表示层
    会话层
    (三层总结成一层)
    五层 应用层 http / https / ftp / smtp 协议
    python代码:hello
    传输层 四层 传输层 tcp协议 / udp协议 端口 四层路由器、四层交换机
    网络层 三层 网络层 ipv4 / ipv6 协议 (三层)路由器、三层交换机
    数据链路层 二层 数据链路层 mac地址 arp协议 网卡、(二层)交换机
    物理层 一层 物理层

    3. socket(套接字)

    socket 是一个工作在应用层和传输层之间的抽象层。

    • 帮助我们完成了所有信息的组织和拼接
    • sokcet对于程序员来说 已经是网络操作的底层了

    socket历史:

    • (初期)基于文件通信 -------- 完成同一台机器上的两个服务之间的通信的
    • (现在)基于网路通信 -------- 完成了多台机器之间的多个服务通信

    3.1 socket用于TCP协议

    # server.py 服务端
    import socket
    
    sk = socket.socket()  
    # socket()参数中:family(基于……通信)=AF_INET(网络通信), type(协议)=SOCK_STREAM(TCP协议),TCP协议默认不用写,如果想要写协议必须是:type=socket.SOCK_STREAM
    sk.bind(('192.168.12.25',9000))
    sk.listen()
    while True:
        conn,addr = sk.accept()
        while True:
            msg = conn.recv(1024)
            if msg.decode('utf-8').upper() == 'Q':
                break
            print(msg.decode('utf-8'))
            cont = input('内容(输入Q断开):')
            conn.send(cont.encode('utf-8'))
            if cont.upper() == 'Q':
                break
        conn.close()
    sk.close()
    
    # client.py 客户端
    import socket
    
    sk = socket.socket()
    sk.connect(('127.0.0.1',9000))
    while True:
        msg = sk.recv(1024)
        if msg.decode('utf-8').upper() == 'Q':
            break
        print(msg.decode('utf-8'))
        cont = input('内容(输入Q断开):')
        sk.send(cont.encode('utf-8'))
        if cont.upper() == 'Q':
            break
    sk.close()
    

    sk.accept() 与 sk.connect() 是建立三次握手的过程

    3.2 socket用于UDP协议

    # server.py 服务端
    import socket
    
    sk = socket.socket(type = socket.SOCK_DGRAM) # UDP协议必须加上 type=socket.SOCK_DGRAM
    sk.bind(('127.0.0.1',9000))
    while True:
        msg,client_addr = sk.recvfrom(1024) # recvfrom用于不知道对方ip时,获取到ip给client_addr
        msg = msg.decode('utf-8')
        print(msg)
        msg1 = input('>>>').encode('utf-8')
        sk.sendto(msg1,client_addr)
    sk.close()
    
    # client.py 客户端
    import socket
    
    sk = socket.socket(type = socket.SOCK_DGRAM)
    while True:
        inp = input('>>>').encode('utf-8')
        sk.sendto(inp,('127.0.0.1',9000))
        msg = sk.recv(1024).decode('utf-8') # 这里不需要使用recvfrom,因为知道对方ip地址
        print(msg)
    
    sk.close()
    
  • 相关阅读:
    Fiddler系列教程3:使用Fiddler录制Jmeter性能测试脚本
    PySide6读取EXCLE文档
    C#实现操作DOS命令的方法
    在PyCharm中调用xlrd模块出现 ModuleNotFoundError: No module named 'xlrd' ,但在sublime却可以正常
    pip安装时出现错误:File "D:Python39Scriptspip.exe\__main__.py", line 4, in <module> ModuleNotFoundError: No module named 'pip'
    /ect/fstab与/etc/mtab的区别
    虚拟机中Ubuntu系统修改分辨率
    关于报错Could not load file or assembly的问题
    关于WinCC归档应该知道的事
    vue + element 表单的简单公用组件,表格的集成写法
  • 原文地址:https://www.cnblogs.com/yangjie0906/p/10826112.html
Copyright © 2011-2022 走看看