中科大计网学习记录笔记(八):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://xiahunao.cn/news/2778719.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

2-8 单链表+双链表+模拟栈+模拟队列

今天给大家用数组来实现链表栈和队列 单链表&#xff1a; 首先要明白是如何用数组实现&#xff0c; 在这里需要用到几个数组&#xff0c;head表示头节点的下标&#xff0c;e[i]表示表示下标为i的值&#xff0c;ne[i]表示当前节点下一个节点的下标。idx表示当前已经用到那个点…

Java:常用API接上篇 --黑马笔记

一、 StringBuilder类 StringBuilder代表可变字符串对象&#xff0c;相当于是一个容器&#xff0c;它里面的字符串是可以改变的&#xff0c;就是用来操作字符串的。 好处&#xff1a;StringBuilder比String更合适做字符串的修改操作&#xff0c;效率更高&#xff0c;代码也更…

HiveSQL——sum(if()) 条件累加

注&#xff1a;参考文章&#xff1a; HiveSql面试题10--sum(if)统计问题_hive sum if-CSDN博客文章浏览阅读5.8k次&#xff0c;点赞6次&#xff0c;收藏19次。0 需求分析t_order表结构字段名含义oid订单编号uid用户idotime订单时间&#xff08;yyyy-MM-dd&#xff09;oamount订…

【芯片设计- RTL 数字逻辑设计入门 7 -- 同步复位与异步复位详细介绍】

文章目录 复位的类型和划分同步复位综合后电路优缺点 异步复位优缺点 异步复位的时序分析&#xff08;recovery time/removal time&#xff09;异步复位&#xff0c;同步释放综合后电路优缺点 转自&#xff1a;https://blog.csdn.net/qq_40281783/article/details/128969188 复…

EF Core 模型优先——根据类对象创建数据表

需要的nuget包&#xff1a; Microsoft.EntityframeworkCore.SqlServer &#xff08;根据自己的数据库类型选择对应的nuget包&#xff09; Microsoft.EntityframeworkCore.Tools Microsoft.VisualStudio.Web.CodeGeneration.Design 说明&#xff1a; &#xff08;1&#xf…

爬虫练习——动态网页的爬取(股票和百度翻译)

动态网页也是字面意思&#xff1a;实时更新的那种 还有就是你在股票这个网站上&#xff0c;翻页。他的地址是不变的 是动态的加载&#xff0c;真正我不太清楚&#xff0c;只知道他是不变的。如果用静态网页的方法就不可行了。 静态网页的翻页&#xff0c;是网址是有规律的。 …

社区店经营管理新思路:提升业绩的秘诀

作为一名资深的鲜奶吧创业者&#xff0c;我深知在社区经营一家店铺所面临的挑战与机遇。经过5年的探索与实践&#xff0c;我总结出了一套提升社区店业绩的秘诀&#xff0c;今天就和大家分享一下。 一、明确目标客户群体&#xff0c;精准定位 在社区开店&#xff0c;首先要明确…

2.9日学习打卡----初学RabbitMQ(四)

2.9日学习打卡 一.RabbitMQ 死信队列 在MQ中&#xff0c;当消息成为死信&#xff08;Dead message&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而在RabbitMQ中&#xff0c;由于有交换机的概念&#xff0c;实…

fast.ai 机器学习笔记(四)

机器学习 1&#xff1a;第 11 课 原文&#xff1a;medium.com/hiromi_suenaga/machine-learning-1-lesson-11-7564c3c18bbb 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这些笔记将继续…

【Java】苍穹外卖 Day02

苍穹外卖-day02 课程内容 新增员工员工分页查询启用禁用员工账号编辑员工导入分类模块功能代码 **功能实现&#xff1a;**员工管理、菜品分类管理。 员工管理效果&#xff1a; 菜品分类管理效果&#xff1a; 1. 新增员工 1.1 需求分析和设计 1.1.1 产品原型 一般在做需…

VR和AR傻傻分不清,一句话给你讲明白。

不说废话&#xff0c;直接说结论&#xff0c;虚拟现实&#xff08;Virtual Reality&#xff0c;VR&#xff09;和增强现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;。如果现实是A&#xff0c;虚拟是B&#xff0c;那么VRB&#xff0c;ARAB&#xff0c;就这简单&…

算法学习——LeetCode力扣栈与队列篇1

算法学习——LeetCode力扣栈与队列篇1 232. 用栈实现队列 232. 用栈实现队列 - 力扣&#xff08;LeetCode&#xff09; 描述 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQu…

【MySQL】数据库的基础——数据库的介绍、MySQL的介绍和架构、SQL分类、MySQL的基本使用、MySQL的存储引擎

文章目录 MySQL1. 数据库的介绍1.2 主流数据库 2. MySQL的介绍2.1 MySQL架构2.2 SQL分类2.3 MySQL的基本使用2.4 MySQL存储引擎 MySQL 1. 数据库的介绍 数据库&#xff08;Database&#xff0c;简称DB&#xff09;是按照数据结构来组织、存储和管理数据的仓库。它是长期存储在计…

elasticsearch下载及可视化工具下载使用

elasticsearch下载及配置、启动 一、下载 Download Elasticsearch | Elastic 二、启动 双击bat即可。 出现如下说明启动成功&#xff1a; 访问测试&#xff1a; 三、注意 &#xff08;1&#xff09;因为es启动默认端口是&#xff1a;9200,所以需要检查此端口是否被占用。…

C#在窗体正中输出文字以及输出文字的画刷使用

为了在窗体正中输出文字&#xff0c;需要获得输出文字区域的宽和高&#xff0c;这使用MeasureString方法&#xff0c;方法返回值为Size类型&#xff1b; 然后计算输出的起点的x和y坐标&#xff0c;就可以输出了&#xff1b; using System; using System.Collections.Generic; …

js中bind、call、apply 区别(如何实现)

文章目录 一、作用二、区别applycallbind小结 三、实现 一、作用 call、apply、bind作用是改变函数执行时的上下文&#xff0c;简而言之就是改变函数运行时的this指向 那么什么情况下需要改变this的指向呢&#xff1f;下面举个例子 var name "lucy"; var obj {n…

每日五道java面试题之java基础篇(五)

第一题. final、finally、finalize 的区别&#xff1f; final ⽤于修饰变量、⽅法和类&#xff1a;final 修饰的类不可被继承&#xff1b;修饰的⽅法不可被重写&#xff1b;修饰的变量不可变。finally 作为异常处理的⼀部分&#xff0c;它只能在 try/catch 语句中&#xff0c;…

Java外卖小程序管理系统

技术架构&#xff1a; springboot ssm mysql redis 有需要该项目的小伙伴可以私信我你的Q。 功能描述&#xff1a; 商品管理&#xff1a;新增商品、所有商品 菜单管理&#xff1a;菜单管理、菜单分类 订单管理&#xff1a;订单总览&#xff08;包括未付款、已付款、已…

linux进程(进程地址空间)

目录 前言&#xff1a; 正文&#xff1a; 1.验证地址空间 2.地址空间是指物理空间吗 3.linux内核的地址空间 4进程访问地址 4.1早期程序寻址 4.2进程地址空间到物理内存的映射 4.3解释同一变量产生不同值 5虚拟地址空间的意义 5.1保护物理内存 5.2进程管理和内…

[论文总结] 深度学习在农业领域应用论文笔记12

文章目录 1. 3D-ZeF: A 3D Zebrafish Tracking Benchmark Dataset (CVPR, 2020)摘要背景相关研究所提出的数据集方法和结果个人总结 2. Automated flower classification over a large number of classes (Computer Vision, Graphics & Image Processing, 2008)摘要背景分割…