网络编程入门介绍:TCP 和 UDP

目录

  1. 简介
  2. TCP:传输控制协议
    • [TCP 的特点](#TCP 的特点)
    • [TCP 如何工作](#TCP 如何工作)
    • [TCP 示例](#TCP 示例)
    • [TCP 实践样例](#TCP 实践样例)
  3. UDP:用户数据报协议
    • [UDP 的特点](#UDP 的特点)
    • [UDP 如何工作](#UDP 如何工作)
    • [UDP 示例](#UDP 示例)
    • [UDP 实践样例](#UDP 实践样例)
  4. [TCP 与 UDP 的比较](#TCP 与 UDP 的比较)
  5. 总结

简介

在计算机网络中,TCP(传输控制协议)和 UDP(用户数据报协议)是两种常用的传输层协议。它们在数据传输方式、可靠性和用途上有显著差异。本文将通俗易懂地介绍 TCP 和 UDP,帮助新手理解这两种协议。

TCP:传输控制协议

TCP 的特点

  • 面向连接:TCP 在传输数据之前需要建立连接,类似于打电话前要拨号。
  • 可靠性:TCP 确保数据包按顺序、无丢失地传输到目标设备。
  • 流量控制:TCP 管理发送和接收数据的速率,避免网络拥塞。
  • 错误检测和恢复:TCP 能够检测数据传输中的错误,并进行重传。

TCP 如何工作

  1. 建立连接 :TCP 使用"三次握手"建立连接。
    • 客户端发送 SYN 请求。
    • 服务器收到请求并返回 SYN-ACK 确认。
    • 客户端收到确认后再发送 ACK 确认,连接建立。
  2. 数据传输:数据以段(Segment)为单位传输,每个段都包含序号,接收方按序接收并确认。
  3. 断开连接 :使用"四次挥手"断开连接。
    • 客户端发送 FIN 请求。
    • 服务器收到请求并返回 ACK 确认。
    • 服务器发送 FIN 请求。
    • 客户端收到请求后返回 ACK 确认,连接断开。

TCP 示例

场景:下载文件

  • 客户端请求下载文件,使用 TCP 连接确保文件完整无误地传输到客户端。

TCP 实践样例

下面是一个使用 Python 实现 TCP 客户端和服务器的示例:

TCP 服务器
python 复制代码
import socket

# 创建TCP/IP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定套接字到地址和端口
server_address = ('localhost', 65432)
server_socket.bind(server_address)

# 监听传入连接
server_socket.listen(1)

print('等待连接...')
connection, client_address = server_socket.accept()

try:
    print('连接来自', client_address)

    # 接收数据并发送回去
    while True:
        data = connection.recv(1024)
        if data:
            print('收到:', data.decode())
            connection.sendall(data)
        else:
            break
finally:
    # 关闭连接
    connection.close()
TCP 客户端
python 复制代码
import socket

# 创建TCP/IP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
server_address = ('localhost', 65432)
client_socket.connect(server_address)

try:
    # 发送数据
    message = '这是一个测试消息。'.encode()
    client_socket.sendall(message)

    # 接收响应
    data = client_socket.recv(1024)
    print('收到:', data.decode())
finally:
    # 关闭连接
    client_socket.close()

在这个示例中,TCP 服务器在 localhost 上的 65432 端口监听传入连接。客户端连接到服务器并发送一个测试消息。服务器接收消息并将其回显给客户端。

UDP:用户数据报协议

UDP 的特点

  • 无连接:UDP 不需要建立连接,直接发送数据,类似于发短信。
  • 不保证可靠性:UDP 不保证数据包的顺序和完整性,适用于对可靠性要求不高的场景。
  • 快速传输:UDP 适合实时应用,如视频流和在线游戏。

UDP 如何工作

  1. 直接发送数据:UDP 将数据打包成数据报(Datagram),附加源和目的信息后直接发送。
  2. 无确认机制:发送方不等待接收方的确认,数据包可能丢失或乱序。

UDP 示例

场景:视频通话

  • 视频通话需要快速传输数据,允许少量数据丢失,不影响整体体验,因此使用 UDP。

UDP 实践样例

下面是一个使用 Python 实现 UDP 客户端和服务器的示例:

UDP 服务器
python 复制代码
import socket

# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定套接字到地址和端口
server_address = ('localhost', 65432)
server_socket.bind(server_address)

print('等待数据...')

while True:
    data, address = server_socket.recvfrom(4096)
    print('收到:', data.decode(), '来自:', address)

    if data:
        sent = server_socket.sendto(data, address)
UDP 客户端
python 复制代码
import socket

# 创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

server_address = ('localhost', 65432)
message = '这是一个测试消息。'.encode()

try:
    # 发送数据
    print('发送:', message.decode())
    sent = client_socket.sendto(message, server_address)

    # 接收响应
    data, server = client_socket.recvfrom(4096)
    print('收到:', data.decode())
finally:
    client_socket.close()

在这个示例中,UDP 服务器在 localhost 上的 65432 端口等待数据。客户端发送一个测试消息到服务器,服务器接收消息并将其回显给客户端。

TCP 与 UDP 的比较

特性 TCP UDP
连接类型 面向连接 无连接
可靠性
传输顺序 保证 不保证
速度 较慢 较快
传输单元 段(Segment) 数据报(Datagram)
典型应用 文件传输、网页浏览 视频流、在线游戏

总结

TCP 和 UDP 各有优缺点,适用于不同的应用场景。TCP 适合需要高可靠性的数据传输,如文件下载和网页浏览。UDP 则适合对实时性要求高但允许少量数据丢失的应用,如视频通话和在线游戏。理解它们的工作原理和特点,有助于选择合适的协议来满足特定的网络需求。

希望这篇文章能帮助你入门 TCP 和 UDP,进一步探索网络世界的奥秘。

相关推荐
UestcXiye2 小时前
《TCP/IP网络编程》学习笔记 | Chapter 3:地址族与数据序列
c++·计算机网络·ip·tcp
千天夜13 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
明月看潮生17 小时前
青少年编程与数学 02-003 Go语言网络编程 09课题、Cookie
青少年编程·golang·网络编程·编程与数学
明月看潮生18 小时前
青少年编程与数学 02-003 Go语言网络编程 14课题、Go语言Udp编程
青少年编程·golang·网络编程·编程与数学
海绵波波1071 天前
Webserver(4.8)UDP、广播、组播
单片机·网络协议·udp
橘色的喵1 天前
Linux编程:DMA增加UDP 数据传输吞吐量并降低延迟
linux·udp·dma·网络驱动·低延迟·吞吐量·nic
UestcXiye2 天前
《TCP/IP网络编程》学习笔记 | Chapter 4:基于TCP的服务器端/客户端(1)
c++·计算机网络·tcp
C++忠实粉丝2 天前
计算机网络socket编程(1)_UDP网络编程实现echo server
linux·服务器·网络·c++·网络协议·计算机网络·udp
重生之我是数学王子2 天前
网络编程 UDP编程 Linux环境 C语言实现
linux·c语言·开发语言·网络·网络协议·udp
Lingwl4 天前
Node.js UDP通信 dgram 组播
前端·网络·网络协议·udp·node.js