在客户端和服务器端之间进行http请求的发送和返回的过程当中,需要创建TCP connection,因为http不存在连接这样的概念,它只有请求和响应,里面都是数据包,需要经过传输的通道,这个通道就在TCP里面创建了从客户端发起到客户端接收的这样的一个连接,这个连接可以一直保持,http请求就是在这个连接的基础上发送的。
在TCP上面可以发送多个http请求,在不同http版本里,这个模式是不一样的。
http1.0:TCP连接是在一个http请求创建的时候,就去创建这个TCP链接,链接创建完了之后,请求发送过去,服务器响应了之后,这个TCP连接就关闭了。
http1.1:TCP链接可以通过某种方式去声明链接一直保持,就是在第一个请求发送之后,TCP链接没有关闭,第二个请求来了之后,还可以在这个没有关闭的链接上进行发送。
http2:的TCP链接上面的http请求时可以并发的,如果同一个用户对同一个服务器发起一个网页请求的时候,只需要一个TCP连接。
长链接好处:
- TCP链接在创建的过程中要经历三次握手这么一个消耗,代表着有三次网络传输:客户端发送-服务端返回-客户端再发送-创建TCP链接,这个时候才可以发送HTTP请求,所以如果我们把TCP链接保持,那么第二个http请求就没有三次握手的开销。
TCP三次握手
屏幕快照 2018-07-12 上午4.19.46.pngTCP握手过程
1.客户端发起一个我要连接的数据包请求给服务器,里面会有一个SYN的标志位,标志这是一个创建请求的数据包
2.服务端接收到数据包后知道有一个客户要和它建立链接了,然后会开启一个TCP socket 端口,开启之后返回数据给客户端,数据包含 SYN标志位,ACK= X+1,Seq=Y
3.客户端拿到数据包后意味着服务器端允许创建TCP连接,然后发送数据包 ACK = Y+1,Seq=Z
为什么要三次握手创建TCP连接?
为了防止服务端开始无用的链接,网络传输是有延时的,传输过程中防止丢包,造成重复创建链接,资源浪费,所以设置三次握手。为了规避网络传输延时。
三次握手确认客户端发起到服务器返回的过程,就是为了规避这些在网络传输过程中延时导致的一些服务器开销的问题。
网友评论