OIS参考模型,每一层涉及到了哪些协议,每一层负责了什么?
应用层,表示层,会话层,运输层,网络层,数据链路层,物理层
涉及到的协议
网络层:ip
传输层:TCP,UDP
会话层:sql
表示层:ASCLL
应用层:HTTP,FTP
TCP的特点是什么?什么是窗口滑动协议,什么是快速重传,什么是拥塞避免,什么是慢启动?怎么做到可靠数据传输?
用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。
传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)
窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小
如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度
发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 …
注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd 加 1。
如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。
超时重传
TCP 使用超时重传来实现可靠传输:如果一个已经发送的报文段在超时时间内没有收到确认,那么就重传这个报文段
TCP的流量控制是什么?如果RcvWindow=0应该怎么办?
流量控制是为了控制发送方发送速率,保证接收方来得及接收。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
TCP和UDP的区别?什么场景使用TCP,什么场景什么UDP?哪些应用层协议使用了TCP,哪些使用了UDP?UDP要实现可靠数据传输应该怎么做?
tcp协议和udp协议的差别
TCP UDP
是否连接 面向连接 面向非连接
传输可靠性 可靠 不可靠
应用场合 传输大量数据 少量数据
速度 慢 快
UDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。
传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
实现确认机制、重传机制、窗口确认机制。
TCP的三次握手和四次挥手?为什么是三次,为什么是四次?为什么TCP采用随机初始序列号?客户端和服务器最多能发送和接收多少TCP连接数?(最后一个问的较少)
如果TCP连接的时候服务器发送的最后一个报文时,客户端挂了会怎样?那如果服务器宕机了,客户端怎么处理?
TIME_WAIT 和 CLOSE_WAIT 状态?TIME_WAIT 为什么需要保持 2MSL 这么长的时间?大量TIME_WAIT造成的影响?如何尽量处理 TIMEWAIT 过多?
TIME_WAIT
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:
确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。
TCP粘包(问的较少)
影响TCP 网络时延的因素
当你输入域名访问一个网站的时候,背后的过程是什么涉及到哪些协议?
一般来说是分为5步。
DNS解析,将对应的域名解析为对应的IP地址 。
根据获取的IP地址,通过三次握手建立TCP连接。
通过TCP连接发起HTTP请求。
服务器根据响应的HTTP请求,交给特定的处理器进行处理,并将结果和响应的视图进行返回。
浏览器解析并渲染试图。
具体用到的协议:
应用层:DNS 、HTTP
传输层:TCP
网络层:IP、ICMP、ARP
DNS解析具体过程:
首先查询浏览器的DNS缓存,如果有就返回对应IP;
如果没有的话,查询系统的缓存,这里会使用底层的系统调用进行查询;
如果找不到,查询路由器的缓存;
如果找不到就查找ISP对应的缓存记录;
如果找不到,就对根域名解析服务器发起查询请求(一般本地域名服务器会缓存顶级域名服务器的地址,所以根域名解析服务器请求比较少),返回对应的IP地址。
什么是https协议?https协议用到了哪种密钥?
- 客户端连上服务端
- 服务端发送 CA 证书给客户端
- 客户端验证该证书的可靠性
- 客户端从 CA 证书中取出公钥
- 客户端生成一个随机密钥 k,并用这个公钥加密得到 k’
- 客户端把 k’ 发送给服务端
- 服务端收到 k’ 后用自己的私钥解密得到 k
- 此时双方都得到了密钥 k,协商完成。
HTTP的八种请求?GET和POST的区别?
OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*'的请求来测试服务器的功能性。
HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
GET:向特定的资源发出请求。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的创建和/或已有资源的修改。
PUT:向指定资源位置上传其最新内容。
DELETE:请求服务器删除Request-URI所标识的资源。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
- GET与POST都有自己的语义,不能随便混用。
- 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
- 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
HTTP的一些常见的状态码要熟悉!重定向和转发的区别?
HTTPS的工作流程?
Cookie,Session,Token的区别
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
SSL加密的过程?延伸出对称加密和非对称加密的过程和区别
DNS协议!域名解析过程,递归查询和迭代查询的区别?
Ping命令的过程和ARP协议(这个做了解就好了)