小白笔记
接下来介绍FTP、Email
1.FTP:文件传输协议
·早期常用,现在少用了
·向远程主机上传输文件或从远程主机接收文件
·客户/服务器模式:·客户端:发起传输的一方 ·服务器:远程主机
·ftp:RFC 959 ftp服务器:端口号为21
这个FTP应用干什么用的呢?可以把本地文件系统上载到服务器相关的目录下,也可以把服务器相应目录下的文件把它下载到本地文件,那这样的话可以通过FTP通过网络共享一系列文件。
FTP:控制连接与数据连接分开
·FTP客户端与FTP服务器通过端口21联系,并使用TCP为传输协议
·客户端通过控制连接获得身份确认
·客户端通过控制连接发送命令浏览远程目录
收到一个文件传输命令时,服务器打开一个到客户端的数据连接(注意哦是服务器主动先客户端抛出数据连接,客户端比如要下载什么,服务器就通过这个连接传给他,而不是通过客户端向它建立的连接传输,即另外建立个连接传输数据)
·一个文件传输完成后,服务器关闭连接
·服务器打开第二个TCP数据连接用来传输另一个文件
·控制连接:带外(“out of band")传达
·FTP服务器维护用户的状态信息:当前路径、用户账户与控制连接对应
FTP有状态,另外它是控制命令和数据传输分别在两个TCP连接上
2.电子邮件(Email)
3个主要组成部分:
·用户代理
·邮件服务器
·简单邮件传输协议:SMTP
1)用户代理:允许用户阅读、回复、保存、撰写、发送、接收文件的客户端软件
·又名:邮件阅读器
·撰写,编辑和阅读邮件
·如outbook/foxmail
·输出和输入邮件保存在服务器上
2)邮件服务器:
·邮箱中管理和维护发送给用户的邮件
·输出报文队列保持发送邮件报文
·邮件服务器之间的SMTP协议:发送email报文
·客户:发送方邮件服务器
·服务器:接收端邮件服务器
邮件服务器形成了电子邮件体系结构的核心。每个接收方在其中的某个邮件服务器上有一个邮箱。下面假设bob是接收方,Alice是发送方。bob的邮箱管理和维护着发送给他的报文。
一个典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。当bob要在他的邮箱中读取该报文时,包含他邮箱的邮件服务器(使用用户名和口令)来鉴别bob。Alice的邮箱也必须能处理bob的邮件服务器的故障。如果Alice的服务器不能将邮件交付给bob的服务器,Alice的邮件服务器在一个报文队列中保持该报文并在以后此时再次发送,通常每30分钟左右进行一次尝试,如果几天后仍不能成功,服务器就删除该报文并以电子邮件的形式通知发送方。
用户代理发邮件,发给邮件服务器是SMTP协议,邮件服务器发给目标邮件服务器也是SMTP协议,前两跳都是推,最后一跳是拉,是POP3这种拉取协议。
为了描述SMTP的基本操作,我们观察一种常见情景。假设Alice想给bob发送一封简单的ASCLL报文:
1)Alice调用她的邮件代理程序并提供bob的邮件地址(例如bob@someschool.edu),撰写报文,然后指示用户代理发送该报文。
2)Alice的用户代理把报文发给他的邮件服务器,在那里该报文被放在报文队列中。
3)运行在Alice的邮件服务器上的SMTP客户端发现了报文队列中的这个报文,它就创建一个到运行在bob邮件服务器上的SMTP服务器的TCP连接。
4)在经过一些初始SMTP握手后,SMTP客户提供该TCP连接发送Alice的报文。
5)在bob的邮件服务器上,SMTP的服务器端接收该报文。bob的邮件服务器然后将该报文放入bob的邮箱中。
6)在bob方便的时候,它调用用户代理阅读该报文。
目标用户收邮件怎么收?目标用户收邮件的时候从相应邮件服务器的邮箱当中把别人发送给他的邮件再拉过来,拉的协议就是POP3、IMAR和HTTP协议都可以。
像大多数应用层协议一样,SMTP也有两个部分:运行在发送方邮件服务器的客户端和运行在接收方邮件服务器的服务器端。每台邮件服务器既运行SMTP的客户端也运行SMTP的服务器端。当一个邮件服务器向其他邮件服务器发送邮件时,它就表现为SMTP的客户,反之就表项为一个SMTP的服务器。
观察到这个现象是重要的:SMTP一般不使用中间邮件服务器发送邮件,即使这两个邮件服务器位于地球的两端,TCP连接是直接连接,邮件并不在之间的某个邮件服务器存留。
我们现在来看看SMTP是如何将一个报文从发送邮件服务器传送到接收邮件服务器的。首先,客户SMTP在25号端口建立一个到服务器SMTP的TCP连接。如果服务器没有开机,客户会在骚后继续尝试连接,一旦连接建立,服务器和客户执行某些应用层的握手,SMTP的客户和服务器在传输信息前先互相介绍,在SMTP握手的阶段,SMTP客户指示发送方的邮件地址和接收方的邮件地址,一旦该SMTP客户和服务器彼此介绍后,客户发送该报文。SMTP能依赖TCP提供的可靠数据传输无差错的将邮件投递到接收服务器。该客户如果有另外的报文要发送到该服务器,就在该相同的TCP连接上重复这种处理,否则,它指示TCP关闭连接。
3)SMTP
·使用TCP在客户端和服务器之间传送报文,端口号为25
·直接传输:从发送方服务器到接收方服务器
·传输的3个阶段:·握手 ·传输报文 ·关闭
·命令/响应交互
·命令:ASCLL文本
·响应:状态码和状态信息
·报文必须为7位ASCLL码,即在用SMTP传送文件之前,需要将二进制多媒体数据编码为ASCLL码,并且在使用SMTP传输后要求将相应的ASCLL码邮件解码还原为多媒体数据,而使用HTTP传送之前不需要将多媒体数据编码为ASCLL码,所以这一点SMTP就比较麻烦。
SMTP:总结
·SMTP使用持久连接
·SMTP要求报文(首部和主体)为7位ASCLL编码
·SMTP服务器使用CRLF,CRLF决定报文的尾部
与HTTP比较:
第一个区别:HTTP:拉协议,用户使用HTTP从该服务器拉取这些信息,特别的是,TCP连接是由想接收文件的机器发起的。
SMTP:推协议,发送邮件服务器把文件推向接收邮件服务器,特别的是,TCP连接是由发送该文件的机器发起的。
第二个区别:我们之前讲的,SMTP要求每个报文采用7比特ASCLL格式,如果某报文包含了非7比特ASCLL字符(具有重音的法文字符)或二进制数据(如图形文件),则该报文必须按照它7比特ASCLL码进行编码。HTTP数据则不受这种限制。
第三个区别:SMTP把所有报文对象放在一个报文中 ,而在HTTP中一个HTTP响应报文只会有一个对象。
邮件报文格式:
每个首部必须含有一个From:首部行和一个To:首部行,一个首部也许包含一个Subject:首部行以及其他可选的首部行。重要的是注意到下列事实:这些首部行不同于我们所学到的SMTP命令(即使那里包含了某些相同的词汇,如from和to)那节中的命令是SMTP握手协议的一部分,本节中考察的首部行则是邮件报文自身的一部分。
一个典型的报文首部看起来如下:
From:allice@crepes.fr
To:bob@hamburger.edu
Subject:Searching for the meaning of life
在报文首部之后,紧接着一个空白行,然后是以ASCLL格式表示的报文体。
·首部行:如·To ·From ·Subject
·主体:报文,只能是ASCLL码字符
报文格式:多媒体扩展
如果我们传输的这个邮件包括了中文字符,我们知道每个中文字符要两个字节,如果这两个字节都不在ASCLL码内怎么办?那我们就要对它进行编码,那就要对它进行扩展,即MIME就多媒体邮件扩展。
POP3协议:POP3这样的邮件访问协议用来将邮件从接收方的邮件服务器传送到接收方的用户代理。
用户确认阶段:
·客户端命令:
·user:申请用户名
·pass:口令
·服务器响应:
·+OK
·-ERR
事物处理阶段,客户端:
·list:报文号列表
·retr:根据报文号检索报文
·dele:删除
·quit
POP3在会话中是无状态的,本地管理文件夹
IMAP
·IMAP服务器将每个报文与一个文件夹联系起来
·允许用户用目录来组织报文
·允许用户读取组件
·IMAP在会话中保留用户状态