【计算机网络】 常见面试题

URI和URL的区别是什么?

  • URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。
  • URL(Uniform Resource Location) 是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。

URI的作用像身份证号一样,URL的作用更像家庭住址一样。URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。

TCP与UDP的区别

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。TCP通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

4.每一条TCP连接只能是点到点的;UDP支持一对一、一对多、多对一和多对多的交互通信。

5、TCP对系统资源要求较多,UDP对系统资源要求较少。

6.UDP的应用场景:即时通信。面向数据报方式;网络数据大多为短消息;拥有大量客户端;对数据安全性无特殊要求;网络负担重但对响应速度要求高的场景。eg: IP电话、实时视频会议等。

TCP的应用场景:对数据准确性要求高,速度可以相对较慢的。eg: 文件传输、邮件的发送与接收

TCP如何保证可靠传输

1.应用数据被分割成 TCP 认为最适合发送的数据块。
2.TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
3.校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
4.TCP 的接收端会丢弃重复的数据。
5.流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
6.拥塞控制: 当网络拥塞时,减少数据的发送。
7.ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
8.超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

如何实现UDP的可靠传输

可在应用层实现,UDP要想可靠,就要接收方收到UDP之后回复个确认包,发送方有个机制,收不到确认包就要重新发送,每个包有递增的序号,接收方发现中间丢了包就要发重传请求,当网络太差时候频繁丢包,防止越丢包越重传的恶性循环,要有个发送窗口的限制,发送窗口的大小根据网络传输情况调整,调整算法要有一定自适应性。

在浏览器中输入url地址 ->> 显示主页的过程

在这里插入图片描述
1.DNS域名解析得到对应的IP地址
2.为了将消息从你的PC上传到服务器上.需要用到IP协议、ARP协议和0SPF协议
3.发起TCP的3次握手,建立TCP连接后发起http请求
4.服务器响应http请求,向浏览器发回一个HTML响应
5.浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
6.断开TCP连接
7.浏览器对页面进行渲染呈现给用户

DNS的解析过程

要查询www.baidu.com的IP地址

1.浏览器搜索自己的DNS缓存(维护一张域名与IP地址的对应表)如果有被解析过的这个域名对应的ip地址,则解析结束

2.若没有命中目标域名,则搜索操作系统中的DNS缓存(维护一张域名与IP地址的对应表)

3.若没有命中,则搜索操作系统的hosts文件(Windows环境下,维护一张域名与IP地址的对应表,位置一般在 C:\Windows\System32\drivers\etc\hosts)

4.若没有命中,则操作系统将域名发送至 本地域名服务器- -(递归查询方式),本地域名服务器 查询自己的DNS缓存,查找成功则返回结果,否则,(以下是迭代查询方式)

4.1 本地域名服务器 向根域名服务器(其虽然没有每个域名的具体信息,但存储了负责每个域,如com、net、org等的解析的顶级域名服务器的地址)发起请求,此处,根域名服务器返回com域的顶级域名服务器的地址

4.2 本地域名服务器 向com域的顶级域名服务器发起请求,返回baidu.com权限域名服务器(权限域名服务器,用来保存该区中的所有主机域名到IP地址的映射)地址

4.3 本地域名服务器 向baidu.com权限域名服务器发起请求,根据映射关系得到www.baidu.com的IP地址

5.本地域名服务器 将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来

6.操作系统将 IP 地址返回给浏览器,同时自己也将IP地址缓存起来

7.至此,浏览器已经得到了域名对应的IP地址

DNS劫持

在这里插入图片描述
客户端发起递归DNS请求,本地递归DNS(大多数情况下为运营商DNS)或者公共DNS通过迭代查询请求多级的DNS权威服务器,并最终将查询结果返回给客户端。可以看到,一次完整的DNS查询:
• 链路长。查询过程包含多次,多级的网络通信。
• 参与角色多。查询过程涉及客户端,DNS递归服务器,权威服务器等角色。 在一次完整DNS查询链路的各个环节,其实都有可能被DNS劫持,下面的章节会逐一分析各种类型的DNS劫持。

我们按照客户端侧递归DNS服务器权威DNS服务器的路径,将DNS劫持做如下分类:

一、客户端侧DNS劫持
1.黑客通过木马病毒或者恶意程序入侵PC,篡改DNS配置(hosts文件,DNS服务器地址,DNS缓存等)。
2.黑客利用路由器漏洞或者破击路由器管理账号入侵路由器并且篡改DNS配置。
3.一些企业代理设备(如Cisco Umbrella intelligent proxy)针对企业内部场景对一些特定的域名做DNS劫持解析为指定的结果。

二、DNS解析路径劫持
1.DNS请求转发
通过技术手段(中间盒子,软件等)将DNS流量重定向到其他DNS服务器
2. DNS请求复制
利用分光等设备将DNS查询复制到网络设备,并先于正常应答返回DNS劫持的结果。
案例:一个DNS查询抓包返回两个不同的应答。
3.DNS请求代答
网络设备或者软件直接代替DNS服务器对DNS查询进行应答
案例:一些DNS服务器实现了SERVFAIL重写和NXDOMAIN重写的功能。
三、篡改DNS权威记录
篡改DNS权威记录 我们这里指的黑客非法入侵DNS权威记录管理账号,直接修改DNS记录的行为。
案例:
黑客黑入域名的管理账户,篡改DNS权威记录指向自己的恶意服务器以实现DNS劫持。

代理服务器的工作原理是怎样的?代理和网关有什么区别?

代理服务器和网关都会把网络内部的数据发送到因特网上。如果把网关比作一扇通向因特网的门,代理服务器就是一堵墙,能够避免暴露网络内部的一些重要信息。代理服务器会过滤一些网络连接,只允许那些可以访问的通过。而网关却不做任何的过滤。

网关:如果两个网络要进行通讯,那么每个网络都需要一个网关。网关区分了一个网络的内部和外部。如果一台电脑需要访问网络外的其他电脑,那么就需要配置网关获得访问网络外部的权限。如果没有网关,电脑就无法访问局域网之外的网络部分,就像是被锁在家里一样。

代理服务器: 对于网络外部来说,代理服务器代表了整个内部网络。任何用户想访问带有代理服务器的网络,都只能看到代理服务器的IP。当把电脑的Internet选项配置成通过代理服务器访问因特网,代理服务器就能隐藏你的网络信息。它使网络内部的电脑变成匿名的。

功能区别:如果代理服务器不做任何信息过滤,那么它就和网关一样,传递从电脑到因特网的请求。然后代理服务器是一个比网关更强大的网络组件,除了有网关的功能之外,还能保护网络免受外部的威胁网关却有暴露网络内部信息的危险,因为它没有任何过滤机制。它仅仅把网络内的信息发送到网络外。

屏蔽网站: 网关不能屏蔽网站。只要网关配置正确,电脑就能从网络内部访问因特网上的任何网站。代理服务器能把网络请求重定向到网络内部的网站上,从而屏蔽网站。管理员可以设置在某个时段或者全天时间屏蔽一些网站。访问这些被屏蔽的网站会重定向到特定的网站上,表示你试图访问一个被屏蔽的网站。

服务端出现大量timewait是什么原因导致的?

这种情况比较常见,一些爬虫服务器或者WEB服务器(如果网管在安装的时候没有做内核参数优化的话)上经常会遇到这个问题,这个问题是怎么产生的呢?

TIME_WAIT是主动关闭连接的一方保持的状态,对于爬虫服务器来说他本身就是“客户端”,在完成一个爬取任务之后,他就 会发起主动关闭连接,从而进入TIME_WAIT的状态,然后在保持这个状态2MSL(max segment lifetime)时间之后,彻底关闭回收资源。为什么要这么做?明明就已经主动关闭连接了为啥还要保持资源一段时间呢?这个是TCP/IP的设计者规定 的,主要出于以下两个方面的考虑:

1.防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失)
2. 可靠的关闭TCP连接。在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。另外这么设计TIME_WAIT 会定时的回收资源,并不会占用很大资源的,除非短时间内接受大量请求或者受到攻击。
解决思路很简单,就是让服务器能够快速回收和重用那些TIME_WAIT的资源。

Cookie的作用是什么?和Session有什么区别?

Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。

Cookie 一般用来保存用户信息 比如①我们在 Cookie 中保存已经登录过得用户信息,下次访问网站的时候页面可以自动帮你登录的一些基本信息给填了;②一般的网站都会有保持登录也就是说下次你再访问网站的时候就不需要重新登录了,这是因为用户登录的时候我们可以存放了一个 Token 在 Cookie 中,下次登录的时候只需要根据 Token 值来查找用户即可(为了安全考虑,重新登录一般要将 Token 重写);③登录一次网站后访问网站其他页面不需要重新登录。Session 的主要作用就是通过服务端记录用户的状态。 典型的场景是购物车,当你要添加商品到购物车的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了。

Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。

Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Session 安全性更高。如果要在 Cookie 中存储一些敏感信息,不要直接写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。

请你来说一下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产生两个TCP数据包。

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

HTTP1.0最早在网页中使用是在1996年,那个时候只是使用一些较为简单的网页上和网络请求上,而HTTP1.1则在1999年才开始广泛应用于现在的各大浏览器网络请求中,同时HTTP1.1也是当前使用最为广泛的HTTP协议。 主要区别主要体现在:

长连接 : 在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP 是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。HTTP 1.1起,默认使用长连接 ,默认开启
Connection: keep-alive。 HTTP/1.1的持续连接有非流水线方式和流水线方式 。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。

错误状态响应码 :在HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

缓存处理 :在HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略例如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略。

带宽优化及网络连接的使用 :HTTP1.0中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

HTTPS的请求过程

在这里插入图片描述
上述过程就是两次HTTP请求,其详细过程如下:

1.客户端向服务器发起HTTPS的请求,连接到服务器的443端口;

2.服务器将非对称加密的公钥传递给客户端,以数字证书的形式回传到客户端

3.服务器接受到该公钥进行验证,就是验证2中的数字证书,如果有问题,则HTTPS请求无法继续;如果没有问题,则上述公钥是合格的。(第一次HTTP请求)客户端这个时候随机生成一个私钥,成为client key,客户端私钥,用于对称加密数据的。使用前面的公钥对client key进行非对称加密;

4.进行二次HTTP请求,将加密之后的client key传递给服务器;

5.服务器使用私钥进行解密,得到client key,使用client key对数据进行对称加密

6.将对称加密的数据传递给客户端,客户端使用client key进行对称解密,得到服务器发送的数据,完成第二次HTTP请求。

HTTP 和 HTTPS 的区别?

1.端口 :HTTP的URL由“http://”起始且默认使用端口80,而HTTPS的URL由“https://”起始且默认使用端口443。
2.安全性和资源消耗: HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。

HTTP长连接,短连接

在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

Connection:keep-alive

在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

长连接使用场景:
长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

短链接使用场景:
而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

HTTP1.0/1.1/2.0

http 1.0 规定浏览器与服务器保持较短时间的链接,浏览器每次请求都和服务器经过三次握手和慢启动(基本思想是当TCP开始传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞)建 立一个TCP链接,服务器完成请求处理后立即断开TCP链接,而且不跟踪每个浏览器的历史请求。

http 1.1 默认支持长连接(在request和response中的header中的connection是close或者Keep-Alive进行控制)增加了请求头和响应头来扩充功能
一个TCP链接可以串行传送多个http请求和响应,减少了TCP建立链接和关闭链接的消耗。另外http1.1允许客户端不用等待上一次 请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能 够区分出每次请求的响应内容。

http 2.0
HTTP/2引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,如下图所示,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。

http 2.0多路复用
用了多路复用的技术,做到一轮三次握手同一个连接并发处理多个请求

http 2.0头部压缩
在HTTP1.x中,头部元数据都是以纯文本的形式发送的,通常会给每个请求增加500~800字节的负荷。

HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。高效的压缩算法可以很大的压缩header,减少发送包的数量从而降低延迟。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值