学校网站建设及管理制度,网站正在建设中的网页怎么做,网站 白名单,罗湖住房和建设局官网应用层协议原理
客户-服务器体系结构#xff1a; 特点#xff1a;客户之间不能直接通信#xff1b;服务器具有周知的#xff0c;固定的地址#xff0c;该地址称为IP地址。 配备大量主机的数据中心常被用于创建强大的虚拟服务器#xff1b;P2P体系结构#xff1a; 特点 特点客户之间不能直接通信服务器具有周知的固定的地址该地址称为IP地址。 配备大量主机的数据中心常被用于创建强大的虚拟服务器P2P体系结构 特点对位于数据中心的专用服务器有最小或者没有依赖 P2P最引人入胜的特征之一是它具自扩展性尽管每个对等方都由于请求文件产生工作负荷但是每个对等方通过向其他对等方发送文件也为系统增加服务能力。进程通信 套接字是同一台主机内应用层与运输层之间的接口也被称为应用程序和网络之间的应用程序编程接口API。进程寻址 在因特网中主机由其IP地址标识而目的主机中到底是哪个应用程序它由端口号表示。可供应用程序使用的运输服务 可靠数据传输 应用程序的一端发送的数据正确完全地交付给该应用程序的另一端如果一个协议提供了这样的确保数据交付服务我们就认为提供了可靠数据传输服务。吞吐量定时安全性 因特网提供的运输服务 TCP服务 TCP服务模型包括面向连接服务和可靠数据传输服务。除此之外TCP还提供拥塞控制机制。 SSL安全套接字层UDP服务 UDP是一种不提供不必要服务轻量级运输协议。
Web和HTTP
Web的应用层协议是HTTP超文本传输协议协议它是Web的核心。 HTTP使用TCP作为它的支撑运输协议 HTTP是一个无状态协议。 HTTP在默认情况下使用持续连接。
1.HTTP报文格式 HTTP请求报文 GET /somedir/page.html HTTP/1.1
Host:www.someschool.edu
Connection:close
Uset-agent:Mozilla/5.0
Accept-language:frHTTP请求报文的第一行被称作请求行其后继的行叫做首部行。 请求行有三个字段方法字段URL字段和HTTP版本字段。 在方法字段中是可以包括GETPOSTHEADPUT和DELETE绝大部分的HTTP请求报文都使用GET方法。 URL字段中包含了请求对象的标识。 版本字段是自解释的。 首部行Hostwww.someschool.edu指明了对象所在的主机。 通过包含Connectionclose首部行告诉服务器不必要使用持续链接在发送完被请求的对象之后就关闭连接。 User-agent向服务器指明用户代理即浏览器类型以便于服务器发送对象的不同版本如果有的话。 Accept-language告诉浏览器用户想得到的对象的语法版本如果有的话。 其中使用POST方法的时候才使用实体体例如用户向搜索引擎搜索关键词时实体体中就是用户在表单字段输入的值。 用表单生成的请求报文不是必须使用POST方法例如www.somesite.com/animalsearch?monkesbananas这时用户输入的内容就是moknkey和banana。 HEAD方法类似与GET方法但是服务器不返回请求对象应用程序开发者通常使用HEAD方法进行调试跟踪。 PUT方法通常与web发行工具联合使用它允许用户上传对象到指定的Web服务器上的指定路径目录。 PUT也常被那些需要向Web服务器上传对象的一个用程序使用。 DELETE方法允许用户或者应用程序伤处Web服务器上的对象。 HTTP响应报文 HTTP/1.1 OK
Connection:close
Date:Tue,18 Aug 2015 15:11:33 GMT
Sever:Apache/2.2.3 (CentOS)
Last-Modified:Tue,18 Aug 2015 15:11:03 GTM
Content-Length:6821
Contect-Type:text/html
(data data data data ... )我们来看看这个响应报文它有三个部分状态行首部行和实体体这是上面那个请求报文的响应报文。 我们来看看首部行 Connection close服务器用这个首部行告诉客户发送完报文后我将关闭TCP连接Dtae指示服务器产生并且发送该报文的日期和时间Sercer服务器的版本这里指示该服务器时Apache Web服务器Last-Modified所请求的对象创建或者最后修改的时间Content-Length指示了被发送对象中的字节数Content-Type指示了实体体中的对象是什么类型对象类型应该正式地由该首部行指示而不是根据文件扩展名来展示响应报文格式
2.cookie
cookie技术含有四个组件
在HTTP响应报文中的一个cookie首部行在HTTP请求报文中的一个cookie首部行在用户端系统中有一个cookie文件并且由用户浏览器管理位于Web站点的一个后端数据库
3.Web缓存
Web缓存器也叫做代理服务器。简单来说就是在客户端与服务器之间安装一个Web缓存器该缓存器靠近客户端当客户访问一个Web页面时HTTP请求报文被Web缓存服务器接收如果该Web缓存服务器上有客户请求的对象则直接返回给客户如果没有的话则由该Web缓存服务器向Web服务器发送HTTP请求Web服务器返回的对象由该Web缓存服务器接受并保存然后返回给客户这样当第二次访问或者被配置到该Web缓存服务器的客户访问该站点的时候Web缓存服务器就能快速做出回应。 Web缓存服务器的优势
大大减少客户请求响应的时间。大大减少一个机构的介入链路到互联网的通信量。
4.条件GET方法
回想我们上面讲过的Web缓存你有没有发现一个问题就是如果一个Web页面被Web缓存器保存了如果说Web服务器后来更新了该页面那么不是会出现问题吗 解决这个问题的方法就是条件GET方法 当用户请求某个页面的时候正好该Web缓存服务器上有缓存那么该Web缓存服务器就向Web服务器发送一个条件GET报文
GET /fruit/kiwi.gif HTTP/1.1
Host:www.exotiquecuisine.com
If-modified-since:Wed,9 Sep 2015 09:23:24这里需要注意这里的If-Modified_since首部行的值就是该Web缓存服务器中上一次接收到该对象的Last-Modified时间也就是说该Web缓存器告诉Web服务器如果这个时间之后你们改变了对象那么你就把新的给我发过来。 如果该对象没有被改变则Web服务器发送响应报文
HTTP/1l1 304 Not Modified
Date:Sat,10 Oct 2015 15:39:29
Server:Apache/1.3.0(Unix)
(empty extity body)注意该响应报文中并没有包含对象如果说Web服务器上没有更新该对象的话那么此报文中包含对象只会浪费带宽。
英特网中的电子邮件
邮箱系统的组成部分用户代理邮件服务器简单邮件传输协议STMP信箱
STMP与HTTP的对比 HTTP是一个“拉协议”而STMP是一个“推协议”STMP要求每个报文使用7字节ASCII码形式而HTTP数据不受这个限制 邮件访问协议 用户之间发送邮件的时候邮件被保存在了我的邮箱代理中了但是我怎么查看邮件STMP是一个推协议我不能拉回来呀所以就出现了邮件访问协议目前流行的邮件访问协议有第三版的邮局协议POP3因特网邮件访问协议IMAP以及HTTP。
DNS域名系统英特网的目录服务
因特网上的主机像人一样我们也希望标识主机可以使用主机名和IP地址来标识但是我们更倾向于记住它的主机名而不是IP地址所以需要在主机名和IP地址之间进行转化DNS就承担了这项任务。 DNS是①一个有分层的DNS服务器实现的分布式数据库②一个使得主机能够查询分布式数据库的应用层协议。 DNS协议运行在UDP之上使用53号端口。 除了进行主机名到IP地址的转换之外DNS还提供了一些重要的任务
主机别名邮件服务器别名负载分配
DNS工作机理概述
DNS一种简单的设计是在英特网上只用一个DNS服务器该服务器包含所有的映射。 但是这种设计肯定存在很多问题 单点故障如果说这个服务器发生了故障整个因特网将瘫痪通信容量这个服务器要处理来自因特网上所有的DNS查询。远距离的集中式数据库有时候真的可能要跨越半个地球这中间可能有低俗的拥塞链路那将会特别慢维护如果说出现了一个新的主机他就要维护。
那么解决方法有哪些我们来看看
分布式层次数据库 其中包括根DNS服务器顶级域DNS服务器权威DNS服务器还包括本地DNS服务器但是要注意本地DNS服务器不属于该服务器的层次结构 在实践中通常从请求主机到本地DNS服务器的查询是递归查询其他的查询都是迭代查询。DNS缓存 因为有缓存机制的存在除了少数DNS查询以外跟服务器都被绕过了。
P2P文件分发
我们之前讲述的客户-服务器的体系结构总是要求服务器是打开的使用P2P体系结构能够对总是打开的基础设置服务器有最小的甚至没有依赖。 对等方不仅是比特的消费者还是它们的重新分发者。
视频流和文件分发网
HTTP 经HTTP的动态适应性流Dynamic Adaptive Streaming over HTTPDASH
内容分发网CDN 专用CND和第三方CND
套接字编程 UDP套接字编程 UDPClient.py from socket import *
serverName hostname
serverPort 12000
clientSocket socket(AF_INET,SOCK_DGRAM)
message raw_input(Input lowercase sentencte:)
clientSocket.sendto(message.encode(),(serverName,serverPort))
modifiedMessage,serverAddress clientSocket.recvfrom(2048)
print(modifiedMessage.decode())
clientSocket.close()UDPServer.py: from socket import *
serverPort 12000
serverSocket socket(AF_INET,SOCK_DGRAM)
serverSocket.bind(,serverPort)
print(The server is ready to receive)
while True:message,clientAddress serverSocket.recvfrom(2048)modifiedMessage message.decode().upper()serverSocket.sendto(modifiedMessage.encode(),clientAddress)TCP套接字编程 TCPClient.py: from socket import *
serverName servername
serverPort 12000
clientSocket socket(AF_INET,SOCK_STREAM)
clientSocket.connect((serverName,serverPort))
sentence raw_input(Input lowercase sentence)
clientSocket.send(sentence.encode())
modifiedSentence clientSocket.recv(1024)
print(From Server: ,modifiedSentence.decode())
clientSocket.close()TCPServer.py from socket import *
serverPort 12000
serverSocket socket(AF_INET,SOCK_STREAM)
serverSocket.bind((,serverPort))
serverSocket.listen(1)
print(The Server is ready to receive)
while True:connectionSocket,addr serverSocket.accept()sentence connectionSocket.recv(1024).decode()capitalizedSentence sentence.upper()connectionSocket.send(capitalizedSentence.encode())connectionSocket.close()