1. http1.0和http1.1的区别
http无状态协议,每一次请求都是相互独立的,因此http1.0阶段每发完一个请求就会关闭连接。
为了减少建立连接销毁连接耗费的时间,http1.0加入了socket复用,使得多个请求可以使用同一个连接。在HTTP/1.0中keep-alive不是标准协议,客户端必须发送Connection:Keep-Alive来激活keep-alive连接
1) 保持连接:减少建立连接和销毁连接的时间 (HTTP1.1之后默认都是开启keepalive,即使是不带keepalive参数)
2) 流水线模式:客户在收到HTTP的响应报文之前就能接着发送新的请求报
tcp的特征:面向连接的可靠的传输
TCP协议保证数据传输可靠性的方式主要有:
- 校验和
- 序列号和确认应答
- 超时重传
- 连接管理
- 流量控制
- 拥塞控制
tcp报文格式
tcp报文中标志位有哪些?
标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
SYN包和FIN包都会占用一个字节
tcp如何建立和释放链接:
tcp的三次握手流程图
为什么需要三次握手?
为了防止网络中失效的SYN包骚扰服务端。eg:假设一个客户端发送了SYN包,因为某些原因迷路了,之后客户端进行超时重传,建立连接并发送数据后断开连接,迷路的SYN包终于找到了客户端,如果只进行二次握手,服务端就会因为这个迷路的SYN与客户端建立连接,但事实上并不需要这条链接,当网络时延大的时候,服务端就会维持很多这种并不需要的链接,导致资源占用过高。
服务端处于SYN_RCVD状态时,客户端挂掉会怎么样? 超时重传
四次挥手:
TCP如何实现流量控制?
使用滑动窗口,每个TCP头部的窗口大小字段表明接收端可用缓存空间的大小,以字节为单位。该字段长度为16位。每次接收方回的ACK包中会指明窗口大小,这个窗口就是指发送方在没收到ACK的情况下能发送给接收方最大的字节数,即窗口的左值是发送方收到的最新ACK报文的 ACK序列号, 窗口大小为报文中 窗口 字段的值。
主动发起关闭的一方在发送最后一个报文之后为什么要等一段时间才关闭链接?等待时间是多长?
等待时间是2倍的MSL(最大分段生存期, 指明TCP报文在Internet上最长生存时间)。主要有两个作用1.防止另一方没收到最后一个确认报文,可以进行超时重传 2.清理网络中滞留的数据包,防止迷路的数据包骚扰服务端。
tcp如何实现拥塞控制?
A主机给B主机发消息的过程是什么样的?
参考博客: