深入浅出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客户端和服务器,这是网络编程旅程的起点。永远记住,使用这些工具时要遵守网络安全和道德规范,确保你的编程活动对他人网络不构成干扰。

相关推荐
猎板PCB厚铜专家大族3 分钟前
多层PCB技术解析:从材料选型到制造工艺的深度实践
网络·制造
RussellFans6 分钟前
Linux 环境配置
linux·运维·服务器
网硕互联的小客服14 分钟前
503 Service Unavailable:服务器暂时无法处理请求,可能是超载或维护中如何处理?
服务器·git·github
高冷的肌肉码喽1 小时前
Linux-进程间的通信
linux·运维·服务器
乖乖是干饭王1 小时前
Linux系统编程中的_GNU_SOURCE宏
linux·运维·c语言·学习·gnu
jekc8681 小时前
禅道18.2集成LDAP
linux·运维·服务器
weixin_307779131 小时前
Linux下GCC和C++实现统计Clickhouse数据仓库指定表中各字段的空值、空字符串或零值比例
linux·运维·c++·数据仓库·clickhouse
FakeOccupational2 小时前
【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统
网络·游戏
Tender_光3 小时前
iptables实验
运维·服务器
szxinmai主板定制专家3 小时前
【飞腾AI加固服务器】全国产化飞腾+昇腾310+PCIe Switch的AI大模型服务器解决方案
运维·服务器·arm开发·人工智能·fpga开发