HTTP 学习整理

最近看了一本叫《图解HTTP》的书,因为总记不清,所以将一些要点记下来。

1.WEB 及网络

1.1 http 访问网络

当我们在浏览器输入一个 URL 时,此时就是在使用 HTTP访问了。根据 WEB 浏览器中的 url,去 WEB 服务器获取到资源,再显示在 WEB 页面上。像这种通过发送请求获取服务器资源的 WEB 浏览器等,都称为客户端。
WEB 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议)的协议作为规范,完成从客户端到服务器端等一系列运作流程

1.2 TCP/IP

网络是在 TCP/IP 协议族的基础上运作的。而 HTTP 属于它内部的一个子集。
TCP/IP 是互联网相关的各类协议的总称。

1.21 TCP/IP 的分层管理

TCP/IP 协议族里重要的一点就是分层。 TCP/IP 协议族按层次分别为以下 4 层:应用层、传输层、网络层和数据链路层。
对应的 OSI 模型:应用层、表示层和会话层对应 TCP/IP 中的应用层;传输层对应传输层;网络层对应网络层;数据链路层对应数据链路层。最底下的都是物理层。
TCP/IP 层次化后,如果某个地方需要改进就不需要把所有部分整体换掉,只需把变动的层换掉即可。把各层之间的接口部分规划好之后,每个层次内的设计就能自由改动了。除此之外,设计也变简单了。
TCP/IP 协议族各层的作用如下:
应用层

TCP/IP协议族作用
应用层应用层决定了向用户提供应用服务时通信的活动; 因为TCP/IP 协议族中预存了各类通用的服务。
传输层传输层对上层应用层提供处于网络连接中的两台计算机之间的数据传输;有两个协议:TCP 和 UDP
网络层网络层用来处理在网络上流动的数据包;数据包是网络传输的最小单位。该层规定了通过怎样的路径到达对方计算机并传递数据
数据链路层数据链路层用来处理连接网络的硬件部分
1.22 TCP/IP 通信传输流

利用 TCP/IP 协议族进行网络通信时,会通过分层顺序进行通信。发送端从应用层往下走,接收端则往应用层上来。
 TCP/IP 通信

例如,客户端发送了一个 HTTP 请求,接着为了传输方便,在传输层把从客户端(应用层)收到的数据进行分割,并在各个报文上标记序号及端口号转发给网络层;网络层再增加通信目的地的 MAC 地址后转发给链路层。这样就可以发往网络中了。
接收端的服务器在链路层收到数据,按序往上层发,一直到应用层。至此,才算接收到了请求。

网络通信

1.3 与 HTTP 关系密切的协议:IP、TCP 和 DNS

1.3.1 负责传输的 IP 协议

按层次分的话,IP 网际协议位于网络层。
IP 和 IP 地址的区别:IP 是一种协议的名称。IP 协议的作用是把各种数据包传送给对方。而保证传输的重要条件是 IP 地址和 MAC (Media Access Control Address)地址。也就是说 IP 地址是确切的位置。
IP 地址指明了节点被分配到的地址,MAC 地址是指网卡所属的固定地址。IP 地址和 MAC 地址进行配对,IP 地址可变换,但 MAC 地址基本不变。

1.3.1.1 使用 ARP 协议凭借 MAC 地址进行通信

IP 间的通信依赖 MAC 地址。但是在网络上通信经常是多台设备中转的,在进行中转时,会利用 下一站中转设备的 MAC 地址来搜索下一个中转目标。ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC地址。

1.3.2 确保可靠性的 TCP 协议

按层次分,TCP 位于传输层,提供可靠的字节流服务。
字节流服务是指:为了方便传输,将大数据切割成报文段为单位的数据包进行管理。而可靠是指:能把这些数据准确地传输给对方。
就是说:TCP 协议为了更容易传送大数据才把数据分割,且 TCP 协议可以确认数据是否送达对方。
而为了确保数据能送达,TCP 协议采取了三次握手策略:
握手过程中使用了 TCP 的 ----SYN(synchronize)和 ACK(acknowledgement)两个标志。
发送端首先发送一个带 SYN 标志的数据包给对方。接收端收到后,回传一个带有 SYN/ACK 的数据包以示收到信息。最后,发送端再传回一个带 ACK 的数据包,代表握手结束。
除了三次握手,TCP 协议还有其他手段确保可靠性。

1.3.3 负责域名解析的 DNS 服务

DNS 服务是和 HTTP 协议一样位于应用层的协议。它提供域名到 IP 地址间的解析
因为人们习惯使用主机名和域名的方式来访问别人,而计算机识别 IP 地址更快,所以 DNS 应用而生,它就是通过域名查找 IP 地址,或逆向从 IP 地址反查域名的服务。

1.4 各种协议和 HTTP 协议的关系

关系
在这里插入图片描述

因为目前多数应用都是基于应用层进行操作,导致隐藏了大量的网络细节,知道这些细节以及原理对我们的问题排查很有益处。原文地址

2 TCP 探秘

2.1 TCP 特性

TCP 是一种面向连接的协议,它给用户进程提供可靠的全双工的字节流。它将数据包分割并确保数据包的可靠性。关于 TCP 我们要思考以下几个问题:

  • IP 网络层为何不保证数据包的可靠性?
  • TCP 协议如何保证包可达、有序?
  • TCP 协议如何支持流量控制?
  • TCP 几种状态以及应用?

2.2 IP 网络层为何不保证数据包的可靠性

先看下 OSI 的网络分层,在以下分层中,TCP 位于传输层,它保证的是协议的可靠性和连续性。具体的收发报是有底层的链路层和物理层来决定的,所以 TCP 的工作,也是基于底层的优化和改进。
osi

客户端与服务器端的通信使用应用协议,传输层的通信采用 TCP 协议,而 TCP 协议又采用了更低一层的 IP 协议,就是一层一层套下去。
协议网络层的 IP 协议,主要解决寻址和路由的功能:根据 IP 寻找最佳路径。但是 IP 协议不保证包一定到达和完整性。网络拥堵的时候就会丢包而保证传输效率。
而保证数据包的完整、有序和可靠,就是 TCP 协议要做的事。

2.3 TCP 协议

  1. TCP 包组成:以太网标头+IP 标头+TCP 标头 + Data(应用层数据包)
  2. 如何保证可靠性:底层的路由转发包但并不保证包的可靠性以及有序性。首先为了保证包的完整性,TCP 会进行分包处理,其次增加 SEQ(Sequence number:分配序号,保证报不丢失或丢失可以知道重发哪个) 和 ACK(基于 ACK 进行包到达确认,每次接受一个包必须返回ack 信息),这两个能够保证有序性,同时采用超时重发的机制来保证包的可靠性。

2.4 流量控制

上述中我们知道了 TCP 协议可以保证数据的可靠性,但也得兼顾效率。基于效率的话得考虑以下三个方面:

  • 支持批量发包
  • 能够基于网络的状况,支持拥堵控制
  • 能够了解接收端的状况,防止接收端处理不过来
2.4.1 滑动窗口

如果 TCP 中的包,都需要发送一个确认一个的话太慢了,此时需要一个批量发送和确认的方式,这就是滑动窗口做的事。
发送滑动窗口:从左向右移动,在这个发送窗口之前的数据必然是已经发送并且得到接收方确认的数据。落在发送窗口之内的数据是发送方可以发送的数据。在发送窗口之后的数据是不能发送的数据

如果发生超时或丢包问题,那么有两种解决方案:

  1. 回退 N,丢失的包号之后所有包都重发
  2. 选择重传 ARQ,只发丢失的,避免重复的(效率高,防止重复发送)

滑动窗口还有一个作用是让发送端知道接收端的处理状况。假设 TCP 接收方的缓存已经满了,无法处理更多的数据,而发送方并不知道。所以每次会给对方告知当前滑动窗口的大小值,若不够处理就不发了。

2.4.2 拥堵控制

网络时好时坏,好的时候可以多发包,否则反之。网络不好时还会造成丢包。基于此, TCP 通信双方维护一个叫做拥塞窗口(cwnd,congesion window)的值,这个值取决于网络中的拥塞率,发送方的发送窗口的值就等于拥塞窗口的大小。只要网络中没有出现拥塞,拥塞窗口的值就可以增大一些,反之缩小。

TCP 现在拥塞控制的算法有以下 4 种:

  1. 慢启动
  2. 拥塞避免
  3. 快速重传
  4. 快回复

这些算法的核心都是基于当前的网络状态,找到一个合适的发送速率,防止给网络造成过大负担。如慢启动,就是开始的时候发送的慢,后面根据丢包的情况调整速率。

2.5 TCP 状态

TCP 建立连接的时候有三次握手,断开连接的时候又四次握手,那其中的状态有哪些呢?
tcp

从上面可以看到,连接建立成功的时候,其状态是ESTABLISHED 的。当接受端的状态为SYN—RECV的时候,表示接受端,已经回复第二次握手信息了,等待发送端再次确认。如果网络中遭受到大量的SYN 攻击,会存在大量的SYN_RECV 状态。此时可以定位这些问题IP ,通过防火墙过滤就能解决大量的假连接问题。

2.6 消失的连接——TIME_WAIT

在网络中,某一端主动关闭而没有通过四次握手关闭的情况很多,那此时 TCP 已经建立的通道还会存在吗?存在多久?
此时 TCP 的状态是 TIME_WAIT ,任何 TCP 的实现必须要为 MSL 选择一个值,默认是 2分钟或 30s,TIME_WAIT 默认是 MSL 的 2 倍,持续时间是 1-4 分钟之间。MSL 是 IP 数据包能在网络中存活的最长时间。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值