在庞大的TCP/IP协议族5层模型中,网络应用层是位于最上层的,其应用模型主要分为两种:客户/服务器模型(client/server,C/S),P2P模型。
在客户/服务器模型中,有一个总是打开的主机称为服务器,服务于许多来自其他客户机的主机请求,其工作流程如下:
- 1)服务器处于接收请求的状态
- 2)客户机发出服务请求,等待接收结果
- 3)服务器收到请求后,分析请求,进行必要处理后,将结果返回客户机。
常见的C/S模型的应用包括:Web应用-http/https
,文件传输-ftp
,域名解析-DNS
,远程登录-ssh
,电子邮件-smtp/pop3
等。
在P2P模型中,与C/S不同的是,网络中的每个主机都可以作为客户机也可以作为服务器,没有固定的客户与服务的划分,任意一对计算机称为对等方。
下面来看看基于C/S模式的应用。
1.域名系统-DNS
域名系统(Domain Name System, DNS)是因特网使用的命名系统,用来转换方便人记忆的特定主机名和便于机器处理的IP地址,DNS系统采用客户/服务器模型,协议运行在UDP上,使用端口:53。
概念上DNS分3部分:层次域名空间、域名服务器、解析器。
层次域名空间
因特网采用层次树状结构命名的方法,域名根据不同层次进行分类,举个例子,www.baidu.com
,com
是顶级域名,
baidu
是二级域名,www
是三级域名,通过"."
将不同层级域名隔开。
如下图所示,常见层级域名,如国家顶级域名,.cn
,.uk
,分别表示中国,英国,通过顶级域名,.com
,.gov
则表示公司,政府,还有一种域名叫基础结构域名,arpa
,仅有一个,反向域名。
域名服务器
域名服务器,主要四种类型,根域名服务器,顶级域名服务器,本地域名服务器,授权域名服务器,不同类型域名服务器管辖范围不同。
根域名服务器
根域名服务器,最高层次域名服务器,所有的根域名服务器都知道所有的顶级名服务器的IP地址,也是最重要的,不管哪个本地域名服务器,解析域名时,如果自己无法解析,都首先求助于根域名服务器,但根域名服务器不是直接把待查询的域名直接转IP,而是告诉本地域名服务器应该往哪个域名服务器查询。
顶级名服务器
该域名服务器管理在其注册的所有二级域名,收到DNS请求时,可能直接返回结果,也可能告诉下一步往哪个域名服务器查找。
授权名服务器
每台主机都必须在授权(权限)域名服务器登记,授权域名服务器总能将其管辖的主机名转为主机的IP地址。
本地名服务器
每个ISP都可以有本地域名服务器,当主机发出DNS查询请求时,请求报文就发送给主机的本地名服务器。
域名解析过程
域名解析是指把域名映射成Ip地址,或者反过来,前者为正向解析,反之为反向解析。当客户端需要域名解析时,通过本机的DNS客户端构造一个DNS请求报文,以UDP数据报方式发往本地域名服务器。
域名解析有两种方式:递归查询
和递归与迭代
相结合的查询。
递归查询的过程如下图所示,但该方法给根域名服务器造成的负载大,实际几乎不用:
递归与迭代查询的过程如上图所示。
当然为了提高DNS的查询效率,并减少因特网上的DNS查询报文数量,在域名服务器中广泛地使用了高速缓存。当一个DNS服务器收到DNS查询结果时,该服务器就能够直接提供所要求的IP地址,而不需要向其他DNS服务器询问。另外,因为主机名和IP地址之间的映射不是永久的,所以DNS服务器将在一段时间后丢弃高速缓存中的信息。
2.文件传输协议-FTP
文件传输协议(FileTrasferProtocol,FTP)是因特网上使用最广泛的文件传输协议。FTP提供交互式的访问,允许客户指明文件类型及格式,并允许文件具有存取权限。
FTP提供以下功能:
- 1)提供不同种类主机系统之间的文件传输能力
- 2)以用户权限管理的方式提供用户对远程FTP服务器上的文件管理能力
- 3)以匿名FTP的方式提供公用文件共享的能力
FTP采用客户/服务器的工作方式,使用TCP可靠的传输服务。一个FTP服务器进程可同时为多个客户提供服务,服务器进程由两大部分组成:一个主进程,负责接收新的请求,另外有若干的从属/子进程,负责处理单个请求,工作步骤如下:
- 1)打开21端口,使客户进程能够连接上
- 2)等待客户进程发连接请求
- 3)启动从属进程处理客户进程发来的请求,主进程与从属进程并发执行,从属进程对客户进程的请求处理完毕后即终止
- 4)回到等待状态,继续接收其他客户进程的请求
FTP服务器必须在整个会话期间保留用户的状态信息,特别是服务器必须把指定的用户账户与控制连接联系起来,比如设置一个匿名账户,密码任意,服务器必须追踪用户在远程目录上的当前位置。
控制连接与数据连接
FTP在工作时,使用两个并行的TCP连接,如下图,一个是控制连接(端口21),一个是数据连接(端口20),使用两个不同的端口号可使协议更加简单和更容易实现。
控制连接
服务器监听21号端口,等待客户连接,建立在这个端口上的连接成为控制连接,控制连接用来传输控制信息,如连接请求、传送请求,且控制信息都以7位ascii格式传送。FTP客户发出传送请求,通过控制连接发给服务器端的控制进程,但控制连接不传送文件。在传输文件是还可以使用控制连接,中途发送其他命令,因此,控制连接在整个会话期间一直处于打开状态。
数据连接
服务器端的控制进程在接收到FTP客户发来的文件传输请求后,就创建了“数据传送进程”和“数据连接”。数据连接用来连接客户端和服务器的数据传送进程,数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束执行。
因FTP使用一个分离的控制连接,所以也称FTP的控制信息是带外传送的。
3.电子邮件-SMTP/POP
电子邮件系统应具有三个最主要的组成构件:用户代理(User Agent),邮件服务器,电子邮件使用协议,SMTP/POP/IMAP。
用户代理-UA:用户与电子邮件系统的接口,用户代理使用户能通过友好接口发送/接收邮件,用户代理至少应具有撰写显示和邮件处理的功能,通常情况下,用户代理就是一个运行在PC上的程序,常见的有Outlook/Foxmail等。
邮件服务器:组成电子邮件系统的核心,功能是发送和接收邮件,同时还要向发信人报告邮件传送情况(已交付,被拒绝,丢失等),邮件服务器采用C/S方式工作,但它能同时充当客户和服务器,举个例子,当邮件服务器A向邮件服务器B发送邮件时,A就作为SMTP客户,B是SMTP服务器,反之,当B向A发送邮件时,角色互换。
邮件协议:邮件发送协议用于用户代理向邮件服务器发送邮件或者在邮件服务器之间发送邮件,通常使用SMTP;邮件读取协议用于用户代理从邮件服务器读取邮件,如POP3。SMPT采用的是push的通信方式,POP3采用的是pull的通信方式。
邮件发送和接收的过程可简化如下图:
下面介绍电子邮件的收发过程:
- 1)发信人调用用户代理撰写和编辑发送的邮件,用户代理用SMTP把邮件传送给发送方邮件服务器
- 2)发送方邮件服务器将邮件放入邮件缓存队列,等待发送
- 3)运行在发送方邮件服务器的SMTP客户进程,发现邮件缓存中有待发送的邮件,就向运行在接收方邮件服务器的SMTP服务器进程发起建立TCP连接
- 4)TCP连接建立后,SMTP客户进程开始向远程SMTP服务器进程发送邮件,当所有待发送邮件发完后,SMTP就关闭所建立的TCP连接
- 5)运行在接收方邮件服务器中SMTP服务器进程收到邮件后,将邮件放入收信人的用户邮箱,等待收信人在方便时进行读取
- 6)收信人打算收信时,调用用户代理,使用POP3或者IMAP协议将自己的邮件从接收方邮件服务器的用户邮箱中取回
电子邮件格式与MIME
电子邮件分为信封和内容两部分,邮件内容分为首部和主体两部分,RFC 822规定邮件的首部格式,主体部分用户填写,邮件内容的首部有些关键字是必需的,最重要的是To:收件人和Subject:主题,其中Subject是可选关键字,另外From:是必填的,通常邮件系统自动填入。
MIME(multipurpose Internet Mail Extentions, MIME)
SMTP只能传送一定长度的ASCII码,许多非英语国家的文字,如中文,俄文等就无法传送,且无法传送可执行文件及二进制对象,因此提出MIME,多用途网络邮件扩充。MIME的意图是继续使用目前的格式,但增加了邮件主题的结构,并定义了传送非ASCII码的编码规则,MIME定义许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化,定义了传送编码,可对任何内容格式进行转换。SMTP与MIME的关系如下:
SMTP
简单邮件传输协议(Simple Mail Transfer Protocol, SMTP)是一种提供可靠且有效的电子邮件传输的协议,它控制两个相互通信的SMTP进程交换信息。SMTP使用C/S模式,因此发送邮件的SMTP进程是SMTP客户,负责接收邮件的SMTP进程就是SMTP服务器,用TCP连接,端口号25,SMTP通信有以下的三个阶段:
- 1)连接建立
- 2)邮件传送
- 3)连接释放
POP3
邮局协议(Post Office Protocol, POP)是一个简单但功能有限的邮件读取协议,现在使用的是其第三个版本POP3。POP3采用的是pull-拉的通信方式,当用户读取邮件时,用户代理向邮件服务器发出请求,拉取用户邮箱中的邮件。
POP也使用客户/服务器的工作方式,在传输层使用TCP,端口号110,接收的用户代理必须运行POP客户程序,接收方的邮件服务器则运行POP服务器程序。POP有两种工作方式,下载并保留,下载并删除。
IMAP
IMAP也是一种邮件接收协议(Internet Message Access Protocol),较POP复杂,其为用户提供了创建文件夹,在不同文件夹之间移动邮件及在远程文件夹中查询邮件的命令,为此IMAP服务器维护了会话用户的状态信息。其另一特性是允许用户代理只获取报文的某些部分,如只读取一个报文的首部,这适用于低带宽的情况。
另外,随着现在互联网的流行,除了使用以上的客户代理外,很多如Hotmail/Gmail等,用户的浏览器与Hotmail/Gmail的邮件服务器之间的邮件发送或接收使用了**HTTP
**,而仅在不同的邮件服务器之间传送邮件时才使用SMTP。
4.web应用
万维网(World Wide Web, www)是一个资料空间,这里一样有用的事物称为一样资源,并由一个全域统一资源定位符标识-URL。这些资源通过超文本传输协议(HyperText Transfer Protocol,HTTP)传给使用者,而后者通过单击链接来获取资源。万维网使用链接方法能让用户非常方便地从因特网的一个站点访问另一个站点,从而主动按需获取丰富信息,超文本标记语言(HyperText Markup Language, HTML)使得万维网页面设计者可以方便用一个超链接从本页面的某处链接到因特网的其他页面,并且能够显示这些页面。
万维网的内核部分由三个标准构成:统一资源定位符-URL,超文本传输协议-HTTP,超文本标记语言-HTML。
URL
URL是对可以从因特网上得到资源的位置和访问方法的一种简洁表示,URL相当于一个文件名在网络范围的扩展。
URL的一般形式:<协议>://😕。常见协议有http,https, ftp,端口和路径有时可以省略,在URL中不区分大小写。
HTTP
HTTP定义了浏览器(client进程)怎样向万维网服务器请求资源,以及服务器怎样把文档传给浏览器,从层次的角度看,HTTP是面向事物应用层协议,它规定了浏览器和服务器之间的请求和响应的格式与规则,是互联网能够可靠交换文件的重要基础。
HTTP的操作过程
从协议的执行过程来说,浏览器要访问www服务器时,首先要完成对www服务器的域名解析,一旦获得服务器的IP地址,浏览器就通过TCP向服务器发送连接建立请求。
万维网的大致工作过程如下图所示,网站站点有一个服务器进程,不断监听TCP的80端口(默认),当监听到连接请求后便与浏览器建立连接,TCP连接建立后,浏览器就向服务器发送请求获取某个web页面的HTTP请求。服务器收到HTTP请求后将构建所请求的web页面必需信息,通过HTTP响应返回给浏览器,浏览器再将信息进行解释,然后将web页面显示给用户,最后,TCP连接释放。
HTTP有两类报文:请求报文和响应报文。
HTTP的特点
HTTP是无状态的,也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次访问时相同。这种无状态的特性简化了服务器的设计,使服务器更容易支持大量并发的HTTP请求,在实际应用中,比如会使用cookie/session/token+数据库方式来追踪用户的活动。
HTTP采用TCP作为运输层的协议,保证了数据的可靠传输,其本身是无连接的,通信的双方在交换HTTP报文之前不需要建立HTTP连接。
HTTP既可以是非持久连接,也可以是持久连接(HTTP/1.1)。对于非持久连接,每个网页元素如jpeg,flash等,其传输都需要单独建立一个TCP连接,如下图所示。
而持久连接,是指服务器发送响应后仍然保持这条连接,使同一个客户与服务器可以持续在这条连接上传送后续的HTTP请求与响应报文,如下图所示的持久连接-非流水线方式。
持久连接分为非流水线和流水线方式,对于非流水线,客户在收到前一个响应后才能发出下一个请求,HTTP/1.1默认方式是使用流水线的持久连接,这种情况下,客户每遇到一个对象引用就立即发出一个请求,因为呵护可以做个连续发出对哥哥引用对象的请求,如果所有的请求和响应都是连续发送的,name所有引用的对象共计经历1
个RTT延迟,而不是像非流水线方式,每个应用都必须有1个RTT延迟。
HTTP报文结构
HTTP是面向文本的,因此报文中的每个字段都是一些ASCII码串,并且每个字段的长度都是不确定的,有两类报文:
- 请求报文:client >>> server
- 响应报文:server >>> client
题外话
在此疾速成长的科技元年,编程就像是许多人通往无限可能世界的门票。而在编程语言的明星阵容中,Python就像是那位独领风 骚的超级巨星, 以其简洁易懂的语法和强大的功能,脱颖而出,成为全球最炙手可热的编程语言之一。
Python 的迅速崛起对整个行业来说都是极其有利的 ,但“人红是非多
”,导致它平添了许许多多的批评,不过依旧挡不住它火爆的发展势头。
最后
为了帮助大家更好的学习Python,小编给大家准备了一份Python学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂,需要获取方式:点击这里【 Python全套资料】 即可获取。
CSDN大礼包:《Python开发全套学习笔记/实战项目/安装工具》免费分享
👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
👉Python必备开发工具👈
👉精品Python学习书籍👈
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
温馨提示:篇幅有限,已打包文件夹,获取方式:点击这里【 Python全套资料】 即可获取。
CSDN大礼包:《Python开发全套学习笔记/实战项目/安装工具》免费分享
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉100道Python练习题👈
👉面试刷题👈
👉实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉Python副业兼职与全职路线👈
获取方式:点击这里【 Python全套资料】 或扫描下方即可获取。
CSDN大礼包:《Python开发全套学习笔记/实战项目/安装工具》免费分享