tcp/ip
- 计算机与网络设备需要通信,双方就必须基于相同方法,把这些规则成为协议。
- 协议中存在各种内容,如电缆规格,ip地址选定等
- 这些相关协议集合总称为tcp/ip
tcp/ip的分层管理
分为以下四层:应用层、传输层、网络层、数据链路层
层次化不关注对方如何实现
应用层:
决定了向用户提供应用服务时通信活动
比如ftp协议和dns服务,http协议也处于该层
传输层:
传输层对上层应用层,提供处于网络连接中的两台计算机之间的数据传输
有两个性质不同的协议:tcp和udp协议
网络层:
用来处理在网络上流动的数据包,数据包时网络传输的最小数据单位
该层规定了通过怎样的路径到达对方计算机,并把数据给对方。
简单的说就是选择一条传输路线
链路层:
用来处理连接网络的硬件部分。
其中具体的实现我们用http来举例子说明:
客户端在应用层发出一个想看某个web页面的http请求,然后,为了传输方便,在传输层(tcp协议)把从应用层接收到的数据http请求报文,进行分割,并在各个报文上标记序号和端口号转发给网络层,在网络层(ip协议),增加作为通信目的地的mac地址后,转发给链路层,这样,通信请求就准备齐全了。
发送端,每经过一层必然打上该层所属的首部信息。
ip协议:位于网络层,保证确实将数据包传输给对方。
tcp协议:
位于传输层,为了更容易传输大数据而的协议:
dns服务:
位于应用层,提供域名到ip地址之间的解析服务
cookie由来
http是无状态协议,不对之前发生过的请求和响应的状态进行管理,由于不必保存状态,可以减少服务器cpu和内存的使用。从某方面来说,正是因为这个原因,才会被应用到各种场景中。
但是这个特征似的需要web登录认证的页面无法进行状态管理,每次跳转就要再次登陆,为了解决这个矛盾,加入了cookie技术,通过在请求和响应报文中写入cookie信息来控制客户端状态。
cookie的过程
cookie会根据从服务器端发送的响应报文内的几个叫做set-cookie的首部字段信息,通知客户端自动在请求报文中加入cookie值后发送出去。
服务器端发现客户端发送过来的cookie后,会去检查究竟是从哪个客户端发来的连接请求,然后对比服务器上的记录,得到之前的状态信息。
报文首部:服务器端或客户端需处理的请求或响应的内容及属性
空行:回车符和换行符
报文主体:应该被发送的数据
报文首部:
请求行:包含请求的方法,请求uri和http版本
状态行:响应结果的状态码,原因短语和http版本
首部字段:包含请求和响应的各种条件和属性的各类首部
其他:可能包含http中rfc未定义的首部 如cookie等
rfc:http协议用来制定标准技术的文档
报文首部其实就是各种状态和属性
报文状态码告知从服务端返回的请求结果
状态码如 200 ok 三位数字+原因短语
类别
例子:
200 ok
比如使用get方法,对应请求资源的实体会作为响应返回
206 partial content
表示客户端进行了范围请求,而服务器成功执行了这部分的get请求,响应豹纹中包含由content-range指定范围的实体内容
单台虚拟主机实现多个域名
域名通过dns服务映射到ip地址,可见,当请求发送到服务器的时候,已经是以ip地址形式访问了。
所以,如果一台服务器内托管了多个域名,那么当收到请求的时候就要弄清楚究竟访问哪个域名(dns后映射到同一个ip地址)。
所以在发送http请求的时候,必须在host首部内完整指定主机名或域名的uri。
通信数据转发程序:代理、网关、隧道
http通信时,除了客户端和服务器外,还有一些用于通信数据转发的程序,他们可以配合服务器工作。
这些应用程序可以将请求转发给通信线路上的下一站服务器,并能从那台服务器发送的响应再转发给客户端
转发时候 ,需要附加via首部,标记经过的主机信息
使用代理的场景: 利用缓存技术减少网络带宽流量等
缓存代理(catching proxy):预先将资源的副本缓存在代理服务器上
当再次接收到对相同资源的请求,就可以不用从源服务器哪里获取资源
网关:
利用网关可以使通信线路伤的服务器提供非http协议服务,可以提高安全性
场景:连接数据库等
缓存服务器
缓存服务器是代理的一种,当代理转发从服务器返回的响应时候,代理服务器将会保存一份资源的副本。
源服务器不必多次处理相同请求
当然, 缓存也是有期限的,过期后依旧需要重新向源服务器发出请求。
客户端的缓存
缓存还可以存在与客户端浏览器中,ie浏览器将其称为临时网络文件。
缓存如果有效,可直接从本地磁盘内读取。
http协议的请求和响应报文中必定包含http首部。首部内容为客户端和服务器分别处理请求和响应提供所需要的信息。
http请求报文
由请求行(方法,uri,http版本)、http首部字段(请求首部字段、通用首部字段、实体首部字段)构成
http响应报文
由状态行(http版本、状态码)、http首部字段(响应首部字段、通用首部字段、实体手部字段)构成
http首部字段
是报文的要素之一,传递了重要信息,为浏览器和客户端提供报文主体大小、所使用语言、认证信息等等。
结构:
首部字段名:字段值
四种http首部字段类型:
通用首部字段:请求报文和响应报文都会用
请求首部字段:请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息
响应首部字段: 补充了响应的附加内容,也会要求客户端附加额外的内容信息
实体首部字段:针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
非http1.1首部字段
在http通信中使用的首部字段,不限于rfc2616中定义的。还有包括cookie,set-cookie等在其他rfc中定义的首部
http1.1通用首部字段
cache-control:操作缓存的工作机制
表示能否缓存的指令:
cache-control:public 表示其他用户也可以利用缓存
private:特定用户
。。。还有许多指令
cache-control扩展:
cache-extension token
cache-control:private,community="uci"
如上,cache-control手部字段本身没有community这个指令,借助extension tokens实现了指令的添加,如果缓存服务器不能理解这个指令,那么就会直接忽略它。因此,extension tokens仅能对理解他的缓存服务器来说时有意义的
connection:不再转发的首部字段名
管理持久连接:
http1.1版本默认连接都是持久连接。为此,客户端会在持久连接上连续发送请求。当服务器想断开时,指定connection手部字段为close
而http1.1之前 默认为close,
data:
手部字段data表明创建http报文的日期和时间
。。。还有许多通用字段此处不一一介绍
请求首部字段
accept :
accept首部可通知服务器,用户代理能够处理的媒体类型及其相对优先级
accept:text/html,application/xhtml+xml,
即根据浏览器支持的格式来设定
。。还有许多其他请求首部不一一介绍
响应首部字段
accept-ranges:
accept-ranges:bytes
用来告知客户端服务器是否能处理范围请求,以指定获取服务器端某个部分的资源
字段值 none bytes
其余字段不一一介绍,有需要直接百度
实体首部字段
即请求和响应报文中实体部分的首部字段
allow:
allow:get,head
用于通知客户端能够支持request-uri指定资源的所有http方法,
即服务器告诉客户端,从这里获得uri资源的method
其余字段请查询。。
set-cookie
当服务器开始管理客户端,会告知其各种信息
字段值:
其他首部字段
此处不赘述。。。需要请百度
后面的安全部分~敬请期待