网络介绍 🌐
网络就像是一个无形的纽带,把我们所有人👫👫👫紧紧相连。没有网络的世界,就像是失去了色彩的画布,多么的单调和无趣啊!🎨
单机游戏 🎮
单机游戏就像是一个人的独角戏,虽然精彩,但总是少了那么一点分享的乐趣。😔
使用网络的目的 🚀
我们使用网络,不就是为了能够和远方的朋友👬一起分享快乐,一起解决问题嘛!🌍
网络编程 💻
网络编程不仅仅是学习如何发送和接收数据,它还涉及到对网络行为的理解和应用。通过编写能够在不同设备间进行通信的代码,开发者可以创建出功能强大的分布式系统。🛠️
网络通信过程 📡
网络通信是一个复杂的过程,它涉及到数据的封装、寻址、传输、路由选择以及最终的解封装。在这个过程中,数据被分解成小的数据包,每个数据包都包含了源和目的地址,确保它们能够正确地到达目的地。📦
互联网访问 🌍
当我们在浏览器中输入一个网址并访问网页时,实际上发生了一系列的步骤。首先,浏览器会检查缓存中是否有该网址的记录。如果没有,它会向DNS服务器请求将域名解析为IP地址。然后,浏览器会通过IP地址找到服务器,并建立一个到服务器的TCP连接。一旦连接建立,浏览器就可以发送HTTP请求,服务器响应后,浏览器会接收数据并渲染网页。🔍
TCP (传输控制协议) 🚚
TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。它确保数据完整无误地从源传输到目的地。TCP的三次握手过程确保了连接的建立,而四次挥手过程则优雅地关闭了连接。🤝
TCP的特点:
- 可靠性:确保数据包正确无误地到达。
- 顺序保证:数据包按发送顺序到达。
- 拥塞控制:网络拥堵时自动调整发送速率。
- 流量控制:根据接收方能力调整发送速率。
UDP (用户数据报协议) 📶
UDP是一种无连接的传输层协议,它允许数据包独立发送,而不需要建立连接。UDP提供了快速但不保证可靠性的传输服务,适用于对实时性要求高的应用。🏃♂️
UDP的特点:
- 无连接:不需要建立连接,直接发送数据。
- 速度快:没有建立连接的开销,延迟低。
- 不可靠性:不保证数据包的到达或顺序。
- 简单:头部开销小,处理简单。
客户端-服务器 (CS) 架构 🏢
CS架构是一种常见的网络架构模式,其中一个或多个客户端与服务器进行交互。服务器通常负责数据存储、处理请求和提供服务。💼
CS架构的特点:
- 中心化:服务器是系统的核心,负责大部分的处理工作。
- 可扩展性:通过增加服务器资源来提高系统性能。
- 安全性:可以在服务器端实施安全措施。
- 成本:可能需要投资于服务器硬件和维护。
Web Services (WS) 架构 🌐
WS架构是一种分布式的网络架构,它允许不同的应用程序通过网络进行通信和数据交换。这种架构通常基于开放标准,如HTTP、XML和SOAP。🌐
WS架构的特点:
- 分布式:服务分布在不同的服务器上,可以跨平台工作。
- 灵活性:服务可以独立开发和部署。
- 互操作性:不同的系统和平台可以通过标准协议进行通信。
- 可组合性:服务可以组合成更复杂的应用程序。
当然可以,这段描述非常清晰地概述了socket编程的基本流程,并且可以作为Python TCP编程实践部分的一个引入。以下是将这段描述整合到文章中的内容:
Python中的TCP编程实践 🐍
在深入了解了TCP和UDP的基本概念以及网络架构之后,我们现在将通过Python来实践TCP编程。以下是一个简单的TCP服务器和客户端的示例,以及socket通信流程的详细描述。👨💻
Socket 编程思想
在网络编程中,socket是实现网络通信的关键。以使用TCP协议通讯的socket为例,其交互流程大概是这样的:
- 服务器创建socket:根据地址类型(IPv4, IPv6)、socket类型、协议创建socket。
- 绑定地址和端口:服务器为socket绑定IP地址和端口号。
- 监听连接:服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开。
- 客户端创建socket:客户端创建自己的socket。
- 客户端打开socket:客户端打开socket,根据服务器IP地址和端口号试图连接服务器socket。
- 服务器接收请求:服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端连接请求。
- 客户端发送连接状态信息:客户端连接成功,向服务器发送连接状态信息。
- 服务器连接成功:服务器accept方法返回,连接成功。
- 数据交换:客户端向socket写入信息,服务器读取信息。
- 关闭连接:客户端和服务器端分别关闭socket。
socket 通信流程图
TCP服务器端
import socket
# 创建socket对象
# socket.AF_INET ipv4 协议(版本)
# socket.SOCK_STREAM tcp 协议
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_socket.bind(('127.0.0.1', 7788))
# 监听连接
server_socket.listen(5)
print("服务器启动,等待客户端连接...")
while True:
# 接受一个新连接
client_socket, addr = server_socket.accept()
print("连接地址: " + str(addr))
# 接收数据
data = client_socket.recv(1024)
print("收到消息: " + data.decode('utf-8'))
# 发送数据
client_socket.send('消息已收到'.encode('utf-8'))
# 关闭连接
client_socket.close()
# 关闭服务器socket(在实际应用中,服务器通常不会关闭)
# server_socket.close()
TCP服务器的日常生活比喻 🍽️
想象一下,TCP服务器就像是一家忙碌的餐厅🏠,它等待着顾客(客户端)的到来,并为他们提供服务。
-
创建socket对象:
- 餐厅老板👨🍳准备好了一张桌子🪑(socket),这张桌子是用来接待顾客的。
-
绑定地址和端口:
- 老板在餐厅的门口挂上了一个招牌📝,上面写着“欢迎光临,地址:127.0.0.1,电话:7788”。这个招牌告诉顾客在哪里可以找到餐厅。
-
监听连接:
- 老板在餐厅里等待顾客的到来,准备好接待他们。餐厅的门是敞开的🚪,最多可以接待5位顾客(监听5个连接)。
-
接受一个新连接:
- 当有顾客走进餐厅时,老板微笑着迎接他们,询问他们的需求(接受连接)。
-
接收数据:
- 顾客坐下后,老板询问他们想要点什么(接收数据)。顾客告诉老板他们的订单(发送的消息)。
-
发送数据:
- 老板听完订单后,点头表示理解,并告诉顾客“您的订单已收到,我们会尽快为您准备。”(发送确认消息)。
-
关闭连接:
- 顾客用餐结束后,老板感谢他们的光临,并送他们离开(关闭与客户端的连接)。餐厅🏠准备迎接下一位顾客。
-
关闭服务器socket:
- 在实际情况下,餐厅不会轻易关门,老板会继续营业,直到决定结束营业(关闭服务器socket)。
TCP客户端
import socket
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
client_socket.connect(('127.0.0.1', 7788))
# 发送数据
client_socket.send('你好,服务器'.encode('utf-8'))
# 接收响应
data = client_socket.recv(1024)
print("服务器响应: " + data.decode('utf-8'))
# 关闭连接
client_socket.close()
TCP客户端的生活比喻 📞
想象TCP客户端就像是一个忙碌的都市人👤,他正在通过电话📱与朋友或同事进行沟通:
-
创建socket对象:
- 这就像是拿起电话听筒📞,准备开始通话。
-
连接到服务器:
- 这就像是拨打电话号码🔢(服务器的IP地址和端口号),等待电话接通,你可能会听到一些拨号音🔔。
-
发送数据:
- 一旦电话接通,通话者(客户端)开始说话🗣️(发送数据),比如向对方问好:“你好,服务器!”
-
接收响应:
- 通话者等待对方(服务器)回应,当对方回应时,通话者聆听👂对方说话(接收数据),可能是一段友好的对话或者所需的信息。
-
关闭连接:
- 通话结束后,通话者礼貌地说再见👋,然后挂断电话📵,结束通话。
总结
在这个例子中,服务器在一个无限循环中等待客户端的连接。每当有新的客户端连接时,服务器都会接收客户端发送的消息,并发送一个确认响应。客户端连接到服务器,发送一条消息,然后等待并打印服务器的响应。
注意事项
- 在实际部署中,服务器需要能够处理多个客户端的连接,这通常通过多线程或异步IO来实现。
- 异常处理非常重要,应该在代码中添加相应的异常处理逻辑来确保服务器的稳定运行。
- 安全性也是网络编程中的一个重要考虑,应该采取适当的加密和验证措施来保护数据传输的安全。
CS与WS架构的应用
在实际的应用中,CS架构通常用于桌面应用程序,而WS架构则广泛应用于Web服务和分布式系统。例如,一个在线商店可能使用CS架构为用户提供交互界面,同时后端使用WS架构与支付网关、库存管理系统等进行通信。
结论
通过Python的socket编程,我们可以快速地实现TCP通信。无论是CS还是WS架构,了解其工作原理和适用场景对于开发现代网络应用都是至关重要的。随着技术的发展,网络架构和编程模式也在不断演进,但TCP/IP协议仍然是网络通信的基石。
👇 源码资料获取 · 技术与交流 👇