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

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

相关文章

基于STM32与FreeRTOS的四轴机械臂项目

目录 一、项目介绍 二、前期准备 1.硬件准备 2.开发环境 3.CubeMX配置 三、裸机各种模块测试 1.舵机模块 2.蓝牙模块 3.按键摇杆传感器模块和旋钮电位器模块 4.OLED模块 5.W25Q128模块 四、裸机三种控制测试 1.摇杆控制 2.示教器控制 3.蓝牙控制 五、裸机与Free…

LabVIEW智能温度监控系统

LabVIEW智能温度监控系统 介绍了一个基于LabVIEW的智能温度监控系统&#xff0c;实现对工业环境中温度的实时监控与调控。通过集成传感器技术和LabVIEW软件平台&#xff0c;系统能够自动检测环境温度&#xff0c;及时响应温度变化&#xff0c;并通过图形用户界面(GUI)为用户提…

【头歌·计组·自己动手画CPU】二、运算器设计(讲解版) 【计算机硬件系统设计】

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

什么是智慧隧道,如何建设智慧隧道

一、隧道管理的难点痛点 近年来隧道建设规模不断扩大&#xff0c;作为隧道通车里程最多、规模最大的国家&#xff0c;截至2022年底&#xff0c;我国公路隧道共有24850处、2678.43万延米&#xff0c;其中特长隧道1752处、795.11万延米&#xff0c;长隧道6715处、1172.82万延米。…

【北邮鲁鹏老师计算机视觉课程笔记】06 corner 局部特征

【北邮鲁鹏老师计算机视觉课程笔记】06 corner 局部特征 1 局部特征的任务牵引&#xff1a;全景拼接 ①提取特征 ②匹配特征 ③拼接图像 我们希望特征有什么特性&#xff1f; ①可重复性 ②显著性 ③计算效率和表达紧凑性 ④局部性 2 特征点检测的任务 3 角点 在角点&#…

记一次Spring for Kotlin中JacksonConfig配置Long转String失败

目录 起因真相解决方案 起因 众所周知&#xff0c;浏览器在处理 Long类型&#xff08;比如雪花算法生成的id&#xff09;时&#xff0c;往往会出大事情。 浏览器在处理长整型&#xff08;Long&#xff09;类型时可能会遇到问题&#xff0c;主要原因是浏览器在处理数字时有限制…

8.【CPP】Vector(扩容问题||迭代器失效问题简述迭代器的种类)

vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而且它的大小会被容器自…

ubuntu服务器部署gitlab docker并配置nginx反向代理https访问

拉取镜像 docker pull gitlab/gitlab-ce运行容器 docker run --detach \--publish 9080:80 --publish 9022:22 --publish 9443:443\--namegitlab \--restartalways \--volume /home/docker/gitlab/config:/etc/gitlab \--volume /home/docker/gitlab/logs:/var/log/gitlab \-…

如何学习VBA_3.2.14:VBA中字符串的处理和判断函数

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

RestFul的认识

前言 RESTful 是 Representational State Transfer 的缩写&#xff0c;是一种软件架构风格&#xff0c;用于在网络上构建和整合应用程序。它基于 HTTP 协议&#xff0c;并定义了一组约束和规范&#xff0c;用于规范客户端和服务器之间的通信。 RESTful API 是遵循 REST 架构规…

【复现】Supabase后端服务 SQL注入漏洞_48

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Supabase是什么 Supabase将自己定位为Firebase的开源替代品&#xff0c;提供了一套工具来帮助开发者构建web或移动应用程序。 Sup…

441. Arranging Coins( 排列硬币)

问题描述 你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n &#xff0c;计算并返回可形成 完整阶梯行 的总行数。 问题分析 等差数列求和问…

【c++基础】国王的魔镜

说明 国王有一个魔镜&#xff0c;可以把任何接触镜面的东西变成原来的两倍——只是&#xff0c;因为是镜子嘛&#xff0c;增加的那部分是反的。 比如一条项链&#xff0c;我们用AB来表示&#xff0c;不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话&#xff0c;魔镜会把…

LeetCode、1268. 搜索推荐系统【中等,前缀树+优先队列、排序+前缀匹配】

文章目录 前言LeetCode、1268. 搜索推荐系统【中等&#xff0c;前缀树优先队列、排序前缀匹配】题目类型及分类思路API调用&#xff08;排序前缀匹配&#xff09;前缀树优先队列 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创…

车载诊断协议DoIP系列 —— DoIP应用(Application)需求

车载诊断协议DoIP系列 —— DoIP应用(Application)需求 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师(Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一…

基于python深度学习的中文情感分析的系统,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

【Chrono Engine学习总结】4-vehicle-4.2-车辆轨迹跟踪

由于Chrono的官方教程在一些细节方面解释的并不清楚&#xff0c;自己做了一些尝试&#xff0c;做学习总结。 0、Vehicle的driver driver在上一篇总结中有过介绍&#xff0c;【Chrono Engine学习总结】4-vehicle-4.1-vehicle的基本概念&#xff0c;这里进一步介绍。 对于一个…

部分意图分类【LLM+RAG】

在生成人工智能领域工作最有价值的事情之一就是发现新兴技术如何融入新的解决方案。 举个例子&#xff1a;在为北美顶级金融服务公司之一设计对话式人工智能助手时&#xff0c;WillowTree 的数据和人工智能研究团队 (DART) 发现&#xff0c;将意图分类与大型语言模型 (LLM) 结合…

推荐高端资源素材图库下载平台整站源码

推荐高端图库素材下载站的响应式模板和完整的整站源码&#xff0c;适用于娱乐网资源网。该模板支持移动端&#xff0c;并集成了支付宝接口。 演示地 址 &#xff1a; runruncode.com/tupiao/19692.html 页面设计精美&#xff0c;不亚于大型网站的美工水准&#xff0c;并且用户…

【STL】vector模拟实现

vector模拟实现 一、vector函数接口总览二、vector当中的成员介绍三、list模拟实现1、默认成员函数&#xff08;1&#xff09;构造函数1&#xff08;2&#xff09;构造函数2&#xff08;3&#xff09;构造函数3 2、拷贝构造函数&#xff08;1&#xff09;写法一&#xff1a;老式…