1、TCP/IP五层网络协议的基本理解

image.png
TCP/IP五层网络协议主要是包括应用层、传输层、网络层、数据链路层、物理层。
★1、其中应用层的作用是通过与应用进行的交互来完成特定网络应用。应用层协议主要定义的是应用进程之间通信和交互的规则。如DNS域名协议、HTTP协议和支持电子邮件的 SMTP 协议。
★2、运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。例如TCP协议、UDP协议.
3、网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。例如网际协议IP、
4、数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。
5、物理层(physical layer)的作用是解决两台物理机之间的通信,通过二进制比特流的传输来实现 。

传输层相关面试题

2、 TCP如何保证可靠性,UDP为什么不可靠?

TCP有三次握手建立连接,四次挥手关闭连接的机制。 除此之外还有滑动窗口和拥塞控制算法。最最关键的是还保留超时重传的机制。 对于每份报文也存在校验,保证每份报文可靠性
UDP面向数据报无连接的,数据报发出去,就不保留数据备份了。 仅仅在IP数据报头部加入校验和复用。 UDP没有服务器和客户端的概念。 UDP报文过长的话是交给IP切成小段,如果某段报废报文就废了。

3、TCP和UDP的区别及其各自适用的场景

区别:
(1)连接:TCP是面向连接的传输层协议,即传输数据之前必须先建立好连接;UDP是面向无连接的。
(2)服务对象:TCP是点对点的两点间服务,即一条TCP连接只能有两个端点;UDP支持一对一,一对多,多对一,多对多的交互通信。
(3)可靠性:TCP是可靠交付:无差错,不丢失,不重复,按序到达;UDP是尽最大努力交付,不保证可靠交付。
(4)拥塞控制,流量控制:TCP拥有拥塞控制和流量控制保证数据传输的安全性;UDP没有拥塞控制,网络拥塞不影响源主机的发送效率。
(5)报文长度:TCP是动态报文长度,即TCP报文长度根据接收方窗口大小和当前网络拥塞情况决定;UDP面向报文,不合并,不拆分,保留上面传下来的报文边界。
(6)首部开销:TCP首部开销大,首部20个字节;UDP首部开销小,8字节(源端口,目的端口,数据长度,校验和)
适用场景:
若通信数据完整性大于实时性,则应选择用TCP协议(文件传输、重要状态等);反之,则使用UDP协议(如视频传输、实时通信等)。

4、TCP连接三次握手机制?必须要三次握手吗,两次可以吗?

image.png
1.第一次握手:客户端将标志位SYN置为1,随机产生一个值序列号seq=x,并将该数据包发送给服务端,客户端 进入syn_sent状态,等待服务端确认。
2. 第二次握手:服务端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务端将标志位SYN 和 ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户端以确认连接请求,服务 端进入syn_rcvd状态。
3. 第三次握手:客户端收到确认后检查,如果正确则将标志位ACK为1,ack=y+1,并将该数据包发送给 服务端,服务端进行检查如果正确则连接建立成功,客户端和服务端进入established状态,完成三 次握手,随后客户端和服务端之间可以开始传输数据了 。

注:SYN-SENT状态表示客户端已发送SYN报文;SYN-RCVD(服务器): 这个状态表示接受到了SYN报文;ESTABLISHED:这个容易理解了,表示连接已经建立了,可以发送数据。

两次握手不行。TCP进行可靠传输的关键就在于维护一个序列号,三次握手的过程即是通信双方相互告知序列号 起始值, 并确认对方已经收到了序列号起始值。 如果只是两次握手, 至多只有客户端的起始序列号能被确认, 服务器端的序列号则得不到确认。

5、TCP关闭连接四次挥手机制?

连接结束后,主机主动释放资源,以客户端主动请求停止连接为例:
image.png
step1:客户端想要关闭连接,此时会发送一个TCP首部Fin标志位被置为1的报文(即Fin报文),之后客户端进入Fin_WAIT_1状态
step2:服务器端接收到客户端发送的Fin报文,就向客户端发送ACK应答报文,之后服务器端进入Closed_WAIT状态,客户端收到服务器端发送的ACK报文之后,进入Fin_WAIT_2状态
step3:服务器端处理完数据传输后,也想客户端发送一个Fin报文,之后服务端进入LAST_ACK状态
step4:客户端收到Fin报文,就向服务端发送ACK应答报文,之后客户端进入TIME_WAIT状态,服务端收到客户端发送的ACK报文之后,就进入Close状态,此时服务端已关闭连接。
step5:客户端在经过2msl一段时间后,自动进入close状态,此时客户端已关闭连接.

6、为什么TCP关闭连接需要4次挥手?

4次挥手的原因:
主要原因是当服务端收到客户端的 FIN 数据包后,服务端可能还有数据没发完,不会立即close。 所以服务端会先将 ACK 发过去告诉客户端我收到你的断开请求了,但请再给我一点时间,这段时间用 来发送剩下的数据报文,发完之后再将 FIN 包发给客户端表示现在可以断了。之后客户端需要收到 FIN 包后发送 ACK 确认断开信息给服务端。
4次挥手中客户端需要等待2MSL的原因
(1)保证最后一次握手报文能到接收方,如果接收方未收到会再次发送FIN+ACK,发起方可以进行超时重传。
(2)TIME_WAIT时间一般是2MSL。2MSL后这次连接的所有报文都会消失,不会影响下一次连接。

7、简述TCP协议的拥塞控制?

拥塞是指一个或者多个交换点的数据报超载,TCP又会有重传机制,导致过载。
为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量. 当cwnd < ssthresh 时,使用慢开始算法。 当cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。 当cwnd = ssthresh 时,即可使用慢开始算法,也可使用拥塞避免算法。
慢开始:由小到大逐渐增加拥塞窗口的大小,每接一次报文,cwnd指数增加。
拥塞避免:cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1。
快恢复之前的策略:发送方判断网络出现拥塞,就把ssthresh设置为出现拥塞时发送方窗口值的一半, 继续执行慢开始,之后进行拥塞避免。
快恢复:发送方判断网络出现拥塞,就把ssthresh设置为出现拥塞时发送方窗口值的一半,并把cwnd设 置为ssthresh的一半,之后进行拥塞避免。

8、简述TCP协议的滑动窗口和超时重传机制

滑动窗口是传输层进行流量控制的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,防止发送方发送速度过快而导致自己被淹没。
超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

应用层相关面试题

9、DNS域名解析的过程?

当连接网络传输时,输入域名地址后,域名解析器(DNS)负责将域名地址解析为ip地址,和主机建立联系。
域名解析过程:
在浏览器输入域名地址,例如输入www.baidu.com,DNS会对这个域名进行解析
step1:浏览器首先会检查自身缓存中有没有该域名解析的地址,如果有,直接解析完成,如果没有,则进行下一步。
step2:当浏览器中没有缓存域名解析的地址时,操作系统会检查系统中的缓存是否有该域名解析的ip地址,如果有,直接调用解析完成,在windows中通常可以使用 C:\Windows\System32\drivers\etc\hosts来进行设置,可以将任意域名解析到任意IP地址。
step3:如果系统中没有缓存域名解析的地址时,操作系统会把域名地址发送给域名服务器(LDNS)LDNS一般提供给用户本地互联网的DNS解析服务。LDNS也有缓存域名解析结果,大部分域名请求都会在这层完成。
step4:如果LDNS没有完成域名解析,那么会将域名地址发送给根域名服务器进行解析。
step5:根域名服务器会返回给LDNS所查询域的主域名服务器地址(GTLD)
step6:本地域名服务器再向第五步得到的GTLD地址发送请求 。
step7:接受请求的GTLD服务器查找并返回此域名对应的Name Server域名服务器的地址,Name Server通常就是你注册的域名服务器,你的域名服务提供商 的服务器。
step8:Name Server域名服务器会查询存储在其服务器的域名和IP地址映射关系表,连同一个TTL值返回个DNS 域名服务器。
step9:返回该域名对应的IP地址和TTL值,LDNS服务器会缓存这个域名和对应的IP地址,缓存时间由一起返回的TTL值确定。
step10:DNS服务器将解析的结果返回给用户,依据TTL值缓存在本地系统以及浏览器中,到此域名解析基本完成了。

10、什么是HTTP协议?Http协议和HTTPS协议的区别?

http的概念:
http协议是超文本传输协议。它是基于TCP协议的应用层传输协议,即客户端和服务端进行数据传输的 一种规则。浏览器作为HTTP客户端通过URL向Web服务器发送所有请求,Web服务器根据接收到到的请求向客户端发送相应信息。
http协议过程概述
HTTP协议采用请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应内容包括协议版本、成功或者错误的代码、服务器信息、响应头部和响应数据。
http和https的区别
区别:
(1)HTTP协议是以明文的方式在网络中传输数据, 客户端和服务器端都无法验证对方的身份 ;HTTPS协议传输是数据时经过TLS加密后的,HTTPS具有更高的安全性。
(2)HTTPS在TCP三次握手之后还要进行SSL的握手。
(3)HTTPS协议需要服务器申请证书,客户端安装对应的根证书。
(4)HTTP协议端口号是80,HTTPS端口号是443。
https的优缺点:
HTTPS优点:(1)传输过程中使用密钥加密,安全性更高。(2)HTTPS可以认证用户和服务器,确保数据发送到正确的用户和服务器。
HTTPS缺点:(1)HTTPS握手阶段延时较高(因为三次握手之后还有SSL握手)。(2)HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身安全性,所以需要购买CA证书;另一方面再用HTTPS协议需要进行加密解密的计算,占用CPU资源较多,需要的服务器配置或者数目增加。

11、Http不同返回状态码的分析?

1XX:接收的信息正在处理
2XX:请求正常处理完毕
3XX:重定向 ,常见错误码:
301:永久重定向、302:临时重定向 ,发送Post请求,收到303,直接重定向为get,发送get请求,不需要向用户确认。;304:资源没修改,用之前缓存就行,如果客户端发送了一个带条件的GET 请求且该请求已被允许,而文档/网页的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回304。
4XX:客户端错误 ,常见错误码:
400:客户端请求的报文有错误、 403:表示服务器禁止访问资源 、404:表示请求的资源在服务器上不存在或未找到 。
5XX:服务端错误 常见错误码:
502:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。504:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(如HTTP)或者辅助服务器(如DNS)收到响应。
image.png

12、简述转发和重定向的区别

转发是服务器行为。服务器直接向目标地址访问URL,将相应内容读取之后发给浏览器,用户浏览器地址 栏URL不变,转发页面和转发到的页面可以共享request里面的数据。
重定向是利用服务器返回的状态码来实现的,如果服务器返回301或者302,浏览器收到新的消息后自动 跳转到新的网址重新请求资源。用户的地址栏url会发生改变,而且不能共享数据。

13、HTTP短链接和长连接的区别?

HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议.
短连接: 客户端与服务器进行一次HTTP连接操作,就进行一次TCP连接,连接结束TCP关闭连接。
长连接(HTTP1.1的改进,开启了长连接):如果HTTP头部带有参数keep-alive,即开启长连接网页完成打开后,底层用于传输数据的TCP 连接不会直接关闭,会根据服务器设置的保持时间保持连接,保持时间过后连接关闭。
TCP短链接:client向server发送请求,server接收到请求,双方建立连接。然后client向server发送消息,server回复消息,完成一次读写操作后,双方任一个都可以开启close操作(一般由client发起),短链接即在client和server之间完成一次读写操作
TCP长连接:Client和server之间建立连接后,完成一次读写操作,此时他们之间的连接并不会主动关闭,后续的读写操作仍使用该链接。

14、Get和Post的区别?

(1)概括:
对于GET方式请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST方式请求,浏览器会先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
(2)区别:
1)get参数通过url传递,post放在request body中。
2)get请求在URL中传递参数的长度有限制(根据浏览器不同长度限制也不同),而post没有
3)get比post更不安全,因为参数暴露在URL中
4)get请求只能进行url编码,post支持多种编码方式
5)get 请求会被浏览器主动cache (缓存),post 则不会,除非手动设置
6)get请求会完整保留在浏览历史记录里,而post中的参数不会被保留
7)get和post本质上是TCP连接,并无差别,但是由于http的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同
8)GET产生一个TCP数据包,post产生两个数据包。

15、用户从输入URL到显示页面整个过程。

浏览器输入URL地址->DNS域名解析,查找对应的服务器ip地址->TCP连接, 通过ip寻址和arp,找到服务器,并利用三次握手建立TCP连接 -> 浏览器生成HTTP报文 ,发送HTTP请求->服务器接收到HTTP请求并返回HTTP相关报文->浏览器解析渲染页面->TCP四次挥手,连接结束。

16、阻塞、非阻塞;异步,非异步?

阻塞和非阻塞:调用者在事件没有发生的时候,一直等待事件发生,不能处理其他任务是阻塞。调用者在事件没有发生的时候,可以去处理别的事务这是非阻塞。
同步和异步:调用者循环查看事件有没有发生,这种情况是同步。调用者不用自己去查看事件有没有发生,而是等待注册在时间上的回调函数自己通知自己,这是异步。

17 IP地址和MAC地址的作用?

MAC地址是硬件地址,用来定义网络设备的位置,主要由数据链路层负责;
IP地址是IP协议提供的一种统一的地址格式,为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

18、简述Cookie和Session

HTTP 协议本身是无状态的,为了使其能处理更加复杂的逻辑,HTTP/1.1 引入 Cookie 来保存状态信 息。 Cookie是由服务端产生的,再发送给客户端保存,当客户端再次访问的时候,服务器可根据cookie辨识 客户端是哪个,以此可以做个性化推送,免账号密码登录等等。
session用于标记特定客户端信息,存在在服务器的一个文件里。 一般客户端带Cookie对服务器进行访问,可通过cookie中的session id从整个session中查询到服务器记 录的关于客户端的信息。 比如说我们的商城订单系统,我们可以利用将信息保存在session中来判断该订单属于哪一个用户。