网络基础TCP
TCP/IP协议族按层次分别有以下四层:应用层、传输层、网络层和数据链路层。
应用层:应用层决定了向用户提供应用服务时通信的活动。
HTTP协议、DNS服务属于应用层
传输层:传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输。
TCP(传输控制协议)和UDP(用户数据报协议)属于传输层
网络层:用来处理在网络上流动的数据包。该层规定了通过怎样路径到达对方计算机,并把数据包传送给对方。与对方计算机之间通过多台计算机或者网络设备进行传输时,网络层所起的作用就是在众多的选项中选择一条传输路线。
IP协议属于网络层
数据包是网络传输的最小单位。
链路层:用来处理连接网络的硬件部分。
负责传输的IP协议
通过IP协议将数据包传送给对方需要满足IP地址和MAC地址都正确。
IP地址指明了节点被分配到的地址(可变化)
MAC地址是指网卡所属的固定地址(基本不变)
ARP协议:一种用以解析地址的协议。可根据通信方的IP地址反查出对应的MAC地址
确保可靠性的TCP协议
TCP协议提供可靠的字节流服务。
字节流服务是指:为了方便传输将大块数据分割成以报文段为单位的数据包进行管理。而目的是为了能够更容易传输大数据才把数据分割的。
TCP的三次握手:
目的:是为了确保数据准确无误的送达目标处。
过程:发送端发送一个带有SYN标志的数据包给对方,接收端收到后回传一个带有SYN/ACK标志的数据包以示c传达确认信息。最后发送端再回传一个ACK标志的数据包,代表握手结束。
若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。
负责域名解析的DNS服务
提供域名到IP地址之间的解析服务。(可逆向)
URI和URL
URI(统一资源标识符):由某个协议方案标识的资源的定位标识符。协议方案(30种左右)是指访问资源时使用的协议类型名称。用字符串标识某一互联网资源
绝对URI的格式:
其中登陆信息、服务器端口号、查询字符串、片段标识符为可选项。
URL:表示资源的地点(互联网上所处的位置)
URL是URI的子集。
简单的HTTP协议
http协议用于客户端与服务端之间的通信,所以在应用http协议时一定是一端是客户端,另一端是服务端。
请求一定是由客户端发起,而服务端进行回复响应的。
请求报文:由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成。
响应报文:由协议版本、状态码、原因短语(解释状态码)、可选的响应首部字段以及实体主体构成。
http不会对发送过的请求或响应做出持久化处理。这样能够更快的处理大量事务,确保协议的可伸缩性。
请求URI定位资源
HTTP协议使用URI定位互联网上的资源。
当客户端请求访问资源而发送请求时,URI需要将作为请求报文中的请求URI包含在内。
请求方式:
如果是对服务器本身发起请求,可以用*来代替URI。
告知服务器意图的HTTP方法
GET(获取资源):用来请求访问已被URI识别的资源
POST(传输实体主体):是为了传输主体内容而不是为了获取响应的主体内容。
PUT(传输文件):用来传输文件,但是由于自身不存在验证机制,所以一般结合web程序的验证机制或者架构设计的REST标准才会开放使用PUT方法。
HEAD(获取报文首部):与GET方法一样,只是不返回报文主体部分。用于确认URI的有效性及资源更新的日期时间等。
DELETE(删除文件):按请求URI删除指定的资源。但是由于自身不存在验证机制,所以一般结合web程序的验证机制或者架构设计的REST标准才会开放使用
OPTIONS(询问支持的方法):查询针对请求URI指定资源支持的方法。
TRACE(追踪路径):让web服务器将之前的请求通信环回给客户端
CONNECT(要求用隧道协议连接代理):要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。
持久连接
只要任意一端没有明确提出断开连接,则保持TCP连接状态。
持久连接可以减少TCP连接的重复建立和断开所造成的额外开销。
HTTP1.1所有连接默认是持久连接,HTTP1.0内未标准化。
管线化
利用管线化可同时并行发送多个请求。
使用Cookie的状态管理
HTTP是无状态协议。不对之前发生过的请求和响应的状态进行管理。
Cookie技术通过在请求和响应报文内写入Cookie信息来控制客户端的状态。
HTTP报文内的HTTP信息
HTTP报文大致可分为报文首部和报文主体两块。两者由最初出现的空行(CR+LF)划分。
请求报文及响应报文的结构
请求报文和响应报文的首部内容由请求行、状态行、首部字段和其它信息组成。
请求行包含用于请求的方法,请求URI和HTTP版本。
状态行包含响应结果的状态码,原因短句和HTTP版本。
首部字段包含表示请求和响应的各种条件和属性的各类首部。
首部一般有四种,分别是通用首部、请求首部、响应首部、实体首部。
其它信息包含HTTP的RFC里未定义的首部(Cookie等)。
编码提升传输速率
报文主体和实体主体的差异
报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输。
实体:作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
HTTP报文的主体用于传输请求或响应的实体主体。通常,报文主体等于实体主体,但是当传输汇中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异。
压缩传输的内容编码
内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。
分割发送的分块传输编码
分块传输编码会将实体主体分成多个部分。每一块会用十六进制标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。
HTTP/1.1中存在一种称为传输编码的机制,它可以在通信时按某种编码方式传输,但只定义作用于分块传输编码中。
发送多种数据的多部分对象集合
多部分对象集合包含对象如下:
HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type。使用boundary字符串来划分多部分对象集合指明的各类实体。
在boundary字符串指定的各个实体的起始行之前插入“- -”标记,在其最后插入“- -”标记作为结束。
多部分对象集合的每个部分类型中都可以含有首部字段。另外可以在某个部分中嵌套使用多部分对象集合。
获取部分内容的范围请求
指定下载的实体范围的请求叫做范围请求。
执行范围请求时需要使用首部字段Range来指定资源的byte范围。
针对范围请求,响应会返回状态码为206Partial Content 的响应报文。多重范围的范围请求,响应会在首部字段Content-Type标明multipart/byteranges后响应报文。
如果服务器无法响应范围请求,则返回状态码200 OK 和完整的实体内容。
内容协商返回最合适的内容
内容协商机制是指客户端和服务端响应的资源内容进行交涉,然后提供给客户端最为合适的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。
内容协商技术有以下三种类型:
返回结果的HTTP状态码
状态码的类别
经常使用的大概有14种。
200 OK :请求被正常处理。
204 No Content :请求已成功处理,但返回的响应报文中不含实体的主体部分。也不允许返回任何实体的主体。
**206 Partial Content **:范围请求被成功执行。响应报文中包含由Content-Range指定范围的实体内容。
301 Moved Permanently :永久性重定向。表示请求的资源已被分配了新的URI,以后应该使用新的URI访问资源。
302 Found :临时性重定向。和301Moved Permanently相似,但302状态码代表的资源不是永久移动,只是临时性质的。
**303 See Other **:表示由于请求的资源存在着另一个URI,应使用GET方法定向获取请求的资源。
304 Not Modified :表示客户端发送附带条件的请求时,服务端允许请求访问资源,但未满足条件的情况。所以在返回时不包含任何响应的主体部分。
307 Temporary Rediect :临时性重定向。与302相同,但307会遵照浏览器标准,不会把POST变为GET。
400 Bad Request :请求报文中存在语法错误。浏览器会像200 OK 一样对待该状态码。
401 Unauthorized :表示发送的请求需要有通过HTTP认证的认证信息。若并非第一次请求则表示认证失败。
403 Forbidden :表示服务器拒绝该访问。
404 Not Found :表示服务器上无法找到请求的资源。
**500 Internal Server Error **:表示服务器执行请求时出现错误。
**503 Service Unavailable **:表示服务器暂时处于超负荷或者正在停机维护,现在无法处理请求。如果事先得知接触以上状况需要的时间,可以写入Retry-After首部字段再返回给客户端。
与HTTP协作的Web服务器
单台虚拟机实现多个域名
当虚拟主机寄存了多个不同的主机名和域名的Web网站时由于是同一台服务器上,它们的IP地址会相同,所以在进行HTTP请求时,必须在Host首部内完整指定主机名或域名的URI。
通信数据转发程序:代理、网关、隧道
代理 : 具有转发功能的应用程序。在客户端和服务器之间传递请求和响应信息。
代理不改变请求URI,会直接发送给前方持有资源的目标服务器。
在HTTP通信中可以级联多台代理服务器。
每次通过代理服务器转发时需要附加Via首部字段用来标记经过的主机信息。
使用代理服务器的理由:利用缓存技术减少网络带宽的流量,组织内部针对特定网站的访问控制,以获取访问日志为主要目的,等等。
**缓存代理** : 代理转发响应时,缓存代理会预先将资源的副本保存到到代理服务器上,当再次接收到相同的请求时直接将缓存的资源作为响应返回。
**透明代理** :转发请求或响应时,不对报文做任何加工的代理类型被称为透明代理,反之则为非透明代理。
网关 : 转发其它服务器通信数据的服务器,接收到客户端发送的请求时,它就像拥有资源的源服务器一样对请求进行处理。
与代理类似,但是能使通信线路上的服务器提供非HTTP协议服务。
可以在客户端与网关之间的通信线路上加密以确保连接的安全。
隧道 :相距甚远的客户端和服务器之间两者进行中转,并保持双方通信连接的应用程序。
隧道本身不会去解析HTTP请求,并且在通信双方断开连接后结束。
保存资源的缓存
利用缓存代理服务器可以节省通信流量和通信时间。
缓存的资源具有有效性,也就是资源是否符合客户端的要求、资源是否为最新等,当资源失效后缓存服务器将再次向源服务器获取资源。
缓存也可存在于客户端,也具有有效性。
HTTP首部
首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。
在请求中,HTTP报文首部由方法、URI、HTTP版本、HTTP首部字段等部分构成。
在响应中,HTTP报文首部由HTTP版本、状态码(数字与原因短语)、HTTP首部字段3部分组成。
使用首部字段可以为浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容。
HTTP首部字段结构
字段值对应单个HTTP首部字段可以有多个值。
例如:
当报文首部出现两个或者两个以上具有相同首部字段名时,会根据浏览器处理逻辑的不同,结果可能不同。
4种HTTP首部字段类型
通用首部字段 :请求报文和响应报文都会使用。
请求首部字段 :从客户端向服务端发送请求报文时使用的首部。补充了请求的附加内容客户端信息、响应内容相关优先级等信息。
响应首部字段 :从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
实体首部字段 :针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
HTTP /1.1 定义了47种首部字段。
在HTTP协议通信交互中使用到的首部字段,并不限于定义的47种首部字段,还有Cookie、Set- Cookie 和Content-Disposition等
HTTP首部字段将定义成缓存代理和非缓存代理的行为,分成2种类型。
个人理解:
端到端首部会到达最终请求的源服务器\缓存代理,并且跟随响应返回。
逐跳首部在第一次到达的服务器或者代理处被删除。
除以下8个首部字段外都为端到端首部。
(详细首部介绍未做笔记,需自行翻阅)
确保Web安全的HTTPS
HTTP的不足:
窃听解决方法:
1.通信的加密 :通过和SSL(安全套接层)或TLS(安全层传输协议)的组合使用,加密HTTP的通信内容。
SSL和HTTP组合使用称为HTTPS(超文本传输安全协议)或者 HTTP over SSL
2.内容的加密 :对通信的内容本身进行加密。(对报文首部不加密,报文主体加密)前提要求是客户端和服务端同时具备加密和解密机制。且由于线路未加密,内容仍存在被篡改的风险。
伪装解决方法:
由于HTTP协议中的请求和响应不会对通信方进行确认。所以可能出现伪装。
1.查明对手的证书
在请求或响应的传输途中,遭攻击者拦截并篡改内容的攻击称为中间人攻击。
防止篡改的方法:
MD5和SHA-1等散列值校验的方法,以及用来确认文件的数字签名方法。
HTTP+加密+认证+完整性保护=HTTPS
HTTPS并非是应用层的一种新协议。只是HTTP通信接口部分用SSL和TLS协议代替而已。
通信流程: HTTP→SSL→TCP 于是身披SSL协议这层外壳的HTTP就变成了HTTPS
SSL是独立的一项协议。
SSL采用的加密处理方式为:公开密钥加密的加密方式。也就是加密算法是公开的,但是密钥不公开,只有拥有密钥才能解密。
共享密钥加密(对称密钥加密):加密和解密同用一个密钥的方式。
公开密钥加密(非对称密钥加密):使用两把密钥,一把叫做私有密钥,用于解密。一把叫做公开密钥,用于加密。
HTTPS采用混合加密机制:利用公开密钥加密传递共享密钥加密的密钥,这样一来既解决了加密密钥传递问题,又能够提升处理效率 。
证书可以解决公开密钥的正确性问题。
自认证证书 :独立构建的认证机构叫做自认证机构,由自认证机构颁发的“无用”证书也被戏称为自签名证书。
HTTPS的安全通信机制
建立HTTP通信步骤(图解):
CBC模式(密码分组链接模式):将前一个明文块加密处理后和下一个明文块做XOR运算,使之重叠,然后再对运算结果做加密处理。对第一个明文块加密时,要么使用前一段密文的最后一块,要么利用外部生成的初始向量。
HTTP通信步骤:
SSL和TLS
SSL速度慢:一种是指通信慢。另一种是指由于大量消耗CPU及内存等资源,导致处理速度变慢。
HTTPS通信慢是因为相比HTTP多了SSL通信,通信量增加。
处理速度慢是因为SSL必须进行加密处理。
解决方案:使用SSL加速器(硬件,专用服务器)来改善,但不能完全杜绝。
确认访问用户身份的认证
HTTP使用的认证方式:
BASIC认证(不安全、不便利) :web服务器与通信客户端之间的认证方式。
这里需要注意的是:
1.服务器返回状态码401 并且带WWW-Authenticate字段的响应。该字段内包含认证的方式及Request-URI安全域字符串(realm)
2.在客户端,用户ID和密码会以 “ID :密码”的格式以Base64方式编码。并且被写入到 首部字段Authorization中发送。
缺点:安全性低,使用不够灵活。
DIGEST认证 (不便利):质询响应方式,一开始一方会先发送认证要求给另一方,接着使用从另一方那接收到的质询码计算生成响应码。最后将响应码返回给对方进行认证的方式。
SSL客户端认证(产生必要费用) :借由HTTPS的客户端完成认证的方式。
认证步骤:
SSL客户端认证采用双因素认证
也就是说SSL客户端认证不仅依靠证书完成认证,一般也会和基于表单认证组合形成一种双因素认证。
基于表单认证 (认证大多基于它)、(非HTTP协议中定义):客户端会向服务器上的Web应用程序发送登录信息,按登录信息的验证结果认证。
一般用Cookie管理Session(会话)
基于HTTP的功能追加协议
SPDY(google发布,旨在解决HTTP性能瓶颈,缩短Web页面的加载时间(50%))
HTTP标准带来的瓶颈
陆续出现的解决技术:
Ajax:有效利用JavaScript 和DOM(文档对象模型)的操作,以达到局部Web页面替换加载的异步通信手段。
Comet:通过延迟应答,模拟推送功能。也就是说当服务器接收到请求后,但所请求的资源无更新,那么应答将被挂起,等到资源更新后再作应答。
SPDY(协议层面): 仍采用HTTP建立通信连接,在TCP/IP的应用层与运输层之间通过新加会话层的形式运作。通信中规定使用SSL。可照常使用HTTP的GET和POST等方法、Cookie以及HTTP报文等。
使用SPDY后,HTTP协议可获得功能:
多路复用流:通过单一的TCP连接,可以无限制处理多个HTTP请求。
赋予请求优先级:给请求逐个分配优先级顺序。
压缩HTTP首部
推送功能:支持服务器主动向客户端推送数据的功能。
服务器提示功能:支持服务器主动提示客户端请求所需的资源。
使用浏览器进行全双工通信的WebSocket
主要是为了解决Ajax和Comet里XMLHttpRequest附带的缺陷所引起的问题。
一旦Web服务器和客户端之间确认WebSocket协议连接,那么任一方都可直接向对方发送报文。
主要特点:推送功能、减少通信量(一旦建立连接就希望一值保持连接状态)
|