1.简述OSI七层协议。
物理层: 主要解决两台物理机之间的通信,通过二进制比特流的传输来实现,二进制数据表现为电流电压上的强弱,到达目的地再转化为二进制机器码。网卡、集线器工作在这一层。在局部局域网上传送数据帧,它负责管理计算机通信设备和网络媒体之间的互通。负责最后将信息编码成电流脉冲或其它信号用于网上传输。网卡、集线器工作在这一层。
数据链路层: 接收来自物理层的位流形式的数据,并封装成帧。数据链路层就是来对电信号来做分组的。一组电信号称之为一个数据包,或者叫做一个“帧”。每一数据帧分成:报头head和数据data两部分。head包含:发送者,接收者,数据类型。交换机工作在这一层。
网络层: 将网络地址翻译成对应的物理地址。并决定如何将数据从发送方路由到接收方。APR协议。路由器工作在这一层。
传输层: 建立端口到端口的通信。TCP/UDP协议
会话层: 建立、管理和终止表示层与实体之间的通信会话;
表示层: 解决不同系统之间的通信。提供多种功能用于应用层数据编码和转化,以确保以一个系统应用层发送的信息 可以被另一个系统应用层识别;
应用层: 规定应用程序的数据格式。提供应用层协议,如HTTP协议,FTP协议等等,方便应用程序之间进行通信。
2.简述TCP/IP五层协议
物理层,数据链路层,网络层,传输层,应用层
3.TCP和UDP的区别
TCP |
UDP |
面向连接 |
是无连接的,即发送数据之前不需要建立连接 |
要求的系统资源较多 |
要求的系统资源较少 |
提供可靠的服务 |
尽最大努力交付,不保证可靠交付 |
全双工的可靠信道 |
不可靠信道 |
面向字节流 |
面向报文的 |
连接只能是点到点 |
支持一对一,一对多,多对一和多对多 |
4.为何TCP可靠
- TCP有三次握手建立连接,四次挥手关闭连接的机制。
- 除此之外还有滑动窗口和拥塞控制算法。
- 最最关键的是还保留超时重传的机制。
- 对于每份报文也存在校验,保证每份报文可靠性。
5.为何UDP不可靠
- UDP面向数据报无连接的,数据报发出去,就不保留数据备份了。
- 仅仅在IP数据报头部加入校验和复用。
- UDP没有服务器和客户端的概念。
- UDP报文过长的话是交给IP切成小段,如果某段报废报文就废了。
6.简述TCP粘包现象
发送方原因:TCP是面向流协议,发送的单位是字节流,因此会将多个小尺寸数据被封装在一个tcp报文中发出去。
接收端:接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据。
7.TCP粘包现象的处理方法
发送方:对于发送方造成的粘包问题,可以通过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭算法。
应用层:格式化数据:每条数据有固定的格式(开始符,结束符);发送每条数据时,将数据的长度一并发送。
8.简述TCP协议的滑动窗口
滑动窗口是传输层进行流量控制的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,防止发送方发送速度过快而导致自己被淹没。
9.简述TCP协议的拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞。
10.简述快重传
如果在超时重传定时器溢出之前,接收到连续的三个重复冗余ACK,发送端便知晓哪个报文段在传输过程中丢失了,于是重发该报文段,不需要等待超时重传定时器溢出再发送该报文。
11.TCP三次握手过程
第一次握手: 客户端将同步标志位SYN置为1,随机产生一个值序列号seq=x,并将该数据包发送给服务端,客户端进入同步已发送(syn_sent)状态,等待服务端确认
第二次握手: 服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN
和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,服务
端进入同步已接收(syn_rcvd)状态。
第三次握手: 客户端收到确认后检查,如果正确则将标志位ACK为1,ack=y+1,并将该数据包发送给
服务端,服务端进行检查如果正确则连接建立成功,客户端和服务端进入连接已建立(established)状态,完成三次握手,随后客户端和服务端之间可以开始传输数据了
12.为什么TCP握手需要三次而不是两次
两次握手接收端是否能收得不到确认,若接收方不接受数据会导致服务器一直等待。
TCP进行可靠传输的关键就在于维护一个序列号,三次握手的过程即是通信双方相互告知序列号
起始值, 并确认对方已经收到了序列号起始值。如果只是两次握手, 至多只有客户端的起始序列号能被确认, 服务器端的序列号则得不到确认。
13.简述半连接队列
TCP握手中,当服务器处于同步已接收(syn_rcvd)状态,服务器会把此种状态下请求连接放在一个队列里,该队列称为半连接队列。
14.简述SYN攻击
SYN攻击即利用TCP协议缺陷,通过发送大量的半连接请求,占用半连接队列,耗费CPU和内存资源。
优化方式:
- 缩短SYN Timeout时间
- 记录IP,若连续受到某个IP的重复SYN报文,从这个IP地址来的包会被一概丢弃。
15.TCP四次挥手
第一次挥手: 客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入fin_wait_1状
态。
第二次挥手: 服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务端进入
Close_wait状态。此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若
发送数据,则客户端仍要接收。
第三次挥手: 服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入Last_ack状
态。
第四次挥手: 客户端收到FIN后,客户端进入Time_wait状态,接着发送一个ACK给服务端,确认
后,服务端进入Closed状态,完成四次挥手。
16.为什么TCP挥手需要4次
是当服务端收到客户端的 FIN 数据包后,服务端可能还有数据没发完,不会立即close。所以服务端会先将 ACK 发过去告诉客户端我收到你的断开请求了,但请再给我一点时间,这段时间用来发送剩下的数据报文,发完之后再将 FIN 包发给客户端表示现在可以断了。之后客户端需要收到 FIN包后发送ACK 确认断开信息给服务端。
17.为什么四次挥手释放连接时需要等待2MSL
- 为了防止最后一次挥手的信息丢失,导致服务端持续等待。
- 他还可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。
18.简述DNS协议
DNS协议是基于UDP的应用层协议,它的功能是根据用户输入的域名,解析出该域名对应的IP地址,从而给客户端进行访问。
19.简述DNS解析过程
20.简述HTTP协议
http协议是超文本传输协议。它是基于TCP协议的应用层传输协议,即客户端和服务端进行数据传输的
一种规则。该协议本身HTTP 是一种无状态的协议。
21.简述cookie
HTTP 协议本身是无状态的,为了使其能处理更加复杂的逻辑,HTTP/1.1 引入 Cookie 来保存状态信
息。
Cookie是由服务端产生的,再发送给客户端保存,当客户端再次访问的时候,服务器可根据cookie辨识
客户端是哪个,以此可以做个性化推送,免账号密码登录等等。
22.简述session
session用于标记特定客户端信息,存在在服务器的一个文件里。
一般客户端带Cookie对服务器进行访问,可通过cookie中的session id从整个session中查询到服务器记
录的关于客户端的信息。
23.简述http状态码和对应的信息
1XX:接收的信息正在处理
2XX:请求正常处理完毕
3XX:重定向
4XX:客户端错误
5XX:服务端错误
常见错误码:
301:永久重定向
302:临时重定向
304:资源没修改,用之前缓存就行
400:客户端请求的报文有错误
403:表示服务器禁止访问资源
404:表示请求的资源在服务器上不存在或未找到
24.转发和重定向的区别
转发(Forward) |
重定向(Redirect) |
服务器行为,浏览器上的网址不变 |
客户端行为,游览器上的网址改变 |
一次请求 |
产生了两次请求 |
网址必须是本站点的网址,共享request里面的数据 |
可以是任意网址,不能共享request里面的数据 |
25.简述http1.0
1.0的HTTP版本,是一种无状态,无连接的应用层协议。 HTTP1.0规定浏览器和服务器保持短暂的链接。
每一个请求都是一个单独的连接,做不到连接的复用。
这种无状态性可以借助cookie/session机制来做身份认证和状态记录。
26.简述http1.1的改进
- HTTP1.1默认开启长连接,在一个TCP连接上可以传送多个HTTP请求和响应。使用 TCP 长连接的方式改善了 HTTP/1.0 短连接造成的性能开销。
- 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
- 引入了更多的缓存控制策略
27.简述HTTP短连接与长链接区别
HTTP中的长连接短连接指HTTP底层TCP的连接。
短连接: 客户端与服务器进行一次HTTP连接操作,就进行一次TCP连接,连接结束TCP关闭连接。
**长连接:**如果HTTP头部带有参数keep-alive,即开启长连接网页完成打开后,底层用于传输数据的TCP
连接不会直接关闭,会根据服务器设置的保持时间保持连接,保持时间过后连接关闭
28.简述HTTP2.0的改进
-
新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
-
多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。多路复用前,文件时串行传输的,请求a文件,b文件只能等待,并且连接数过多。引入多路复用,a文件b文件可以同时传输。
29.http和https的区别
- http所有传输的内容都是明文,并且客户端和服务器端都无法验证对方的身份。
- https具有安全性的ssl加密传输协议,加密采用对称加密,
- https协议需要到ca申请证书,一般免费证书很少,需要交费。
- HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
- http 和 https 用的端口也不一样,前者是 80,后者是 443。
- HTTPS 比 HTTP 要更耗费服务器资源。
30.简述TLS/SSL,HTTP,HTTPS的关系
SSL为安全套接层,TLS传输层安全协议是基于SSL的,他们均用于在传输层为数据通讯提供安全支持
可以将HTTP协议简单的理解为HTTP+SSL/TLS
31.https的连接过程
浏览器将支持的加密算法信息发给服务器
服务器选择一套浏览器支持的加密算法,以证书的形式回发给浏览器
客户端(SSL/TLS)解析证书验证证书合法性,生成对称加密的密钥,我们将该密钥称之为client key,即客户端密钥,用服务器的公钥对客户端密钥进行非对称加密。
客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端对称密钥发送给服务器
服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密,解密之后的明文就是客户端密钥,然后用客户端密钥对数据进行解密,得到信息。最后再使用客户端密钥对称加密对数据进行加密至此开始传输。
32.get和post请求的区别?
- get请求用于信息获取,post请求用于提交数据。
- get请求参数被存放在url地址中不安全且传输数据的大小受到url的限制,post请求参数被存放在请求体中相对安全。
- get请求刷新不会重新提交数据,post请求刷新会重新提交数据。
- get请求可以被缓存,保存为浏览器书签,历史记录而post请求不能被缓存。
- get请求只能url编码,post请求支持多种编码。
33.rest api
rest api全称为表述性状态转移即利用http中get,post,put,delete以及其他的http方法构成rest中数据资源的增删改查操作。
Create : POST
Read : GET
Update : PUT/PATCH
Delete: DELETE
34.浏览器输入一个网址后,具体会发生什么
进行DNS解析操作,根据DNS解析的结果查到服务器IP地址
通过ip寻址和arp,找到服务器,并利用三次握手建立TCP连接
浏览器生成HTTP报文,发送HTTP请求,等待服务器响应
服务器处理请求,并返回给浏览器
根据HTTP是否开启长连接,进行TCP的挥手过程
浏览器根据收到的静态资源进行页面渲染
面试问题原出处