计算机网络基础问题总结

1.HTTP协议2.0和1.1的区别(阿里巴巴)

1.HTTP2.0使用二进制格式而非文本格式:二进制格式解析起来更加高效,错误率小,

2.HTTP2.0使用多路复用的单一长连接
单一连接优点:在HTTP/2中,客户端向某个域名的服务器请求页面的过程中,只会创建一条TCP连接,即使这页面可能包含上百个资源。单一的连接应该是HTTP2的主要优势,单一的连接能减少TCP握手带来的时延。HTTP2中用一条单一的长连接,避免了创建多个TCP连接带来的网络开销,提高了吞吐量。
多路复用:HTTP2虽然只有一条TCP连接,但是在逻辑上分成了很多stream。 HTTP2把要传输的信息分割成一个个二进制帧,首部信息会被封装到HEADER Frame,相应的request body就放到DATA Frame,一个帧你可以看成路上的一辆车,只要给这些车编号,让1号车都走1号门出,2号车都走2号门出,就把不同的http请求或者响应区分开来了。但是,这里要求同一个请求或者响应的帧必须是有有序的,要保证FIFO的,但是不同的请求或者响应帧可以互相穿插。这就是HTTP2的多路复用,是不是充分利用了网络带宽,是不是提高了并发度?

3.报头压缩:HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。

4.服务端推送Server Push:服务端能够更快的把资源推送给客户端。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求。当客户端需要的时候,它已经在客户端了。
View Code

2.计算机网络分为哪几层?

如果是OSI-RM模型分为7层,物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
如果是TCP/IP协议簇模型分为4层,为网络接口层、网络层、传输层、应用层

物理层考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。

链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。

网络层 :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。

传输层 :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。

应用层 :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等。数据单位为报文。

其中表示层和会话层用途如下:

表示层 :数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。

会话层 :建立及管理会话。

五层协议没有表示层和会话层,而是将这些功能留给应用程序开发者处理。
View Code

3.TCP和UDP有什么区别?什么场景使用TCP,什么场景使用UDP?哪些应用层协议使用了TCP,哪些使用了UDP?

TCP和UDP的区别
1、基于连接与无连接;

2、对系统资源的要求(TCP较多,UDP少);

3、UDP程序结构较简单;

4、流模式与数据报模式 ;

5、TCP保证数据正确性,UDP可能丢包;

6、TCP保证数据顺序,UDP不保证。

应用场景:
当对网络通信质量有要求时,比如:整个数据要准确无误的传递给对方,这往往对于一些要求可靠的应用,比如HTTP,HTTPS,FTP等传输文件的协议,POP,SMTP等邮件的传输协议。
1.浏览器使用的:HTTP
2.FlashFXP:FTP 
3.Outlook: POP、SMTP 
4.QQ文件传输

UDP 文件传输协议
对当前网络通讯质量要求不高的时候,要求网络通讯速度尽量的快,这时就使用UDP ,比如实时音视频:
1.QQ语音 
2.QQ视频 
3.TFTP


基于TCP的应用层协议有:SMTP、TELNET、HTTP、FTP
基于UDP的应用层协议:DNS、TFTP(简单文件传输协议)、RIP(路由选择协议)、DHCP、BOOTP(是DHCP的前身)、IGMP(Internet组管理协议)
View Code

4.什么是滑动窗口协议?

窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。

发送窗口内的字节都允许被发送,接收窗口内的字节都允许被接收。如果发送窗口左部的字节已经发送并且收到了确认,那么就将发送窗口向右滑动一定距离,直到左部第一个字节不是已发送并且已确认的状态;接收窗口的滑动类似,接收窗口左部字节已经发送确认并交付主机,就向右滑动接收窗口。

接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31} 按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收。

参考:https://blog.csdn.net/q1007729991/article/details/70142341
View Code

5.什么是拥塞控制(算法:慢开始和拥塞避免、快重传和快恢复)

慢启动:发送的最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 加倍,因此之后发送方能够发送的报文段数量为:2、4、8 ...

注意到慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd 增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入【拥塞避免】,每个轮次只将 cwnd 加 1。

如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。
-------------------------------
拥塞避免:拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送方的cwnd加1.
---------------------------------

快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。  当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。 
View Code

6.在浏览器中输入url地址 -> 显示主页的过程(面试常客)

 

总体来说分为以下几个过程:

DNS解析域名,将域名www.baidu.com解析成IP地址
TCP三次握手建立连接:浏览器以一个随机端口(1024~65535)向服务器的80端口发送TCP连接
TCP建立连接后发送HTTP请求
服务器处理请求并返回HTTP报文
浏览器解析渲染页面
连接结束

7.TCP连接需要几次握手?几次挥手?过程是怎样的?为什么是那么多次?

三次握手:假设 A 为客户端,B 为服务器端。

首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。

A 向 B 发送连接请求报文,SYN=1,ACK=0,选择一个初始的序号 x。

B 收到连接请求报文,如果同意建立连接,则向 A 发送连接确认报文,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。

A 收到 B 的连接确认报文后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。

B 收到 A 的确认后,连接建立。

【第三次握手原因】
是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。
-----------------------
以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。

A 发送连接释放报文,FIN=1。

B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。

当 B 不再需要连接时,发送连接释放报文,FIN=1。

A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。

B 收到 A 的确认后释放连接。

【四次挥手的原因】

客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
View Code

8.什么是https协议?https协议用到了哪种密钥?

http是HTTP协议运行在TCP之上。所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。

https是HTTP运行在SSL/TLS之上,SSL/TLS运行在TCP之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份。

https协议需要到ca申请证书,一般免费证书很少,需要交费。

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

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

http的连接很简单,是无状态的

HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全
View Code

9.HTTP首部字段

通、请、响、实
有 4 种类型的首部字段:通用首部字段、请求首部字段、响应首部字段和实体首部字段。
View Code

10.post和get区别

https://www.zhihu.com/question/28586791
1. 最直观的就是语义上的区别,get用于获取数据,post用于提交数据。

2. get参数有长度限制(受限于url长度,具体的数值取决于浏览器和服务器的限制),而post无限制详细说下第一点,先说结论:颠倒两者会造成非常糟糕的结果。比如一个网页地址是:http://www.taobao.com?itemId=123 
你把它发给朋友,说这个东西很酷!这就是用get来获取数据最正确的方式,它有利于传播。但如果你用post请求获取到一个商品页面,url还是http://www.taobao.com
那你把这个url分享给朋友是没有意义的。

反过来说,如果你用http://www.weibo.com?uid=1&content=haha&token=xxxxxxxxxx
来发一条内容为haha的微博,并且这个url被其他人看到了。那他直接把url在他那儿复制一下就可以帮你发微博了,是不是也很不合理?
View Code

11.TCP如何保证传输的可靠性?

TCP协议保证数据传输可靠性的方式主要有:
校验和
序列号
确认应答
超时重传
连接管理
流量控制
拥塞控制
View Code

12.HTTP请求和响应的报文结构(格式)

HTTP请求的报文格式:
1、请求行:请求方法、URL、HTTP协议版本号
2、请求头:若干键值对组成
3、请求空行:告诉服务器请求头的键值对已经发送完毕
4、请求主体

HTTP响应的报文格式:
1、响应行:状态码、状态码描述、HTTP协议版本号
2、响应头:若干键值对组成
3、响应空行:标识响应头的结束
4、响应主体

13、HTTP常见的状态码

1、1XX:信息性状态码,表示接收的请求正在处理
2、2XX:成功状态码,表示请求正常处理完毕
3、3XX:重定向状态码,表示需要进行附加操作以完成请求
4、4XX:客户端错误状态码,表示服务器无法处理请求
5、5XX:服务端错误状态码,表示服务器处理请求出错

常见的状态码有:
1200 OK,请求被正常处理
2301 Move Permanently,永久性重定向
3302 Found,临时性重定向
4400 Bad Request,请求报文存在语法错误
5403 Forbidden,对请求资源的访问被服务器拒绝
6404 Not Found,在服务器上不能找到请求的资源
7500 Internal Server Error,服务器内部错误
原文地址:https://www.cnblogs.com/Roni-i/p/10273997.html