http短连接和长连接
对于HTTP 1.0的http标准而言,默认连接是短连接,啥叫短连接?就是服务器当发送完最后一个字节的数据之后将关闭连接,这样,如果客户端再发送数据给服务器,将直接丢弃。即使此时客户端还有这样的结构,但是我们说连接已经关闭或者已经断了。
那客户端知不知道啥时候服务器的连接关闭?不知道,双方可以在任何时候来关闭自己的连接而没有必要通知对方。不过,对于短连接而言,通知不通知也没有意义了。
那短连接的弊端,大家可能都已经知道了,如果对一个服务器要连续发送多个请求,还需要为每次请求建立新的连接。
为了降低建立连接的时间,HTTP 1.1引入了长连接的概念,并把它搞成了默认的连接方式。啥叫长连接?就是当完成一个业务之后,socket结构并不回收。这样,只要在socket结构还存在的时候,客户端发送的任何数据,服务器都可以收到,这就是所谓的长连接。
相比短连接而言,长连接并没有什么特别的新的技术,只是维护socket结构时间长了。因为,说http长连接更不如说是tcp长连接。
TCP/IP的关键特性
我如何设计一个能在快速传输数据的同时保证数据顺序并且不丢失数据的网络协议?TCP/IP在设计时就基于这个考虑。以下是在了解整体网络栈前需要知道的TCP/IP的主要特性:
-
TCP和IP
从技术上讲,TCP和IP处于不同的层,应该分别解释它们。但在这里我们把他们看做一个整体。 -
面向连接
首先,传输数据前需要在两个终端之间建立连接(本地和远程)。在这里,“TCP连接标识符(TCP connection identifier)”是两个终端地址的组合,类似本地ip地址,本地端口号,远程ip地址,远程端口号的形式。 -
双向字节流
通过字节流实现双向数据通信。 -
顺序投递
接收者在接收数据时与发送者发送的数据顺序相同。因此,数据需要是有序的,为了表示这个顺序,TCP/IP使用了32位的int数据类型。 -
通过ACK实现可靠性
当发送者向接收者发送数据,但没有收到来自接收方的ACK(acknowledgement,应答)时,发送者的TCP层将重发数据。因此,发送者的TCP层会把接收者还没有应答的数据暂存起来。 -
流量控制
发送者的发送速度与接收者的接收能力相关。接收者会把它能接收的最大字节数(未使用的缓冲区大小,又叫接收窗口,receive window)告知发送者。发送者发送的最大字节数与接收者的接收窗口大小一致。 -
阻塞控制
阻塞窗口是不同于接收窗口的另一个概念,它通过限制网络中的数据流的体积来防止网络阻塞。类似于接收窗口,发送者通过通过一些算法(例如TCP Vegas,Westwood,BIC,CUBIC)来计算发送对应的接收者的阻塞窗口能容纳的最多的数据。和流量控制不同,阻塞控制只在发送方实现。(译注:发送者类似于通过ack时间之类的算法判断当前网络是否阻塞,从而调节发送速度)