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

相关推荐
jerryinwuhan26 分钟前
socket由浅入深
网络
sulikey2 小时前
Linux基础指令与权限管理深度解析:从入门到精通
linux·运维·服务器·ubuntu·centos·linux命令·linux权限
qq_2153978972 小时前
docker 安装 opengauss 高斯数据库
运维·docker·容器
s***46982 小时前
linux 设置tomcat开机启动
linux·运维·tomcat
xu_yule2 小时前
网络和Linux网络-3(套接字编程)TCP网络通信代码
linux·网络·tcp/ip
r***F2622 小时前
若依部署Nginx和Tomcat
运维·nginx·tomcat
周杰伦fans3 小时前
C# - Task 是什么?想象一下你在餐厅点餐
服务器·开发语言·c#
喜欢吃豆3 小时前
使用 OpenAI Responses API 构建生产级应用的终极指南—— 状态、流式、异步与文件处理
网络·人工智能·自然语言处理·大模型
HalvmånEver4 小时前
Linux:进程的切换与调度(进程四)
linux·运维·服务器
xixixi777774 小时前
解析一下存储安全——“它是什么”,更是关于“它为何存在”、“如何实现”以及“面临何种挑战与未来”
网络·安全·通信