TCP/IP协议族按层次分别划分为:应用层,传输层,网络层和数据链路层
层次划分
- 应用层(http,ftp,dns)
决定了向用户提供应用服务时通信的活动
- 传输层(tcp,udp)
提供处于网络连接中的两台计算机之间的数据传输
- 网络层(ip)
选取合适的网络路径到对方计算机并把数据包传送给对方
- 数据链路层
处理连接网络的硬件部分
先是作为发送端的客户端在应用层发出一个想看某个Web页面的请求,Http报文
为了传输方便,在传输层,分割Http请求报文,给它打上标记序号和端口号,转发给网络层,TCP报文段
网络层,把MaC地址给它一起转发给链路层,IP数据包
然后接收端的链路层接收到数据,按序往上层发送,一直到应用层,才能算真正接收到由客户端发来的Http请求
IP协议
把各种数据包传送给对方 需要两个重要条件:IP地址和MAC地址
ip间的通信依赖MAC地址需要使用ARP地址解析然后发往下一站,然后继续解析下一站的MAC地址,这中间使用了路由选择,然后最后找到对应的ip
路由选择:选择大致认为是对的地址进行发送
TCP协议
为了准确发送数据,将大的数据分割为以报文段为单位的数据包进行管理
还会先建立一个三次握手的过程
保证安全的措施: 拥塞控制,流量控制,超时重传,校验和,序列号
DNS
域名解析服务
提供域名到IP地址的之间的解析服务
#用户想要访问一个web页面
#发送方:
1.先发送域名到DNS服务,收到DNS服务的ip地址,给ip地址发送请求
2.HTTP协议,生成针对目标服务器的请求报文
3. TCP协议,为了方便通信,将HTTP报文分割成多个报文段,每个报文段经过3次握手安全准确的发送给对方
4.IP协议搜索对方地址,一边中转一边传送
#接收方:
1. IP协议,经过中转传输接收对方发送
2. TCP协议,和对方进行3次握手,接受对方报文段,并按照原顺序重组
3. HTTP协议,对请求的内容进行处理
到达服务器处理完毕后通过同样的顺序回传
HTTP协议
http请求报文
get /index.htm HTTP/1.1 方法+uri+http版本号
Host: hackr.jp 请求首部字段
name=sad&age=12 内容实体
http响应报文
HTTP/1.1 200 OK 版本号 状态码 描述
Date: Tue,JUl 2012 06:50:15 创建响应时间
Content-Type: text/html 实体的内容资源
<html>
Http是一种不保存状态的协议,对于请求响应不会持久化
为什么呢? 因为为了更快处理大量事务,确保协议的可伸缩性
如果需要状态可以利用Cookie
和Session
技术
要保留无状态,不用记住可以减轻cpu资源消耗,可以利用Cookie技术在报文里写入Cookie信息来保存状态
cookie怎么做到保存状态的
-
在服务器响应报文里面有一个Set-Cookies的字段,会通知客户端保存Cookie,下次客户端再发送请求的时候会自动在请求报文里加入Cookie值
-
服务器会去检查Cookies是从哪一个客户端发来的连接请求,然后对比之前的记录得到状态
http1.1 的不同之处
在http1.1版本中使用的是长连接避免了每次频繁tcp连接,建立一次可多次利用,但是需要双方都支持这个版本
管线化: 可以多个请求并行发送,不用等待上一个响应
HTTP还有分块传输的能力,传输大数据分块成十六进制然后接收的时候再解码,这样可以逐步显示页面
状态码
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
Http的缺点
- 通信使用的明文,不加密,可能被窃听
- 不验证通信方身份,所以可能被伪装(DNS劫持)
- 无法验证报文的完整性
http再套上SSL安全套接层就变成了HTTPS
https这么安全,为什么不一直用它?
因为与纯文本通信的Http相比,加密通信会消耗更多的CPU及内存资源,如果每次都加密,会消耗更多的资源,因此如果是非敏感信息则用http通信,如果是个人信息就用Https加密通信
全套接层就变成了HTTPS**
https这么安全,为什么不一直用它?
因为与纯文本通信的Http相比,加密通信会消耗更多的CPU及内存资源,如果每次都加密,会消耗更多的资源,因此如果是非敏感信息则用http通信,如果是个人信息就用Https加密通信
特别是访问量较多的Web网站在进行加密处理时,他们负载很重,如果全加密不敢想象,节约购买证书的开销也是原因之一