http与tcp以及三次握手四次挥手

http是一种协议规范了超文本语言结构和服务器怎样把文档送回浏览器。

http通过mime类型扩充传输类型;

http报文通过TCP连接传送;

 

浏览器输入地址后:

DNS解析域名,获取IP

IP找到服务器;

TCP三次握手

服务器找到入口文件

入口文件解析

TCP四次挥手;

返回资源文件

 

HTTP本身只是个协议,没有强制要求TCP,通过tcp进行传输文件,tcp的连接不一定非要http协议;

 

HTTP请求报文和相应报文:

HTTP请求报文包括了options,url,methods

HTTP相应报文状态码分为 1XX,2XX,3XX,4XX,5XX分别是等待态,成功态,重定向,客户端错误,服务端错误;

 

TCP学习:

TPC字段详解:

SYN 同部位标志

SEQ 请求***(代表发送数据头部***)

ACK 数据接收完成标志

Ack 确认号,***+数据长度

URG 紧急数据

FIN 终止连接标志

 

TCP详解:

TCP特点:

  1. 点对点,1对1连接
  2. Tpc协议前必须建立连接
  3. TCP提供可靠的服务
  4. TCP提供全双工通信,双方都存在发送缓存和接受缓存;

 

三次握手

http与tcp以及三次握手四次挥手

详解:

第一次握手:客户端向服务端发送连接报文,标志位SYN(同步序列标志)=1,并且给与***seq = x,

第二次握手:服务端收到连接请求报文,并且进入同步状态,返回报文给客户端,包括了SYN=1 ,ACK(确认标志)=1,seq=y,ack(确认序列)=x+1

第三次握手:客户端收到报文,为了容错性再次向服务端发送ack(完成序列)=y+1 ACK=1,seq = x+1,完成连接

 

问题:为什么会有第三次再次告知的握手报文呢?

因为为了容错性,防止已经失效的连接报文因为网络堵塞等原因导致后续才发送出来,而Service端由于接受后,发出连接响应,client端不会再次发送第三次连接。如果只有2次握手,那么这种情况就是占用资源,资源浪费

 

四次挥手:

http与tcp以及三次握手四次挥手

第一次挥手:客户端发送中断报文,fin置1 ,发送头序列seq = x

第二次挥手:服务端接受到请求 ACK =1 ,并且确认号 = seq+1,并发送seq = v;client收到相应报文后进入半终止状态,这个时候的client不会再发送数据,但是会继续接受service发送的数据

第三次挥手:service端主动向client端发送终止请求,携带 FIN=1,Seq = h,ACK = 1,ack=x+1

第四次挥手:向service发送相应报文:ACK=1,ack=h+1,seq = x+1,client等待2*MSL后,结束整个TCP连接

等待时间是为了等待最后一个ACK报文能够准确送达,如果service没有收到,service会再次发送断开FIN请求,client收到后会再次发送ACK包,并且重置计时器;

 

为什么 是4次挥手?

因为client端发送断开连接后还能够继续接收service端的报文,所以必须再由service端主动发送断开请求,保证数据发送都完毕

 

如果连接成功后,突然出现不可抗拒因素导致没有去主动断开连接?

TCP中会有一个活性计时器,2个小时,如果2个小时都没有请求那么会发送一个询问包,如果没有相应,那么连续10次后就会主动断开连接;