本文是[计算机网络](https://www.bilibili.com/video/BV1c4411d7jb?spm_id_from=333.999.0.0)的笔记,图片也从视频中截取。
6.1概述


6.2客户/服务器方式(C/S方式)和对等方式(P2P方式)

(1)客户/服务器方式(C/S方式)


(2)对等方式(P2P方式)


(3)小结

6.3动态主机配置协议DHCP

- 如何配置用户主机才能使用户主机正常访问Web服务器?
- 给网络中的主机正确配置IP地址、子网掩码、默认网关、DNS服务器等网络相关配置信息。
- 如果网络中主机数量多,则手工配置的工作量大,容易出错。
- 给网络配置一台DHCP服务器,在该服务器中设置好可为网络中其他主机配置的网络配置信息。
- 网络中各主机开机后自动启动DHCP程序,向DHCP服务器请求自己的网络配置信息。

- DHCP使用客户/服务器方式,在DHCP服务器上运行DHCP服务器进程,也可简称为DHCP服务器;
- 在用户主机上运行DHCP客户进程,也可简称为DHCP客户;
- DHCP是TCP/IP协议体系应用层中的协议,它使用运输层的UDP所提供的服务。
- DHCP报文段在运输层会被封装成为UDP用户数据报。
- DHCP服务器使用的UDP端口是67,DHCP客户使用的UDP端口是68。这两个都是熟知端口。
- 封装有DHCP报文的UDP用户数据报在网络层会被封装成IP数据包,然后再根据所使用的网络接口,封装成相应的数据链路层的帧进行发送,例如封装成以太网帧。
- 当启用主机的DHCP后,DHCP客户端将广播发送DHCP发现报文。
- 封装该报文的IP数据报的源IP地址为0.0.0.0,这是因为主机目前还没有分配到IP地址,使用该地址进行代替。
- 目的IP地址为255.255.255.255,进行广播发送,是因为主机不知道网络中有哪几个DHCP服务器,他们的IP地址是什么。
- 因为是广播,所以网络中所有设备都会收到,并对其层层解封,解封出封装有DHCP发现报文的UDP用户数据报。
- 对于DHCP客户,其应用层没有监听该UDP用户数据报目的端口67的进程,也就是DHCP服务器进程,因此无法交付DHCP发现报文,只能丢弃;
- 对于DHCP服务器,其应用层始终运行着DHCP服务器进程,因此会接受该DHCP发现报文并做出响应。
- DHCP报文的格式比较复杂,对于DHCP发现报文,我们只需知道,其内部封装有事物ID和DHCP客户端的MAC地址即可。
- DHCP服务器收到DHCP发现报文后,根据其中封装的DHCP客户端的MAC地址来查找自己的数据库,看是否有针对该MAC地址的配置信息。
- 如果有,则使用这些配置信息来构建并发送DHCP提供报文;
- 如果没有,则采用默认配置信息来构建并发送DHCP提供报文;
- 封装该报文的IP数据报的源IP地址为DHCP服务器的P地址,目的P地址仍为广播地址。
- 仍然使用广播地址的原因是:主机图前还没有配置IP地址,为了使主机可以收到,只能发送广播。
- 这样网络中的所有设备都会收到该IP数据报,并对其层层解封,解封出封裝有DHCP提供报文的UDP用户数据报。
- 对于DHCP服务器,其应用层没有监听该UDP用中数据报目的端口68的进程,也就是DHCP客户进程,因此无法交付DHCP提供报文,只能丢弃。
- 对于DHCP客户,其应用层运行着DHCP客户进程,因此会接受该DHCP提供报文并作出相应处理。
- DHCP客户会根据DHCP提供报文中的事物ID,来判断该报文是否是自己所请求的报文。
- 如果该事物ID与自己之前发送的DHCP发现报文中封装的事物ID相等,就表明这是自己所请求的报文,就可以接受该报文;否则就丢弃该报文。
- DHCP提供报文中还封装有配置信息,例如P地址、子网掩码、地址租期、默认网关、DNS服务器等。
- 注意:DHCP服务器从自己的IP地址地中挑选待租用给主机的P地址时,会使用ARP来确保所选IP地址末被网络中其他主机占用。
- 在本例中,DHCP客户会收到两个DHCP服务器发来的DHCP提供报文。
- DHCP客户从中选择一个,一般来说,选择先到的那个,并向所选择的DHCP服务器发送DHCP请求报文,封装该报文的P数据报的源IP地址仍为0.0.0.0。
- 因为此时DHCP客户才从多个DHCP服务器中挑选一个作为自己的DHCP服务器。它首先需要征得该服务器的同意,之后才能式使用向该DHCP服务器租用的IP地址。
- 目的IP地址仍为广播地址,不用向网络中的每个DHCP服务器单播发送DHCP请求报文,来告知它们是否请求它们作为自己的DHCP服务器。
- DHCP请求报文中封装有事物ID,DHCP客户端的MAC地址,接受的租约中的IP地址、提供此租约的DHCP服务器端的IP地址等信息。
- 假设DHCP客户选择DHCP服务器1作为自己的DHCP服务器,并且DHCP服务器1接受该请求,于是DHCP服务器1给DHCP客户发送DHCP确认报文。
- 封裝该报文的P数据报的源IP地址为DHCP服务器1的IP地址,目的IP地址仍为广播地址。
- DHCP客户收到该确认报文后,就可以使用所租用到的IP地址了。
- 注意:在使用租用到的P地址之前,主机还会使用ARP检测该IP地址是否已被网络中其他主机占用。
- 若被占用,DHCP客户会给DHCP服务器发送DHCP谢绝报文,来谢绝IP地址租约,并重新发送DHCP发现报文;
- 若末被占用,则可以使用租约中的IP地址与网络中的其他主机通信了。
- 当租用期过了一半时,DHCP客户会向DHCP服务器发送DHCP请求报文,来请求更新租用期。
- 封装该报文的IP数据报的源IP地址为DHCP客户之前租用到的IP地址,目的IP地址为DHCP服务器1的地址。
- DHCP服务器若同意,则发回DHCP确认报文。这样,DHCP客户就得到了新的租用期。
- DHCP服务器若不同意,则发回DHCP否认报文。这时,DHCP客户必须立即停上使用之前租用的IP地址,并重新发送DHCP发现报文来重新申请IP地址。
- DHCP服务器若未做出响应,则在租用期过了87.5%时,DHCP客户必须重新发送DHCP请求报文,然后继续等待DHCP服务器可能做出的反应。
- 若DHCP服务器未做出响应,则当租用期到期后,DHCP客户必须立即停止使用之前租用的P地址,并重新发送DHCP发现报文来重新申请IP地址。
- DHCP客户可以随时提前终止DHCP服务器所提供的租用期,这时只需向DHCP服务器发送DHCP释放报文段即可。


- 主要原因:我们并不愿意在每一个网络上都设置一个DHCP服务器,因为这样会使DHCP服务器的数量太多。
6.4域名系统DNS





- 名称相同的域名其等级未必相同。





6.5文件传输协议FTP

(1)文件传送协议FTP的应用



- FTP采用客户/服务器方式,因特网上的所有客户计算机可将各种类型的文件上传到FTP服务器计算机。
- FTP客户计算机也可以从FTP服务器计算机下载文件。
- 根据应用需求的不同,FTP服务器可能需要一台高性能、高可靠性的服务器计算机,也可能只需要一台普通的个人计算机即可。
- 我们假设FTP客户计算机与FTP服务器计算机处于同一个局域网中。
- 我们在FTP服务器计算机中创建FTP服务器。可以使用第三方的FTP服务器软件,也可以使用操作系统自带的FTP服务器软件。
- 例如,我们可以在windows系统中,使用其自带的FTP服务器功能创建一个FTP服务器站点。
- 我们可以在FTP客户计算机中使用浏览器软件通过该地址来访问FTP服务器。
- 注意:这里使用的是文件传送协议FTP,而不是浏览器最常用的超文本传送协议HTTP。
- 我们也可以在FTP客户计算机中使用windows系统自带的命令行工具通过该地址来访间FTP服务器。
- 命令行方式需要用户记住相关命令,这对普通用户而言并不友好。
- 大多数用户在FTP客户计算机上使用第三方的FTP客户工具软件,通过友好的用户界面来完成FTP服务器的登录以及文件的上传和下载。

(2)FTP的基本工作原理

- FTP服务器监熟知端口号21,FTP客户随机选择一个临时端口号与其建立TCP连接。
- 这条TCP连接用于FTP客户与服务器之间传送FTP的相关控制命令。这条TCP连接是FTP客户与服务器之间的命令通道。
- 有数据要传输时,FTP客户通过命令通道告知FTP服务器来与自己的另一个临时端口号建立TCP连接,建立数据通道。
- FTP服务器使用自己的熟知端口号20与其建立TCP连接。
- 这条TCP连接用于FTP客户与服务器之间传送文件。这条TCP连接是FTP客户与服务器之间的数据通道。
- 由于在建立数据通道时,FTP服务器主动连接FTP客户,因此称为主动模式。
- 注意:控制连接在整个会话期间一直保持打开,用于传送FTP相关控制命令。
- 注意:数据连接用于文件传输,在每次文件传输时才建立,传输结束就关闭。
- 被动模式:
- 有数据要传输时,FTP客户通过命令通道告知FTP服务器开启某个临时端口被动等待TCP连接,建立数据通道。
- FTP客户发起与FTP服务器的TCP连接以建立数据通道。
- FTP服务器被动等待所TP客户的连接,,因此称为被动模式。
(3)小结

6.6电子邮件



- 发送方的用户代理作为SMTP客户,与发送方邮件服务器中的SMTP服务器进行TCP连接。
- 然后基于这条连接使用SMTP协议来发送邮件给发送方邮件服务器。
- 发送方邮件服务器中的SMTP客户与接收方邮件服务器中的SMTP服务器进行TCP连接。
- 然后基于这条连接使用SMTP协议来发送已收到的待转发邮件给接收方邮件服务器。
- 接收方的用户代理作为POP3客户,与接收方邮件服务器中的POP3服务器进行TCP连接。
- 然后基于这条连接使用POP3协议从接收方邮件服务器读取邮件。
- 邮件发送协议的使用范围,包含发送方用户代理到发送方邮件服务器,以及发送方邮伴服务器到接收方邮件服务器这两部分。
- 邮件接收协议的使用范围,只有接收方用户代理到接收方邮件服务器。
(1)简单邮件传送协议SMTP的基本工作原理

- 发送方邮件服务器周期性地扫描邮件缓存。
- 如果发现有待转发的邮件,则发送方邮件服务器中的SMTP客户会与接收方邮件服务器中的SMTP服务器进行TCP连接,端口号为25。
- SMTP客户就可以基于这条TCP连接给SMTP服务器发送SMTP命令,共14条。
- SMTP服务器也会给SMTP客户发送相应的应答,共21种。
- SMTP客户与服务器之间通过命令与应答的交互方式最终实现SMTP客户发送邮件给SMTP服务器。
- 当TCP连接建立成功后,SMTP服务器会主动推送服务就绪应答给SMTP客户。应答代码220后面可能跟有描述信息。
- SMTP客户收到该应答后,向服务器表明身份,告知自己SMTP服务器的域名。具体命令为HELO,其后为命令参数。
- SMTP服务器着认为身份有效,则发回应答代码250;否则,发回其他代码,例如421表录服务不可用。
- SMTP客户收到该应答后,使用命令MAIL FROM来告诉服务器邮件来自何方。
- SMTP服务器若认为合理,则发回应答代码250;否则,发回其他错误代码。
- SMTP客户收到该应答后,使用命令RCPT TO来告诉服务器邮件去往何地,也就是收件人邮箱。
- SMTP服务器中如果有该收件人邮箱,则发回应答代码250;否则,发回其他错误代码。
- SMTP客户收到该应答后。使用DATA命令来告诉服务器自己准备发送邮件内容了。
- SMTP服务器如果准备好接收,发回应答代码354;否则,发回其他错误代码。
- SMTP客户收到该应答后,就向服务器发送邮件内容。
- SMTP客户发送完邮件内容后,还要发送结束符。
- SMTP服务器着收件成功,发回应答代码250;否则,发回其他错误代码。
- SMTP客户收到该应答后,使用命令QUIT听向服务器请求断开连接。
- SMTP服务器发回应答代码221表示接受请求并主动断开连接。
(2)SMTP的信息格式

- 首部和主体的信息都需要由用户来填写。
- 首部中包含有一些关键字,后面加上冒号。
- 邮件系统将自动地将信封所需的信息提取出来并写在信封上,所以用户不需要填写电子邮件信封上的信息。


(3)常见的邮件读取协议


(4)小结

6.7万维网WWW






(1)万维网的文档






- 注意:这些文档都部署在服务器段,有一些是Web前端开发人员设计好的静态页面,有一些是服务器后端程序根据用户需求自动生成的动态页面。
- 它们都需要从服务器传送给用户放览器进行解析和宣染。
(2)超文本传输协议HTTP

- 浏览器进程首先发起与服务器进程的TCP连接,使用熟知端回号80。
- 基于这条已建立好的TCP连接,浏览器进程向服务器进程发送HTTP请求报文。
- 服务器进程收到后,执行相应操作,然后给浏览器进程发回HTP响应报文。

- 在这个三报文中的最后一个报文的数据载荷部分,携带有HTTP请求报文。
- 服务器收到后给客户发回HTTP响应报文。


①HTTP请求报文格式



②使用Cookie在服务器_上记录用户信息

- 用户主机中的浏览器进程首先与万维网服务器中的服务器进程建立TCP连接。
- 当用户的浏览器进程初次向服务器进程发送HTTP请求报文时,服务器进程就会为其产生一个唯一的Cookie识别码,并以此为索引在服务器的后端数据库中创建一个项目,用来记录该用户访问该网站的各种信息。
- 接着就会给浏览器进程发回HTTP响应报文。在响应报文中,包含有一个首部字段为Set-Cookie的首部行,该字段的取值就是Cookie识别码。
- 浏览器进程收到该响应报文后,就在一个特定的Coke文件中添加一行,记录该服务器的域名和Cookie识别码。
- 当用户再次使用该救览器访问这个网站时,每发送一个HTP请求报文,浏览器都会从Cooke文件中取出该网站的Cookie识别码,并放到HTP请求报文的Cookie首部行中,服务器根据Cookie识别码就可以识别出该用户,并返回该用户的个性化网页。
③万维网缓存与代理服务器





- 若Web缓存的命中率比较高,大大减少了该链路上的通信量因而减少了访问因特网的时延。
- 原始服务器通常会为每个响应的对象设定一个修改时间字段和一个有效日期字段。
- 当校园网中的某台主机要请求原始服务器中的该文档时,它首先向校园网中的代理服务器发送请求,若代理服务器中的该文档末过期,则代理服务器将其封装在响应报文中发回给主机。若代理服务器中的该文档已过期,则代理服务器会向因特网上的原始服务器发送请求,在请求报文中包含有一个首部字段为If-modified-since的首部行,该字段的取值就是该文档的修改旧期。
- 原始服务器根据该文档的修改日期,就可判断出代理服务器中存储的该文档是否与自己存储的该文档一致。如果一致,则给代理服务器发送不包含实体主体的响应,状态码为304,短语为Not Modifed,代理服务器重新更新该文档的有效日期,然后将该文档封装在响应报文中发回给主机。如果不一致,则给代理服务器发送封装有该文档的响应报文,这样代理服务器就更新了该文档,然后将更新后的该文档封装在响应报文中发回给主机。
(3)小结

版权声明:本文为woodendeku原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。