中科大计网学习记录笔记(八):FTP | EMail

2024-02-12 20:04

本文主要是介绍中科大计网学习记录笔记(八):FTP | EMail,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

学习视频:中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keith W.Ross)》课程
该视频是B站非常著名的计网学习视频,但相信很多朋友和我一样在听完前面的部分发现信息量过大,有太多无法理解的地方,在我第一次点开的时候也有相同的感受,但经过了一段时间项目的学习,对计网有了更多的了解,所以我准备在这次学习的时候做一些记录并且加入一些我的理解,希望能够帮助到大家。
往期笔记可以看专栏中的内容😊😊😊

资料分享:
视频课件分享链接,提取码 pho1
计算机网络(第七版) 自顶向下方法分享链接,提取码 7ln4

文章目录

      • 2.3 FTP
        • 2.3.1 运行流程
        • 2.3.2 常见的命令
        • 2.3.3 常见的返回码
      • 2.4 EMail
        • 2.4.1 邮件传输的流程
        • 2.4.2 SMTP 的执行流程
        • 2.4.3 简单的 SMTP 示例
        • 2.4.4 SMTP 报文格式
        • 2.4.5 邮件访问协议总结

2.3 FTP

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

💡 FTP(File Transfer Protocol,文件传输协议)是一种用于在计算机网络上进行文件传输的标准协议。它是一种客户端-服务器协议,用于在客户端和服务器之间传输文件。

  • 属于应用层的协议,是跑在 TCP 协议之上的
2.3.1 运行流程
  1. 建立连接:客户端通过TCP连接到FTP服务器的21号端口(控制连接),建立与服务器的控制连接。
  2. 用户认证:客户端向服务器发送用户名和密码进行身份认证。如果认证成功,客户端就可以访问服务器上的文件系统。
  3. 浏览目录: 客户端可以使用FTP命令(如LIST)来列出服务器上的文件和目录。通过FTP客户端的用户界面,用户可以选择要下载或上传的文件,并在本地计算机和服务器之间进行文件传输。
  4. 下载文件: 如果客户端要下载文件,它会向服务器发送一个下载请求(如GET命令),指定要下载的文件名和路径。服务器接收到请求后会打开一个新的数据连接(通常是20号端口),将文件的内容传输给客户端。
  5. 上传文件: 如果客户端要上传文件,它会向服务器发送一个上传请求(如PUT命令),指定要上传的文件名和路径。服务器接收到请求后会打开一个新的数据连接(通常是20号端口),接收客户端发送的文件内容。
  6. 关闭连接: 文件传输完成后,客户端可以选择关闭与服务器的连接,以释放资源。可以使用QUIT命令关闭控制连接。

💡 命令的发出数据的上载和下载 是在两个连接上进行

  • 与 HTTP 不同,TCP 的协议是 有状态 的,也就是服务器是要存储和维护客户端的信息
2.3.2 常见的命令
  • 命令在控制连接上以 ASCII 文本的方式传送

  • 连接服务器:

    ftp <hostname>
    
  • 登录:

    PASS <password>
    
  • 退出:

    QUIT
    
  • 列出目录内容:

    LIST
    
  • 下载文件:

    RETR <filename>
    
  • 上载文件:

    STOR <filename>
    
2.3.3 常见的返回码

2.4 EMail

💡 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是用于在网络上传输电子邮件的标准协议。SMTP定义了一系列规则和约定,用于在电子邮件客户端和服务器之间传递邮件消息。

2.4.1 邮件传输的流程

  1. 用户使用用户代理(各种邮箱客户端,比如 Outlook、Foxmail 等)将邮件发送到对应的邮件服务器(SMTP 协议)
  2. 邮件服务器再将其发到目标邮件服务器(SMTP 协议)
  3. 接收方上线从邮件服务器拉取邮件(POP3 协议)
2.4.2 SMTP 的执行流程

💡 邮箱的构成:电子邮箱地址由两部分组成:用户名和域名,它们之间用 “@” 符号分隔。

  • username@domain
    
  • 域名是指电子邮件地址中 “@” 符号之后的部分。它通常指定了邮件服务器的地址或者邮件服务提供商的域名。域名由多个点号分隔的标签组成,例如:example.com、gmail.com、hotmail.com 等。

  1. 建立连接: 邮件客户端通过TCP连接到邮件服务器的25号端口(SMTP默认端口),建立与服务器的连接。
  2. 握手: 客户端向服务器发送一个HELO或EHLO命令,用于建立与服务器的握手,并标识客户端自身。服务器在收到握手后会返回一个250 OK响应。
  3. 发件人验证: 客户端发送一个MAIL FROM命令,指定邮件的发件人地址。服务器会检查发件人地址的有效性,并返回一个250 OK响应。
  4. 收件人验证: 客户端发送一个RCPT TO命令,指定邮件的收件人地址。服务器会检查收件人地址的有效性,并返回一个250 OK响应。
  5. 邮件传输: 客户端发送DATA命令,表示开始传输邮件内容。随后客户端发送邮件的内容(包括邮件头部和正文),以及以单独一行“.”标识邮件结束。服务器收到邮件内容后,会返回一个250 OK响应。
  6. 邮件传输完成: 客户端发送QUIT命令,表示邮件传输完成,并请求关闭与服务器的连接。服务器收到QUIT命令后,会返回一个221 Bye响应,并关闭连接。
2.4.3 简单的 SMTP 示例
  1. 建立连接:

    客户端: Telnet example.com 25
    服务器: 220 example.com ESMTP Postfix
    
  2. 客户端向服务器发送HELO命令,握手并标识自己:

    客户端: HELO client.example.com
    服务器: 250 Hello client.example.com
    
  3. 客户端指定发件人:

    客户端: MAIL FROM:<sender@example.com>
    服务器: 250 Ok
    
  4. 客户端指定收件人:

    客户端: RCPT TO:<recipient@example.net>
    服务器: 250 Ok
    
  5. 客户端发送数据命令,开始传输邮件内容:

    客户端: DATA
    服务器: 354 End data with <CR><LF>.<CR><LF>
    
  6. 客户端发送邮件内容(包括头部和正文):

    客户端: From: sender@example.com
    客户端: To: recipient@example.net
    客户端: Subject: Test Email
    客户端:
    客户端: This is a test email.
    客户端: .
    
  7. 客户端完成邮件传输并断开连接:

    客户端: QUIT
    服务器: 221 Bye
    
2.4.4 SMTP 报文格式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 邮件头部(Header):
    • 邮件头部包含了一系列的头字段(Header Fields),用于描述邮件的各种属性和元数据。常见的头字段包括:
      • 发件人(From)
      • 收件人(To)
      • 抄送(Cc)
      • 主题(Subject)
      • 日期(Date)
      • MIME版本(MIME-Version)
      • 邮件优先级(Priority)
      • 邮件ID(Message-ID)等。
  2. 邮件体(Body):
    • 邮件体包含了邮件的实际内容,包括正文和附件等。邮件体可以是纯文本格式,也可以是 HTML 格式或者包含多媒体内容的 MIME 格式。

💡 关于 MIME

  • MIMEMultipurpose Internet Mail Extensions,多用途互联网邮件扩展)是一种互联网标准,用于在电子邮件中传输各种类型的数据,包括 文本、图像、音频、视频等多媒体内容。
  • MIME最初是为了解决SMTP只能传输7位ASCII字符的限制而设计的,它通过在邮件头部添加一些额外的信息来允许邮件中包含非ASCII字符和多媒体数据。

💡 关于编码

  • 编码(Encoding)是一种将数据转换为另一种形式或格式的过程。编码通常用于将数据转换为计算机能够理解和处理的二进制形式,以便在存储、传输和处理数据时能够正确地进行操作。
  • Base64是一种基于64个可打印字符(A-Z、a-z、0-9和"+“、”/")的编码方式,用于将二进制数据转换为文本字符串的表示形式。Base64编码通常用于在文本协议中传输二进制数据,或者在需要将二进制数据嵌入到文本中的场景中,如在电子邮件中传输附件、在HTML中嵌入图片等。
  • ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种用于在计算机和通信设备中表示文本字符的编码方式。ASCII码使用7位二进制数来表示128个字符,包括了英文字母、数字、标点符号和一些控制字符。

再来理顺一下关系:

  • 首先源头是 SMTP 仅能传输在 ASCII 码标识范围内的这 128 个字符、
  • 但是图片等非文本的内容(以二进制存储在计算机中)可能会跃出这个部分
  • 所以需要将它们转化为在 ASCII 的 128 个字符范围内的字符
  • 就需要 Base64 将二进制的数据转化为文本字符串
2.4.5 邮件访问协议总结

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • SMTP: 传送到接收方的邮件服务器
  • 邮件访问协议:从服务器访问邮件
    • POP:邮局访问协议(Post Office Protocol)
      • 用户身份确认 (代理<–>服务器) 并下载
    • IMAP:Internet邮件访问协议(Internet Mail Access Protocol), IMAP是一种更为高级的邮件访问协议,它允许用户在多个设备上同步收件箱中的邮件。IMAP将邮件保留在邮件服务器上,并允许用户在不同设备上查看、管理和同步邮件,包括已读、未读状态、文件夹结构等。
    • HTTP:Hotmail , Yahoo! Mail 等

💡 RFCRequest for Comments,征求意见稿)是由互联网工程任务组(IETF)发布的一系列文件,用于规范互联网相关技术的标准、协议、方法和概念。RFC文档是由互联网社区共同编写和审查的,它们记录了互联网标准的制定过程、技术规范的细节、协议的设计原理以及一些实践经验等。

💡 POP 与 IMAP:

  • 工作方式:
    • POP(POP3): POP是一种简单的邮件拉取协议,它的工作方式是将服务器上的邮件全部下载到本地计算机上,然后将邮件从服务器上删除。因此,邮件只存在于本地计算机上,服务器上不再保存邮件副本。
    • IMAP(IMAP4): IMAP是一种更为高级的邮件访问协议,它允许用户在多个设备上同步收件箱中的邮件。IMAP将邮件保留在邮件服务器上,并允许用户在不同设备上查看、管理和同步邮件,包括已读、未读状态、文件夹结构等。
  • 邮件保留:
    • POP: 在使用POP协议时,邮件通常会被下载到客户端设备上,并且在服务器上被删除。因此,邮件只存储在本地设备上。
    • IMAP: 在使用IMAP协议时,邮件通常保留在服务器上,用户可以在多个设备上访问同一份邮件,并且同步收件箱中的状态和文件夹结构。
  • 适用场景:
    • POP: 适用于单个设备上获取邮件并在本地存储的场景,比如使用电子邮件客户端的个人用户。
    • IMAP: 适用于需要在多个设备之间同步邮件的场景,比如在多台设备上管理同一份收件箱的用户。

💡 平时使用的各种客户端其实就是对协议的一种封装

  • 比如邮箱客户端通过封装邮件协议的指令来与邮件服务器进行通信和交互。邮件客户端通常会使用诸如SMTP、POP3、IMAP等协议来发送、接收和管理电子邮件。
  • 亦或是 Web 应用实际上也是通过封装HTTP协议的请求和响应来与客户端进行通信和交互。在Web开发中,服务器端的应用程序接收来自客户端的HTTP请求,并生成相应的HTTP响应来返回给客户端。

这篇关于中科大计网学习记录笔记(八):FTP | EMail的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/703477

相关文章

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型

Android学习总结之Java和kotlin区别超详细分析

《Android学习总结之Java和kotlin区别超详细分析》Java和Kotlin都是用于Android开发的编程语言,它们各自具有独特的特点和优势,:本文主要介绍Android学习总结之Ja... 目录一、空安全机制真题 1:Kotlin 如何解决 Java 的 NullPointerExceptio

IIS 7.0 及更高版本中的 FTP 状态代码

《IIS7.0及更高版本中的FTP状态代码》本文介绍IIS7.0中的FTP状态代码,方便大家在使用iis中发现ftp的问题... 简介尝试使用 FTP 访问运行 Internet Information Services (IIS) 7.0 或更高版本的服务器上的内容时,IIS 将返回指示响应状态的数字代

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.