长连接

什么是长连接:

在 http/1.0 版本中默认使用短连接

在 http/1.1 版本中默认使用长连接,保持连接状态

http 的长连接和短连接其实就是 TCP 的长链接和短连接

传输层协议

UDP(用户数据报协议):

UDP 在传输数据之前不需要建立连接,远程主机在收到 UDP 报文之后,不给出任何确认信息,所以,UDP 提供的信息是不可靠交付,一般用于即时通信,如:微信语音,视频,直播等

TCP(传输控制协议):

TCP 提供的是面向连接的服务,在传输数据之间必须要先建立连接,传输数据完毕之后,需要释放连接。TCP 提供可靠的交付,常用与:文件传输,接收,远程登录等

12

序号/序列号:

在一个 TCP 连接中传输的字节流中的每一个字节都是按照顺序来编号的。该字段表示本报文所发送的第一个字节的序号。

确认号(ack):

期望收到对方下一个报文段的第一个数据字节的序号,ack=seq+1

URG(紧急位):

当 URG=1 的时候,表示该报文段中有紧急数据,是最高优先级的数据,应该尽快发送,不用在缓存中排队等待

ACK(确认):

仅当 ACK=1 的时候,确认号(ack)才有效,当 ACK=0 的时候,确认号无效。TCP 中规定,在连接建立以后,所有传输的报文段必须把 ACK 变为 1

PSH(推送):

当两个应用程序进行交互式通信时,有的时候一端的应用希望爱渐如一个命令后立即得到对方的响应,PSH 变为 1

RST(复位):

当 RST=1 时,表示 TCP 连接中出现了严重的错误,必须释放连接,然后重新建立连接

SYN(同步):

当 SYN=1 时,表示这是一个连接请求或者连接接收报文,当 SYN=1,ACK=0,代表连接请求,对方同意连接,应该在响应报文中让 SYN=1 且 ACK=1

FIN(终止位):

用于释放一个连接,当 FIN=1 时,表示此报文段发送的数据已经发送完毕,要求释放连接

TCP 三次握手

长链接2

SYN-SENT:

在发送连接请求后等待匹配的连接请求

SYN-RCVD:

在收到和发送了一个连接请求后等待对方连接的确认

第一次握手:

客户端向服务器发送请求,服务器接受到请求

证明:服务器得出结论,客户端的发送没有问题,服务器的接收没有问题

第二次握手:

服务器向客户端发送,客户端接收到了

证明:客户端得出结论,客户端的接受和发送没有问题,服务器的接收和发送没有问题,此时,服务器不知道客户端的接收和服务器的发送能力

第三次握手:

客户端向服务器发送,服务器接受

证明:服务器得出结论:客户端的接收和发送没有问题,服务器的接收和发送没有问题