6.2 文件传送协议FTP(File Transfer Protocol)
6.2.1 FTP概述
- 文件传送:将某台计算机中的文件通过网络传送到可能相距很远的另一台计算机中(网络环境中的一项基本应用)
- 问题引入:初看起来,在两个主机之间传送文件是很简单的事情。其实这往往非常困难,原因是众多的计算机厂商研制出的文件系统多达数百种,且差别很大。网络环境下,传送文件的复杂性:
- 计算机存储数据的格式不同
- 文件的目录结构和文件命名的规定不同
- 对于相同的文件存取功能,操作系统使用的命令不同
- 访问控制方法不同
- 解决方案:文件传送协议FTP(见下)
- 文件传送协议FTP:因特网上使用得最广泛的文件传送协议。
- FTP提供交互式的访问,允许客户指明文件的类型与格式(如指明是否使用ASCII码),并允许文件具有存取权限(如访问文件的用户必须经过授权,并输入有效的口令)。
- FTP屏蔽了各计算机系统的细节(减少或消除在不同操作系统下处理文件的不兼容性),因而适合于在异构网络中任意计算机之间传送文件。
- 在因特网发展的早期阶段,用FTP传送文件约占整个因特网的通信量的三分之一,而由电子邮件和域名系统所产生的通信量还要小于FTP所产生的通信量。只是到了1995年,万维网WWW的通信量才首次超过了FTP。
- 应用:FTP使用客户/服务器方式。因特网上的FTP客户计算机可将各种类型的文件上传到FTP服务器计算机,也可以从FTP服务器计算机下载文件。根据应用需求的不同,FTP服务器计算机可能需要一台高性能和高可靠性的服务器计算机,也可能只需要一台普通的个人计算机即可。
- Step1:在FTP服务器计算机中创建FTP服务器
- 可以使用第三方的FTP服务器软件,也可以使用操作系统自带的FTP服务器软件
- 例如,在Windows系统中,使用其自带的FTP服务器功能创建一个FTP服务器站点(自行上网查找学习)。
- Step2:在FTP客户计算机中访问FTP服务器
- 访问方式1:使用浏览器软件(注:此处使用的是文件传送协议FTP,而不是浏览器最常用的超文本传输协议HTTP)
- 访问方式2:使用Windows系统自带的命令行工具(命令行方式需要用户记住相关命令,这对普通用户而言并不友好)
- 访问方式3:使用第三方的FTP客户工具软件(无需记住FTP客户端工具命令,操作简单)
6.2.2 FTP的基本工作原理
- 主动模式:建立数据通道时,FTP服务器主动连接FTP客户
- 控制连接:FTP服务器监听熟知端口号21,FTP客户随机选择一个临时端口号与其建立TCP连接(即建立命令通道)。这条TCP连接用于FTP客户与服务器之间传送FTP相关的控制命令,是客户与服务器之间的命令通道。
- 数据连接:当有数据要传输时,FTP客户通过命令通道告知FTP服务器来与自己的另一个临时端口号建立TCP连接(即建立数据通道)。FTP服务器使用自己的熟知端口号20与其建立TCP连接。这条TCP连接用于FTP客户与服务器之间传送文件,是客户与服务器之间的数据通道。
- 被动模式:建立数据通道时,FTP服务器被动等待FTP客户的连接
- 控制连接:与“主动模式”相同
- 数据连接:当有数据要传输时,FTP客户通过命令通道告知FTP服务器开启某个临时端口被动等待TCP连接(即建立数据通道)。FTP客户随机选择另一个临时端口号与FTP服务器提前协商的临时端口建立TCP连接。
- FTP连接方式:
- 控制连接:
- 端口号:FTP客户使用临时端口号;FTP服务器使用标准端口号21
- 时间:在整个会话期间一直保持打开
- 作用:传送FTP相关控制命令
- 数据连接:
- 端口号:FTP客户使用临时端口号;FTP服务器使用标准端口号20(主动模式)或临时端口号(被动模式)
- 时间:在每次文件传输时才建立,传输结束就关闭
- 作用:传输文件(上传、下载数据)
- 控制连接:
- FTP传输模式:
- 文本模式:ASCII模式,以文本序列传输数据
- 二进制模式:Binary模式,以二进制序列传输数据
- 使用两个不同端口号的好处:
- 使协议更加简单和更容易实现
- 在传输文件时还可以利用控制连接(例如,客户发送请求终止传输)
6.5 电子邮件:SMTP、POP3、IMAP
6.5.1 电子邮件概述
- 问题引入:传统的电话通信属于实时通信,存在以下两个缺点
- 电话通信的主叫和被叫双方必须同时在场
- 一些不是十分紧迫的电话也常常不必要地打断人们的工作或休息
- 解决方案:电子邮件(E-mail)(因特网上最早流行的一种应用,并且仍然是当今因特网上最重要、最实用的应用之一)
主要构件
- 用户代理UA(User Agent):用户与电子邮件系统的接口,是电子邮件客户端软件
- 功能:撰写、显示、处理和通信
- 邮件服务器:电子邮件系统的基础设施(QQ邮件服务器、Google邮件服务器)
- 功能:发送和接收邮件、维护用户的邮箱、向发信人报告邮件传送的情况(已交付、被拒绝、丢失等)
- 注1:邮件服务器按照客户/服务器方式工作。
- 注2:邮件服务器必须能够同时充当客户和服务器。
- 注3:我们可以简单地认为,邮件服务器中有很多邮箱和用于缓存待转发邮件的缓存。
- 电子邮件所需的协议:
- 邮件发送协议(SMTP):发送方用户代理到发送方邮件服务器、发送方邮件服务器到接收方邮件服务器
- 邮件读取协议(POP3/IMAP):接收方用户代理到接收方邮件服务器
- 注:SMTP、POP3和IMAP都是使用TCP连接来传送邮件的,目的是为了可靠地传送邮件。
工作原理(简述):电子邮件与邮政系统的寄信相似
- Step1:发件人 使用用户代理 通过邮件发送协议 将邮件发送到发送方邮件服务器
- Step2:发送方邮件服务器 同样 通过邮件发送协议 将收到的邮件按其目的地址转发到 接收方邮件服务器
- Step3:收件人在方便的时候 使用用户代理 通过邮件读取协议 从接收方邮件服务器中读取邮件
- 优点:
- 使用方便、传递迅速、费用低廉
- 可以传送多种类型的信息(文字、声音、图像等)
- 由于电子邮件的广泛使用,现在许多国家已经正式取消了电报业务。在我国,电信局的电报业务也因电子邮件的普及而濒临消失。
6.5.2 发邮件:简单邮件传送协议SMTP
以发送方邮件服务器 使用SMTP协议 给接收方邮件服务器 发送待转发邮件为例:发送方邮件服务器周期性扫描邮件缓存,如果发现有待转发的邮件,则发送方邮件服务器中的SMTP客户会与接收方邮件服务器中的SMTP服务器进行TCP连接,端口号为25。之后,SMTP客户就会基于这条TCP连接给SMTP服务器发送SMTP命令,共14条;SMTP服务器也会给SMTP客户发送相应的SMTP应答,共21种。SMTP客户与服务器通过命令与应答的交互方式,最终实现SMTP客户发送邮件给SMTP服务器。下面简述一下该过程:当TCP连接建立成功后
- Step1:SMTP服务器 主动推送服务就绪应答 给SMTP客户
- 应答代码220后面可能跟有描述信息,比如网易邮件服务器给出的描述信息如下:
- Step2.1(命令):SMTP客户(收到应答后)向服务器 表明身份,告知自己SMTP服务器的域名
- 具体命令:HELO 命令参数(域名)
- Step2.2(应答):SMTP服务器对SMTP客户的身份进行鉴定
- 身份有效:发回应答代码250
- 身份无效:发回其他代码(如421表示服务不可用)
- Step3.1(命令):SMTP客户(收到应答后)向服务器 告知邮件来自何方
- 具体命令:MAIL FROM: 发件人邮箱
- Step3.2(应答):SMTP服务器对邮件来源进行鉴定
- 合理:发回应答代码250
- 不合理:发回其他错误代码
- Step4.1(命令):SMTP客户(收到应答后)向服务器 告知邮件去往何地
- 具体命令:RCPT TO: 收件人邮箱
- Step4.2(应答):SMTP服务器对邮件去处进行鉴定
- 收件人邮箱存在:发回应答代码250
- 收件人邮箱不存在:发回其他错误代码
- Step5.1(命令):SMTP客户(收到应答后)向服务器 告知准备发送邮件内容
- 具体命令:DATA
- Step5.2(应答):SMTP服务器是否准备好接收
- 已准备好:发回应答代码354
- 没准备好:发回其他错误代码
- Step6.1:SMTP客户(收到应答后)向服务器 发送邮件内容
- 注:SMTP客户发送完邮件内容后,还要发送结束符
- Step6.2(应答):SMTP服务器是否收件成功
- 成功:发回应答代码250
- 失败:发回其他错误代码
- Step7.1(命令):SMTP客户(收到应答后)向服务器 请求断开连接
- 具体命令:QUIT
- Step7.2(应答):SMTP服务器接受请求并主动断开连接(应答代码221)
- 注意:
- 为了简单起见,省略了可能存在的认证过程
- 为了简单起见,还省略了应答代码后面一般都跟随简单的描述信息
- 不同的SMTP服务器给出的相同应答代码的描述信息可能不同
6.5.3 电子邮件的信息格式、地址格式
电子邮件的信息格式
电子邮件的信息格式并不是由SMTP定义的,而是在RFC 822中单独定义的。这个RFC文档已在2008年更新为RFC 5322。一个电子邮件有信封和内容两部分,而内容又由首部和主体两部分构成。
- 信封(envelope):用户写好首部后,邮件系统会自动将信封所需的信息提取出来并写在信封上。因此,用户无需填写电子邮件信封上的信息。
- 内容(content):RFC 5322只规定了邮件内容中的首部格式,而对邮件的主体部分则让用户自由撰写。
- 首部(header):关键字 + 冒号
- From:后面填入发件人的电子邮件地址(一般由邮件系统自动填入)
- To:后面填入一个或多个收件人的电子邮件地址(用户只需打开地址簿,点击收件人名字,收件人的电子邮件地址就会自动地填入到合适的位置上)
- Cc:后面填入一个或多个收件人以外的抄送人的电子邮件地址(抄送人收到邮件后,可看可不看邮件,可回可不回邮件)
- Subject:后面填入邮件的主题(反映了邮件的主要内容,便于用户查找邮件)
- Date:发信人的发信日期
- Reply-To:对方回信所用的地址。
- 注:最重要的关键字为To和Subject,往往是必填选项。
- 主体(body):用户想传递给收件人的核心信息
电子邮件的地址格式
TCP/IP 体系的电子邮件系统规定电子邮件地址的格式如下:
- xiexiren@tsinghua.org.cn
- 收件人邮箱名:这个用户名在该域名的范围内是唯一的
- @:读作“at”,表示“在”的意思
- 邮箱所在的主机的域名:在全世界必须是唯一的
MIME(Multipurpose Internet Mail Extensions)
- 问题引入:SMTP协议只能传送ASCII码文本数据,不能传送可执行文件或其他的二进制对象。也就是说,SMTP不能满足传送多媒体邮件(例如带有图片、音频或视频数据)的需要,并且许多其他非英语国家的文字(例如中文、俄文、甚至带有重音符号的法文或德文)也无法用SMTP传送。
- 解决方案:多用途因特网邮件扩展/通用互联网邮件扩充MIME(Multipurpose Internet Mail Extensions)
- 增加了5个新的邮件首部字段,这些字段提供了有关邮件主体的信息。
- 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。
- 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变。
- 注:实际上,MIME不仅仅用于SMTP,也用于后来的同样面向ASCII字符的HTTP。
6.5.4 收邮件:邮局协议POP、因特网邮件访问协议IMAP
到目前为止,我们已经介绍完了涉及邮件发送的相关内容。接下来,我们将介绍涉及邮件读取的相关内容。常用的邮件读取协议有以下两个:
- 邮局协议POP(Post Office Protocol):POP3是其第三个版本,是因特网正式标准。
- 优点:非常简单
- 缺点:功能有限
- 用户只能以下载并删除方式或下载并保留方式从邮件服务器下载邮件到用户方计算机。用户不能在邮件服务器上管理自己的邮件(例如创建文件夹,对邮件进行分类管理等)。
- 下载并删除方式:下载到本地,同时删除服务器备份
- 下载并保留方式:下载到本地,同时保留服务器备份
- 因特网邮件访问协议IMAP(Internet Message Access Protocol):IMAP4是其第四个版本,目前还只是因特网建议标准。
- 优点:功能强大
- 用户在自己的计算机上就可以操控邮件服务器中的邮箱,就像在本地操控一样,因此IMAP是一个联机协议。
- 注1:POP3和IMAP4都采用基于TCP连接的客户/服务器方式。POP3使用熟知端口110,IMAP4使用熟知端口143。
- 注2:有关POP3协议和IMAP4协议的具体内容,有兴趣的同学可自行查阅相关资料,此处不再深入介绍。
6.5.5 基于万维网的电子邮件
- 问题引入:用户代理(UA)的缺点
- 传统的电子邮件系统必须在计算机中安装用户代理软件,但有些计算机可能不能安装或不允许安装。因此,不方便收发邮件。
- 解决方案:万维网电子邮件的优点
- 基于万维网的电子邮件系统无需在计算机中安装用户代理软件,只需通过万维网浏览器登录(提供用户名和口令)邮件服务器万维网网站,就可以撰写、收发、阅读和管理电子邮件。
- 邮件服务器网站通常都提供非常强大和方便的邮件管理功能,用户可以在邮件服务器网站上管理和处理自己的邮件,而不需要将邮件下载到本地进行管理。
- Case1:发送方(用户A)和接收方(用户B)使用同一邮件服务器
- 发送、接收电子邮件时,使用HTTP协议
- 无需使用SMTP和POP3协议
- Case2:发送方(用户A)和接收方(用户B)使用不同邮件服务器
- 发送、接收电子邮件时,使用HTTP协议
- 两个邮件服务器之间传送邮件时,使用SMTP协议
6.6 动态主机配置协议DHCP((Dynamic Host Configuration Protocol))
- 协议配置:在协议软件中,给协议参数赋值的动作
- 一个协议软件在使用之前必须是已正确配置的。
- 连接到互联网的计算机的协议软件需要配置的参数包括:
- IP地址
- 子网掩码
- 默认路由器的IP地址
- 域名服务器的IP地址
- 这些信息通常存储在一个配置文件中,计算机在引导过程中可以对这个文件进行存取。
6.6.1 DHCP的作用
- 问题引入:如图所示,如何配置用户主机,才能使用户主机正常访问Web服务器?
- 解决方案:需要给网络中的各主机正确配置IP地址、子网掩码、默认网关、DNS服务器等网络相关配置信息。
- 手动配置(静态地址):如果网络中的主机数量较多,则手工配置的工作量较大,且易于出错
- DHCP动态配置(动态地址):互联网广泛使用的动态主机配置协议 DHCP提供了即插即用连网(plug-and-play networking)的机制。
- Step1:给网络添加一台DHCP服务器,在该服务器中设置好可为网络中其他各主机配置的网络配置信息。
- Step2:网络中各主机开机后自动启动DHCP程序,向DHCP服务器请求自己的网络配置信息。
使用场景
- 静态地址:
- 服务器
- 机房台式机
- 第1排台式机 192.168.0.11、192.168.0.12、192.168.0.13
- 第2排台式机 192.168.0.21、192.168.0.22、192.168.0.23
- 第3排台式机 192.168.0.31、192.168.0.32、192.168.0.33
- 优点:便于老师的管理、方便学生之间的访问(只需看位置,而无需刻意记住IP地址)
- 动态地址:
- 移动接入设备(笔记本电脑):学生带着笔记本电脑来教室上课,每间教室的每个位置上都有网线
- 202教室(数据结构):192.168.202.0/24
- 204教室(计算机网络课):192.168.204.0/24
- 当学生在202教室上数据结构课时,必须获得192.168.202.0/24网段的地址;当学生在204教室上计算机网络课时,必须获得192.168.204.0/24网段的地址。由于两个教室所处的网段不同,因此不能给笔记本电脑使用静态地址。如果所有的学生来到教室,都自己手动配置静态地址,极大可能会造成地址冲突。
- 无线设备(手机、平板):
- 酒店、咖啡厅等公共场所的WiFi网络
- 基站 → 4G网络、5G网络
6.6.2 DHCP的基本工作原理
DHCP是TCP/IP协议体系应用层中的协议,它使用运输层的UDP所提供的服务,即DHCP报文在运输层会被封装成为UDP用户数据报。DHCP服务器使用的UDP端口为67,DHCP客户使用的UDP端口为68。
假设网络中有两台DHCP服务器和多台用户主机,为了简单而有效地描述DHCP的工作过程,下面仅画出网络中的这两台DHCP服务器和一台用户主机。下面,我们来分析DHCP客户和DHCP服务器的交互过程:DHCP发现报文(DISCOVER) → DHCP提供报文(OFFER) → DHCP请求报文(REQUEST) → DHCP确认报文(ACK)
- Step1:当用户主机启动DHCP后,DHCP客户将广播发送DHCP发现报文
- 源IP地址:0.0.0.0(主机目前还未分配到IP地址)
- 目的IP地址:255.255.255.255(广播地址 → 主机目前并不知道网络中有哪几个DHCP服务器)
- DHCP发现报文格式:只需知道其内部封装有事务ID和HDCP客户端的MAC地址即可(DHCP报文的格式比较复杂)
- 注:由于DHCP发现报文为广播的数据报,因此网络中的所有设备都会收到该IP数据报,并对其层层解封,得到封装有DHCP发现报文的UDP用户数据报。
- DHCP客户:应用层没有监听目的端口67的进程,即DHCP服务器进程。因此,运输层无法向应用层交付DHCP发现报文,只能丢弃;
- DHCP服务器:应用层始终运行着DHCP服务器进程,因此会接受DHCP发现报文,并做出响应。
- Step2:DHCP服务器收到DHCP发现报文后,根据其中封装的DHCP客户端的MAC地址来查找自己的数据库,看是否有针对该MAC地址的配置信息。若有,则使用现有的配置信息来构建并发送DHCP提供报文;若没有,使用默认的配置信息来构建并发送DHCP提供报文
- 源IP地址:DHCP服务器的IP地址
- 目的IP地址:255.255.255.255(广播地址 → 主机目前还没有配置IP地址,为了使主机可以收到,只能发送广播)
- DHCP提供报文格式:只需知道其内部封装有事务ID和配置信息(IP地址、子网掩码、地址租期、默认网关、DNS服务器等)即可
- DHCP服务器从自己的IP地址池(address pool)中挑选待租用IP地址给主机时,会使用ARP来确保所选的IP地址未被网络中其他主机占用。
- 注:由于DHCP提供报文为广播的数据报,因此网络中的所有设备都会收到该IP数据报,并对其层层解封,得到封装有DHCP发现报文的UDP用户数据报。
- DHCP服务器:应用层没有监听目的端口68的进程,即DHCP客户进程。因此,运输层无法向应用层交付DHCP提供报文,只能丢弃;
- DHCP客户:应用层始终运行着DHCP客户进程,因此会接受DHCP提供报文,并做出相应处理。
- Step3.1:DHCP客户收到DHCP提供报文后,根据其中的事务ID来判断该报文是否是自己所请求的报文。换句话说,判断DHCP提供报文的事务ID和之前发送的DHCP发现报文的事务ID是否一致。
- 一致:接受该DHCP提供报文
- 不一致:丢弃该DHCP提供报文
- Step3.2:DHCP客户会收到多个DHCP服务器发来的DHCP提供报文,DHCP客户从中选择一个(一般来说,选择先到的那个),并向所选择的DHCP服务器发送DHCP请求报文
- 源IP地址:0.0.0.0(此时,DHCP客户才从多个DHCP服务器中挑选一个作为自己的DHCP服务器,首先需要征得该服务器的同意,之后才能正式使用向该DHCP服务器租用的IP地址)
- 目的IP地址:255.255.255.255(广播地址 → 无需向网络中的每一个DHCP服务器单播发送DHCP请求报文来告知它们是否请求它们作为自己的DHCP服务器)
- DHCP请求报文格式:事务ID、HDCP客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器端的IP地址等
- 注:假设DHCP客户选择DHCP服务器1作为自己的DHCP服务器,并且DHCP服务器1接受该请求
- Step4:DHCP服务器1收到DHCP请求报文后,给DHCP客户发送DHCP确认报文
- 源IP地址:DHCP服务器1的IP地址
- 目的IP地址:255.255.255.255(广播地址)
- Step5:DHCP客户收到DHCP确认报文后,就可以使用所租用到的IP地址
- 在使用租用到的IP地址之前,主机还会使用ARP检测所分配到的IP地址是否已被网络中其他主机占用:
- 若被占用:给DHCP服务器发送DHCP谢绝报文撤销IP地址租约,并重新发送DHCP发现报文
- 若未被占用:可以使用租约中的IP地址与网络中其他主机通信了
- Step6:当租用期超过一半时,DHCP客户会向DHCP服务器发送DHCP请求报文,请求更新租用期
- 源IP地址:租用的IP地址
- 目的IP地址:DHCP服务器1的IP地址
- Case1:若DHCP服务器同意,则发回DHCP确认报文;此时,DHCP客户得到新的租用期
- Case2:若DHCP服务器不同意,则发回DHCP否认报文;此时,DHCP客户需要立即停止使用之前租用的IP地址,并重新发送DHCP发现报文来重新申请IP地址
- Case3:若DHCP服务器不响应,则“见Step7”
- Step7(非必须):当租用期超过87.5%时,DHCP客户必须重新发送DHCP请求报文,继续等待DHCP服务器可能做出的反应。
- Case1:同上
- Case2:同上
- Case3:若DHCP服务器不响应,则当租用期到期后,DHCP客户必须立即停止之前租用的IP地址,并重新发送DHCP发现报文来重新申请IP地址
- 注:DHCP客户可以随时提前终止DHCP服务器所提供的租用期,此时只需向DHCP服务器发送DHCP释放报文即可
- 租用期(lease period):DHCP服务器分配给DHCP客户的IP地址是临时的,因此DHCP客户只能在一段有限的时间内使用这个分配到的IP地址。
- 租用期的数值应由DHCP服务器自己决定。
- DHCP客户也可在自己发送的报文中(例如,发现报文)提出对租用期的要求。
DHCP工作过程图解
6.6.3 DHCP中继代理(relay agent)
- 问题引入:如图所示,黄色背景内的各主机能否通过DHCP自动获取到IP地址等网络配置信息吗?显然不能,因为该网络中的主机广播发送DHCP发现报文,但该广播报文不会被路由器转发,而是丢弃。
- 解决方案:给路由器配置DHCP服务器的IP地址,并使之成为DHCP中继代理。
- 当DHCP中继代理(即路由器)收到广播的DHCP发现报文后,会将其单播转发给DHCP服务器,并等待其回答。
- 当DHCP中继代理(即路由器)收到DHCP服务器回答的提供报文后,会将此提供报文发回给主机。
- DHCP客户和DHCP服务器通过该路由器的后续交互过程同“6.6.2”,此处不再赘述。
- 注:使用DHCP中继代理的原因是,我们并不愿意在每一个网络上都设置一个DHCP服务器,因为这样会使得DHCP服务器的数量太多。
计算机网络学习笔记(三):数据链路层https://mp.csdn.net/mp_blog/creation/editor/133913056
计算机网络学习笔记(四):网络层https://mp.csdn.net/mp_blog/creation/editor/133893571计算机网络学习笔记(五):运输层https://mp.csdn.net/mp_blog/creation/editor/134299417写在最后:码字不易,喜欢的小伙伴烦请一键三连,你们的支持是我持续创作的动力,感谢!!!