中科大计网学习记录笔记(八):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响应来返回给客户端。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/466328.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js改善轮播图(transform)时内部文本上下闪动问题

前些天绘制轮播图时&#xff0c;发现轮播图中不同span标签内&#xff08;样式不同&#xff09;文字上下跳动。 为了防止眩晕在岗位上&#xff0c;需要对其进行改善&#xff0c;试了很多种方法&#xff0c;最后来总结一下&#xff1a; 我的轮播图template代码片段&#xff1a; …

分享88个鼠标特效,总有一款适合您

分享88个鼠标特效&#xff0c;总有一款适合您 88个鼠标特效下载链接&#xff1a;https://pan.baidu.com/s/1ljcxwgXGpw7baiufUGJjZA?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不…

STM32 TIM输入捕获

单片机学习&#xff01; 目录 文章目录 前言 一、输入捕获 1.1 输入捕获简介 1.2 输出比较和输入捕获执行逻辑的对比&#xff1a; 1.2.1 输出比较 1.2.2 输入捕获 1.2.3 输出比较和输入捕获对比总结 1.3 输入捕获作用 1.4 三种定时器的输入捕获通道分布 1.5输入捕获的PWMI模式和…

Vue3快速上手(二)VSCode官方推荐插件安装及配置

一、VSCode官方插件安装&#xff0c;如下图2款插件 在用vite创建的程序里&#xff0c;提示提安装推荐的插件了&#xff0c;如下图&#xff1a; 二、配置 在设置-扩展里找到Volar插件&#xff0c;将Dot Value勾选上。这样在ref()修改变量时&#xff0c;会自动填充.value,无需…

【蓝桥杯冲冲冲】Prime Gift

【蓝桥杯冲冲冲】Prime Gift 蓝桥杯备赛 | 洛谷做题打卡day31 文章目录 蓝桥杯备赛 | 洛谷做题打卡day31Prime Gift题面翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示题解代码我的一些话 Prime Gift 题面翻译 给你 n n n 个…

python常用的深度学习框架

目录 一&#xff1a;介绍 二&#xff1a;使用 Python中有几个非常受欢迎的深度学习框架&#xff0c;它们提供了构建和训练神经网络所需的各种工具和库。以下是一些最常用的Python深度学习框架&#xff1a; 一&#xff1a;介绍 TensorFlow&#xff1a;由Google开发的TensorF…

中科大计网学习记录笔记(十):P2P 应用

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

C++,stl,set/mutiset详解

目录 1.set容器的构造和赋值 2.set的大小和交换 3.set的插入和删除 4.set的查找和统计 5.set和mutiset区别 6.pair对组的创建 7.set排序 1.set的内置类型指定排序规则 2.set的自定义数据类型指定排序 1.set容器的构造和赋值 #include<bits/stdc.h> using name…

android中使用Bitmp对象绘制图形

1、引言 你是否还在因为不懂UI设计而不得不去借用别人的图片&#xff0c;甚至使用各种网图作为界面布局的一部分&#xff0c;那么今天就教你使用Bitmap对象去绘制自定义图形&#xff0c;并保存为png格式的图片&#xff0c;须知图片编辑软件本就是程序员开发出来的&#xff0c;我…

力扣细节题:二叉树前序遍历

细节一&#xff1a;题目在note部分提示我们要使用malloc函数去创建数组&#xff0c;因为它没有提供给我们数组&#xff0c;而题目中的指针returnsize提醒我们这是一个变量进行传址操作用于释放之前malloc的空间&#xff0c;粗暴地按题目范围malloc空间会报错&#xff0c;所以必…

java数据结构与算法刷题-----LeetCode594. 最长和谐子序列

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 解题思路 子序列要尽可能长&#xff0c;并且最大值和最小值之间的差&#…

【数据结构】哈希表的开散列和闭散列模拟

哈希思想 在顺序和树状结构中&#xff0c;元素的存储与其存储位置之间是没有对应关系&#xff0c;因此在查找一个元素时&#xff0c;必须要经过多次的比较。 顺序查找的时间复杂度为0(N)&#xff0c;树的查找时间复杂度为log(N)。 我们最希望的搜索方式&#xff1a;通过元素…