互联网公司计算机网络热门面试题整理

1.体系结构

OSI七层体系机构:物理层 数据链路层 网络层  运输层  会话层  表示层  应用层

五层体系结构:物理层  数据链路层  网络层  传输层 应用层

数据传输的基本单位:传输层(TCP(报文段)UDP(用户数据包))、网络层(IP数据报或分组)、数据链路层(帧)、物理层(比特)

2.HTTP协议相关

1)HTTP是不保存状态的协议:

HTTP是一种不保存状态的协议,即无状态的协议。HTTP协议自身不对请求和响应之间的通信状态进行保存。每当有新的请求,就会有对应的新响应产生。协议本身并不保留之前一切的请求或响应信息,所以在购物网站中一般使用Cookie技术。

2)HTTP/1.0和HTTP/1.1的区别

HTTP1.0 HTTP 1.1 HTTP 2.0主要区别_Sam_Deep_Thinking-CSDN博客

      HTTP/1.1默认支持长连接,而HTTP1.0需要使用keep-alive参数来告知服务器建立长连接。

      HTTP/1.0规定浏览器与服务器只保持短暂的连接,浏览器每次都需要与服务器建立一个TCP连接,服务器完成请求后,立即断开TCP连接,也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应过程与第一次被访问时是相同的。举例在收到的HTML文档后,文档中有10个图片,每个图片都要重新再次建立连接获取,所以网速较慢的时候,我们有时会看到先出现网页,每个图片再逐一出现。

    这样做的好处:简化了服务器的设计,是服务器更容易支持大量并发的HTTP请求

    这样做的缺点:每次请求都会造成无谓的TCP连接建立和断开(连接需要三次握手,断开需要四次挥手),增加了通信量的开销。

    HTTP/1.1和一部分HTTP/1.0想出了持久连接,持久连接的特点:只要任意一端没有明确提出断开连接,则保持TCP连接状态。持久连接的好处在于减少了TCP连接的重复建立和断开所造成的额外开销,减轻了服务器的负载。Web页面的显示速度相应的加快。

HTTP/1.1的持续连接有非流水线方式和流水线方式

        流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。

3)URI和URL的区别:

URI是同一资源标志符,可以唯一标识一个资源

URL是同一资源定位符,可以提供该资源的路径,URL是URI的子集。

举个例子:

身份证号就是URI,通过身份证号让我们能且仅能确定一个人。

如果采用URL方式:动物住址协议://地球/中国/浙江省/杭州市/西湖区/某个大学/12宿舍楼/23号/张三.人

参考:HTTP 协议中 URI 和 URL 有什么区别? - 知乎

4)HTTP报文结构的介绍:

HTTP有两类报文:请求报文和响应报文

请求报文:从客户端向服务器发送请求报文

响应报文:从服务器到客户的回答

请求报文:请求行+首部行+实体主体       其中请求行:方法+URL+版本信息

响应报文:状态行+首部行+实体主体       其中状态行:版本+状态码+原因短语

请求报文的例子:

响应报文的例子:

请求的网页转移到了新的地址,则响应报文的状态行和和一个首部行如下:

5)HTTP的GET和POST

HTTP请求行:请求方法+请求URI+协议版本

HTTP状态行:协议版本+状态码+状态码的原因短语  

请求行中的方法:

状态行的状态码:

1XX:表示通知信息的,如请求收到了或者正在进行处理

2XX:表示成功,如接收或知道了  200OK

3XX:表示重定向,如要完成请求还必须采取进一步的行动  

301:永久性转移

302:暂时性转移

304:已缓存

4XX:表示客户的差错,如请求中有错误的语法或者不能完成(404 ^-^)

5XX:表示服务器的差错,如服务器失效无法完成请求

500:服务器内部错误

503:服务不可用,稍等

关于Get和Post的区别,https://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

6)Get和Post的区别

GET和POST是我们常用的两种HTTP Method,二者之间的区别主要包括如下五个方面:

1)从功能上讲,GET一般用来从服务器获取资源,POST一般用来更新服务器上的资源

2)从RESET服务角度上说,GET是幂等的,即读取同一个资源得到相同的数据,而POST不是幂等的,因为每次请求对资源的改变并不是相同的,进一步讲,GET不会改变服务器上的资源,而POST会对服务器资源进行改变。

3)很多人贪方便,更新资源时用了GET,将信息通过请求行的URL字段上传,以?分割URL和传输数据,参数以& 相连,举例:,monkey,banana就是参数。

http://ipgw.neu.edu.cn/srun_portal_pc.php?ac_id=1& ac_id=1也是参数。

参考:浅谈HTTP中Get与Post的区别 - hyddd - 博客园

7).HTTP和HTTPS的区别

      https协议需要到CA申请证书,一般的免费证书很少,需要缴费

      http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议

      http和https使用的是完全不同的连接方式,所用的端口也不一样,前者是80,后者是443.

http是超文本传输协议,它时使用明文的方式发送我们的内容(没有任何的加密),比如我们访问了一个网址,我们需要在这个网址输入密码、登录账号之类的操作,我们的账号和密码就会发送到网址的服务器上面,但如果有人在中途截取了我们的信息,那么我们的重要的信息就暴露了,为了解决Http在传输中不加密的问题,之后就增加了一个人SSL协议,这个协议提供网络连接的加密,如果我们访问一个https的网站,我们的电脑会先和服务器建立一个安全的连接通道,然后服务器会先发送一份网址的安全信息证书到我们的电脑,告诉我们的电脑,访问的服务器没有问题,确认了信息后,服务器就会生成一个加锁的箱子,但是这把锁有两把不一样的钥匙,一把时给我们的电脑的,一把是给服务器自己,然后服务器会把没有上锁的箱子和钥匙发给我们的电脑,我们把信息放在箱子里面然后用钥匙锁上,然后发给服务器,服务器用自己的钥匙打开箱子来保证信息的安全。

参考:

https://www.jianshu.com/p/650ad90bf563

https://www.bilibili.com/video/av12820479?from=search&seid=15667878026919071251

Http和Https的区别:

Http协议运行在TCP之上,明文传输,客户端和服务器都无法验证对方身份。Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行与TCP上,是添加了加密和认证机制的HTTP。二者之间存在如下不同:

     端口不同:Http与Https使用了不同的连接方式,用的端口也不一样,前者是80,后者是443;

     资源消耗:和Http通信相比,Https通信由于加减密处理消耗更多的CPU和内存资源;

     开销:Https通信需要证书,而证书一般需要向认证机构购买;

共享密钥加密:

加密和解密都使用同一密钥的方式称为共享密钥方式称为共享密钥加密,也被称为对称密钥加密

公开密钥加密:

公开密钥加密使用一对非对称的密钥,一把叫做私有密钥,另一把叫做公开密钥。发送密文的一方使用对方的公开密钥进行加密处理,对方接收到被加密的信息后,在使用自己的私有密钥进行解密。

HTTPS采用混合加密机制:HTTPS采用共享加密和公开加密两者并用的混合加密机制。因为公开密钥加密和共享密钥加密相比,处理速度慢,所以我们采用交换密钥环节使用公开密钥加密方式,之后的建立通信交换报文阶段则采用共享密钥加密方式。

3.Cookie和Session

Cookie表示在HTTP服务器和客户端之间传递的状态信息,因为HTTP是无状态的,但一些万维网常常希望能够识别用户,所以万维网站点可以使用Cookie来跟踪用户。

Cookie的工作原理:客户端发送一个请求,服务器会为张三产生一个唯一的识别码,并以此作为索引在服务器的后端数据库生成一个项目,接着在给客户端的HTTP响应报文中添加了叫做Set-Cookie的首部字段信息,客户端会保存Cookie。当客户端第二次往服务器发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会检查究竟是从哪个客户端发送来的连接请求,然后对比服务器上的记录,最后得到状态信息。

举例:

典型应用:服务器知道用户在什么时间访问了哪些页面,以及访问页面的顺序,如果用户是在网上购物,服务器可以为用户维护一个所购物品的列表,使得张三在结束这次购物时可以一起付费。同时网址服务器会根据用户过去的访问记录向他推荐商品。

4.用户访问某网站的全过程

      点击“百度”的页面,其中URL是http://www.baidu.com。

    (1)浏览器分析链接指向页面的URL

    (2)浏览器向DNS请求解析百度服务器的IP地址

    (3)域名系统DNS解析出百度服务器的IP地址 

    (4)浏览器与服务器建立TCP连接

    (5)浏览器发出取文件命令(一般是发送HTTP请求)

    (6)百度服务器给出响应,把文件发送给浏览器(服务器通过HTTP响应把页面发送给浏览器)

    (7)释放TCP连接

    (8)浏览器显示

5.TCP相关

1) TCP的三次握手

(1)三次握手的过程:TCP主机A向B发送连接报文段,主机B对收到的主机A的请求报文段后,向A发送确认,主机A再次对主机B的确认后,还要向B给出确认。

第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

第二次握手:Server收到数据包后由标志位SYN=1知道Clinet请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack= K +1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则  连接建立成功,Client和Server进入ESTSBLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

三次握手.png-12.4kB

(2)为什么要三次握手,假设A发出的第一个连接请求报文段没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放以后的某个时间才到达B,B收到这个失效的连接请求后,误认为A又发了一次新的连接请求,于是就向A发送确认报文段,同意建立连接,由于A并没有发送建立连接请求,因此不会向B发送数据,但B却以为连接建立了,并一直等待A发送数据。B的许多资源就浪费了。

2) TCP的四次挥手(我要和你断开连接,好的,断吧。我也要和你断开连接,好的,断吧)

第一次挥手:Client发送一个FIN,用来关闭到Clint到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号 ),Server进入CLOSE_WAIT状态。此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但是服务端若发送数据,则客户端仍要接收。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Serve进入LAST_ACK状态。

第四次挥手:Clinet收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server ,确认序号为收到序号+1,Server进入CLOSED状态,完成四次握手。

四次挥手.png-12.6kB

3).TCP与UDP的区别:

TCP是面向连接的,UDP是无连接的

TCP是可靠的,UDP是不可靠的

TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多通信模式

TCP是面向字节流的,UDP是面向报文的

TCP有拥塞控制机制,UDP没有拥塞控制,适合媒体通信

4).TCP如何保证数据的可靠性

TCP提供一种面向连接的服务。其中,面向连接意味着两个使用TCP的应用(通常是一个客户端和一个服务器)在彼此交换数据之前必须建立一个TCP连接。在一个TCP连接中,仅有双方进行彼此通信,而字节流服务意味着两个应用程序通过TCP连接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。

 数据包校验:目标是检测在传输过程中任何变化,若校验出包有错,则丢弃报文段并不给响应,这是TCP发送数据段超时后会重发数据。

对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重排序,然后才交给应用层。 

丢弃重复数据:对于重复数据,能够丢弃重复数据

应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送的,通常将推迟几分之一秒

超时重发:当TCP发送一个报文段后,它将启动一个定时器,等待目的端确认收到这个报文段。如果不能即使收到一个确认,将重发这个报文段。

流量控制:TCP连接的每一方都有固定待续哦啊的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区能接纳的数据,者可以防止较快主机致使慢主机的缓冲区溢出,这就是流量控制,TCP使用的流量控制协议是可变大小的滑动窗口协议。

说明:一般叫做TCP报文段,IP数据包 

5).TCP的拥塞控制:

拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或者链路不至于过载,拥塞控制方法主要有一下四种:

  • 慢开始

不要开始就发送大量数据,先探测一下网络的拥塞程度,也就是说从小到大逐渐增加拥塞窗口的大小。

在一开始发送的时候,cwnd =1 ,发送第一个报文段M1,接收方收到后确认M1,发送方收到对M1的确认后,把cwnd从1增加到2,于是发送方发送M2和M3两个报文段。接收方收到M2和M3的确认。发送方每收到对新报文段的确认就是发送窗口乘以2,因此使用慢开始算法,每经过一个RTT就将拥塞窗口cwnd加倍。

         补充拥塞窗口cwnd:发送方让自己的发送窗口等于拥塞窗口

  • 拥塞避免

当cwnd达到慢开始门限ssthresh时,改用拥塞避免算法,拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增大,即每经过一个RTT就把发送法方的拥塞窗口cwnd加1,而不是加倍。这样,拥塞窗口cwnd按线性规律缓慢增长

补充:慢开始门限ssthresh

            当cwnd<ssthresh时,使用上述慢开始算法

            当cwnd>ssthresh时,使用拥塞避免算法

无论在慢开始还是拥塞避免阶段,只要出现超时(即很可能出现网络拥塞),就把慢开始门限值ssthresh设置为拥塞窗口的一半,与此同时开始执行慢开始算法

  • 快重传

快重传要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是发送方及早知道有报文段没有到达对象)而不要等待自己发送数据时才捎带确认。发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待为报文段设置的重传计时器到期。

  • 快恢复

当发送方收到三个重复确认时,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。

由于发送方现在认为网络很可能没有发生拥塞(如果网络发生了拥塞,就不会一连有好几个报文段连续到达接收方,就不会导致接收方连续发送重复确认),因此现在不执行慢开始算法,而是把cwnd值设置为慢开始门限ssthresh减半后的值,然后执行拥塞避免算法

6.ARP协议

ARP是解决同一局域网上的主机或路由器的IP地址和硬件地址的映射问题。

ARP解决这个问题的方法:在主机ARP高速缓存中存放一个从IP地址到硬件地址的映射表。

主机A向主机B发送IP数据报,首先A会在其ARP高速缓存中查看有无B的IP地址,如果有就查出其对应的硬件地址,再把这个硬件地址写入MAC帧。如果没有,主机A就会自行运行ARP,ARP进程在本局域网上广播发送一个ARP请求分组,在本局域网中的所有主机上运行的ARP进程都会收到这个ARP请求分组, 主机B收到这个请求分组后,就会向A发送一个ARP响应分组,并写入自己的硬件地址。主机A收到主机B的ARP分组后,就在其ARP高速缓存中写入主机的IP地址与硬件地址的映射。

注意:ARP是解决同一个局域网上的主机或者路由器的IP地址和硬件地址的映射问题。ARP请求是通过广播传送的,而ARP响应是通过单播传送的。

7.DNS域名系统和Hosts

域名方便人使用,但是机器习惯处理数字(IP地址),机器不是识别字母。

 例如:把门我们把域名http://www.google。com输入到浏览器后,需要DNS来把http://google.com转换成谷歌搜索的IP地址。

 Hosts:互联网早期,网络只有几台电脑,所以可以使用Hosts文件记录域名到IP的映射,后来网络越来越大,hosts就无法记录这么多映射关系了,所以现在都是使用DNS来完成从域名到IP地址的解析,但是Hosts文件仍然保存在操作系统中,Hosts文件的优先级高于DNS查询,操作系统会在Hosts文件中找域名对应的IP地址,没有找到它才会去问DNS服务器。

参考: https://www.cloudxns.net/Support/detail/id/1689.html

网络知识汇总_yanyan19880509的专栏-CSDN博客

面试/笔试第一弹 —— 计算机网络面试问题集锦_Rico's Blogs-CSDN博客_计算机网络面试

8.客户端不断请求连接会怎么样?DDos(Distributed Denial of Service分布式拒绝服务)攻击?

服务器会为每个请求创建一个连接,并向其发送确认报文,然后等待客户端进行确认

1)DDos攻击

客户端向服务器发送请求连接数据包

服务端向客户端发送确认数据包

客户端不想服务器发送确认数据包,服务器一直等待来自客户端的确认

2)DDos(没有彻底根治的办法,除非不使用TCP)

限制同时打开SYN半连接的数目

缩短SYN半连接的Time out时间

关闭不必必要的服务

参考:计算机网络之面试常考_笔经面经_牛客网

GET和POST的差别:

听我讲完GET、POST原理,面试官给我倒了杯卡布奇诺

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值