对于TCP 和HTTP协议,对于web方向的开发者,我想应该是绕不过的一个问题,闲暇之余,现对于两者做一个系统的梳理和学习。
首先说说概念:
TCP:也称传输控制协议,是一种面向连接的、可靠的、基于字符流的通讯协议,是一种传输层协议。其建立起一个连接需要与服务器进行三次“握手”;
第一次握手:客户端发包到服务端,并进入syn_send状态,等待服务端确认。
第二次握手:服务端收到syn包,必须确认客户端的syn,同时自己也发送给客户端一个syn包,此时服务端进入syn_recv状态。
第三次握手:客户端收到服务端的包后,向服务端发送确认包,此包发送完毕之后,客户端和服务端完成三次握手。
注意:三次握手过程中所传输的包中不包含数据,此三握手完成之后,服务端与客户端之间才开始正式传输数据。通常,TCP一旦建立,再通讯双方任何一方主动关闭连接之前,连接都会被保持。
HTTP:是一个简单的请求-响应协议,基于TCP协议的一种应用层协议。指定了客户端可能发送给服务端的消息以及得到什么样的相应。也是面向连接的。一个连接通常为一个事务,一个http事务通常分为四步;
一.客户端与服务端建立连接。
二.客户端向服务端发起请求。
三.服务器接受请求,并根据请求返回相应的结果。
四.关闭连接。
注意:客户端与服务端的HTTP连接是一次性连接,其限制每一个连接只能由一个请求。