深入浅出TCP/IP协议簇:理论与Python实践

源码分享

https://docs.qq.com/sheet/DUHNQdlRUVUp5Vll2?tab=BB08J2

当我们提到网络编程或数据爬取时,了解基础的网络通信协议---TCP/IP协议簇是非常有用的。TCP/IP不是单一的协议,而是一组使互联网工作的协议的集合。在本篇博客中,我们将探讨TCP/IP的基础,并通过Python代码示例展示其在实际编程中的应用。

TCP/IP概述

TCP/IP协议簇包括网络层的IP协议以及传输层的TCP协议。它们合作为应用提供可靠的字节流服务。

  • IP协议(Internet Protocol) 负责将数据包从一台计算机路由到另一台计算机。每台计算机都有一个IP地址,IP协议确保数据能够从源地址送达目的地址。
  • TCP协议(Transmission Control Protocol) 在IP的基础上提供了一个可靠的连接,确保数据包在到达目的地后没有错误且不丢失。

理解TCP/IP的关键概念

  • TCP三次握手:建立TCP连接时,客户端和服务器之间的三次消息传递确保连接的建立。
  • TCP四次挥手:关闭TCP连接时,四次消息传递确保双方都了解连接的结束。

Python中的TCP/IP

在Python中,我们使用​​socket​​模块来实现TCP/IP通信。以下是一个创建TCP客户端和服务器的基本例子。

TCP服务器

复制代码
import socket

def start_server(host='localhost', port=6789):
    # 创建socket对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定地址和端口
    server_socket.bind((host, port))

    # 开始监听
    server_socket.listen()

    print(f'Server running on {host}:{port}... Waiting for connections.')
    
    try:
        # 等待客户端连接
        while True:
            # 接受连接
            client_socket, addr = server_socket.accept()
            print(f'Connected by {addr}')

            try:
                # 接收数据
                while True:
                    data = client_socket.recv(1024)
                    if not data:
                        break
                    print(f'Received data: {data.decode()}')
                    client_socket.sendall(data)
            except socket.error as e:
                print(f'An error occurred: {e}')
            finally:
                # 关闭连接
                client_socket.close()
    finally:
        # 关闭服务器socket
        server_socket.close()

start_server()

TCP客户端

复制代码
import socket

def start_client(server_host='localhost', server_port=6789):
    # 创建socket对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 连接到服务器
    client_socket.connect((server_host, server_port))

    try:
        # 发送数据
        client_socket.sendall('Hello, TCP Server!'.encode())

        # 接收响应
        response = client_socket.recv(1024)
        print(f'Received: {response.decode()}')
    finally:
        # 关闭socket
        client_socket.close()

start_client()

结语

TCP/IP协议簇是现代网络通信的基础。了解TCP/IP如何工作并能够实际编写这些协议的代码对于任何进行网络编程或数据爬取的开发者来说都是一个宝贵的技能。通过Python的​​socket​​模块,我们能够实现基本的TCP客户端和服务器,这是网络编程旅程的起点。永远记住,使用这些工具时要遵守网络安全和道德规范,确保你的编程活动对他人网络不构成干扰。

相关推荐
虎头金猫3 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
AI职业加油站3 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
wuyk5553 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
此冬歌咏3 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
-梅3 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog3 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
张洛闻Eren3 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
琥珀色糖3 天前
SimlpeHttp
linux·服务器
其实防守也摸鱼3 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
第十人i3 天前
Linux 日志管理系统:journald 配置与优化
linux·服务器