HTTP是短连接
http 为短连接:客户端发送请求都需要服务器端回送响应.请求结束后,主动释放链接,因此为短连接。通常的做法是,不需要任何数据,也要保持每隔一段时间向服务器发送"保持连接"的请求。这样可以保证客户端在服务器端是"上线"状态。
HTTP连接使用的是"请求-响应"方式,不仅在请求时建立连接,而且客户端向服务器端请求后,服务器才返回数据。
网络传输遇到的问题
网络模型高可拓展性
osi与tcpip的分层区别
DNS,HTTP是应用层的协议
TCP,UDP是传输层的协议
IPV4,IPV6是网络层的协议
以太网,交换机数据链路层
光纤,网线 是物理层
例如
再浏览器输入URL用http发送(应用层) -> http底层是用tcp连接传输的(传输层) ->找到要发送或者请求的主机的IP(网络层)->数据经过路由器交换机等工具(数据链路层) -> 然后经过网线传输(物理层)
一个HTTP的请求过程
HTTP协议
Http:是无状态的,以请求应答的方式运行的协议,使用可拓展的语义例如(header 可以自定义)
Httpd的报文格式
1、起始行(start line) :描述请求或者响应的信息 (get,post,put等)
请求行报文格式
响应行报文格式
2、头部字段集合(header):使用key-value形式更详细的说明报文(connection:ley-alive,Content-type:application/json)
3、消息正文:实际传输的数据,不一定是纯文本,可以是图片,二进制等 例如html 也不是必须的
Http完整的请求过程
1、浏览器解析域名
2、网络请求->TLS握手(HTTPS的)(TCP三次握手)->发起Http请求得到结果->TCP四次挥手断开了连接
具体流程如下
TCP协议
什么是tcp协议:面向连接的可靠的基于字节流的传输层通讯协议
TCP的特点:
对上面 面向连接 的解释 连接就是三次握手
基于连接的:数据传输前需要建立连接(三次握手)
全双工的:双向传输数据
字节流:不限制数据大学,打包成报文段,包装有序的接受,重复的报文会自动丢弃
(字节流理解:如果文件非常大,会对文件进行切割分片,然后进行排序(例如1,2,3,4),通过网络介质到达服务器,问题就是可以从很多线路到服务器(例如4,2,1,3),然后再进行重排序(1,2,3,4),然后再给到服务端处理)
流量缓存:解决双方处理能力的不匹配,(TCP三次握手的时候双方会建立一个缓冲区)
可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性,(一定要收到服务端的响应才算发送成功)
拥塞控制:防止网络出现恶意拥塞(网络差的情况下,会考虑生成的网络报文的大小和访问速率的大小)
TCP连接管理
1、TCP连接器:四源组(源地址,源端口,目的地址,目的端口)
2、确立连接:TCP三次握手
TCP的流
标志符解释
SYN表示建立连接,
FIN表示关闭连接,
ACK表示响应,
PSH表示有 DATA数据传输,
RST表示连接重置。
三次握手是怎么执行的(彼此同意连接行为)
为什么是三次:
传的都是传输控制层的控制数据
因为可以确保数据的稳定传输,在第二步的时候服务端发送了ack 然后客户端响应了 说明是连通的
SYN(连接标识)表示建立连接,
1、客户端 发送SYN连接标识和seq=x(seq:请求序列号)的序列号给服务端
2、服务端 发送SYN标识和seq=y ack = x+1 (ack:应答序列号)的序列号给客户端
3、客户端发送ack=y+1给服务端
连接成功
四次挥手怎么执行(彼此同意断开情节类似“离婚”得双方同意)
传的都是传输控制层的控制数据
主要:主动方看做客户端,被动看做服务端 但是双方都看主动关闭
1、主动方(A)发送FIN关闭请求,和seq请求序列号给被动方(B)男:我想离婚
2、B收到请求,返回ack=i+1应答序列号给A 女:嗯
3、B再次发送FIN关闭请求和seq=j序列号给A 女:我也想离婚
4、A收到请求后发送ACK=j+1应答序列给B,B服务可以释放资源 男:好的
以上为四次挥手
关闭后主动方需等到2MSL(一个请求来回的时候 A-B和B-A 的时间)
为什么A等到2MSL后释放连接,一、防止报文丢失,导致B重复发送FIN请求
二、防止滞留的网络中的报文,对新建立的连接照造成数据扰乱(等断后的报文传完)
数据的可靠性传输
TCP报文丢失了,TCP会启动重传,如果是网络慢,导致重复传输,TCP也会过来掉重复的报文
1、停止等待协议
2、重传机制
ACK丢失和SEQ的丢失都会重传
3、滑动窗口协议与累积确认
滑动窗口的大小通过TCP三次握手和对端协商,而且受网络状况影响
如果1,2的报文成功 3 是错误的 3以后的报文全部重发
HTTPS协议
HTTP->SSL/TSL加密再用TCP传输