• Python TCP与UDP的区别


    TCP:英文全拼(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议.

    TCP通信需要经过创建连接、数据传送、终止连接三个步骤。

    TCP 特点
    面向连接
    通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。

    双方间的数据传输都可以通过这一个连接进行。

    完成数据交换后,双方必须断开此连接,以释放系统资源。

    这种连接是一对一的,因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。

    可靠传输
    TCP采用发送应答机制
    TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功

    超时重传
    发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。
    TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。

    错误校验
    由发送端计算,然后由接收端验证,其目的是为了检测数据在发送端到接收端之间是否有改动,如果接收方检测到校验和有差错,则直接丢弃这个数据包。

    流量控制和阻塞管理
    流量控制用来避免主机发送得过快而使接收方来不及完全收下。

    TCP 网络程序流程

    TCP 优缺点

    优点:可靠,稳定适合传输大量数据

    缺点:传输速度慢 、占用系统资源高

    TCP 使用场景

    当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

    UDP 网络程序流程

    UDP 网络程序发送数据不需要建立连接

    TCP与UDP的小例子(Python)

    TCP客户端 client

    import socket

    from pip._vendor.distlib.compat import raw_input

    target_host = "127.0.0.1"
    target_port = 9999
    #建立一个socket 对象
    client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 链接客户端
    client.connect((target_host,target_port))
    # print("connect%s %d" %(target_host,target_port))
    while True:
    data = raw_input('>')
    client.send(data)
    data = client.recv(1024)
    if not data:
    break
    print(data)

    TCP服务端server

    import socket
    bind_ip="0.0.0.0"
    bind_port = "9999"
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    server.bind((bind_ip,bind_port))
    server.listen(5)
    try:
        while True:
            client,add = server.accept()
            print("[*]你监听的是:%s:%d" %(add[0],add[1]))
            while True:
                data = client.recv(1024)
                if not data:
                    break
                    print(data)
                data = raw_input('>')
                client.send(data)
                print(data)
            else:
                client.close()
    except Exception as e:
        print(e)
    server.close()

    UDP 客户端 client

    import socket
    PORT =5555
    HOST = '127.0.0.1'
    s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    data = "hello UDP".encode()
    s.sendto(data,(HOST,PORT))
    print(s.recv(1024))
    print('Send:%s to %s:%s ' %(data,HOST,PORT))
    s.close()

    UDP 服务端 server

    import socket
    PORT =5555
    
    HOST = '127.0.0.1'
    s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    s.bind((HOST,PORT))
    while True:
        data,addr = s.recvfrom(1024)
        print("Receive %s" %(data.decode(),addr))
        # s.sendto("Hello".encode()+data,addr)
  • 相关阅读:
    爬虫笔记:使用python生成词云(八)
    31丨2内核剖析
    六飞翔篇(4讲)30 丨 2特性概览
    29 丨 我应该迁移到HTTPS吗?
    28 丨 连接太慢该怎么办:HTTPS的优化
    27丨更好更快的握手:TLS1.3特性解析
    26丨信任始于握手:TLS1.2连接过程解析
    Python全栈工程师 (exercises)
    Python全栈工程师(每周总结:2)
    Python全栈工程师(函数嵌套、变量作用域)
  • 原文地址:https://www.cnblogs.com/toby-yu/p/12357734.html
Copyright © 2020-2023  润新知