做了很长一段是件http开发的业务居然都没有细致看过http的底层原理,相当失策。最近也是因为看了下websocket才想到要来了解下http了。
- 先简单建立个思维概念,http协议属于应用层协议,既然是应用层协议也就是tcp的上层协议,也就等于玩弄tcp的socket,http也就是tcp的自定义协议!后续研究的课题我也就都在socket层次上来看!
关键词单工,无状态,短连接。
-
单工;是同一时间内只能由一个方向传输数据,要么是A-B要么是B-A。http服务端不会主动向服务端推送信息。
-
双工;就是同一时间内可以同时完成两端(A-B及B-A)数据传输。
-
无状态;即服务端不知道客户端的状态,简单例子:用户每次访问受限网页都需要去查询用户权限,这就是因为http协议不想tcp协议建立了长连接,一单完成登陆连接到服务器,后续操作就不会再做登录验证了!
-
短链接;短连接与长连接相对(tcp就是长连接),每次请求http协议,都需要发起连接,客户端发出请求报文,客户端响应报文,关闭连接。并发的请求就是以连接为单位,在具象化的一点就是同一台机50个并发请求给服务器,那么客户端机器就在这一瞬间就开启了50个端口连接到服务器。对比下tcp协议请求的话,客户端只开启一个端口与服务器连接,所有并发数据都在这一个连接通道中传输,所以tcp连接传输是比http协议快的(不考虑业务的情况下),因为tcp协议打开关闭连接只有一次,再次发送就直接使用已打开的连接。
-
http协议还有种说法是单工阻塞;单工前面解释过了,对于阻塞,现在还没看懂具体是哪部分的,http这种是应用层协议,网上查了部分资料这种阻塞是对于读写流来说,但是已经看到过有非阻塞的http服务器实现,暂时无解释跳过。
http协议交互过程
Paste_Image.png
1.可以看到[SYN],[SYN,ACK],[ACK]3此交互后开始http的数据交互这三次交互就是著名的3次握手。
2.后面的http请求,在tcp协议的角度上看只是一个[ACK,PSH]请求而已。所以从点看就不能能理解http是架设在tcp上的应用层协议了。
仔细读取了每次的tcp报文,郁闷的发现个问题,为啥返回的请求中多了一组数据[ack],[ackPSH]传输的是最后http返回的相应数据。这是为了保证tcp中的数据不丢?貌似不像啊,为啥多交互一次才完成嘞?待解!












网友评论