什么是长连接:
在 http/1.0 版本中默认使用短连接
在 http/1.1 版本中默认使用长连接,保持连接状态
http 的长连接和短连接其实就是 TCP 的长链接和短连接
传输层协议
UDP(用户数据报协议):
UDP 在传输数据之前不需要建立连接,远程主机在收到 UDP 报文之后,不给出任何确认信息,所以,UDP 提供的信息是不可靠交付,一般用于即时通信,如:微信语音,视频,直播等
TCP(传输控制协议):
TCP 提供的是面向连接的服务,在传输数据之间必须要先建立连接,传输数据完毕之后,需要释放连接。TCP 提供可靠的交付,常用与:文件传输,接收,远程登录等
序号/序列号:
在一个 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 三次握手
SYN-SENT:
在发送连接请求后等待匹配的连接请求
SYN-RCVD:
在收到和发送了一个连接请求后等待对方连接的确认
第一次握手:
客户端向服务器发送请求,服务器接受到请求
证明:服务器得出结论,客户端的发送没有问题,服务器的接收没有问题
第二次握手:
服务器向客户端发送,客户端接收到了
证明:客户端得出结论,客户端的接受和发送没有问题,服务器的接收和发送没有问题,此时,服务器不知道客户端的接收和服务器的发送能力
第三次握手:
客户端向服务器发送,服务器接受
证明:服务器得出结论:客户端的接收和发送没有问题,服务器的接收和发送没有问题