前端面试--TCP/UDP/HTTP

前端面试–TCP/UDP/HTTP

(转前端小白总结)

一、TCP/IP

1. OSI模型七层

协议分层:ISO在指定标准的OSI之前,提出了作为通信协议设计指标的OSI参考模型,将协议分为七层,使得原来复杂的网络协议更加简单化。

1.1应用层

:为应用程序提供服务,应用程序间沟通
包含的协议:超文本传输协议(HTTP)、文件传送协议(FTP)、远程登录协议(TELNET)、简单邮件传送协议(SMTP)、DNS域名解析协议、简单文件传送协议(TFTP)、简单网络管理协议(SNMP)、DHCP动态主机配置协议

1.2表示层

:将应用处理信息转换为适合网络传输的格式,负责数据格式转换

1.3会话层

:建立和断开通信连接(数据流动的逻辑电路)
(这三层协议可以共用)

1.4传输层

(数据报):提供处于网络连接中计算机之间的数据传输和数据控制,传输层提供端到端的交换数据的机制
功能:(1)为端到端连接提供传输服务;(2)传输分为可靠和不可靠,涉及TCP/UDP协议;(3)为端到端提供流量控制,差错控制,服务质量等管理服务
包含的协议:传输控制协议(TCP)、用户数据报协议(UDP)

1.5网络层

(数据包):主要负责寻找地址和路由选择,在多条线路中选出一条传输线路进行数据传输,处理网络上的数据包
包含的协议:IP

1.6数据链路层

(帧):负责物理层面的互联,节点间的通信传输,物理地址寻址,数据成帧,流量控制,数据检错和重发
包含的协议:ARP、STP

1.7物理层

(比特):规定了激活、维持、关闭通信端点之间的机械特性、电气特性、功能特性以及过程特性

2.TCP/IP模型

TCP/IP模型中主要把会话层、表示层和应用层集中到应用层,表现出五层模型
应用层->传输层->网络层->数据链路层->物理层
分层的好处:如果互联网由一个协议统一规划,某个地方需要改变时,就必须将所有部分整体更换。分层之后,只需要替换变动的层,每层可以自由更改。
注意:TCP/IP协议进行通信时,会通过分层顺序和对方进行通信。客户端从应用层出发,服务端从链路层出发。

2.1传输层的TCP/UDP

TCP:面向连接的,可靠的流协议。可靠是指其实行顺序控制或者重发控制,精准记录哪些数据发送了,哪些数据被接受,保证数据包按序到达;意识到丢包或者网络环境差时可以根据自己行为调整,控制发送速度或者重发。–停止等待协议,确认重传协议

  • 每一条tcp只有两个端点,只能是端到端,点到点
  • 提供可靠交付服务
  • 提供全双工通信
  • 面向字节流
  • 首部最低20个字节,对资源要求较多

UDP:面向无连接的,不可靠的用户数据报协议

  • 无连接,发送数据不需要连接
  • 尽最大努力交付,不保证可靠交付,不使用拥塞控制,适合多媒体通信,较好的实时性
  • 面向报文,支持一对一,一对多,多对多交互通信
  • 首部开销小,只有8字节,对资源要求较少

二、 HTTP

HTTP是超文本传输协议,是层次模型中的应用层协议,用于客户端和服务器等等一系列运作流程,可以说web是建立在HTTP协议上进行通信的。(对于前端来说,熟悉掌握HTTP知识也是很重要的)

1.HTTP报文

HTTP报文分为请求报文和响应报文。报文又分为报文头部和报文主体,其中报文主体是可选的。
请求:请求行,请求头,空行,主体
在这里插入图片描述

  • 请求行:请求的方式(get,post,put…)、请求的饿路径、HTTP的版本号
  • 请求头:上传的信息属性,一般是以键值对key:value的形式
  • 空行:空行
  • 主体:请求正文body

响应:响应行,响应头,主体
在这里插入图片描述

  • 响应行:HTTP版本号,响应状态码,响应状态信息
  • 响应头,主体同请求

2.HTTP请求方式

get:获取服务资源 ,并返回实体主体
post:提交信息给服务器,提交数据进行处理请求
put:从客户端向服务器传送数据取代指定文档内容
head:和get一样,只返回响应头部,作用是确定URL的有效时间和资源更新的时间
delete:删除指定的资源
options:列出可对资源实行的请求方法,用于跨域,允许客户端查看服务器的性能
trace:追踪请求-响应传输路径,用于测试或诊断
connect:建立连接渠道,用于将连接改为管道方式的代理服务器
patch:对某个资源做部分修改
幂等:无论调用多少次都不会有不同的结果
幂等:get put delete
非幂等:post patch

2.1get/post区别

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。
使用get方法用来请求已被URI识别的资源,而post方法用来传输实体主体,但get请求也可以发送实体,post请求也可以在url上加参数。
本质上,两者都是TCP连接,区别是get发送一次数据包(header+data),post发送两次数据包(一次header,一次data)。
get向服务器发索取数据的一种请求,post向服务器提交数据的一种请求。

  • 关于传入参数的大小限制,HTTP协议里没有规定,只不过是浏览器和服务器的约定俗成
  • 关于传递参数的安全性,get请求的url,在服务器上有日志记录,在浏览器中也能查到历史记录,数据会附在url之后,放置在HTTP协议头中;但post请求的参数都在请求内容里面,服务器日志记录不到,浏览器历史也记录不到,相对来说安全一些
  • get请求可以缓存,post请求不能缓存
    什么时候用get,什么时候用post
  • get方式安全性较post方式要差一些,包含机密信息建议用post数据提交方式
  • 做数据查询搜索时,建议用get;做数据添加,修改和删除时,建议用post

2.2HTTP状态码

1xx信息状态类 表示目前协议中间状态,还需要后续请求
2xx成功类
3xx重定向类
	301永久重定向,浏览器自动发送新的请求,会缓存
	302临时重定向,浏览器自动发送新的请求,不会缓存
	303客户端应该采用get方法获取新的资源,浏览器自动发送新的请求
	304附带条件未满足,服务器可通过此状态码告诉客户端,使用本地缓存,协商缓存命中
4xx客户端错误类,请求报文错误
	403:服务端禁止访问
	404:服务器上资源未找到 
	400:请求错误
5xx服务端错误类
	500:服务器在执行的时候发生了错误 
	503:服务器超负载或停机维护

301、302、303响应状态码返回时,几乎所有的浏览器都会将post改为get,并删除请求报文中的主体,之后请求自动再次发送。301,302标准禁止这样修改,但实际都会这样操作。

3.HTTP1.0/1.1/2.0/3/0

HTTP优化问题:影响HTTP请求因素主要是带宽和延迟。随着网络基础建设的完善,带宽因素已经不需要再考虑,仅需要考虑的就是延迟。延迟主要受三个方面影响:浏览器阻塞(HOL blocking), DNS查询(DNS Lookup),建立连接(Initial connection).

3.1HTTP1.0/1.1

  • 1.0使用非持久连接,客户端必须为每一个待请求的对象建立一个新连接,需要使用keep-alive告知服务器建一个长连接;1.1默认支持长连接
  • 1.1在1.0基础上引入更多的缓存控制策略
  • 1.1引入请求范围设置,优化了带宽
  • 1.0没有host域,1.1支持这个参数

1.x缺点:

  • 1.0只允许在一个TCP连接上发送一个请求,1.1默认允许多个tcp连接。但同一个连接中,所有数据都是按次序进行的,服务器一般是处理一个响应之后,再继续处理下一个,造成队首阻塞问题。
  • 请求只能从客户端开始,客户端不可以接收除了响应之外的指令
  • 请求/响应头部不进行压缩就发送,头部信息越多延迟越大
  • 发送冗长的头部,每次互相发送相同的头部资源导致浪费
  • 可随意选择数据压缩格式,非强制压缩发送

3.2HTTP2.0

HTTP2.0大幅度提高了web性能,在1.x语义兼容的基础上,进一步减少网络延迟,实现低延迟高吞吐量。

  • 2.0支持明文传输
  • 新的二进制格式,1.x解析是基于文本。基于文本的格式解析表现形式多样性,二进制格式只有0和1,实现方便且健壮
  • 多路复用,即连接共享,每一个请求都是用作连接共享机制的,一个请求对应一个id,这样一个连接上可以有多个连接,随即混在一起,接收方根据id将其分类归属不同的服务端请求里。
  • 头部压缩,在 HTTP 2.0 中,使用了 HPACK(HTTP2头部压缩算法)压缩格式对传输的头部进行编码,减少了头部的大小。并在两端维护了索引表,用于记录出现过的头部,之后在传输过程中就可以传输已经记录过的头部健名,对端收到数据后就可以通过键名找到对应的值。
  • 服务器推送,服务器可以对一个客户端请求发送多个响应,还可以在某个请求后主动推送其他资源
  • QUIC:(Quick UDP Internet Connection)是谷歌制定的一种基于UDP的低时延的互联网传输层协议。

4.HTTP/HTTPS

HTTP:超文本传输协议,提供一种发布和接收HTML页面的方法
HTTPS:以安全为目标的HTTP通道,是HTTP安全版,安全基础是SSL(secure sockets layer)安全套接字协议,SSL协议位于TCP/IP与应用层协议之间,为数据通讯提供安全支持。(数据保密性,数据完整性,身份校验安全性)。

4.1区别:

  • HTTPS协议需要得到CA证书,一般免费的比较少,需要一定的费用
  • HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议
  • HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
  • HTTP 的连接很简单,是无状态的。HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)

4.2HTTPS通信流程:

  • 1.客户端输入网址,连接到服务端的443端口,发送自己支持的SSL版本,加密组件等给服务器
    2.服务器发送所选择的连接参数和证书(包括公钥信息等)给客户端。服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,自己制作的证书需要客户端验证通过才可以继续访问,而使用受信任的公司的申请证书就不会弹出提示页面。比如startSSL。
    3.传送证书(包括公钥)
    4.客户端解析证书,通过客户端的TLS完成,会验证公钥是否有效,如果发现异常,就会弹警告,如果没问题,就生成一个随机key,用证书的公钥对其进行加密
    5.传送加密后的随机key,让服务器收到
    6.服务端用私钥解密,获得随机的key值 双方开始用随机的key进行对称信息加密,并且传输
    在这里插入图片描述

5.HTTP缓存

HTTP缓存又叫浏览器缓存,浏览器保存了通过HTTP获取的所有的资源,是浏览器将网络资源存储在本地的一种行为,主要用于加快资源获取速度,提高用户体验,减少网络连接,缓解服务器压力。
HTTP缓存又分为强缓存和协商缓存。

5.1强缓存

浏览器不向服务器发送请求,直接从本地缓存中获取数据,请求返回200状态码。
对强缓存来说,浏览器会判断请求的资源是否在有效期内。如果是在有效期内,就直接从缓存中读取资源,不用向服务器发送资源请求。强缓存通过Expires、Cache-Control和Pragma这三个头部字段设置。
用了强缓存后,如果服务器端的资源更新了,客户端是不知道的,而且在过期之前都会用缓存中的资源。可以通过Ctrl + F5强制刷新。

5.2协商缓存

强缓存失效,浏览器发送请求到服务器,服务器判定是否使用本地缓存,返回304
协商缓存是在用本地缓存之前,向服务器发起一次get请求,验证浏览器保存在本地的资源是否过期
在这里插入图片描述

  • (1)首先在精确度上,Etag要优于Last-Modified,Last-Modified的时间单位是秒,如果某个文件在1秒内改变了多次,那么他们的Last-Modified其实并没有体现出来修改,但是Etag每次都会改变确保了精度;如果是负载均衡的服务器,各个服务器生成的Last-Modified也有可能不一致。
  • (2)性能上,Etag要逊于Last-Modified,毕竟Last-Modified只需要记录时间,而Etag需要服务器通过算法来计算出一个hash值。
  • (3)优先级上,服务器校验优先考虑Etag
    联系与区别:
    两种缓存方式最终都使用本地缓存,前者没有和服务器交互
    缓存流程:
  • 首先通过 Cache-Control 验证强缓存是否可用,如果强缓存可用,那么直接读取缓存;
  • 如果不可以,那么进入协商缓存阶段,发起 HTTP 请求,服务器通过请求头的Etag/last-modified中是否带上If-None-Match 和If-Modified-Since 这些条件请求字段检查资源是否更新:
  • : (1).若资源更新,那么返回资源和200状态码
    : (2).如果资源未更新,返回304那么告诉浏览器直接使用缓存获取资源
  • 如果协商缓存也未命中,服务器直接将资源发送回客户端
    注意
    Ctrl+F5:强制刷新网页,直接从服务器加载,跳过强缓存和协商缓存;
    F5:刷新时,跳过强缓存,检查协商缓存
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值