我来给你讲计算机网络(自顶而下)
发布人:shili8
发布时间:2024-11-17 01:37
阅读次数:0
**计算机网络(自顶而下)**
计算机网络是指将多台计算机或其他设备通过通信线路连接起来,形成一个网络系统,以便这些设备能够共享资源、交换信息。计算机网络的发展已经成为现代社会的重要组成部分。
在本文中,我们将从自顶而下地讲解计算机网络的各个层次和相关概念。
**应用层**
应用层是最上面的一个层次,它负责处理用户的请求和数据传输。常见的应用层协议包括:
* HTTP(超文本传输协议):用于浏览器和服务器之间的通信。
* FTP(文件传输协议):用于文件的上传和下载。
* SMTP(简单邮件传输协议):用于电子邮件的发送。
import socket# 创建一个socket对象sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接到服务器server_addr = ('www.example.com',80) sock.connect(server_addr) # 发送HTTP请求request = b'GET / HTTP/1.1r Host: www.example.comr r ' sock.sendall(request) # 接收响应response = sock.recv(1024) print(response.decode()) # 关闭socketsock.close()
**注释:**
* `socket.socket(socket.AF_INET, socket.SOCK_STREAM)`:创建一个TCP连接的socket对象。
* `server_addr = ('www.example.com',80)`:指定服务器地址和端口号。
* `request = b'GET / HTTP/1.1r
Host: www.example.comr
r
'`:构造HTTP请求。
* `sock.sendall(request)`:发送HTTP请求。
* `response = sock.recv(1024)`:接收服务器的响应。
**传输层**
传输层负责处理数据的传输和错误恢复。常见的传输层协议包括:
* TCP(传输控制协议):提供可靠的连接式通信。
* UDP(用户数据报协议):提供不可靠的连接式通信。
import socket# 创建一个socket对象sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接到服务器server_addr = ('www.example.com',80) sock.connect(server_addr) # 发送数据data = b'Hello, world!' sock.sendall(data) # 接收响应response = sock.recv(1024) print(response.decode()) # 关闭socketsock.close()
**注释:**
* `socket.socket(socket.AF_INET, socket.SOCK_STREAM)`:创建一个TCP连接的socket对象。
* `server_addr = ('www.example.com',80)`:指定服务器地址和端口号。
* `data = b'Hello, world!'`:构造要发送的数据。
* `sock.sendall(data)`:发送数据。
* `response = sock.recv(1024)`:接收服务器的响应。
**网络层**
网络层负责处理数据包的路由和转发。常见的网络层协议包括:
* IP(互联网协议):提供数据包的路由和转发。
* ICMP(互联网控制报文协议):用于错误报告和询问。
import socket# 创建一个socket对象sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP) # 发送ICMP请求request = b'x08x00' sock.sendall(request) # 接收响应response = sock.recv(1024) print(response.decode()) # 关闭socketsock.close()
**注释:**
* `socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP)`:创建一个ICMP请求的socket对象。
* `request = b'x08x00'`:构造ICMP请求。
* `sock.sendall(request)`:发送ICMP请求。
* `response = sock.recv(1024)`:接收服务器的响应。
**数据链路层**
数据链路层负责处理数据帧的传输和错误恢复。常见的数据链路层协议包括:
* Ethernet(以太网):提供局域网的连接。
* PPP(点对点协议):提供点对点的连接。
import socket# 创建一个socket对象sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW) # 发送数据帧data = b'Hello, world!' sock.sendall(data) # 接收响应response = sock.recv(1024) print(response.decode()) # 关闭socketsock.close()
**注释:**
* `socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)`:创建一个原始数据帧的socket对象。
* `data = b'Hello, world!'`:构造要发送的数据。
* `sock.sendall(data)`:发送数据帧。
* `response = sock.recv(1024)`:接收服务器的响应。
**物理层**
物理层负责处理数据的传输和接收。常见的物理层协议包括:
* RS-232(串行通信):提供串行通信的连接。
* USB(通用序列总线):提供设备之间的通信。
import serial# 打开串口ser = serial.Serial('COM1',9600, timeout=1) # 发送数据data = b'Hello, world!' ser.write(data) # 接收响应response = ser.read(1024) print(response.decode()) # 关闭串口ser.close()
**注释:**
* `serial.Serial('COM1',9600, timeout=1)`:打开串口。
* `data = b'Hello, world!'`:构造要发送的数据。
* `ser.write(data)`:发送数据。
* `response = ser.read(1024)`:接收服务器的响应。
以上就是计算机网络(自顶而下)的讲解。