计算机网络(2)——手动SMTP

#file name:PA01_3.py
#writer:Zhang_Jingtun(Ordinary_Crazy)
#initial date:20180310
from socket import *
msg = "\r\n I love computer networks!"
endmsg = "\r\n.\r\n"

# Choose a mail server (e.g. Google mail server) and call it mailserver
mailserver =('smtp.163.com', 25)

# Create socket called clientSocket and establish a TCP connection with mailserver
#Fill in start
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect(mailserver)
#Fill in end

recv = clientSocket.recv(1024)
print (recv)
if(str(recv[:3],"utf-8") != "220"):
	print('220 reply not received from server.')


# Send HELO command and print server response.
heloCommand = 'HELO Alice\r\n'
clientSocket.send(heloCommand.encode())
recv1 = clientSocket.recv(1024)
print (recv1)
if(str(recv1[:3],"utf-8") != '250'):
	print ('250 reply not received from server.')
	
loginCommand = 'AUTH LOGIN\r\n'
clientSocket.send(loginCommand.encode())
recv7 = clientSocket.recv(1024)
print (recv7)
if str(re
### 计算机网络架构模型详解 计算机网络的架构模型通常指的是描述和规范网络通信的一系列分层结构。这些模型通过将复杂的网络通信过程划分为多个独立的功能层,使每层专注于特定的任务,从而简化了网络的设计、实现和调试。 #### 七层 OSI 参考模型 OSI(Open Systems Interconnection)参考模型是一种理论上的框架,由国际标准化组织(ISO)制定[^2]。它将网络通信分成七个层次,每一层都有明确的功能: 1. **物理层** 物理层负责在网络设备间建立、维护和断开物理连接。它的核心职责包括定义电气特性、机械特性和功能特性等。此层传输的数据单位是比特流[^4]。 2. **数据链路层** 数据链路层的主要任务是在物理连接的基础上构建并管理数据链路连接。与物理层相比,这一层引入了差错控制机制,并以帧作为基本传输单元。 3. **网络层** 网络层的核心功能是对数据包进行路由选择和转发,确保数据能够从源地址传递到目标地址。IP 协议就是典型的网络层协议之一[^3]。 4. **传输层** 传输层提供了端到端的可靠通信服务,支持流量控制和错误恢复等功能。常见的传输层协议有 TCP 和 UDP,分别适用于需要高可靠性或低延迟的应用场景。 5. **会话层** 会话层负责管理和协调不同主机之间的对话(即会话)。它可以创建、维持以及终止会话连接。 6. **表示层** 表示层关注的是数据的表现形式和编码方式,例如加密解密、压缩解压等操作都在这一层完成。 7. **应用层** 应用层直接面向用户提供具体的服务,比如文件传输、电子邮件发送接收等。HTTP、FTP 和 SMTP 是典型的应用层协议。 #### 四层 TCP/IP 模型 尽管 OSI 模型具有较强的理论指导意义,但在实际应用中更常用的是 TCP/IP 模型。TCP/IP 模型是一个更为简洁实用的四层架构: 1. **网络接口层** 这一层涵盖了 OSI 模型中的物理层和数据链路层的内容,主要用于处理底层硬件细节,如网卡驱动程序的操作。 2. **网络层** 同样对应于 OSI 的第三层——网络层,主要依赖 IP 地址来决定最佳路径并将数据包送达目的地。 3. **传输层** 提供可靠的进程间通信能力,采用 TCP 或者轻量级无状态模式下的 UDP 来满足不同类型需求。 4. **应用层** 将多种高层应用程序集成进来,覆盖范围广泛,几乎涉及所有的互联网活动领域。 两种模型虽然存在差异,但都遵循类似的分层设计理念,在各自适用范围内发挥重要作用。 ```python # 示例代码展示如何利用 Python 实现简单的 HTTP 请求 import socket def send_http_request(host, port=80): request = f"GET / HTTP/1.1\r\nHost: {host}\r\nConnection: close\r\n\r\n" with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((host, port)) s.sendall(request.encode()) response = b"" while True: data = s.recv(1024) if not data: break response += data return response.decode() print(send_http_request("www.example.com")) ``` 上述脚本演示了一个基于套接字库的手动发起 GET 方法请求的过程,体现了应用层的工作原理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值