跳到主要内容

网络通信基础

端点

假设有一台服务器,其 IP 地址为 192.168.1.1,并且在端口 80 上运行一个 HTTP 服务。在这种情况下,套接字的端点表示为 192.168.1.1:80

通信协议

TCP 和 UDP 是两种常见的通信协议。HTTP 和 HTTPS 通常基于 TCP 协议运行,而 DNS 查询可能会通过 UDP 协议进行。

数据传输

在 TCP 通信中,数据以有序的字节流形式发送。例如,一个 HTTP 请求可能会被拆分成多个 TCP 数据包发送,服务器会按照顺序接收并重组这些数据包以处理请求。

在 UDP 通信中,数据以独立的数据报形式发送。每个数据报都是一个完整的消息,例如,一个 DNS 查询请求可能会在一个 UDP 数据报中发送。

连接

在 TCP 通信中,客户端与服务器首先通过三次握手建立一个连接,然后才能开始数据传输。例如,在浏览器中打开一个网站时,浏览器会首先与服务器建立一个 TCP 连接,然后通过该连接发送 HTTP 请求。

在 UDP 通信中,没有连接的概念,客户端可以直接发送数据报给服务器。例如,在发送一个 DNS 查询请求时,客户端无需与服务器建立连接,直接发送 UDP 数据报。

API

在 Python 中,我可以使用 socket 模块来创建和操作套接字。以下是创建一个 TCP 客户端套接字,连接到服务器,发送和接收数据的示例:

import socket

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

# 连接到服务器
client_socket.connect(('192.168.1.1', 80))

# 发送数据
request = b'GET / HTTP/1.1\r\nHost: example.com\r\n\r\n'
client_socket.sendall(request)

# 接收数据
response = client_socket.recv(1024)

# 关闭套接字
client_socket.close()

服务器和客户端

在一个简单的 HTTP 服务器中,服务器套接字会监听端口 80,等待客户端的连接。当有客户端连接时,服务器会创建一个新的套接字用于与该客户端通信,处理 HTTP 请求,然后发送 HTTP 响应。