浅谈TCP协议、UDP协议

一、介绍说明

TCP(传输控制协议)

  1. 面向连接:TCP在数据传输之前必须建立连接。这通过一个称为三次握手的过程来完成,确保连接的两端都准备好进行数据传输。

  2. 可靠性:TCP提供可靠的数据传输,确保数据包正确无误地到达目的地。如果数据包在传输过程中丢失或损坏,TCP会重新发送这些数据包。

  3. 有序性:TCP保证数据包按照发送的顺序到达接收端。接收方会根据数据包的序列号重新组装数据。

  4. 拥塞控制:TCP具有拥塞控制机制,能够根据网络状况调整数据发送速率,以避免网络拥塞。

  5. 流量控制:TCP使用滑动窗口机制来控制发送方的数据流量,确保接收方不会因为数据量过大而无法处理。

  6. 全双工通信:TCP允许数据在两个方向上同时传输,即发送方和接收方可以同时发送和接收数据。

  7. 适用场景:由于TCP的可靠性和有序性,它适用于需要数据完整性和顺序的应用,如网页浏览(HTTP)、文件传输(FTP)、电子邮件(SMTP)和远程登录(SSH)。

UDP(用户数据报协议)

  1. 无连接:UDP是一个无连接的协议,数据传输前不需要建立连接。发送方可以直接发送数据包,而不需要等待接收方的确认。

  2. 不可靠性:UDP不保证数据包的可靠传输。数据包可能会丢失、重复或乱序到达,但UDP不负责重新发送丢失的数据包。

  3. 低延迟:由于UDP没有建立连接和复杂的控制机制,它通常具有较低的延迟,适合需要快速传输的应用。

  4. 简单性:UDP的协议结构简单,头部开销小,这使得它在需要快速、简单传输的场景下非常有效。

  5. 适用场景:UDP适用于对实时性要求高、可以容忍一定数据丢失的应用。例如,视频会议、在线游戏、DNS查询和某些类型的流媒体服务。

二、简单代码示例

TCP服务器示例(Python)

import socket

def tcp_server():
    # 创建socket对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 设置服务器地址和端口
    host = '127.0.0.1'
    port = 12345
    
    # 绑定地址和端口
    server_socket.bind((host, port))
    
    # 开始监听连接
    server_socket.listen(5)
    print("服务器启动,等待连接...")
    
    while True:
        # 接受客户端连接
        client_socket, addr = server_socket.accept()
        print(f"接收到来自 {addr} 的连接")
        
        # 接收数据
        data = client_socket.recv(1024)
        if not data:
            break
        print(f"收到数据:{data.decode('utf-8')}")
        
        # 发送数据
        client_socket.sendall(data)
        
        # 关闭客户端连接
        client_socket.close()

if __name__ == '__main__':
    tcp_server()

TCP客户端示例(Python)

import socket

def tcp_client():
    # 创建socket对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 设置服务器地址和端口
    host = '127.0.0.1'
    port = 12345
    
    # 连接服务器
    client_socket.connect((host, port))
    
    # 发送数据
    message = 'Hello, Server!'
    client_socket.sendall(message.encode('utf-8'))
    
    # 接收数据
    data = client_socket.recv(1024)
    print(f"收到服务器响应:{data.decode('utf-8')}")
    
    # 关闭连接
    client_socket.close()

if __name__ == '__main__':
    tcp_client()

UDP服务器示例(Python)

import socket

def udp_server():
    # 创建socket对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 设置服务器地址和端口
    host = '127.0.0.1'
    port = 12345
    
    # 绑定地址和端口
    server_socket.bind((host, port))
    print("UDP服务器启动,等待数据...")

    while True:
        # 接收数据
        data, addr = server_socket.recvfrom(1024)
        print(f"收到来自 {addr} 的数据:{data.decode('utf-8')}")
        
        # 发送响应数据
        server_socket.sendto(b'收到你的数据', addr)

if __name__ == '__main__':
    udp_server()

UDP客户端示例(Python)

import socket

def udp_client():
    # 创建socket对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
    # 设置服务器地址和端口
    host = '127.0.0.1'
    port = 12345
    
    # 发送数据
    message = 'Hello, UDP Server!'
    client_socket.sendto(message.encode('utf-8'), (host, port))
    
    # 接收响应数据
    data, server = client_socket.recvfrom(1024)
    print(f"收到服务器响应:{data.decode('utf-8')}")
    
    # 关闭socket
    client_socket.close()

if __name__ == '__main__':
    udp_client()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CnLg.NJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值