计算机网络面试题总结


一、OSI七层模型、TCP/IP四层协议

OSI七层协议TCP/IP四层协议
应用层应用层
表示层
会话层
传输层传输层
网络层网络层
数据链路层
物理层网络接口层
  • 应用层:应用进程间交互来完成特定的网络应用,HTTP协议,STMP协议,DNS域名系统(将域名和IP地址相互映射)
  • 表示层:对信息进行加密/解密、压缩/解压缩
  • 会话层:机器与机器间通过端口建立会话
  • 传输层:向两台主机进程间通信提供通用的数据传输服务(复用和分用),TCP、UDP,
    通用:多种应用可以使用同一运输层服务
    复用:多个应用进程可同时使用下面运输层的服务
    分用:运输层把收到的信息分别交付给上面应用层中相应进程
  • 网络层:选择合适的网间路由和交换节点,确保数据及时传输,网络层把运输层产生的报文封装成分组(IP数据报)和包进行传输,IP协议
  • 数据链路层:两个相邻节点之间传送数据时,将网络层交付下来的IP数据报组装成帧,每一帧包括数据和必要的控制信息(位置,检错,纠错),收到帧之后,提取出数据部分,上交到网络层,可以差错检测,交换机,ARP协议
  • 物理层:实现相邻计算机节点间透明的比特流传输,网线,光纤

二、TCP三次握手,为什么不能是两次?

  • 两次握手服务端不知道客户端是否收到了信息
  • 如果已失效的连接请求发送到了服务端,服务端以为这是新发过来的请求,就返回了响应,而客户端并没有信息要发送,这样就会占用了服务器的资源

三、HTTP和HTTPS,HTTPS为什么是安全的?

  • HTTP是超文本传输协议,HTTPS相当于HTTP+SSL,是一种安全的HTTP
  • HTTP协议版本:
    HTTP0.9,只有GET命令
    HTTP1.0,可发送任意格式的内容(文字,图片,视频,二进制等),GET、POST、PUT、HEAD、DELETE、LINK、UNLINK命令
    HTTP1.1,长链接,增加了OPTIONS、TRACE、CONNECT方法
    HTTP2.0,协议解析采用二进制格式而非文本格式,性能提升很多
  • HTTPS对传输的数据进行了加密

四、HTTPS如何保障安全性,讲SSL层建立连接的过程

HTTPS传输过程:
(1)客户端发送https请求
(2)服务端会有一套CA数字证书(包含公钥和私钥),服务端将公钥证书发送给客户端
(3)客户端解析证书,由客户端的TLS完成,首先验证公钥是否有效,证书没问题后会随机生成一个随机值(用于对称加密),然后用公钥对随机值进行非对称加密
(4)将随机值传到服务器,服务器用私钥解密,将传输内容通过该随机值进行对称加密,发送给客户端
(5)客户端用随机值解密,获取明文
SSL握手过程:
(1)clientHello:客户端首先发送本地TLS版本,支持加密算法的套件,并生成一个随机数R1
(2)SeverHello:确实TLS版本号,从加密算法中选取一个,生成随机数R2发送给客户端,服务端发送自己的CA证书和签名
(3)证书校验:客户端判断证书和签名是否有效,生成随机数,使用公钥加密发送给服务端,此时客户端和服务端都有R1、R2和随机值,可用其生成会话秘钥和6个用于身份验证的秘钥(p1-p6)
(4)client握手结束通知:使用p1将之前握手的hash值加密发送给服务端,并发送握手结束消息
(5)服务端计算之前的hash值并与用p1解密后的hash值进行对比,通过后使用p2加密hash值发送给客户端
(6)客户端同上进行验证,通过后开始发起https请求

五、输入URL到浏览器显示整个页面的过程、HTTP建立连接过程

(1)浏览器查找域名的IP地址(DNS查找过程:浏览器缓存,路由器缓存,DNS缓存)
(2)TCP三次握手
(3)浏览器向web服务器发送HTTP请求,服务器处理请求
(4)服务器返回一个HTML响应
(5)浏览器开始响应HTML
(6)TCP四次挥手

六、对称加密和非对称加密

  • 对称加密:发送方和接收方使用同一秘钥进行加密和解密
  • 非对称加密:公钥加密,私钥解密。私钥只能由服务器保管,不能外泄,公钥可以发送给任何人

七、DNS解析过程

(1)主机先向本地域名服务器进行递归查询
(2)本地域名服务器迭代查询,向根域名服务器查询,根域名返回顶级域名服务器ip地址
(3)本地域名服务器向顶级域名服务器进行查询,返回权限服务器的ip地址
(4)本地域名服务器向权限服务器查询,返回主机的ip地址
(5)本地域名服务器把查询结果告诉主机

八、TCP如何保证可靠传输的?

校验和、确认应答+序列号、超时重传、三次握手和四次挥手,流量控制、拥塞控制、停止等待协议

  • 校验和:检测数据在传输过程中的任何变化,发送的数据包的二进制相加后取反,接收方对比校验和和发送方是否一致
  • 确认应答+序列号:(1)序列号seq (2)应答号ack
  • 超时重传:
    发送方没有接收到ACK报文有两种原因:
    (1)发送的数据丢包没有到达接收端
    (2)接收端收到数据之后发送ACK报文丢失没有到达发送端
    发送端一定时间之内没有收到ACK报文则重新传输数据,若(1),接收方收到数据之后发送ACK报文,若(2),接收方丢弃数据,重新发送ACK报文
  • 流量控制(滑动窗口协议):接收端发现自己的缓冲区快满了,就将窗口设置一个小的值发给发送端,若缓冲区已满,则将窗口置为0
    (1)接收方在发送确认报文的时候,会告诉发送发自己的接收窗口大小,而发送方的发送窗口会据此来设置自己的发送窗口,但这并不意味着他们就会相等。首先接收方把确认报文发出去的那一刻,就已经在一边处理堆在自己缓存区的数据了,所以一般情况下接收窗口 >= 发送窗口
    (2)接受窗口如果太小的话,显然这是不行的,这会严重浪费链路利用率,增加丢包率。那是否越大越好呢?答否,当接收窗口达到某个值的时候,再增大的话也不怎么会减少丢包率的了,而且还会更加消耗内存。所以接收窗口的大小必须根据网络环境以及发送发的的拥塞窗口来动态调整
  • 拥塞控制:
    判断拥塞方法:没有按时收到应到达的报文(发送超时重传)
    四个算法:慢开始、拥塞避免、快重传、快恢复(拥塞窗口)
  • 停止等待协议:
    停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;
    在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认

九、HTTP报文格式,请求头有哪些信息

  • 请求行:GET URL HTTP/1.1
  • 请求头:
    Host:所在主机域名、User-Agent:浏览器类型、Connection:长连接(keep-alive)还是短连接(close)、Referer:告诉服务器从哪个连接过来的、Accept:告诉服务器客户端能够理解的类型
  • 请求数据:实际传输的数据

十、URI和URL

  • URI:统一资源标识符,能够唯一标记互联网上的资源
  • URL:统一资源定位符(网址),URI的一个子集
    URI包括URL和URN(同一资源名称)

十一、HTTP响应状态码

(1)1xx:100 继续发送请求、101 更换HTTP版本
(2)2xx:200 ok、204 成功但没有资源返回、206 对资源一部分进行返回
(3)3xx:301 永久重定向、302 临时重定向
(4)4xx:400 报文中存在语法错误、401 请求需要通过HTTP认证信息、403 访问被服务器拒绝、404 无法找到资源
(5)5xx:服务器本身发生错误 500 执行请求时错误、503 正在停机维护

十二、HTTPS一定安全吗?

中间人攻击
(1)服务端向客户端发送公钥和证书,被中间人劫持
(2)中间人生成伪造公钥和证书发给客户端
(3)客户端用伪造公钥生成随机值给服务器,加密的随机值也被中间人劫持
(4)中间人用自己的私钥解密获得真秘钥,同时生成假的秘钥发送给服务器
(5)服务器用私钥解密获得假秘钥

十三、HTTP长连接,TCP保活

keep-alive由TCP保活计时器实现 保活时间:默认2h、保活时间间隔:默认75s、保活探测数:默认9次

十四、TCP和UDP区别

  • TCP:面向连接,可靠,传输字节流,传输效率慢,一对一传输,应用于文件传输,首部字节20-60
  • UDP:无连接,不可靠,传输数据报文,传输效率快,可一对一,一对多,多对一,多对多,应用于视频直播,首部8个字节

十五、GET和POST的区别

  • get用于搜索服务器上的资源,会被缓存,对url长度有限制,速度快
  • post用于修改和写入服务器上的资源,不会被缓存,更安全,发送数据更大,比get慢

十六、2MSL作用

为了让服务端正确进入close状态,防止已失效的报文出现在下次连接中

十七、ARP协议

ARP,即地址解析协议,根据IP地址获取MAC地址的一个TCP/IP协议。
(1)在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
(2)IP地址在OSI模型的第三层,MAC地址在第二层,彼此不直接打交道。​ 在通过以太网)发送IP数据包时,需要先封装第三层(32位IP地址)、第二层(48位MAC地址)的包头,但由于发送时只知道目标IP地址,不知道其MAC地址,又不能跨第二、三层,所以需要使用地址解析协议。使用地址解析协议,可根据网络层IP数据包包头中的IP地址信息解析出目标硬件地址(MAC地址)信息,以保证通信的顺利进行。
(3)一台主机有IP数据报文发送给另一台主机,它都要知道接收方的逻辑(IP)地址。但是IP地址必须封装成帧才能通过物理网络。这就意味着发送方必须有接收方的物理(MAC)地址,因此需要完成逻辑地址到物理地址的映射。而ARP协议可以接收来自IP协议的逻辑地址,将其映射为相应的物理地址,然后把物理地址递交给数据链路层。
(4)ARP映射方式:

  • 静态映射:静态映射的意思是要手动创建一张ARP表,把逻辑(IP)地址和物理地址关联起来。这个ARP表储存在网络中的每一台机器上。例如,知道其机器的IP地址但不知道其物理地址的机器就可以通过查ARP表找出对应的物理地址。这样做有一定的局限性,因为物理地址可能发生变化,要避免问题出现,必须定期维护更新ARP表,此类比较麻烦而且会影响网络性能
  • 动态映射:动态映射时,每次只要机器知道另一台机器的逻辑(IP)地址,就可以使用协议找出相对应的物理地址。已经设计出的实现了动态映射协议的有ARP和RARP两种。ARP把逻辑(IP)地址映射为物理地址。RARP把物理地址映射为逻辑(IP)地址。
    (5)ARP请求:任何时候,当主机需要找出这个网络中的另一个主机的物理地址时,它就可以发送一个ARP请求报文,这个报文包好了发送方的MAC地址和IP地址以及接收方的IP地址。因为发送方不知道接收方的物理地址,所以这个查询分组会在网络层中进行广播。
    (6)ARP欺骗:ARP请求为广播形式发送的,网络上的主机可以自主发送ARP应答消息,并且当其他主机收到应答报文时不会检测该报文的真实性就将其记录在本地的MAC地址转换表,这样攻击者就可以向目标主机发送伪ARP应答报文,从而篡改本地的MAC地址表。​ ARP欺骗可以导致目标计算机与网关通信失败,更会导致通信重定向,所有的数据都会通过攻击者的机器,因此存在极大的安全隐患

十八、TCP中有哪些计时器

  • 重传计时器(Retransmission Timer)
    目的:为了控制丢失的报文段或者丢弃的报文段。这段时间为对报文段的等待确认时间。
    创建时间:在TCP发送报文段时,会创建对次特定报文段的重传计时器。
    可能发生的两种情况:在截止时间(通常为60秒)到之前,已经收到了对此特定报文段的确认,则撤销计时器;在截止时间到了,但为收到对此特定报文段的确认,则重传报文段,并且将计时器复位。
    重传时间:2*RTT(Round Trip Time,为往返时间)
  • 坚持计时器(Persistent Timer)
    目的:主要解决零窗口大小通知可能导致的死锁问题
    死锁问题的产生:当接收端的窗口大小为0时,接收端向发送端发送一个零窗口报文段,发送端即停止向对端发送数据。此后,如果接收端缓存区有空间则会重新给发送端发送一个窗口大小,即窗口更新。但接收端发送的这个确认报文段有可能会丢失,而此时接收端不知道已经丢失并认为自己已经发送成功,则一直处于等待数据的状态;而发送端由于没有收到该确认报文段,就会一直等待对方发来新的窗口大小,这样一来,双方都处在等待对方的状态,这样就形成了一种死锁问题。如果没有应对措施,这种局面是不会被打破的。为了解决这种问题,TCP为每一个连接设置了坚持计时器。
    工作原理:当发送端TCP收到接收端发来的零窗口通知时,就会启动坚持计时器。当计时器的期限到达时,发送端就会主动发送一个特殊的报文段告诉对方确认已经丢失,必须重新发送。
    截止期的设置:设置为重传时间的值。但如果没有收到接收端的响应,则会发送另一个探测报文段,并将计时器的值加倍并复位,直到大于门限值(一般为60秒)。在此之后,发送端会每隔60秒发送一个探测报文段,直到窗口重新打开。
  • 保活计时器(Keeplive Timer)
    目的:主要是为了防止两个TCP连接出现长时间的空闲。当客户端与服务器端建立TCP连接后,很长时间内客户端都没有向服务器端发送数据,此时很有可能是客户端出现故障,而服务器端会一直处于等待状态。保活计时器就是解决这种问题而生的。
    工作原理:每当服务器端收到客户端的数据时,都将保活计时器重新设置(通常设置为2小时)。过了2小时后,服务器端如果没有收到客户端的数据,会发送探测报文段给客户端,并且每隔75秒发送一个,当连续发送10次以后,仍没有收到对端的来信,则服务器端认为客户端出现故障,并会终止连接。
  • 时间等待计时器(Time_Wait Timer)
    时间等待计时器是在连接终止期间使用的。
    当TCP关闭连接时并不是立即关闭的,在等待期间,连接还处于过渡状态。这样就可以使重复的FIN报文段在到达终点之后被丢弃。
    时间设置:一般为报文段寿命期望值的2倍。

十九、什么是TCP的粘包和拆包

  • TCP 粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方
  • tcp为提高性能,发送端会将需要发送的数据发送到缓冲区,等待缓冲区满了之后,再将缓冲中的数据发送到接收方。同理,接收方也有缓冲区这样的机制,来接收数据
  • 发生TCP粘包、拆包主要是由于下面一些原因:
  1. 应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包
  2. 应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包
  3. 进行mss(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>mss的时候将发生拆包
  4. 接收方法不及时读取套接字缓冲区数据,这将发生粘包
  • 如何解决:
    既然知道了tcp是无界的数据流,且协议本身无法避免粘包,拆包的发生,那我们只能在应用层数据协议上,加以控制。通常在制定传输数据时,可以使用如下方法:
    1. 使用带消息头的协议、消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,然后向后读取该长度的内容
    2. 设置定长消息,服务端每次读取既定长度的内容作为一条完整消息
    3. 设置消息边界,服务端从网络流中按消息编辑分离出消息内容

二十、DNS底层使用到哪些协议?

  • DNS区域传输的时候使用TCP协议:
    1.辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传送,进行数据同步。区域传送使用TCP而不是UDP,因为数据同步传送的数据量比一个请求应答的数据量要多得多。
    2.TCP是一种可靠连接,保证了数据的准确性。
  • 域名解析时使用UDP协议:
    客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过三次握手,这样DNS服务器负载更低,响应更快。理论上说,客户端也可以指定向DNS服务器查询时用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值