《http权威指南》阅读笔记(二)

http数据传输过程

1:查找dns,获取服务器ip地址

2:建立连接

3:发送请求报文

4:接受响应报文

5:处理响应

6:关闭连接

tcp/ip协议性能问题

延迟确认问题:由于tcp/ip协议的可靠性,接收方必须发送请求确认报文,由于请求确认报文长度短,单独发送的话浪费带宽,一般会把请求确认报文附带在请求响应报文上发送,所以请求确认报文会先放在内存缓冲区里面,等待有响应报文的时候一起发送,一般会有延迟。

tcp delay问题:对于一般情况,请求报文发送,tcp/ip软件会立即把报文组装成ip报文,发送出去,及时有大量单字节报文,也会发送出去,回给网络带来大量的拥塞。为了制止这种不道德行为,有一个算法(忘记名字),会先把数据放在缓冲区,等待凑到ip报文最大的发送字节,组装发送出去,可以设置一个延时,如果超过这个延时,还没有后续的报文需要发送,就直接发送出去。这个就是tcp delay的问题。对于实时要求比较高的互联网应用,可以关闭这个。

time_await问题:在服务器处理完请求,回关闭socket。但是考虑到后续可能在复用这个socket,回延迟一定的时间进行关闭。这个是一个历史问题,那个时候路由器比较慢,带宽也低,数据发送时间比较长,下一次发送数据的时候,如果有没有关闭的socket,可以复用。如果这个时间设置的比较长,对于http请求客户端来说,因为每次连接都是随机使用不同的端口,不会复用,会新创建一个socket,如果使用完成不立即关闭回收的话,会导致socket耗尽。