HTTP连接与TCP协议

时间 : 14-09-03 评论 : 0 点击 : 997 次

浏览器地址栏输入网址敲下回车键之后发生了什么?

1、浏览器解析出主机名 2、通过DNS服务器解析这个主机的ip地址 3、浏览器与服务器建立TCP连接 4、浏览器向服务器发送HTTP请求报文 5、浏览器从服务器读取HTTP响应报文 6、浏览器/服务器关闭TCP连接

TCP协议

HTTP是基于TCP协议的文本协议,按照TCP协议,HTTP报文被分解为多个小的数据块封装到IP分组中进行发送。每个IP分组包括:IP分组头部、TCP头部、TCP数据块(0或多个字节)。IP分组头部包含源IP地址、目的IP地址,TCP头部包括源端口、目的端口、TCP数据块包含要发送的数据。
TCP连接的三次握手

SYN攻击
在三次握手过程中,服务器发送SYN-ACK之后,收到客户端的ACK之前的TCP连接称为半连接(half-open connect).此时服务器处于Syn_RECV状态.当收到ACK后,服务器转入ESTABLISHED状态. Syn攻击指的是攻击客户端在短时间内伪造大量不存在的IP地址,向服务器不断地发送syn包,服务器回复确认包,并等待客户的确认,由于源地址是不存在的,服务器需要不断的重发直 至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN请求被丢弃,目标系统运行缓慢,严重者引起网络堵塞甚至系统瘫痪。
TCP关闭连接的四次挥手

延迟确认
TCP包发送之后,都需要接收方返回一个已收到报文的确认包,如果发送方过了一段时间没有收到确认包,认为发送的包已丢失,就会重发。由于确认包很小,允许捎带要发送的其它数据。要发送确认包时,不一定有需要捎带的数据,延迟确认算法就是把确认包放入缓冲期,延时一个特定的时间(通常是100-200ms),如果这段时间内有需要捎带的数据,则一起发送,如果没有捎带的数据,则单独发送确认包。这一算法有时候能提升效率,有时候却只能带来更大延时。
TCP慢启动
TCP连接起初会限制连接的最大速度,如果数据传输成功,会随着时间的推移提高传输的速度,用于防止因特网的突然过载和拥塞。所以新连接会比已经成功传输过数据的旧连接慢一点,复用已成功传输数据的连接能够提高传输速度。
TIME_WAIT累积与端口耗尽
TCP连接关闭时,会在内存中记录最近关闭连接的IP地址和端口号,这类信息一般只存一小段时间,比如2分钟。主要作用是避免2分钟内创建了完全一样的套接字,从而导致第一个TCP连接的分组因为延时而混入到第二个TCP连接中。这一机制在做性能测试的时候可能会导致端口耗尽,如果性能测试时作为客户端发起请求的ip只有一个,而可用源端口只有65535个,目的ip和端口是固定的,就会导致2分钟内最多只能发起65535个连接,每秒钟65535/120=546个。解决办法有减少TIME_WAIT时间,增加测试IP。

提高效率的HTTP连接方式:并行连接、持久连接、管道化连接、复用的连接

并行连接
为了提高资源的加载速度,浏览器创建到服务器的多个连接,并发发起请求。为了防止服务器压力过大,对单个域名的并发连接数都是有限制的,如果有非常多的资源需要加载,可以通过使用多个域名来加大总的并发连接数。淘宝因为需要加载非常多的图片,就使用这种技术来加大并发连接数量,用域名gtms01.alicdn.com--gtms04.alicdn.com来加载图片。如果并发加载的是js文件,不管数据返回的顺序如何,浏览器都保证按js引用在代码中出现的顺序来执行。
keep-alive
客户端可以通过在头部增加Connection: keep-alive来尝试与服务器保持长连接,服务器如果同意长连接,也返回Connection: keep-alive头部,并且可以通过Keep-Alice: max=5, timeout=120来给客户端提供更多信息,max表示这个长连接最多可以处理的请求数量,timeout表示这个长连接最大空闲时间
持久连接
HTTP/1.1逐渐停止了对Keep-Alive的支持,改为持久连接。持久连接指的是默认就是使用长连接,不需要指定keep-alive(考虑到兼容问题,浏览器通常还是会指定),如果不需要长连接,通过Connection: close来指定。
管道连接
在长连接的基础上,发出请求之后,不等服务器响应,继续通过这个连接发出多个请求

http

HTTP连接与TCP协议:等您坐沙发呢!

发表评论