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)