【网络协议】一文了解 TCP/IP 与 HTTP

1,283 阅读15分钟

前言

  7月份已经结束,本月主要学习了网络协议。其实大学有教授该课程,可惜大学是学渣一枚,而且大学课本是那本砖头一样厚的《计算机网络》(谢希仁编著),基本已经放弃了。但是工作后发现网络协议是必不可少的,于是买了两本入门的《图解TCP/IP》 与 《图解HTTP》,这两本书写的还是蛮好的,图文并茂,适合入门阅读。该篇就是对两本书中的部分内容总结。希望看完本篇能帮助你了解网络协议,同时也推荐购入书籍,阅读学习,当然如果感觉想深入学习的话,可以买本《计算机网络》,里面讲解的非常详细。


正文

一、TCP/IP 分层

分层名 功能 设备 相关协议
应用层 决定向用户提供应用服务时通信的活动,包括FTP(文件传输协议)、DNS(域名系统)、HTTP 等。 交换机、负载均衡器、网关等以 TCP 等协议为基础,分析收发数据,并对其进行特定的处理。 *万维网(WWW):通过 HTTP 协议传送 HTML 格式数据。
*电子邮件(E-Mail):通过 SMTP 协议传送 MIME 协议格式数据。
*文件传输:通过 FTP 协议传送二进制或文本格式数据。
*远程登录(SSH):通过 SHH 和 TELNET 协议实现远程登录。
*网络管理(SNMP):通过 SNMP 协议对通信设备进行管理。
表示层 将应用层数据转换为网络标准数据格式
会话层 通信管理。负责建立和断开通信连接。管理传输层以下的分层。
传输层 为应用层提供处于网络连接中的两台计算机之间的数据传输,包括 TCP、UDP 等 *TCP:面向有连接并具备顺序控制、重发控制等机制的传输层协议。可以保证两端通信可达,具有流量控制、拥塞控制、提高网络利用率等功能。
*UDP:面向无连接的传输层协议。不关注对端是否收到传送的数据。常用于分组数据较少或多播、广播通信以及视频通信等多媒体领域。
网络层 用来处理在网络上流动的数据包,地址管理与路由选择。数据包是网络传输的最小数据单元。包括 IP 等。 路由器。连接两个网络、并对分组报文进行转发。可以分担网络负载与网络安全功能 *IP协议:跨网传送数据包,不具有重发机制,属于非可靠性传输协议。
*ICMP:IP 数据包传输异常时,给发送端发送一个异常通知。
*DNS:将主机名(域名)解析为 IPARP:从分组数据包的 IP 地址中解析出 MAC 地址。只适用于 IPv4
*RARP:从 MAC 地址定位 IP 地址的一种协议
*ICMPv6:从分组数据包的 IP 地址中解析出 MAC 地址。适用于 IPv6
*DHCP:实现自动设置 IP 地址、统一管理 IP 地址分配的协议
数据链路层 互连设备之间传送和识别数据帧。包括MAC地址等。 网桥。连接两个网络设备。可以校验数据是否正确送达目的地。可以通过记录MAC地址(这种叫做自学式网桥) 网卡设备、驱动等
物理层 以"0"、"1"代表电压的高低、灯光的闪灭。界定连接器和网线的规格。 中继器。信号经由中继器的波形调整和放大再传给另一个电缆。不能在传输速度不同的媒介之间转发。 光纤、光缆等硬件

分层间传递的数据包

分层间传递的数据包

二、TCP 三次握手/四次分手

TCP 三次握手/四次分手

三、HTTP 请求

HTTP 是无状态协议,不对请求和响应做持久化处理。

1. HTTP请求方法:

  ①. GET:用来请求访问已被 URI 识别的资源。
  ②. POST:用来传输实体的主体。
  ③. PUT:用来传输文件。
  ④. DELETE:用于删除文件,与 PUT 作用相反。
  ⑤. HEAD:与 GET 方法一样,只是不返回报文主体部分,用于确认 URI 的有效性及资源更新的日期时间等。
  ⑥. OPTIONS:用来查询针对请求 URI 指定资源支持的方法。

2. 压缩传输的内容编码

  ①. gzip(GNU zip)
  ②. compress(UNIX 系统的标准压缩)
  ③. deflate(zlib)
  ④. identity(不进行编码)

3. 内容协商

内容协商机制是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。
内容协商技术:
  ①. 服务器驱动协商(Server-driven Negotiation)
   由服务器端进行内容协商。以请求的首部字段为参考,在服务器端自动处理。但对用户来说,以浏览器发送的信息作为判定的依据,不一定能筛选出最优内容。
  ②. 客户端驱动协商(Agent-driven Negotiation)
   由客户端进行内容协商。用户从浏览器显示的可选项列表中手动选择。
  ③. 透明协商(Transparent Negotiation)
   服务器驱动和客户端驱动的结合体,是由服务器端和客户端各自进行内容协商的一种方法。

4. HTTP 状态码
状态码 类别 描述
1xx Informational (信息型状态码)
2xx Success (成功状态码)
200 OK 从客户端发来的请求在服务器端被正常处理
204 Not Content 服务器接收的请求已被成功处理,但是返回的响应报文中不含实体的主体部分
206 Partial Content 客户端进行了范围请求,服务器成功执行了这部分的 GET 请求
3xx Redirection (重定向状态码)
301 Moved Permanently 永久性重定向。表示请求的资源已被分配了新的 URI,以后应使用资源现在所指的 URI
302 Found 临时性重定向。表示请求的资源已被分配了新的 URI,希望本次能使用新的URI
303 See Other 表示由于请求对应的资源存在着另一个 URI,应使用 GET 方法定向获取请求的资源
304 Not Modified 表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但因发生请求未满足条件的情况。
307 Temporary Redirect 临时重定向,与 302 Found 有着相同的含义
4xx Client Error (客户端错误状态码)
400 Bad Request 表示请求报文中存在语法错误。
401 Unauthorized 表示发送的请求需要有通过 HTTP 认证(BASIC 认证、DIGEST认证)的认证信息。若之前请求过1次,则表示用户认证失败。
403 Forbidden 表示对请求资源的访问被服务器拒绝。
404 Not Found 表示服务器上无法找到请求的资源
5xx Server Error (服务器错误状态码)
500 Internal Server Error 表示服务器端在执行请求时发生错误,或 Web应用存在 bug 或某些临时故障
503 Service Unavailable 表示服务器暂时处于超负载或正在进行停机维护,无法处理请求。
5.HTTP 弊端

  ①. 通信使用明文(不加密),内容可能被窃听
  ②. 不验证通信放的身份,有可能遭遇伪装
  ③. 无法证明报文完整性,有可能遭遇篡改

6. HTTPS 通信过程

https通信过程

六、HTTP 报文

1.请求报文

2. 响应报文

3. HTTP 首部字段类型
3.1. 通用首部字段(General Header Fields)

  请求报文和响应报文都会使用的首部
  ①. Cache-Control    控制缓存的行为

指令 参数 说明 补充
缓存请求指令
no-cache 强制向源服务器再次验证 no-cache 代表不缓存过期的资源,缓存会向源服务器进行有效期去人后处理。no-store 是真正的不进行缓存。
no-store 不缓存请求或响应的任何内容
max-age=[秒] 必需 响应的最大 Age 值
max-state(=[秒]) 可省略 接收已过期的响应
min-fresh=[秒] 必需 期望在指定时间内的响应仍有效
no-transform 代理不可更改媒体类型
only-if-cached 从缓存获取资源
cache-extension - 新指令标记(token)
缓存响应指令
public 可向任意方提供响应的缓存
private 可省略 仅向特定用户返回响应
no-cache 可省略 缓存前必须先确认其有效性
no-store 不缓存请求或响应的任何内容
no-transform 代理不可更改媒体类型
must-revalidate 可缓存但必须再向源服务器进行确认 使用 must-revalidate 指令会忽略请求的 max-stale 指令。
proxy-revalidate 要求中间缓存服务器对缓存的响应有效性再进行确认
max-age=[秒] 必需 响应的最大 Age 值 s-maxage 与 max-age 功能相同,区别在于 s-maxage 指令只适用于供多位用户使用的公共缓存服务器,也就是,对于向同一个用户重复返回响应的服务器来说,s-maxage 指令无效。当使用 s-maxage 指令后,则直接忽略对 Expires 首部字段及 max-age 指令的处理。
s-maxage=[秒] 必需 公共缓存服务器响应的最大 Age 值
cache-extension - 新指令标记(token)
  ②. Connection    逐跳首部、连接的管理
  作用:
   i. 控制不再转发给代理的首部字段
    Connection: 不再转发的首部字段(Connection:Upgrade)    ii. 管理持久连接
    Connection:Keep-Alive
  ③. Date    创建报文的日期时间
  ④. Pragma    报文指令(HTTP/1.1之前版本的历史遗留字段,为作兼容,与 Cache-Control 同时出现)
  ⑤. Trailer    报文末端的首部一览
  ⑥. Transfer-Encoding    指定报文主体的传输编码方式
  ⑦. Upgrade    升级为其他协议
  ⑧. Via    代理服务器的相关信息
  ⑨. Warning    错误通知
3.2 请求首部字段(Request Header Fields)

  从客户端向服务器端发送请求报文时使用的首部,补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
  ①. Accept    用户代理可处理的媒体类型。可通过 q= 来添加权重(0 =< q <= 1)
  常见媒体类型:
   i. 文本文件
    text/html、text/plain、text/css ...
    application/xhtml+xml、application/xml ...
   ii. 图片文件
    image/jpeg、image/gif、image/png ...
   iii. 视频文件
    video/mpeg、video/quicktime ...
   iv. 应用程序使用的二进制文件
    applicaton/octet-stream、application/zip ...
  ②. Accept-Charset    优先的字符集
  ③. Accept-Encoding    优先的内容编码
   常见内容编码:i. gzip ii. compress iii. defalte iv.identity
  ④. Accept-Language    优先的语言(自然语言)
  ⑤. Authorization    Web认证信息
  ⑥. Expect    期待服务器的特定行为
  ⑦. From    用户的电子邮箱地址
  ⑧. Host    请求资源所在服务器
  ⑨. If-Match    比较实体标记(ETag)
  ⑩. If-Modified-Since    比较资源的更新时间
  ⑪. If-None-Match    比较实体标记(与 If-Match 相反)
  ⑫. If-Range    资源为更新时发送实体 Byte 的范围请求
  ⑬. If-Unmodified-Since    比较资源的更新时间(与 If-Modified-Since 相反)
  ⑭. Max-Forwards    最大传输逐跳数
  ⑮. Proxy-Authorization    代理服务器要求客户端的认证信息
  ⑯. Range    实体的字节范围请求
  ⑰. Referer    对请求中 URI 的原始获取方
  ⑱. TE    传输编码的优先级
  ⑲. User-Agent    HTTP 客户端程序的信息

3.3 响应首部字段(Response Header Fields)

  从服务器端向客户端返回响应报文时使用的首部,补充了响应的附加信息,也会要求客户端附加额外的内容信息。
  ①. Accept-Ranges    是否接受字节范围请求
  ②. Age    推算资源创建经过时间
  ③. ETag    资源的匹配信息
  ④. Location    令客户端重定向至指定 URI
  ⑤. Proxy-Authenticate    代理服务器对客户端的认证信息
  ⑥. Retry-After    对再次发起请求的时机要求
  ⑦. Server    HTTP 服务器的安装信息
  ⑧. Vary    代理服务器缓存的管理
  ⑨. WWW-Authenticate    服务器对客户端的认证信息

3.4. 实体首部字段(Entity Header Fields)

  针对请求报文和响应报文的实体部分使用的首部,补充了资源内容更新时间等与实体相关的信息。
  ①. Allow    资源可支持的 HTTP 方法
  ②. Content-Encoding    实体主体使用的编码方式
  ③. Content-Language    实体主体的自然语言
  ④. Content-Length    实体主体的大小(单位:字节)
  ⑤. Content-Location    替代对应资源的 URI
  ⑥. Content-MD5    实体主体的报文摘要
  ⑦. Cotnent-Range    实体主体的位置范围
  ⑧. Content-Type    实体主体的媒体类型
  ⑨. Expires    实体主体过期的日期时间
  ⑩. Last-Modified    资源的最后修改日期时间

七、 Cookie

Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端状态。
Cookie 会根据从服务端发送端的响应报文内的一个叫做Set-Cookie 的首部字段信息,通知客户端保存 Cookie,当下次客户端再往服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送。服务器端发现客户端发送过来的 Cookie 后,会去检查是从哪个客户端发来的连接请求,然后对比服务器上的记录,最后得到之前的状态信息。

1. HTTP 中为 Cookie 服务的首部字段
首部字段名 说明 首部类型
Set-Cookie 开始状态管理所使用的的 Cookie 信息 响应首部字段
Set-Cookie 属性 说明
NAME = VALUE 赋予 Cookie 的名称和其值(必需)
expires = DATE Cookie 的有效期(若不明确指定则默认为浏览器关闭前为止
path = PATH 将服务器上的文件目录作为 Cookie 的适用对象(若不指定则默认为文档所在的文件目录)
domain = 域名 作为 Cookie 适用对象的域名(若不指定则默认为创建 Cookie 的服务器的域名)。 为了安全推荐不设置该属性。
Secure 仅在 HTTPS 安全通信时才会发送 Cookie
HttpOnly 加以限制,使 Cookie 不能被 JavaScript 脚本访问。可防止 XSS 攻击
Cookie 服务器接收到的 Cookie 信息 请求首部字段
首部字段 Cookie 会告知服务器,当客户端想获得 HTTP 状态管理支持时,就会在请求中包含从服务器接收到的 Cookie。接收到多个 Cookie 时,同样可以以多个 Cookie 形式发送。

八、网络通信根据接收端分类

1. 单播。一对一通信。例如固定电话就是单播。
2. 广播。一台珠玑发送消息给与之相连的其他主机。例如电视播放就是广播。
3. 多播。与广播相似,但是限定某一组的主机可以作为接受端。例如视频会议就是多播。
4. 任播。在特定的多台主机中选出一台作为接收端。例如 DNS 根域名解析服务器就是任播。

网络通信分类

九、IP地址

1. IP地址是面向无连接的,不保证数据传输。为了保证传输可靠性,由上层的 TCP 采用面向有连接。
2. IP地址在计算机内部以二进制方式被处理。由于人类不习惯采用二进制方式,于是将32位的 IP 地址以每8位为一组,分成4组,每组以“.”隔开,再将每组数转换为十进制数。
10101100. 00010100. 00000001. 00000001  (二进制)
172.      20.       1.        1.        (十进制)
3. IP 地址由“网络标识(网络地址)”和”主机标识(主机地址)“两部分组成。网络标识必须保证相互连接的每个段的地址不重复,相同段内相连的主机必须有相同的网络地址。

IP地址组成

4. IP地址分类
①. A 类地址。首位以“0”开头的地址,从第1位到第8位是它的网络标识,后24位为主机标识。十进制表示为 0.0.0.0~127.0.0.0
②. B类地址。前两位为“10”的地址,从第1位到第16位是它的网络标识,后16位为主机标识。十进制表示为128.0.0.0~191.255.0.0
③. C类地址。前三位为“110”的地址,从第1位到第24位是它的网络标识,后8位为主机标识。十进制表示为192.0.0.0~223.255.255.0
④. D类地址。前四位为“1110”的地址,从第1位到第32位是它的网络标识,无主机标识。十进制表示为224.0.0.0~239.255.255.255。常用于IP多播

IP地址分类

5. 广播地址

广播地址用于在同一个链路中相互连接的主机之间发送数据包。将 IP 地址中的主机地址部分全部设置为1,就成为广播地址

10101100.00010100.00000000.00000000  (二进制)
172.20.0.0/16  (十进制)
//广播地址
10101100.00010100.11111111.11111111 (二进制)
172.20.255.255 (十进制)
6. IPv6 特点
①. IP 地址的扩大与路由控制表的聚合

 IP 地址依然适应互联网分层构造。分配与其他地址结果相适应的 IP 地址没尽可能避免路由表膨大

②. 性能提升

 包首部长度采用固定的(40字节),不再采用首部检验码。简化首部结构,减轻路由器负荷。路由器不再做分片处理(通过路径 MTU 发现只由发送端主机进行分片处理)

③. 支持即插即用功能

 即使没有 DHCP 服务器也可以实现自动分配 IP 地址

④. 采用认证与加密功能

 应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能(IPse)

⑤. 多播、Mobile IP 成为扩展功能

 多播和 Mobile IP 被定义为 IPv6 的扩展功能。由此可以预期,曾在 IPv4 中难于应用的这两个功能在 IPv6 中能够顺利使用