从url输入到返回请求的过程

251 阅读2分钟

url解析

当url地址中包含&、+、%等特殊字符(主要是传递参数时,参数的内容中包含这些字符)时,地址无效。

url 编码规则。utf-8. gb2312

encodeURIComponent编码范围更广,适合给参数编码,encodeURI适合给URL本身(locaion.origin)编码,当然项目里一般都是用qs库去处理

dns解析流程

1、器中输入www.baidu.com 域名,操作系统会先查hosts件是否有记录,有的话就会把相对应映射的IP返回。

2、hosts文件没有就去查本地dns解析器有没有缓存。(这个我没答上来)

3、然后就去找我们计算机上配置的dns服务器上有或者有缓存,就返回

4、还没有的话就去找根DNS服务器(全球13台,固定ip地址),然后判断.com域名是哪个服务器管理,如果无法解析,就查找.baidu.com服务器是否能解析,直到查到www.baidu.com的IP地址

前端的dns优化

可以在html页面头部写入dns缓存地址,比如

<meta http-equiv="x-dns-prefetch-control" content="on" />
<link rel="dns-prefetch" href="http://bdimg.share.baidu.com" />

三次握手

  • 第一次握手:主机A发送位码为SYN=1的TCP包给服务器,并且随机产生一个作为确认号(这是tcp包的一部分),主机B收到SYN码后直到A要求建立连接;

  • 第二次握手:主机B收到请求后,向A发送确认号(主机A的seq+1),syn=1,seq = 随机数 的TCP包;

  • 主机A收到后检查确认号是否正确,即第一次A发送的确认号是否+1了,以及位码ack是否为1,若正确,主机A会再发送确认号(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

为什么两次握手不行?

因为第二次握手,主机B还不能确认主机A已经收到确认请求,也是说B认为建立好连接,开始发数据了,结果发出去的包一直A都没收到,那攻击B就很容易了,我专门发包不接收,服务器很容易就挂了。

TCP是如何保证可靠传输的

1、校验首部

2、序号(tcp是面向字节流的,比如第一个字节流是序号1)

3、确认(发送方在收到确认包后才会继续发送)

4、重传(则规定的时间内没有收到会重新发送)

UDP 与 TCP 协议

UDP特点:

  • 无连接
  • 最大努力交付(不保证可靠性)
  • 面向报文,适合一次性传输少量数据
  • 没有拥塞控制
  • 首部较小

TCP

  • 面向连接的传输层协议
  • 可靠交付
  • 双全工通信
  • 面向字节流(Buffer)