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连接
- Tpc协议前必须建立连接
- TCP提供可靠的服务
- 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次握手,那么这种情况就是占用资源,资源浪费
四次挥手:
第一次挥手:客户端发送中断报文,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次后就会主动断开连接;