HTTP和HTTPS
HTTP和HTTPS区别
HTTP是超文本传输协议.主要体现在两个关键字一是超文本, 超文本就是有链接的文本. 另一个是传输, 他是以TCP为底层传输超文本的.
HTTPS是由HTTP和SSL(SSL是安全套接字协议)构建的可进行加密传输,身份认证的网络协议, 比HTTP协议安全.
二者主要有一下几点区别HTTPS协议需要到CA(证书颁发机构)申请证书, CA证书免费的很少, 所以需要一定费用. 而HTTP完全免费HTTP是明文传输, HTTPS是加密传输. 所以HTTPS比HTTP更安全HTTP使用80端口, HTTPS使用443端口HTTP连接简单快速, 是无状态连接. HTTPS需要进行身份认证, 所以连接复杂, 同时也是钟有状态的连接
HTTPS连接建立过程
HTTPS连接过程分为两部分, 一部分是证书验证, 另一部分是数据传输
证书验证部分大致分为3步浏览器发起连接服务器返回HTTPS证书, 同时会生成非对称加密所需的一堆公钥和私钥, 并把公钥放在HTTPS证书一起返回给浏览器浏览器检查证书是否合法
数据传输部分大致分为4步如果证书合法, 浏览器就会生成一个随机数, 并通过公钥加密后发送到服务器服务器通过私钥解密得到随机数服务器用随机数构造对称加密算法, 对返回的结果内容进行加密后再传输
HTTPS优缺点
优点主要是是安全, 经过SSL加密后传输的内容很难被破解
缺点握手阶段费时, 使页面加载时间变长缓存不如HTTP高效, 增加数据开销SSL证书通常需要绑定IP, 不能在同一个IP上绑定多个域名, IPv4资源不能支撑起这个消耗成本增加, 无论是证书需要购买, 还是加解密会消耗服务器计算资源, 都会增加成本
HTTP1.1和HTTP2.0区别
HTTP/2采用二进制格式而不是文本格式,
HTTP/2报头压缩, 降低了传输开销
HTTP/2可以让服务器主动推送响应到客户端缓存
HTTP/2采用完全多路复用, 一个连接就可以实现并行
HTTP请求方式
GET: 把请求的数据放在url上. 其格式为:一?分割URL和传输数据. 参数之间以&相连. 数据如果是英文/数字,原样发送. 如果是空格, 转化为+, 如果是中文/其他字符, 转化为BASE64格式等
POST: 把请求的数据放在HTTP请求体内
PUT:
DELETE:
GET和POST区别
安全性上, POST请求的的数据放在请求体, 而GET放在url上, 明显POST更安全
传输的最大数据: 由于浏览器一般会对url长度有限制, 所以GET能传送的数据有限. 而POST能传输的数据理论上是无限的, 实际会取决于服务器的设置
缓存: GET请求会被浏览器主动缓存. POST不会
编码: GET只能进行url编码. POST支持多种编码方式?
GET不会改变服务器上的数据, POST可能会改变服务器上的数据
HTTP请求报文和响应报文
请求报文
GET /index.html HTTP/1.1 Host: www.baidu.com Connection: close User-agent: Accept-language: fr ...
响应报文
HTTP/1.1 200 OK Connection: OK ... (data)
HTTP状态码
1xx: 通知
2xx: 成功
3xx: 重定向
4xx: 客户端出错
5xx: 服务端出错
cookie和session区别
cookie和session都是用来跟踪浏览器用户身份的会话方式
cookie工作原理浏览器第一次发送请求到服务端时, 服务端会创建包含用户信息的Cookie, 然后将该cookie发送到浏览器端浏览器再次访问服务端时会携带cookie服务端就可以通过cookie来区分不同的用户
session工作原理当用户访问一个服务器,如果服务器开启session,服务器就会检查cookie里是否有SESSIONID如果没有, 服务端就会为该客户端创建一个SESSION并生成一个与此SESSION有关的SESSION ID, 同时生成sess_前缀文件, 并且将SESSIONID通过cookie返回给客户端. 当写入和SESSIONID有关时, 就会往sess_前缀文件里写当读取和SESSIONID有关时, 就会去读相应的sess_前缀文件因为PHPSESSION是临时对话, 所以浏览器关闭后SESSION会关闭
区别: session数据保存在服务端,cookie数据保存在客户端
web缓存原理
TCP和UDP
TCP和UDP比较
TCP是可靠传输. UDP是尽最大努力交付数据, 但是不保证可靠性
TCP只能是一对一传输数据. UDP可以一对一, 可以一对多, 也可以多对多
TCP传输前需要建立连接. UDP输出不需要建立连接
TCP面向字节流传输, 导致数据之间没有分隔, 容易出现粘包现象. UDP面向的是报文传输, 不会出现粘包现象
TCP首部开销大, 20字节. UDP首部开销小, 4字节(源端口+目的端口+长度+校验和)
TCP有拥塞控制. UDP没有拥塞控制
TCP建立过程--三次握手
第一次: 浏览器发起请求, TCP请求首部的标志位SYN置1
第二次: 服务端接受请求, 返回SYN+ACK, 表示接受到请求了
第三次: 浏览器收到服务端消息后, 返回SYN+ACK, 这时连接已经建立, 可以传送数据了. 其实在第三次握手时就可以同时传输数据了, 不会影响连接建立
TCP断开过程--四次挥手
第一次: 连接方A发送FIN, 表示数据已经传输完毕, 可以结束连接, 此时A进入CLOSE_WAIT状态
第二次: 连接B收到FIN, 就返回ACK. 如果没有数据了
第三次: 如果连接B没有数据可以传输了, 就返回FIN给A, 同时进入TIME_WAIT状态
第四次: 连接A收到FIN后, 返回ACK给连接B
TCP如何保证可靠传输
序列号和确认机制
拥塞控制
流量控制
数据校验
TCP粘包问题
原因: TCP 是一个基于字节流的传输服务(UDP 基于报文的),“流” 意味着 TCP 所传输的数据是没有边界的。所以可能会出现两个数据包黏在一起的情况。
解决:发送定长包包头加上包体长度在数据包之间设置边界
TCP拥塞控制
发送窗口=min(拥塞窗口, 接受窗口)
慢开始: 拥塞窗口(cwnd)从1开始指数增长, 直到达到慢开始门限(sshresh)
拥塞避免: 拥塞窗口开始线性增长, 直到发生超时重传, 此时,慢开始门限更新为发送窗口一半, 拥塞窗口(cwnd)置1
快重传: 如果连续3次出现超时重传
快恢复: 拥塞窗口和慢开始门限都变为发送窗口一半,
TIME_WAIT和CLOSE_WAIT区别
TIME_WAIT及其作用
TIME_WAIT: 主动断开的一方的TCP连接会在这个状态下保持2MS
确保对方收到自己发送的最后一个ACK
保证延迟的TCP报文有足够的时间被识别并丢弃
TCP为什么要进行三次握手,而不是两次或者四次呢
TCP作为一种可靠传输控制协议,其核心思想既要保证数据可靠传输,又要提高传输的效率,而用三次恰恰可以满足以上两方面的需求!
两次: 因为是全双工通信, 第二次握手仅仅证明了客户端到服务端的路是通的,还不知道服务端到客户端的路是否通,所以有必要进行第三次握手,以便让服务端知道路是否通
四次: 三次握手已经可以保证通信双方能进行正常的通信, 完全不必要浪费资源再进行第四次握手了. 再者说无论再多的握手, 也不能100%保证连接一定可靠
为什么TCP连接时ACK和SYN可以一起发送,而断开时ACK和FIN不能一起发送呢?
IP
IP地址分类
A类 8 bit 0 1.0.0.0-255.255.255.0
B类 16bit 10 128.0.0.0-191.255.0.0
C类 32bit 110 192.0.0.0-223.255.255.255
D类 1110 多播地址
E类 11110 保留
路由表
目标地址的网络IP
子网掩码
下一跳地址
其他
DNS解析过程
DNS(域名系统)是一个分布式和层级结构的数据库,用来将域名转换为IP地址
操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(taobao.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找taobao.com域服务器,重复上面的动作,进行查询,直至找到www.taobao.com主机。
如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
ARP
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。其作用是在以太网环境中,数据的传输所依赖的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
ARP请求: 任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。
ARP响应: 局域网中的每一台主机都会接受并处理这个ARP请求报文,然后进行验证,查看接收方的IP地址是不是自己的地址,只有验证成功的主机才会返回一个ARP响应报文,这个响应报文包含接收方的IP地址和物理地址。这个报文利用收到的ARP请求报文中的请求方物理地址以单播的方式直接发送给ARP请求报文的请求方。(见图2)
ICMP
ICMP协议的功能主要有:确认IP包是否成功到达目标地址通知在发送过程中IP包被丢弃的原因
从浏览器地址栏输入url到请求返回发生了什么
首先会进行 url 解析,根据 dns 系统进行 ip 查找
然后说说dns解析流程,并且html如何做dns优化
查找到IP之后,就是http协议的三次握手(以及后面会涉及到四次分手)