计算机网络面试题

计算机网络常见面试题

OSI与TCP/IP各层的结构与功能,都有哪些协议?

在这里插入图片描述

应用层: 应用进程之间进行交互来完成特定的网络应用

应用层协议定义的是应用进程间的通信和交互规则,如域名系统DNS,超文本传输协议HTTP,支持电子邮件的SMTP
应用层交互的数据单元称为报文

  • 域名系统DNS:作为可以将域名和IP地址相互映射的一个分布式数据库,不用记住IP地址就可以访问互联网

  • 超文本传输协议HTTP:所有万维网文件都必须遵循这个标准。设计HTTP最初目的是为了提供一种发布和接收HTML页面的方法

运输层: 负责向两台主机进程之间通信提供通用的数据传输服务,应用程序通过运输层服务传输应用层报文

通用的是指不针对某个特定应用,多个应用可以使用同一个运输层服务进行传输
一台主机同时存在多个进程,因此运输层有复用和分用的功能。复用是指多个应用进程同时使用运输层服务进行传输,而分用是指运输层将收到的信息分别交付给各个应用进程

运输层主要使用的两种协议:

  • 传输控制协议TCP(Transmission Control Protocol),提供面向连接,可靠的数据传输服务
  • 用户数据协议UDP(User Datagram Protocol),提供无连接,尽最大努力的数据传输服务(不保证数据可靠性)

网络层: 网络层的任务是选择适合的网间路由和交换结点,确保数据即使传送。在发送数据时,网络层把运输层产生的报文段或用户数据报分别封装成分组和包进行传送

在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报,简称数据报

数据链路层: 两台主机之间数据传输,需要在一段一段的链路上传送,这需要使用专门的链路层协议。在两个相邻节点之间传送数据时,数据链路层将网络层下来的IP数据报组装成帧,在两个相邻节点间的链路上传送帧,每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)

在接收数据时,控制信息使接收端能知道一个帧的开始和结束,因此可以提出数据部分上交给网络层
控制信息使接收端能检测收到的帧是否有差错,如果发现差错,数据链路层就简单丢弃这个出差错的帧,以避免在网络中继续传送下去浪费网络资源。如果需要修改正数据在数据链路层传输时出现的差错,就采用可靠性传输协议来纠正出现的错误

物理层: 物理层上传输的数据单位是比特。物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异,使数据链路层不必考虑网络的具体传输介质是什么。

“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

TCP 协议如何保证可靠传输

1、数据包校验,如果数据包出现丢失或出错,则直接丢弃数据启动超时重传,如果出现重复的数据,则丢弃重复的数据
2、失序数据包进行重排序,因为TCP是面向字节流传输,TCP在接收到数据时按照序号字段对数据进行重排序
3、拥塞处理
4、流量控制(滑动窗口)
5、超时重传,TCP发送一个数据时,启动计时器,如果发送方在计时之内没有收到确认,则重新发送数据
6、ARQ协议(自动重传请求,分为停止等待ARQ和连续ARQ)

TCP 三次握手

在这里插入图片描述
在这里插入图片描述

三次握手的目的是建立可靠的通信通道,让双方确认发送和接收都是正常的。

第一次握手:
客户端发送SYN同步请求到服务器,客户端进入SYN_SENT状态,等待服务器确认
客户端:什么都不能确认
服务器:确认自己可以接收,对方可以发送

第二次握手:
服务器收到SYN请求后知道客户端请求建立连接,并将SYN请求和ACK请求发送回客户端以确认连接请求,服务器进入SYN_RCVD状态
客户端:确认自己可以接收,自己可以发送,对方可以发送,对方可以接收
服务器:确认自己可以接收,对方可以发送

第三次握手:
客户端收到确认后,将ACK确认请求发回给服务器,建立连接成功,双方进入ESTABLISHED状态
客户端:确认自己可以接收,自己可以发送,对方可以发送,对方可以接收
服务器:确认自己可以接收,自己可以发送,对方可以发送,对方可以接收

因此三次握手能确认双方接收和发送都正常

为什么要传回SYN

SYN是TCP/IP协议建立连接时的握手信号

因为服务器需要告诉客户端自己接收到的SYN信号确实是该客户端发送,而不是其他客户端发送的

传了SYN,为什么还要传ACK

因为传SYN是保证客户端到服务器的通道正常的,而ACK和第三次握手是为了让服务器确认接收方到客户端的通道是正常的(服务器确认可以发送,对方可以接收)

为什么TCP链接需要三次握手,两次不可以么

客户端发出的第一个连接请求没有丢失,而在某个网络节点长时间滞留,以致于客户端的连接请求取消后,连接请求才到达服务器。而这个早已经失效的连接请求被服务器接收到后,误认为是客户端的一次新的连接请求,就发送ACK确认请求同意建立连接。
如果只有两次握手而不是三次握手的话,只要服务器进行确认后连接就直接建立了。但这是客户端并没有建立连接的请求,因此不理会服务器,也不会发送数据给服务器。服务器却误认为连接已经建立,一直等待接收客户端的数据,这样资源就会浪费掉。
使用三次握手就可以防止这种现象发生。当服务器发送ACK确认请求后,客户端没有建立连接请求不理会,这时服务器收不到客户端的ACK确认请求,就知道客户端没有建立请求,不会进行建立连接。

TCP 四次挥手

在这里插入图片描述
在这里插入图片描述

第一次挥手: 客户端发送FIN请求,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态

第二次挥手: 服务器接收到FIN后,返回ACK确认请求个客户端,服务器进入CLOSE_WAIT状态,TCP链接处于半关闭状态(客户端已经没有要发送的数据了,但是服务器发送数据,客户端仍然要接收)

第三次挥手: 服务器发送FIN请求,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态

第四次挥手: 客户端接收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK确认请求给服务器,服务器进入CLOSED状态,而客户端经过2*MSL(最长报文段寿命)后,进入CLOSED状态

为什么客户端最后要等待2MSL

1、因为要保证最后一次发送的ACK请求到达服务器,对服务器来说,如果服务器发送了FIN请求给客户端,最后客户端发送了ACK请求但是服务器并没有收到,这时服务器会再次发送FIN请求,客户端如果在发送ACK请求后就关闭就接收不到重传的FIN请求导致服务器的关闭失败,因此需要等待2MSL来接收服务器重传的FIN请求。如果接收到了重传的FIN请求就刷新2MSL的等待时间。
2、防止新的连接中出现旧连接的请求报文,如果不等,释放的客户端可能会重连服务器,这样前一个连接的报文就会干扰后一个连接,造成数据冲突。等待是为了处理延迟的重复报文。

为什么建立连接是三次握手,关闭连接确是四次挥手呢?

因为建立连接时,服务器接收到建立连接的SYN请求后,会把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,服务器接收到客户端的关闭请求,只会返回一个ACK确认请求,因为这只说明客户端已经没有数据要传送个服务器了,但是服务器不一定将需要传送的数据都发送给了客户端,因为客户端不再发送数据但还能接收到服务器的数据。这时当服务器已经将所有数据传送完成后才发送FIN请求进行关闭连接。ACK和FIN分开发送,因此多了一次。

如果已经建立了连接,但是客户端突然出现故障了怎么办?

TCP设有一个保活计时器,服务器每次客户端请求后就会刷新复位计时器,时间通常是为2个小时。如果2个小时内没有收到客户端的任何数据,服务器就会发送一个探测报文段,之后每隔75秒发送一次,如果一连发送了10次探测报文都没有反应,服务器则认为客户端出现了故障,关闭连接。

Get和Post区别

  • get是从服务器上获取数据;post是向服务器传送数据
  • get请求把数据放在URL中,值和表单字段一一对应,以?分割URL和传输数据,参数之间以&相连,在URL中可见;post请求把提交的数据放在http请求报文的请求体中,用户不可见
  • get安全性低,请求提交的数据明文在URL上,post安全性高,请求提交的数据在请求体中
  • get是幂等的,请求同一个资源,无论多少次总是得到相同的数据;post不是幂等的,因为每次请求对服务器资源的改变不是相同的(下订单);get不会改变服务器资源,post会改变服务器资源
  • get回退是无害的;post会再次提交请求
  • get传送的数据量小,受限于浏览器或服务器对URL长度限制;post则没有大小限制
  • get请求会被浏览器主动缓存;post不会主动缓存
  • get参数的数据类型只接受ascii字符,post没有限制
  • get只能进行url编码,post支持多种编码方式
  • get产生一个TCP数据包;post产生两个TCP数据包
  • get会把header和data一并发送,服务器响应200(获取返回数据);post先发送header,服务器响应100continue,再发送data,服务器响应200(获取返回数据)
  • 并非所有浏览器都会发两次数据包,Firefox只发一次

HTTP和HTTPS区别

计算机网络面经大全

  • http端口为80,https端口为443
  • https通信由于加密解密处理消耗更多cpu和内存资源
  • https通信需要数字证书
  • http基于TCP协议;https基于SSL协议,SSL基于TCP协议
  • https比http更安全,http传输文本时不加密,明文传输,可以直接看到信息,不会认证对方身份,可能访问到虚假用户,传输过程中报文可能会被篡改

HTTPS为什么更安全

  • 混合加密(非对称加密+对称加密)
    作用:防窃听
  • 摘要算法
    作用:防止数据被篡改
  • 数字证书
    作用:服务器身份认证

如何理解HTTP协议是无状态的

HTTP是无状态面向连接的协议,无状态意思是对事务处理没有记忆能力,服务器不知道客户端的状态,每次请求都是相互独立的,比如说第一次输入账号密码进行登陆了,然后第二次进行请求的时候服务器是不知道上一次是否进行了登陆,服务器不知道是什么状态,这两次请求是相互独立的,因此第二次请求应该将上一次请求的账号密码进行提交,让服务器进行再次认证

在浏览器中输入url地址到显示页面的过程(过程中会用到哪些协议)

在这里插入图片描述

ARP协议:在路由器与服务器通信时,通过ARP协议将IP地址转换为MAC地址
OSPF协议:开放最短路径优先协议,是一个路由选择协议
IP协议:主要解决网络路由和寻址问题
TCP协议:主要解决如何在IP层之上可靠地传递数据包

1、将url地址通过DNS协议域名系统解析域名为IP地址(DNS)
2、建立TCP连接(TCP/IP:TCP建立连接,IP在网络层实现数据传输,搜索对方的地址一边中转一边传输)
3、发送HTTP请求到指定IP地址的服务器(HTTP:通过HTTP协议生成服务器的HTTP请求报文;TCP:按序号分割报文段)
4、服务器处理HTTP请求并返回HTTP报文给浏览器(HTTP:对请求的内容进行处理;TCP:按序号重组报文段)
5、浏览器根据返回解析渲染页面
6、连接结束

从输入URL到页面加载发生了什么?

DNS域名解析过程(递归查询)
1、本地域名服务器
2、根域名服务器
3、顶级域名服务器
4、主域名服务器

通过DNS缓存进行优化

请求状态码

1xx 指示信息,请求已经被接收,继续处理
2xx 成功,请求已经被成功接收处理(200)
3xx 重定向,要完成请求必须进行进一步操作
4xx 客户端出现错误
5xx 服务器出现错误

301是永久重定向(网址永久变更),302是临时重定向(网址临时变更),请求者应该继续用原来的url继续进行请求;301跳转会默认被浏览器缓存,302跳转如果没有进行设置,浏览器不会进行缓存;新的url在请求头中的Location中给出进行重定向
304是浏览器可以从缓存中获取请求的资源
400是请求报文存在语法错误
403是请求资源被服务器拒绝访问
404是没有在服务器找到请求的资源
499当请求在服务器处理时间较长,客户端主动断开连接(nginx也断开与后端服务器连接并状态码为499)
500是服务器在处理请求过程中发生错误
503是服务器处于超负荷或停机维护状态

Cookie、Session、Token

Cookie是在客户端用来保存用户信息的,存在请求头中,Session是在服务器用来记录用户状态的,Session依赖SessionID,SessionID可以存在Cookie中,当第一次登陆发送请求时,服务器会创建一个Session并生成SessionID并作为键值对存储在服务器中,然后SessionID以Cookie的形式发送到客户端,客户端保存Cookie,下次发送请求只需要带着Cookie中的SessionID即可

Session是存储在Tomcat的容器中,以ConcurrentHashMap存储,所以如果后端机器是多台的话,因此多个机器间是无法共享Session的,此时可以使用Spring提供的分布式Session的解决方案,是将Session放在了Redis中(Token)。

HTTP长连接和短连接

HTTP1.0默认使用短连接,客户端和服务器每进行一次HTTP操作都会进行一次连接,每次操作完就关闭TCP连接
HTTP1.1默认使用长连接,会在响应头中加入Connection:keep-alive,长连接中网页打开完成后,客户端和服务器之间用于传输HTTP的TCP连接不会关闭,客户端再次访问的时候会继续使用这条已建立的连接,不会永久保持长连接,实现长连接需要客户端和服务器都支持
长连接有流水线方式和非流水线方式,流水线方式指客户端发送请求后不需要等待服务器响应继续发送请求,非流水线方式指客户端发送请求后一定要收到服务器响应后才能继续发送请求

HTTP 1.0 和 HTTP 1.1 的主要区别是什么

1、长连接
2、新增了缓存处理策略,引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match缓存头来控制缓存策略
3、新增了错误状态码,409请求的资源与资源当前状态发生冲突,410请求的资源已经被永久删除
4、带宽优化和网络连接的使用,1.0中存在浪费带宽的情况,客户端只需要对象的一部分,服务器会把整个对象返回给客户端,并且不支持断点续传,1.1则在请求头引入了range头域,允许只请求资源的一部分,返回码是206,充分利用带宽和连接

HTTP 2.0

1、有新的二进制格式(实现更方便且健壮)
2、多路复用,连接共享,一个request对应一个id,一条连接可以有多个request,不同连接的request可以混在一起,接收方根据request对应的id将request归属到不同的服务器中
3、header压缩,1.x的header很多时候是重复多余的,选择适合的压缩算法减小包的大小和数量
4、服务器推送

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值