第一章 了解web及网络基础
tcp/ip协议族 :通常使用的网络 包括互联网 是在tcp/ip协议族的基础上运作的 而http属于它内部的一个字迹
tcp/ip协议族 计算机与网络设备要进行通信 双方就必须基于相同的方法(如何探测到通信目标 由哪一边先发起通信 使用那种语言进行通信 怎样结束通信等规则 所有的一切都需要一种规则 我们把这种规则称为协议) tcp/ip协议是互联网相关的各类协议的总称
tcp/ip协议最重要的就是分层 tcp/ip协议按层次分分为应用层 传输层 网络层 数据链路层
层次化的好处 生成接口 替换方便
应用层 决定了向用户提供应用服务时通信的活动 文件传输协议 ftp 域名系统 dns http协议 超文本传输协议
传输层 tcp udp 提供处于网络连接中的两台计算机之间的数据传输
网络层 用来处理在网络上流动的数据包 数据包是网络传输最小数据单位 该层规定了通过怎样的路径 到达对方计算机 并把数据包传送给对方 与对方计算机通过多台计算机或网络设备进行传输时 网络层所起的作用就是在众多的选项中选择一条传输路线
链路层 用来处理连接网络的硬件部分 包括控制操作系统 硬件的设备驱动 网卡 光纤
发送端的客户在应用层 http协议发出一个想看某个web页面的http请求 (输入一个网址 )
接着为了传输方便 在传输层tcp协议 把从应用层处收到的数据 http请求报文 进行分割 并在各个报文上打上标记序号 及端口号 后转发给网络层
在网络层 (IP协议) 增加作为通信目的地mac地址 转发给链路层 接受端的服务器在链路层接收到数据 按序往上层发送 一直到应用层 当传输到应用层 才算真正接收到由客户端发送过来的http请求
ip 作用 把各个数据包传达给对方 而要保证确实传达到对方那里 则需要满足各类条件 其中两个重要的条件是 ip地址和mac地址 ip地址是指明节点要分配的地址 mac地址是指网卡所属的固定地址 ip地址可以和mac地址进行配对 ip地址可变换 mac地址基本不会改变 使用arp协议凭借mac地址进行通信 在网络上 通常是经过多台计算机 和网络设备中转才能连接到对方 在中转时 利用下一站中转设备的mac地址来搜索下一个中转目标 采用ARP协议 (用于解析地址的协议 根据通信方的IP地址 反查对应的mac地址 arp通过IP地址查出mac地址 但是由于mac地址不是两两连接 所以需要路由选择 )
tcp 确保可靠性 字节流服务 为了更容易传送大数据将数据以报文段为单位进行管理 tcp协议能够确认数据最终是否到达对方 三次握手
dns 应用层协议 提供域名(www.dubai.com)到ip(20X.289.105.112)之间的解析服务
uri 统一资源标识符 只要能表示唯一
url 统一路径标识符 规定格式表示唯一
第二章 简单的HTTP协议
http协议用于客户端和服务器端之间的通信
通过请求和相应的交换达成通信
请求报文实体
相应报文实体
http是不保存状态的协议 为了实现期望的保存状态的功能 引入cookie技术
GET获取资源
post 传输实体主体
put 传输文件 在请求报文的主体中包含文件内容 然后保存到请求uri指定的位置 不安全
head 获得报文首部
delete 删除文件
options 询问支持的方法
trace 追踪路径
connect 要求用隧道协议连接代理
持久连接 只要任意一端没有明确提出断开连接 则保持tcp连接状态 管线化 并行发送多个请求 不需要一个接一个等待响应
cookie 通过在响应报文内的一个叫做set-cookie 的首字母字段信息 通知客户端保存cookie 当下次客户端再往该服务器发送请求时 客户端会自动再请求报文中加入cookie值后再发送出去 (客户端第一次发过来的请求中没有cookie 服务端在响应的时候 产生一个setcookie 下次客户端再发送的时候 就自动将cookie一起发过来 这样服务端就可以查询状态了
第三章 http报文内的http信息
分块发送
发送多种数据的多部分对象集合
获取部分内容的范围请求
内容协商 返回最合适的内容
第四章 返回结果的http状态码
2XX 成功
200 ok
204 NO content 请求处理成功 但没有资源返回
206 响应报文为响应实体的指定范围的实体内容
3XX 重定向
301 永久重定向 状态码表示的请求资源已经被重新分配了新的uri 以后应使用资源现在所指的uri
302 临时重定向 状态码表示的请求资源已经被重新分配了新的uri 本次使用更新的uri 但每更新保存
303 和302相同的功能 但是303明确表示客户端应当采用get方法获取资源
304 找到请求的资源 但是不符合请求的条件
307 临时重定向 遵守浏览器标准 不会从post变为get
4XX客户端错误
400:请求错误 请求报文中存在语法错误
401 未授权
403 禁止访问的资源
404 not found
5XX 服务器错误
500 内部资源错误
503 服务器暂时处于超负荷 或停机维修 无法处理请求
第五章 与http协作的web服务器
1,单台虚拟主机实现多个域名 两个域名的ip地址相同 发送http请求时 必须在host首部内完整定义指定的主机名或域名的uri
2,通信数据转发程序 代理 (利用缓存技术 减少网络带宽的流量 缓存代理 不对报文做任何加工的叫做透明代理)网关(利用网关可以由http请求转化为其他协议通信 )隧道 (建立安全的通信路线 )
3,保存资源的缓存 代理转发从服务器返回的响应时 代理服务器会保存一份资源的副本 当再次请求的时候 如果请求的资源已经被缓存则直接由缓存服务器返回给客户端 缓存存在过期的现象
第六章 http首部
为cookie服务的首部字段
第七章 确保web安全的https
通信的加密
加密处理防止被监听 http协议中没有加密机制 通过和ssl(secure socket layer 安全套接层)或TSL(Transport Layer Security 安全层传输协议)的组合使用 加密http的通信内容
使用ssl安全路线 服务器与客户端之间建立起安全的通信线路之后开始通信
内容的加密
需要客户端和服务端同时要有解密和加密的装置 但是内容有被篡改的风险
ssl不仅提供加密处理 而且还使用了一种被称为证书的手段 证书由值得信任的第三方机构颁发
http+加密+认证+完整性保护=https
https 是http通信接口部分用ssl和tls协议取代
通常http直接和tcp通信 当使用ssl时 则演变成先和ssl通信 再由ssl和tcp通信
ssl采用公开密钥加密的加密处理方式 加密算法是公开的 但是密钥是保密的 通过这种方式得以保持加密方法的安全性
使用两把密钥的公开密钥加密
公开密钥加密:使用一把非对称的密钥 一把叫做私有密钥 另一把叫做公开密钥 私有密钥不能让任何人知道 公开密钥可以随意发布 发送密文的一方使用对方的公开密钥进行加密处理 对方收到加密的信息再使用自己的私有密钥进行解密
共享密钥加密:加密和解密用同一个密钥的方式 称为共享密钥加密
https采用混合加密机制 使用公开密钥加密的方式安全的交换在稍后的共享密钥加密中使用的密钥 确保密钥是安全的前提下 使用共享密钥加密方式进行通信
证明公开密钥正确性的证书
服务器的运行人员向数字证书认证机构提出公开密钥的申请 数字证书认证机构在判明申请者的身份后 会对已申请的公开密钥做数字签名 然后分配这个已签名的公开密钥 并将该公开密钥放入公钥证书后绑定在一起 服务器会将这份由证书机构颁发的公钥证书发送给客户端 进行公开密钥加密方式通信 公钥证书也可以叫做数字证书或直接称为证书 收到证书的客户端使用数字证书认证机构的公开密钥 对证书上的数字签名进行验证 验证服务器的公开密钥是否是真实有效的数字证书认证机构 服务器的公开密钥是值得信赖的 多数浏览器会事先在内部植入常用认证机关的公开密钥
服务器的公开密钥本来是在自己身上 想要传给客户端 就要先获取证书 数字证书认证机构认证之后 服务器发送公开密钥给客户端 客户端认证公开密钥是否正确
session管理及cookie状态管理
服务器向用户发送session id 记录认证状态 session id放在cookie中
客户端把用户id和密码等登录信息放入报文的实体部分
以post方法把请求发送给服务器 会使用https通信来进行html表单画面的显示和用户输入数据的发送 服务器发放用以识别用户的sessionid 通过验证从客户端发送过来的登录信息进行身份验证 然后把用户的认证状态与sessionid 绑定后记录在服务器
TCP/IP协议
osi参考模型
应用层 :针对特定应用的协议 发送电子邮件 电子邮件协议 远程登录 远程登录协议
表示层 : 接受不同表现形式的信息 文字流 图像 声音
会话层 :通信管理 负责建立和断开通信连接 何时建立连接 何时断开连接 保持多久的连接
传输层 管理两个节点之间的数据传输 负责可靠传输 是否有数据丢失
网络层 地址管理与路由选择 经过哪个路由传递到目标地址
数据链路层 互联设备之间传送和识别数据帧 数据帧和比特流之间的转换
物理层 连接器和网线的规格
举例
应用层:A向B发送一封电子邮件 A在点击发送的时候 进入的应用层协议的处理 该协议会在所要传送数据的前端附加首部信息 传给B 主机B收到A发送过来的数据 分析数据首部和数据正文 如果B邮箱满 返回错误
表示层 A 数据从主机特有的格式转换为网络标准传输格式 B 收到数据后将这些网络标准格式的数据恢复为该计算机特定的数据格式
会话层 : 采用哪个连接发送 发送顺序
应用层写入的数据会经表示层格式化编码 会话层标记发送顺序
传输层 :进行建立连接或断开连接的处理 在两个主机之间创建逻辑上的通信
网络层 : 将数据从发送端主机发送到接受端主机
数据链路层 物理层 向物理地址发送信号
主机中含有路由控制表 根据此表将发往主机的数据转发给路由器1
交换机1根据自己的地址转发表将数据发送给路由器1
路由器1将根据自己的路由控制表将数据发送到路由器3
路由器3将数据发给交换机3
交换机3转发给主机M
tcp/ip的具体含义 泛指利用ip进行通信是所必须用到的协议群的统称
tcp/ip协议标准化过程 有两大特点 一是具有开放性 二是注重实用性
ip(网络)协议 作为整个tcp/ip中至关重要的协议 主要负责将数据包发送给最终目标计算机 ip能够让世界上任何两台计算机之间进行通信
ip处于网络层 实现终端节点之间的通信 点对点通信
mac地址用来识别同一链路不同计算机的一种识别码
为了将数据包发给目标主机 所有的主机都维护着一张路由控制表
ip属于无面向连接好处 :简化 提速
为什么不让IP具有可靠性传输的功能
如果要一种协议规定所有的功能和作用 那么该协议的具体实施和编程就会变得非常复杂 而按照网络分层 明确定义每层协议的作用和责任 针对每层具体的协议进行编程会更加有利于该协议的实现
ip首部有一个协议字段 用来标识网络层的上一层所采用的是哪一种传输层协议 根据在这个字段的协议号 就可以识别ip传输的数据部分究竟是tcp内容还是udp内容
同样 tcp和udp为了识别自己所传输的数据究竟应该发给哪个应用 也设定了这样一个编号
udp是面向报文 tcp面向字节流
传输层
通信处理 tcp/ip的众多应用协议大多以客户端/服务端的形式运行 作为服务端的程序不知道要什么时候接收程序 所以要提前启动 准备接受客户端的请求
这些客户端程序在unix 系统中叫做守护线程
在unix中并不需要将这些守护线程逐个启动 而是启动一个可以代表他们接受客户端请求的inetd(互联网守护线程 )
该超级守护线程收到客户端的请求后 会创建新的线程并转换 为sshd等各个守护线程
确认一个请求发给哪个服务端 可以通过收到数据包的目标端口号轻松识别 当收到tcp的建立连接请求时 如果目标端口号是22 转给sshd 如果是80 则转给httpd 然后这些守护线程会继续对该连接上的通信传输进行处理
udp(用户数据报文协议)
不可靠的数据报协议 细微的处理交给上层的应用去完成 在udp的情况下 虽然可以确保发送信息大小 但不保证消息一定会到达
不提供复杂的控制机制 利用ip提供面向无连接的通信服务 而且他是将应用程序发来的数据收到立即按照原样发送到网络上 传播途中出现的丢包 udp也不负责重发 不保证顺序
用途 :
包总量较少的通信
视频 音频等多媒体通信
限定于局域网等特定网络中的应用通信
广播通信
tcp(传输控制协议)
tcp是面向连接的 可靠的流协议 实行顺序控制 重发控制机制 此外还具备流控制 拥塞控制
充分实现了数据传输时的各种控制功能可以在丢包的时候进行重发控制 还可以对次序乱掉的分包进行顺序控制 面向连接 只有在确定通信对端存在的时候才会发送数据 从而可以控制通信流量的浪费
tcp通过检验和,序列号,确认应答,重发控制,连接管理,以及窗口控制 等机制实现可靠性传输
在tcp中 当发送端的数据到达接受主机时 接受端会返回一个已经收到的消息的通知 这个消息叫做确认应答 (ACK)
tcp通过肯定的确认应答 实现可靠的数据传输 当发送端将数据发出之后会等待对端的确认应答
重发超时 :
时间:将这个往返时间和偏差相加重发超时的时间 就是比这个总和要大一点的值
在bsd的unix以及windows系统中 超时都以0.5秒为单位进行控制 因此 重发超时都是0.5秒的整数倍 由于最初的数据包不知道往返时间 重发超时一般在6秒左右 数据重发之后若还是收不到确认应答 则进行再次发送 此时等待确认的时间将会以2倍 4倍的指数函数延长 达到一定的重发次数就会判断网络或对端主机发生异常 强制关闭连接 并且通知应用通信异常 强行停止
连接管理:在数据通信开始之前先做好通信两端之间的准备工作 三次握手四次挥手
以段为单位发送数据
建立tcp连接的同时 可以确定发送数据包的单位 最大消息长度(MSS) 最理想的情况 最大消息长度正好是ip中不会被分片处理的最大数据长度 MSS在三次握手的时候在两端主机之间被计算出 写在tcp首部
窗口控制 确认应答不再是每个分段 而是以更大的单位进行确认
窗口控制与重发控制 应答未能返回 这种情况下 数据已经到达对端 不需要再进行重发,然而 在没有使用窗口控制的时候 没有收到确认应答的数据都会被重发
流控制
发送端根据自己的实际情况发送数据 但是 如果发送端发送一个巨大的且毫无意义的数据包 占用接受端的时间和资源 造成不必要的浪费 tcp提供一种机制让发送端根据接受端的实际接受能力控制发送的数据量 这就是流控制
具体操作 接受端主机向发送端主机通知自己可以接受数据的大小 于是发送端会发送不超过这个限度的数据 该大小限度叫做窗口大小 窗口大小的值就是接受端主机决定的
tcp首部 专门有一个字段来通知窗口大小 接收主机将自己可以接收的缓冲区大小放入这个字段 通知给发送端 这个字段的值越大 说明网络的吞吐量越高 接受端的缓冲区一旦面临数据溢出 窗口的大小的值也会随之被设置为一个更小的值通知给发送端 从而控制数据发送量
拥塞控制
计算机网络在一个共享的状态 有可能因为其他主机之间通信变得拥堵 在网络出现拥堵的时候 如果突然发送一个较大的数据 可能造成整个网络的瘫痪
tcp慢启动
慢启动的时候 将拥塞窗口的大小设置为1个数据段 之后每收到一次应答 拥塞窗口就增加一 倍在发送数据包的时候 将拥塞窗口的大小与接受端主机通知的窗口大小做比较 然后发送比较小的值还要小的数据量
随着包的每次往返 拥塞窗口也就会以1,2,4等指数函数的增长 拥堵状况激增甚至导致网络拥塞的发生 为了防止这些 引入慢启动阈值 只要拥塞窗口的值超过这个数量 在每次收到确认应答的时候 只允许以下面这种比例放大拥塞窗口