TCP/IP连接

/ 前端 / 没有评论 / 511浏览

HTTP

超文本传输协议,基于请求响应,无状态的应用层协议,通常通过TCP/IP协议传输数据,目前是最流行的网络协议。

版本产生时间内容发展现状
HTTP/0.91991年不涉及数据包传输 规定客户端和服务器之间通信格 只能GET请求未作为正式的标准
HTTP/1.01996年传输内容格式不限制(增加PUT PATCH HEAD OPTIONS DELETE命令)正式标准
HTTP/1.11997年持久连接(长连接) 节约带宽 HOST域 管道机制 分块传输编码2015年前使用最广泛
HTTP/22015年多路复用 服务器推送 头信息压缩 二进制协议逐渐覆盖市场

HTTPS

HTTPS是一种通过计算机网络进行安全通信的传输协议,HTTPS是身披SSL外壳的HTTP,利用SSL/TLS建立全信道并加密数据包,提供对网站服务器的身份认证,确保交换数据的隐私与完整性。

三次握手

客户端和服务端之间根据HTTP协议传递数据时要创建TCP连接,客户端和服务端彼此都处于LISTEN阶段是连接建立的基础,连接必须是通过一方发起,另一方被动响应,建立连接才可以传输数据。

  1. 客户端向服务器发送一段TCP报文,其中标志位SYN代表建立新的连接,序号位Seq=x(一般x=1),随后客户端进入SYN-SENT阶段;
  2. 服务端接收到客户端的TCP报文后结束LISTEN监听阶段,并返回一个标志位SYN和ACK的报文,代表服务器正常收到消息,同意创建新的连接,序号位Seq=y,确认位ACK=x+1,随后客户端进入SYN-RCVD阶段;
  3. 客户端收到服务器的响应报文后,结束SYN-SENT阶段,并发送一个TCP报文,其中标志位ACK,表示确认收到同意连接的信号,修改序号位Seq=x+1表示收到返回的ACK确认号,修改ACK确认号为ACK=y+1,随后客户端进入ESTABLISHED阶段;

客户端与服务器端传输的TCP报文,双方相互计算确认号ACK位和序号位Seq值,如果某一个过程TCP报文丢失则无法继续握手,正常握手后建立连接就可以传输数据。

四次挥手

四次挥手即TCP连接的释放(解除),释放必须是由一方主动释放,另一方被动响应释放。

  1. 客户端需要释放连接,向服务器发送一段TCP报文,其中标志位FIN表示请求释放连接,序号位Seq=U,随后客户端进入FIN-WAIT-1半关闭阶段;
  2. 服务器收到报文,结束ESTABLISHED已连接状态,发送标志位ACK表示收到释放请求,序号位Seq=V,确认号ACK=U+1,随后客户端进入CLOSE-WAIT阶段(半关闭状态);
  3. 服务器发送ACK确认断开连接报文后就开始释放准备,一切准备就绪后再次向客户端发送一个报文,标志位FIN和ACK表示做好释放准备,序号位Seq=W。确认号ACK=U+1,随后服务器进入进入LAST-ACK阶段;
  4. 客户端收到服务器响应的TCP报文,确认服务器已经做好断开准备,发送一个标志位ACK表示收到响应,序号位Seq=U+1,确认位=W+1,正式确认断开连接;

问题

1.为什么要进行三次握手?

防止服务器端开启一些无用的连接增加服务器开销,同时防止已失效的连接请求报文段突然又传送到服务端导致服务器错误。由于网络传输具有延时性和存在丢包的可能性,例如:客户端设置超时时间,超时后断开连接并重新发送报文,服务器端是无法感知。如果没有三次握手,无法知道何时关闭开启连接端口,导致资源一直开启,浪费资源的现象。

2.为什么挥手需要四次?

释放连接时一般均是客户端主动突然发起断开连接报文,此时服务器端并不能马上断开连接,需要处理必要数据资源完成后再发生一个报文告诉服务器做好断开连接的准备。