计算机网络面试题

2. 运输层


运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数
据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定
的网络应用,而是多种应用可以使用同一个运输层服务。
由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是
指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信
息分别交付上面应用层中的相应进程。
运输层主要使用以下两种协议:
传输控制协议 TCP(Transmisson Control Protocol):提供面向连接的,可靠的数
据传输服务。
用户数据协议 UDP(User Datagram Protocol):提供无连接的,尽最大努力的数
据传输服务(不保证数据传输的可靠性)。
UDP 的主要特点:
1、UDP 是无连接的;
2、UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态
(这里面有许多参数);

3、UDP 是面向报文的;
4、UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很
有用,如 直播,实时视频会议等);

5、UDP 支持一对一、一对多、多对一和多对多的交互通信;
6、UDP 的首部开销小,只有 8 个字节,比 TCP 的 20 个字节的首部要短。

TCP 的主要特点:
1、TCP 是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要
挂机释放连接);
2、每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一);
3、TCP 提供可靠交付的服务。通过 TCP 连接传送的数据,无差错、不丢失、不重复、并
且按序到达;
4、TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP
连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
5、面向字节流。TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序
列。“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不
等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
3.

二 TCP 三次握手和四次挥手


几个概念:
1. FIN: 请求关闭报文;
2. SYN: 请求建立连接;
3. ACK: 确认收到;
4. MSL: 最大报文生存时间。

 

五 TCP 协议如何保证可靠传输?


1、数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文
段并且不给出响应,这时 TCP 发送数据端超时后会重发数据;
2、对失序数据包重排序:既然 TCP 报文段作为 IP 数据报来传输,而 IP 数据报的到达可
能会失序,因此 TCP 报文段的到达也可能会失序。TCP 将对失序数据进行重新排序,然后
才交给应用层;
3、丢弃重复数据:对于重复数据,能够丢弃重复数据;
4、应答机制:当 TCP 收到发自 TCP 连接另一端的数据,它将发送一个确认。这个确认不
是立即发送,通常将推迟几分之一秒;
5、超时重发:当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文
段。如果不能及时收到一个确认,将重发这个报文段;
6、流量控制:TCP 连接的每一方都有固定大小的缓冲空间。TCP 的接收端只允许另一端
发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这
就是流量控制。TCP 使用的流量控制协议是可变大小的滑动窗口协议。

 

5.5 流量控制


TCP 利用滑动窗口实现流量控制。 流量控制是为了控制发送方发送速率,保证接收方
来得及接收。
接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方
的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
5.6 拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的
性能就要变坏。这种情况就叫拥塞。
拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链
路不致于过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥
塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性
能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流
量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制
窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗
口和接收方的接受窗口中较小的一个。
TCP 的拥塞控制采用了四种算法,即:慢开始、拥塞避免、快重传和快恢复。在网络
层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞
的发生。
慢开始:
慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,
那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是
先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。
cwnd 初始值为 1,每经过一个传播轮次,cwnd 加倍。

 

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

 

5.7 TCP 粘包是怎么产生的?


1、什么是拆包粘包,为什么会出现?

1、TCP 是基于字节流的,虽然应用层和 TCP 传输层之间的数据交互是大小不等的数据
块,但是 TCP 把这些数据块仅仅看成一连串无结构的字节流,没有边界;
2、从 TCP 的帧结构也可以看出,在 TCP 的首部没有表示数据长度的字段。

 

2、解决拆包、粘包


分包机制一般有两个通用的解决方法:
1、特殊字符控制;
2、在包头首都添加数据包的长度。
如果使用 netty 的话,就有专门的编码器和解码器解决拆包和粘包问题了。
tips:UDP 没有粘包问题,但是有丢包和乱序。不完整的包是不会有的,收到的都是完全
正确的包。传送的数据单位协议是 UDP 报文或用户数据报,发送的时候既不合并,也不拆
分。

 

1XX 信息
100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。
2XX 成功
1、 200 OK
2、204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。
一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。
3、206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range
指定范围的实体内容。
3XX 重定向
1、301 Moved Permanently :永久性重定向;
2、302 Found :临时性重定向;
3、303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET
方法获取资源。
注:虽然 HTTP 协议规定 301、302 状态下重定向时不允许把 POST 方法改成 GET 方
法,但是大多数浏览器都会在 301、302 和 303 状态下的重定向把 POST 方法改成 GET
方法。
4、304 Not Modified :如果请求报文首部包含一些条件,例如:If-Match,If-
Modified-Since,If-None-Match,If-Range,If-Unmodified-Since,如果不满足条
件,则服务器会返回 304 状态码。
5、307 Temporary Redirect :临时重定向,与 302 的含义类似,但是 307 要求浏览器
不会把重定向请求的 POST 方法改成 GET 方法。
4XX 客户端错误
1、400 Bad Request :请求报文中存在语法错误。
2、401 Unauthorized :该状态码表示发送的请求需要有认证信息(BASIC 认证、
DIGEST 认证)。如果之前已进行过一次请求,则表示用户认证失败。
3、403 Forbidden :请求被拒绝。
4、404 Not Found
5XX 服务器错误
1、500 Internal Server Error :服务器正在执行请求时发生错误;
2、503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处
理请求。
1

 

1、HTTP 响应码 301 和 302 代表的是什么?有什么区别?


301,302 都是 HTTP 状态的编码,都代表着某个 URL 发生了转移。
301 redirect: 301 代表永久性转移(Permanently Moved)。
302 redirect: 302 代表暂时性转移(Temporarily Moved )。

 

6.2、HTTP 方法


客户端发送的 请求报文 第一行为请求行,包含了方法字段。
1、GET:获取资源,当前网络中绝大部分使用的都是 GET;
区别:
2、HEAD:获取报文首部,和 GET 方法类似,但是不返回报文实体主体部分;
3、POST:传输实体主体
4、PUT:上传文件,由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问
题,一般不使用该方法。
5、PATCH:对资源进行部分修改。PUT 也可以用于修改资源,但是只能完全替代原始资
源,PATCH 允许部分修改。
6、OPTIONS:查询指定的 URL 支持的方法;
7、CONNECT:要求在与代理服务器通信时建立隧道。使用 SSL(Secure Sockets
Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容
加密后经网络隧道传输。
8、TRACE:追踪路径。服务器会将通信路径返回给客户端。发送请求时,在 Max-
Forwards 首部字段中填入数值,每经过一个服务器就会减 1,当数值为 0 时就停止传输。
通常不会使用 TRACE,并且它容易受到 XST 攻击(Cross-Site Tracing,跨站追踪)。

 

 

1、GET 和 POST

 


GET 和 POST 本质都是 http 请求,只不过对它们的作用做了界定和适配,并且让他
们适应各自的场景。
本质区别:GET 只是一次 http 请求,POST 先发请求头再发请求体,实际上是两次请
求;
1、从功能上讲,GET 一般用来从服务器上获取资源,POST 一般用来更新服务器上的资
源;
2、从 REST 服务角度上说,GET 是幂等的,即读取同一个资源,总是得到相同的数据,
而 POST 不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET 不会改
变服务器上的资源,而 POST 会对服务器资源进行改变;
3、从请求参数形式上看,GET 请求的数据会附在 URL 之后,即将请求数据放置在 HTTP
报文的 请求头 中,以 ? 分割 URL 和传输数据,参数之间以 & 相连。特别地,如果数据是
英文字母/数字,原样发送;否则,会将其编码为 application/x-www-form-urlencoded
MIME 字符串(如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用 BASE64
加密,得出如:%E4%BD%A0%E5%A5%BD,其中 %XX 中的 XX 为该符号以 16 进制表
示的 ASCII);而 POST 请求会把提交的数据则放置在是 HTTP 请求报文的 请求体 中;
4、就安全性而言,POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明
文出现在 URL 上,而且 POST 请求参数则被包装到请求体中,相对更安全;
5、从请求的大小看,GET 请求的长度受限于浏览器或服务器对 URL 长度的限制,允许发
送的数据量比较小,而 POST 请求则是没有大小限制的。

 

6.4、在浏览器中输入 URL 地址到显示主页的过程

 

总体来说分为以下几个过程:
1、DNS 解析:浏览器查询 DNS,获取域名对应的 IP 地址:具体过程包括浏览器搜索自
身的 DNS 缓存、搜索操作系统的 DNS 缓存、读取本地的 Host 文件和向本地 DNS 服务
器进行查询等。对于向本地 DNS 服务器进行查询,如果要查询的域名包含在本地配置区域
资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名
不由本地 DNS 服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个 IP 地
址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映
射关系,那么将根据其设置发起递归查询或者迭代查询;
2、TCP 连接:浏览器获得域名对应的 IP 地址以后,浏览器向服务器请求建立链接,发起
三次握手;
3、发送 HTTP 请求:TCP 连接建立起来后,浏览器向服务器发送 HTTP 请求;
4、服务器处理请求并返回 HTTP 报文:服务器接收到这个请求,并根据路径参数映射到特
定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;
5、浏览器解析渲染页面:浏览器解析并渲染视图,若遇到对 js 文件、css 文件及图片等静
态资源的引用,则重复上述步骤并向服务器请求这些资源;浏览器根据其请求到的资源、
数据渲染页面,最终向用户呈现一个完整的页面。
6、连接结束。

 

 

 

 

 

1、主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所
询问的本地域名服务器不知道被查询的域名的 IP 地址,那么本地域名服务器就以 DNS 客
户的身份,向根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己
进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的 IP 地址,或者是报
错,表示无法查询到所需的 IP 地址。
2、本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器
收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉
本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后
续的查询。根域名服务器通常是把自己知道的顶级域名服务器的 IP 地址告诉本地域名服务
器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器
的查询请求后,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应当向哪一个权
限域名服务器进行查询。最后,本地域名服务器得到了所要解析的 IP 地址或报错,然后把
这个结果返回给发起查询的主机。

 

6.6、HTTP 长连接和短连接

 

6.7、流水线


默认情况下,HTTP 请求是按顺序发出的,下一个请求只有在当前请求收到响应之后
才会被发出。由于受到网络延迟和带宽的限制,在下一个请求被发送到服务器之前,可能
需要等待很长时间。
流水线是在同一条长连接上连续发出请求,而不用等待响应返回,这样可以减少延
迟。

 

HTTP1.0 和 HTTP1.1 的主要变化:


1、http1.0 经过多年发展,在 1.1 提出了改进。首先是提出了长连接,http 可以在
一次 tcp 连接中不断发送请求。
2、然后 http1.1 支持只发送 header 而不发送 body。原因是先用 header 判断能否
成功,再发数据,节约带宽,事实上,post 请求默认就是这样做的。
3、http1.1 的 host 字段。由于虚拟主机可以支持多个域名,所以一般将域名解析后
得到 host。

 

HTTP1.0 和 HTTP2.0 的主要变化:


http 2.0 变化巨大,主要体现在以下几点:
1、http2.0 支持多路复用,同一个连接可以并发处理多个请求,方法是把 http 数据
包拆为多个帧,并发有序的发送,根据序号在另一端进行重组,而不需要一个个 http
请求顺序到达;
2、http2.0 支持服务端推送,就是服务端在 http 请求到达后,除了返回数据之外,
还推送了额外的内容给客户端;
3、http2.0 压缩了请求头,同时基本单位是二进制帧流,这样的数据占用空间更
少;
4、http2.0 适用于 https 场景,因为其在 http 和 tcp 中间加了一层 ssl 层。

 

 

六 HTTPS


6.1 SSL 与 TLS
SSL:(Secure Socket Layer) 安全套接层,于 1994 年由网景公司设计,并于 1995 年
发布了 3.0 版本。
TLS:(Transport Layer Security)传输层安全性协议,是 IETF 在 SSL3.0 的基础上设计
的协议,以下全部使用 TLS 来表示。

 

 

8、Session 和 Cookie


Cookie 和 Session 都是客户端与服务器之间保持状态的解决方案,具体来说,
Cookie 机制采用的是在客户端保持状态的方案,而 Session 机制采用的是在服务器端保
持状态的方案。
Cookie 实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用
户状态,就使用 response 向客户端浏览器颁发一个 Cookie,而客户端浏览器会把
Cookie 保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该 Cookie 一同提
交给服务器,服务器检查该 Cookie,以此来辨认用户状态。服务器还可以根据需要修改
Cookie 的内容。
同样地,会话状态也可以保存在服务器端。客户端请求服务器,如果服务器记录该用
户状态,就获取 Session 来保存状态,这时,如果服务器已经为此客户端创建过
session,服务器就按照 sessionid 把这个 session 检索出来使用;如果客户端请求不包含
sessionid,则为此客户端创建一个 session 并且生成一个与此 session 相关联的
sessionid,并将这个 sessionid 在本次响应中返回给客户端保存。保存这个 sessionid 的
方式可以采用 cookie 机制 ,这样在交互过程中浏览器可以自动的按照规则把这个标识发
挥给服务器;若浏览器禁用 Cookie 的话,可以通过 URL 重写机制 将 sessionid 传回服务
器。

 

5、HTTP 与 HTTPS 的区别


1、开销:HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费;
2、资源消耗:HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 ssl
加密传输协议,需要消耗更多的 CPU 和内存资源;
3、端口不同:HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者
是 80,后者是 443;
4、安全性:HTTP 的连接很简单,是无状态的;HTTPS 协议是由 TSL+HTTP 协议构建的
可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

 

 

6、HTTPS 的优缺点


1、使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
2、HTTPS 协议是由 SSL + HTTP 协议构建的可进行加密传输、身份认证的网络协议,要
比 HTTP 协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性;
3、HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人
攻击的成本。
1、HTTPS 协议握手阶段比较费时,会使页面的加载时间延长近 50%,增加 10% 到 20%
的耗电;
2、HTTPS 连接缓存不如 HTTP 高效,会增加数据开销和功耗,甚至已有的安全措施也会
因此而受到影响;
3、SSL 证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会
用;
4、SSL 证书通常需要绑定 IP,不能在同一 IP 上绑定多个域名,IPv4 资源不可能支撑这个
消耗;
5、HTTPS 协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面
几乎起不到什么作用。最关键的,SSL 证书的信用链体系并不安全,特别是在某些国家可
以控制 CA 根证书的情况下,中间人攻击一样可行。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值