一、计算机网络详解
-
(一)计算机网络概述
-
定义:计算机网络是通过传输介质将多台计算机连接起来,以实现数据通信和资源共享的系统。
-
功能:
-
(1) 数据通信:实现不同设备之间的数据传输。
-
(2) 资源共享:硬件资源(如打印机)和软件资源(如数据库)共享。
-
(3) 分布式处理:多台计算机协作完成任务。
-
-
(二)TCP 三次握手
-
1. 定义
-
TCP(三次握手)是建立可靠连接的重要步骤,确保双方准备好通信并初始化必要的参数。
-
2. 过程详解
-
第一次握手(SYN):
- 客户端向服务器发送一个 SYN(synchronize)报文,表明希望建立连接。
- 此时,客户端进入 SYN-SENT 状态。
-
第二次握手(SYN + ACK):
- 服务器收到 SYN 后,回复一个 SYN + ACK 报文,表示接收到请求并同意建立连接。
- 服务器进入 SYN-RECEIVED 状态。
-
第三次握手(ACK):
- 客户端收到 SYN + ACK 后,发送 ACK 报文,表示确认。
- 客户端和服务器进入 ESTABLISHED 状态,连接正式建立。
-
3. 为什么需要三次握手?
-
确保双方都能(收,发)数据,就是将双方四个状态都确定:
- (1) 第一次握手:客户端发送数据,确认自己可以发送。
- (2) 第二次握手:服务器接收到数据,确认自己可以接收,同时告知客户端可以发送。
- (3) 第三次握手:客户端确认自己可以接收数据。
-
防止服务器资源浪费:如果仅两次握手,可能导致服务器误认为已建立连接,浪费资源。
-
4. 代码示例(Socket 编程)
import socket# 服务端代码 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(("127.0.0.1", 8080)) server.listen(1) print("等待客户端连接...") conn, addr = server.accept() print(f"连接已建立: {addr}")# 客户端代码 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(("127.0.0.1", 8080)) print("连接成功")
-
(三)TCP 四次挥手
-
1. 定义
-
四次挥手是关闭 TCP 连接的步骤,确保双方的数据传输完全结束。
-
2. 过程详解
-
第一次挥手(FIN):
- 客户端发送 FIN(finish)报文,表示不再发送数据。
- 客户端进入 FIN-WAIT-1 状态。
-
第二次挥手(ACK):
- 服务器收到 FIN 后,回复一个 ACK 报文,表示已收到请求。
- 服务器进入 CLOSE-WAIT 状态。
-
第三次挥手(FIN):
- 服务器发送 FIN 报文,表示不再发送数据。
- 服务器进入 LAST-ACK 状态。
-
第四次挥手(ACK):
- 客户端收到 FIN 后,回复一个 ACK 报文。
- 客户端进入 TIME-WAIT 状态,确保服务器收到 ACK 后关闭。
-
3. 为什么需要四次挥手?
-
TCP 是全双工通信:双方需要单独关闭发送和接收通道。
-
确保数据完全传输:通过分阶段关闭,防止未传输的数据丢失。
-
4. TIME-WAIT 状态的作用
-
防止丢失的报文被误处理:等待一段时间确保所有报文从网络中消失。
-
确保连接的完整关闭。
-
5. 代码示例(Socket 编程)
import socket# 服务端代码 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(("127.0.0.1", 8080)) server.listen(1) conn, addr = server.accept() print("连接已建立") conn.close() print("连接已关闭")# 客户端代码 client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(("127.0.0.1", 8080)) print("连接成功") client.close() print("连接已关闭")
-
(四)UDP 与 TCP 的区别
特性 TCP UDP 连接方式 面向连接(三次握手) 无连接 可靠性 提供可靠传输,确保数据无误 不保证数据可靠性 速度 较慢(有流控与拥塞控制) 快(无流控与拥塞控制) 场景 文件传输、HTTP、数据库等 视频直播、DNS、游戏
-
(五)总结
-
三次握手:建立连接,确保双方通信能力。
-
四次挥手:断开连接,确保数据完整传输。
-
TCP 与 UDP:
-
TCP 提供可靠性,适用于需要严格保证数据正确的场景。
-
UDP 提供高效性,适用于实时性要求高的场景。
通过深入理解 TCP/UDP 的机制,可以优化网络程序的设计,提高通信效率。
-