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

相关推荐
CH_Qing8 分钟前
lspci 常见debug 命令
网络
fruge15 分钟前
SSH、RDP、VNC不必各开一个客户端:Next Terminal用Web入口统一管理远程资产和会话记录
运维·前端·ssh
天南散修22 分钟前
《802.11-2024》第08讲 · 聚合与块确认:把「一次一帧」变成「一次一批」
linux·网络·wifi·802.11
中屹指纹浏览器svip25 分钟前
什么是设备数字特征追踪?
运维
Source.Liu25 分钟前
【A11】服务器数据库结构笔记
服务器·数据库·笔记
企业解惑小能手-域智盾系统35 分钟前
终端安全管理软件怎么选?终端安全管理不是“装个客户端”:从底层逻辑看企业怎么选
服务器·网络·安全·域智盾软件
Dxy123931021642 分钟前
Linux 服务器 vi 命令怎么使用
linux·运维·服务器
叼烟扛炮1 小时前
Linux 学习笔记(十五):进程的魔法 fork 与 僵尸孤儿
linux·运维·服务器
钝挫力PROGRAMER1 小时前
从“硬件报错”到“内核崩溃”:一次超微(Supermicro)服务器失联问题解决记录
服务器·内核升级·无法连接
济南凡维1 小时前
智能相机 VS 工业相机:机器视觉选型一次讲透
网络·数码相机·视觉检测