计算机网络面试题

一、网络概述

1.说下计算机网络体系结构?

计算机网络体系结构,一般有三种:OSI 七层模型、TCP/IP 四层模型、五层结构。

OSI 七层模型内容覆盖了其他两种,我就说一下OSI 七层模型。

OSI 七层模型是国际标准化组织制定的一个用于计算机或通信系统间互联的标准体系。有七层

应用层:通过应用进程之间的交互来完成特定网络应用应用层协议定义的是应用进程间通信和交互的规则。

表示层:数据的表示、安全、压缩。

会话层:建立、维护、管理会话。

运输层:提供源端与目的端之间提供可靠的透明数据传输,如TCP和UDP。

网络层:网络层的引入主要是为了屏蔽不同网络的差异,实现不同网络内主机的通信。

数据链路层:介质访问控制,为物理层提供比特流服务。

物理层:底层数据传输,如网线。

TCP/IP 四层模型:应用层、传输层、网际层和网络接口层。【回答】

计算机网络体系结构,一般有三种:OSI 七层模型、TCP/IP 四层模型、五层结构。

OSI 七层模型

OSI 七层模型是国际标准化组织(International Organization for Standardization)制定的一个用于计算机或通信系统间互联的标准体系

  • 应用层:通过应用进程之间的交互来完成特定网络应用应用层协议定义的是应用进程间通信和交互的规则,常见的协议有:HTTP FTP SMTP SNMP DNS.
  • 表示层:数据的表示、安全、压缩。确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
  • 会话层:建立、维护、管理会话,是用户应用程序和网络之间的接口,如不同软件数据分发给不同软件。
  • 运输层:提供源端与目的端之间提供可靠的透明数据传输,如TCP和UDP,传输层协议为不同主机上运行的进程提供逻辑通信。
  • 网络层:将网络地址翻译成对应的物理地址,实现不同网络之间的路径选择, 协议有 ICMP IGMP IP 等.
  • 数据链路层:介质访问控制,为物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。二进制和电流转化。
  • 物理层:底层数据传输,如网线

说明

  • 在四层,既传输层数据被称作(Segments);
  • 三层网络层数据被称做(Packages);
  • 二层数据链路层时数据被称为(Frames);
  • 一层物理层时数据被称为比特流(Bits)。

总结

  • 网络七层模型是一个标准,而非实现。
  • 网络四层模型是一个实现的应用模型。
  • 网络四层模型由七层模型简化合并而来

2.说一下每一层对应的网络协议有哪些?

应用层:

超文本传输协议:HTTP

文件传输协议:FTP

简单邮件传输协议:SMTP

域名系统:DNS

安全外壳协议:SSH

动态主机配置协议:DHCP

远程登录协议:TELNET

传输层:

传输控制协议:TCP

用户数据报文协议:UDP

网络层:

网际协议:IP

地址转换协议:ARP

反向地址转换协议:RARP

Internet控制报文协议:ICMP

路由信息协议:RIP

分布式链路状态协议:OSPF

边界网关协议:BGP

数据链路层

自动重传请求协议:ARQ

停止等待协议:CSMA/CD

点对点协议:PPP

物理层:

中继器:转发

集线器:放大信号

网线:传输

【回答】

3.数据在各层之间是怎么传输的呢?

对于发送方而言,从上层到下层层层包装,对于接收方而言,从下层到上层,层层解开包装。

  • 发送方的应用进程向接收方的应用进程传送数据
  • AP先将数据交给本主机的应用层,应用层加上本层的控制信息H5就变成了下一层的数据单元
  • 传输层收到这个数据单元后,加上本层的控制信息H4,再交给网络层,成为网络层的数据单元
  • 到了数据链路层,控制信息被分成两部分,分别加到本层数据单元的首部(H2)和尾部(T2)
  • 最后的物理层,进行比特流的传输

二、网络综合

1.从浏览器地址栏输入 url 到显示主页的过程?

  1. DNS 解析:将域名解析成对应的 IP 地址。  DNS 域名系统
  2. TCP连接:客户端(浏览器)与服务器通过三次握手,建立 TCP 连接
  3. 向服务器发送 HTTP 请求
  4. 服务器处理请求,返回HTTP响应
  5. 浏览器解析并渲染页面
  6. 断开连接:TCP 四次挥手,连接结束

2.各个过程都使用了哪些协议?

3.说说 DNS 的解析过程?

假设你要查询 http://www.baidu.com h的 IP 地址

  • 首先会查找浏览器的缓存,看看是否能找到http://www.baidu.com对应的IP地址,找到就直接返回;否则进行下一步。
  • 将请求发往给本地DNS服务器,如果查找到也直接返回,否则继续进行下一步;
  • 本地DNS服务器向根域名服务器发送请求,根域名服务器返回负责com的顶级域名服务器的IP地址的列表。
  • 本地DNS服务器再向其中一个负责com的顶级域名服务器发送一个请求,返回负责http://baidu.com的权限域名服务器的IP地址列表。
  • 本地DNS服务器再向其中一个权限域名服务器发送一个请求,返回http://www.baidu.com所对应的IP地址。

 

4.WebSocket 与 Socket 的区别?

  •  Socket 一个是网编编程的标准接口,而 WebSocket 则是应用层通信协议
  • Socket 其实就是等于 IP 地址 + 端口 + 协议
  • WebSocket 是一个持久化的协议,它是伴随 H5 而出的协议,用来解决 http 不支持持久化连接的问题

具体来说,WebSocket 则是应用层通信协议,Socket 是一套标准,它完成了对 TCP/IP 的高度封装,屏蔽网络细节,以方便开发者更好地进行网络编程。

5.说一下你了解的端口及对应的服务?

端口号的范围是从1~65535,分为3大类:

1) 公认端口(Well Known Ports):从0到1023,系统预留的知名端口号,分配给特定服务的

ftp 20 传输   ftp 21登陆认证;DNS 53;http 80;pop3 110

2) 注册端口(Registered Ports):从1024到49151,它们松散地绑定于一些服务。但是这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。MySQL 端口号是 3306,Redis 端口号是 6379。

3) 动态或私有端口(Dynamic and/or Private Ports):从49152到65535。分配给用户应用程序进程的动态使用的端口号。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。

三 、HTTP

1.说说 HTTP 常用的状态码及其含义?

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含 HTTP 状态码的信息头(server header)用以响应浏览器的请求。

常见HTTP状态有以下五类:
1.信息代码:1xx:信息,代表请求已被接受,需要继续处理,这类响应是临时响应,;

2.成功代码:2xx:成功,代表请求已成功被服务器接收,处理;

3.重定向:3xx:重定向,为了完成请求,必须进一步执行的动作;

4.客户端错误:4xx:客户端错误,请求包含语法错误或者请求无法实现;

5.服务器错误:5xx:服务器错误,服务器执行请求时发生错误;

常用HTTP状态码:

2. 说一下301和302的区别?

  • 301:永久性移动,请求的资源已被永久移动到新位置。服务器返回此响应时,会返回新的资源地址。
  • 302:临时性性移动,服务器从另外的地址响应资源,但是客户端还应该使用这个地址。

3.HTTP 有哪些请求方式?

根据 HTTP 标准,HTTP 请求可以使用多种请求方法。

HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。

HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。

 其中,POST、DELETE、PUT、GET的含义分别对应我们最熟悉的增、删、改、查。

head、options、connect

4.说⼀下 GET 和 POST 的区别?

1.从 HTTP 报文层面来看,GET 请求将信息放在 URL,POST 将请求信息放在请求体中。

  • 这一点使得 GET 请求携带的数据量有限,因为 URL 本身是有长度限制的,而 POST 请求的数据存放在报文体中,因此对大小没有限制。
  • 而且从形式上看,GET 请求把数据放 URL 上不太安全,而 POST 请求把数据放在请求体里想比较而言安全一些。

2.限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。

3.Get执行效率却比Post方法好。Getform提交的默认方法。

4.GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http headerdata一并发送出去,服务器响应200(返回数据);而对于POST浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

5.GET 的长度限制是多少?

HTTP中的GET方法是通过URL传递数据的,但是URL本身其实并没有对数据的长度进行限制,真正限制GET长度的是浏览器例如IE浏览器对URL的最大限制是2000多个字符,大概2kb左右,像Chrome、Firefox等浏览器支持的URL字符数更多,其中FireFox中URL的最大长度限制是65536个字符,Chrome则是8182个字符。这个长度限制也不是针对数据部分,而是针对整个URL。

6.HTTP 请求的过程与原理?

HTTP协议定义了浏览器怎么向服务器请求文档,以及服务器怎么把文档传给浏览器。

  • 每个服务器都有一个进程,它不断监听TCP的端口80,以便发现是否有浏览器向它发出连接建立请求;
  • 监听到连接请求,就会建立TCP连接;
  • 浏览器向服务器发出浏览某个页面的请求,服务器接着就返回所请求的页面作为响应;
  • 最后,释放TCP连接。

7.说一下HTTP的报文结构

HTTP报文有两种,HTTP请求报文和HTTP响应报文

HTTP请求报文

 

 HTTP响应报文

8. URI 和 URL 有什么区别?

URI,统一资源标识符(Uniform Resource Identifier, URI),标识的是Web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都是由一个URI进行标识的。

URL,统一资源定位符(Uniform Resource Location),它是URI的一种子集,主要作用是提供资源的访问路径。【总结】

它们的主要区别在于,URL除了提供了资源的标识,还提供了资源访问的方式。这么比喻,URI 像是身份证,可以唯一标识一个人,而 URL 更像一个住址,可以通过 URL 找到这个人——人类住址协议://地球/中国/北京市/海淀区/xx职业技术学院/14号宿舍楼/525号寝/张三.男。

9.长连接和短连接

长连接与短连接的概念是针对TCP连接的,TCP连接是一个双向通道,可以保持一段时间不关闭。

长连接:客户端和服务器端建立连接之后,后续无论通信多少次,所有的请求和响应数据,都会在这个连接上进行。

短连接:客户端和服务器端每一次通信,都要建立连接,通信完就关闭这个连接。

10.说下 HTTP/1.0,1.1,2.0 的区别?

关键需要记住 HTTP/1.0 默认是短连接,可以强制开启长连接,HTTP/1.1 默认长连接,引进了管道机制,HTTP/2.0 采用长连接+多路复用。【总结】

HTTP/1.0

  • 默认使用短连接,每次请求都需要建立一个 TCP 连接。它可以设置Connection: keep-alive 这个字段,强制开启长连接。

HTTP/1.1

  • 引入了持久连接(长连接),即 TCP 连接默认不关闭,可以被多个请求复用。
  • 分块传输编码,即服务端每产生一块数据,就发送一块,用” 流模式” 取代” 缓存模式”。
  • 管道机制,即在同一个TCP连接里面,客户端可以同时发送多个请求。这样就进一步改进了HTTP协议的效率。是有顺序的

HTTP/2.0

  • 二进制协议,1.1 版本的头信息是文本(ASCII 编码),数据体可以是文本或者二进制;2.0 中,头信息和数据体都是二进制。
  • 完全多路复用,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应。HTTP/2 引入二进制数据帧和流的概念,其中帧对数据进行顺序标识,这样浏览器收到数据之后,就可以按照序列对数据进行合并,而不会出现合并后数据错乱的情况。
  • 报头压缩,HTTP 协议不带有状态,每次请求都必须附上所有信息。Http/2.0 引入了头信息压缩机制,使用 gzip 或 compress 压缩后再发送。
  • 服务端推送,允许服务器未经请求,主动向客户端发送资源。

11.HTTP/3了解吗?

HTTP/3主要有两大变化,传输层基于UDP、使用QUIC保证UDP可靠性【总结】

HTTP/2存在的一些问题,比如重传等等,都是由于TCP本身的特性导致的,所以HTTP/3在QUIC的基础上进行发展而来,QUIC(Quick UDP Connections)直译为快速UDP网络连接,底层使用UDP进行数据传输。

QUIC 有自己的一套机制可以保证传输的可靠性的。当某个流发生丢包时,只会阻塞这个流,其他流不会受到影响。

我们拿一张图看一下HTTP协议的变迁:

HTTP/3主要有这些特点:

  • 使用UDP作为传输层进行通信
  • 在UDP的基础上QUIC协议保证了HTTP/3的安全性,在传输的过程中就完成了TLS加密握手
  • HTTPS 要建⽴⼀个连接,要花费 6 次交互,先是建⽴三次握⼿,然后是 TLS/1.3 的三次握⼿。QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,减少了交互次数。
  • QUIC 有⾃⼰的⼀套机制可以保证传输的可靠性的。当某个流发⽣丢包时,只会阻塞这个流,其他流不会受到影响。

12.HTTP 如何实现长连接?在什么时候会超时?

如何设置长连接?

通过在头部(请求和响应头)设置 Connection 字段指定为keep-alive,HTTP/1.0 协议支持,但是是默认关闭的,从 HTTP/1.1 以后,连接默认都是长连接。

在什么时候会超时呢?
  • HTTP 一般会有 httpd 守护进程,里面可以设置 keep-alive timeout,当 tcp 连接闲置超过这个时间就会关闭,也可以在 HTTP 的 header 里面设置超时时间;                         【总结】

  • TCP 的 keep-alive 包含三个参数,支持在系统内核的 net.ipv4 里面设置;当 TCP 连接之后,闲置了 tcp_keepalive_time,则会发生侦测包,如果没有收到对方的 ACK,那么会每隔 tcp_keepalive_intvl 再发一次,直到发送了 tcp_keepalive_probes,就会丢弃该连接。

复制代码

1. tcp_keepalive_intvl = 15
2. tcp_keepalive_probes = 5
3. tcp_keepalive_time = 1800

什么是 HTTP 的长连接?

  1. HTTP 分为长连接和短连接,本质上说的是 TCP 的长短连接。TCP 连接是一个双向的通道,它是可以保持一段时间不关闭的,因此 TCP 连接才具有真正的长连接和短连接这一说法。
  2. TCP 长连接可以复用一个 TCP 连接,来发起多次的 HTTP 请求,这样就可以减少资源消耗,比如一次请求 HTML,如果是短连接的话,可能还需要请求后续的 JS/CSS。

13.说说HTTP 与 HTTPS 有哪些区别?

  1. HTTP 是超⽂本传输协议,信息是明⽂传输,存在安全⻛险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在TCP 和 HTTP ⽹络层之间加⼊了 SSL/TLS 安全协议,使得报⽂能够加密传输。
  2. HTTP 连接建⽴相对简单, TCP 三次握⼿之后便可进⾏ HTTP 的报⽂传输。⽽ HTTPS 在 TCP 三次握⼿之后,还需进⾏ SSL/TLS 的握⼿过程,才可进⼊加密报⽂传输。
  3. HTTP 的端⼝号是 80,HTTPS 的端⼝号是 443。
  4. HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。

14.为什么要用HTTPS?解决了哪些问题?

因为HTTP 是明⽂传输,存在安全上的风险:

窃听⻛险,⽐如通信链路上可以获取通信内容,用户账号被盗。

篡改⻛险,⽐如强制植⼊垃圾⼴告,视觉污染。

冒充⻛险,⽐如冒充淘宝⽹站,用户金钱损失。

所以引入了HTTPS,HTTPS 在 HTTP 与 TCP 层之间加⼊了 SSL/TLS 协议,可以很好的解决了这些风险:

  • 信息加密:交互信息⽆法被窃取。
  • 校验机制:⽆法篡改通信内容,篡改了就不能正常显示。
  • 身份证书:能证明淘宝是真淘宝。

所以SSL/TLS 协议是能保证通信是安全的。

15.HTTPS工作流程是怎样的?

  1. 客户端发起 HTTPS 请求,连接到服务端的 443 端口。
  2. 服务端有一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。
  3. 服务端将自己的数字证书发送给客户端(公钥在证书里面,私钥由服务器持有)。
  4. 客户端收到数字证书之后,会验证证书的合法性。如果证书验证通过,就会生成一个随机的对称密钥,用证书的公钥加密。
  5. 客户端将公钥加密后的密钥发送到服务器。
  6. 服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的密钥,然后用客户端密钥对返回数据进行对称加密,酱紫传输的数据都是密文啦。
  7. 服务器将加密后的密文返回到客户端。
  8. 客户端收到后,用自己的密钥对其进行对称解密,得到服务器返回的数据

16.客户端怎么去校验证书的合法性?

首先,服务端的证书从哪来的呢?

为了让服务端的公钥被⼤家信任,服务端的证书都是由 CA (Certificate Authority,证书认证机构)签名的,CA就是⽹络世界⾥的公安局、公证中⼼,具有极⾼的可信度,所以由它来给各个公钥签名,信任的⼀⽅签发的证书,那必然证书也是被信任的。

CA 签发证书的过程,如上图左边部分:

  • ⾸先 CA 会把持有者的公钥、⽤途、颁发者、有效时间等信息打成⼀个包,然后对这些信息进⾏ Hash 计算,得到⼀个 Hash 值;
  • 然后 CA 会使⽤⾃⼰的私钥将该 Hash 值加密,⽣成 Certificate Signature,也就是 CA 对证书做了签名;
  • 最后将 Certificate Signature 添加在⽂件证书上,形成数字证书;

客户端校验服务端的数字证书的过程,如上图右边部分:

  • ⾸先客户端会使⽤同样的 Hash 算法获取该证书的 Hash 值 H1;
  • 通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后可以使⽤ CA 的公钥解密 Certificate
  • Signature 内容,得到⼀个 Hash 值 H2 ;
  • 最后⽐较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。

假如在HTTPS的通信过程中,中间人篡改了证书原文,由于他没有CA机构的私钥,所以CA公钥解密的内容就不一致。

17.如何理解 HTTP 协议是无状态的?

这个无状态的的状态值的是什么?是客户端的状态,就是HTTP协议中服务端不会保存客户端的任何信息。

比如当浏览器第一次发送请求给服务器时,服务器响应了;如果同个浏览器发起第二次请求给服务器时,它还是会响应,但是呢,服务器不知道你就是刚才的那个浏览器。

那有什么办法记录状态呢?

主要有两个办法,Session和Cookie。

18.Session 和 Cookie是什么

  • Cookie 是保存在客户端的一小块文本串的数据。客户端向服务器发起请求时,服务端会向客户端发送一个 Cookie,客户端就把 Cookie 保存起来。在客户端下次向同一服务器再发起请求时,Cookie 被携带发送到服务器。服务端可以根据这个Cookie判断用户的身份和状态。
  • Session 指的就是服务器和客户端一次会话的过程。它是另一种记录客户状态的机制。不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session。客户端浏览器再次访问时只需要从该session中查找用户的状态。                                                                   [总结]

19.说说Session 和 Cookie 有什么联系和区别?

Session 和 Cookie 到底有什么不同呢?

  • 存储位置不一样,Cookie 保存在客户端,Session 保存在服务器端。
  • 存储数据类型不一样,Cookie 只能保存ASCII,Session可以存任意数据类型,一般情况下我们可以在 Session 中保持一些常用变量信息,比如说 UserId 等。
  • 有效期不同,Cookie 可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般有效时间较短,客户端关闭或者 Session 超时都会失效。
  • 隐私策略不同,Cookie 存储在客户端,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在 Cookie 中导致信息被窃取;Session 存储在服务端,安全性相对 Cookie 要好一些。
  • 存储大小不同, 单个Cookie保存的数据不能超过4K,Session可存储数据远高于 Cookie。

Session 和 Cookie有什么关联呢?

  • 用户第一次请求服务器时,服务器根据用户提交的信息,创建对应的 Session,请求返回时将此 Session 的唯一标识信息 SessionID 返回给浏览器,浏览器接收到服务器返回的 SessionID 信息后,会将此信息存入 Cookie 中,同时 Cookie 记录此 SessionID 是属于哪个域名。
  • 当用户第二次访问服务器时,请求会自动判断此域名下是否存在 Cookie 信息,如果存在,则自动将 Cookie 信息也发送给服务端,服务端会从 Cookie 中获取 SessionID,再根据 SessionID 查找对应的 Session 信息,如果没有找到,说明用户没有登录或者登录失效,如果找到 Session 证明用户已经登录可执行后面操作。

20.分布式环境下Session怎么处理呢?

使用Redis等分布式缓存来存储Session,在多台服务器之间共享    【答】

分布式环境下,客户端请求经过负载均衡,可能会分配到不同的服务器上,假如一个用户的请求两次没有落到同一台服务器上,那么在新的服务器上就没有记录用户状态的Session。

这时候怎么办呢?可以使用Redis等分布式缓存来存储Session,在多台服务器之间共享

21.客户端无法使用Cookie怎么办?

存储:SessionID的存储,使用客户端的本地存储

传输:拼接到URL里:直接把SessionID作为URL的请求参数;放到请求头里:把SessionID放到请求的Header里。【回答】

有可能客户端无法使用Cookie,比如浏览器禁用Cookie,或者客户端是安卓、IOS等等。

这时候怎么办?SessionID怎么存?怎么传给服务端呢?

首先是SessionID的存储,可以使用客户端的本地存储,比如浏览器的sessionStorage。

接下来怎么传呢?

  • 拼接到URL里:直接把SessionID作为URL的请求参数
  • 放到请求头里:把SessionID放到请求的Header里,比较常用。

四、TCP

1.详细说一下 TCP 的三次握手机制

首先,客户端和服务端都处于close状态,服务端监听客户端的请求,进入listen状态;

当客户端发送连接请求,也就是第一次握手,客户端就进入 SYN_SENT 状态;

服务端确认连接,第二次握手 , 发送完毕后,服务器端就进入 SYN_RCV 状态;

客户端收到服务端的确认之后,再次向服务端确认第三次握手,发送完毕后,客户端进入 established【建立连接】 状态,当服务器端接收到这个包时,也进入 established【建立连接】 状态,当服务器端接收到这个包时,也进入 established 状态。【回答】

TCP提供面向连接的服务,在传送数据前必须建立连接,TCP连接是通过三次握手建立的。

SYN(synchronization)同步,表示客户端想要和服务端进行数据同步

三次握手的过程:

  • 最开始,客户端和服务端都处于CLOSE状态,服务端监听客户端的请求,进入LISTEN状态
  • 客户端端发送连接请求,第一次握手 (SYN=1, seq=x),发送完毕后,客户端就进入 SYN_SENT 状态
  • 服务端确认连接,第二次握手 (SYN=1, ACK=1, seq=y, ACKnum=x+1), 发送完毕后,服务器端就进入 SYN_RCV 状态。
  • 客户端收到服务端的确认之后,再次向服务端确认,这就是**第三次握手 **(ACK=1,ACKnum=y+1),发送完毕后,客户端进入 ESTABLISHED 状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态。

 2.TCP 握手为什么是三次,为什么不能是两次?不能是四次?

为什么不能是两次?

就是考虑到,第二次握手的丢包问题。如果没有第三次握手告诉服务器端,服务器端是不知道,客户端有没有接收到服务器端返回的信息的。服务端就认为这个连接是可用的,端口就一直开着,等到客户端因超时,重新发出连接请求时,服务器就会重新开启一个端口连接。这样一来,就会有很多无效的连接端口白白地开着,导致资源的浪费。                           【回答】

为什么不是四次?

简单说,就是三次挥手已经足够创建可靠的连接,没有必要再多一次握手导致花费更多的时间建立连接。                                                                                               【回答】

3.三次握手中每一次没收到报文会发生什么情况?

  • 第一次握手服务端未收到SYN报文,服务端不会进行任何的动作,而客户端由于一段时间内没有收到服务端发来的确认报文,等待一段时间后会重新发送SYN报文,如果仍然没有回应,会重复这个过程,直到发送次数超过最大重传次数限制,就会返回连接建立失败。
  • 第二次握手客户端未收到服务端响应的ACK报文客户端会继续重传,直到次数限制;而服务端此时会阻塞在accept()处,等待客户端发送ACK报文。
  • 第三次握手服务端为收到客户端发送过来的ACK报文服务端同样会采用类似客户端的超时重传机制,如果重试次数超过限制,则accept()调用返回-1,服务端建立连接失败;而此时客户端认为自己已经建立连接成功,因此开始向服务端发送数据,但是服务端的accept()系统调用已经返回,此时不在监听状态,因此服务端接收到客户端发送来的数据时会发送RST报文给客户端,消除客户端单方面建立连接的状态。                                                              【回答】

4.第二次握手传回了 ACK,为什么还要传回 SYN?

ACK是为了告诉客户端传来的数据已经接收无误。

而传回SYN是为了告诉客户端,服务端响应的确实是客户端发送的报文。                  【回答】

5.第3次握手可以携带数据吗?

第3次握手是可以携带数据的,客户端来说,它已经建立连接成功,并且确认服务端的接收和发送能力是正常的。                                                                                                            【回答】

此时客户端已经处于ESTABLISHED状态。对于客户端来说,它已经建立连接成功,并且确认服务端的接收和发送能力是正常的。

第一次握手不能携带数据是出于安全的考虑,因为如果允许携带数据,攻击者每次在SYN报文中携带大量数据,就会导致服务端消耗更多的时间和空间去处理这些报文,会造成CPU和内存的消耗。

6.说说半连接队列和 SYN Flood 攻击的关系?

半(全)连接队列:半连接队列存放的是三次握手未完成的连接,全连接队列存放的是完成三次握手的连接。

SYN Flood:典型的DDos攻击,它在短时间内,伪造不存在的 IP 地址, 向服务器发送大量SYN 报文。当服务器回复 SYN+ACK 报文后,不会收到 ACK 回应报文,那么服务端队列里的连接就不会出对队,久⽽久之就会占满服务端接收队列(半连接队列),使得服务器不能为正常⽤户服务。

应对方案:SYN 防火墙:服务器防火墙会对收到的每一个 SYN 报文进行代理和回应,并保持半连接。等发送方将 ACK 包返回后,再重新构造 SYN 包发到服务器,建立真正的 TCP 连接。

syn cookie::在收到SYN后,服务器根据一定的方法,回复 SYN+ACK 后,服务器并不立即分配资源进行处理,等收到发送方的 ACK 包后,如果正确则建立连接,否则丢弃该包。     【回答】

                                                                                                                                           

什么是半连接队列?

顾名思义,半连接队列存放的是三次握手未完成的连接,全连接队列存放的是完成三次握手的连接。

TCP 进入三次握手前,服务端会从 CLOSED 状态变为 LISTEN 状态, 同时在内部创建了两个队列:半连接队列(SYN 队列)和全连接队列(ACCEPT 队列)。

  • TCP 三次握手时,客户端发送 SYN 到服务端,服务端收到之后,便回复 ACK 和 SYN,状态由 LISTEN 变为 SYN_RCVD,此时这个连接就被推入了 SYN 队列,即半连接队列。
  • 当客户端回复 ACK, 服务端接收后,三次握手就完成了。这时连接会等待被具体的应用取走,在被取走之前,它被推入 ACCEPT 队列,即全连接队列。
什么是SYN Flood ?

SYN Flood 是一种典型的 DDos 攻击,它在短时间内,伪造不存在的 IP 地址, 向服务器发送大量SYN 报文。当服务器回复 SYN+ACK 报文后,不会收到 ACK 回应报文,那么SYN队列里的连接就不会出对队,久⽽久之就会占满服务端的 SYN 接收队列(半连接队列),使得服务器不能为正常⽤户服务。

那有什么应对方案呢?

主要有 syn cookie 和 SYN Proxy 防火墙等。

  • syn cookie:在收到 SYN 包后,服务器根据一定的方法,以数据包的源地址、端口等信息为参数计算出一个 cookie 值作为自己的 SYNACK 包的序列号,回复 SYN+ACK 后,服务器并不立即分配资源进行处理,等收到发送方的 ACK 包后,重新根据数据包的源地址、端口计算该包中的确认序列号是否正确,如果正确则建立连接,否则丢弃该包。
  • SYN Proxy 防火墙:服务器防火墙会对收到的每一个 SYN 报文进行代理和回应,并保持半连接。等发送方将 ACK 包返回后,再重新构造 SYN 包发到服务器,建立真正的 TCP 连接。

7.说说 TCP 四次挥手的过程?

数据传输结束之后,第一次挥手,发送完毕后,客户端进入 FIN_WAIT_1 状态。

服务端发送确认报文,第二次挥手,发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态。

服务端发送释放连接报文,第三次挥手 ,发送完毕后,服务器端进入 LAST_ACK状态,等待来自客户端的最后一个 ACK。

客户端发送确认报文,第四次挥手,客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT 状态,等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。                   【回答】

TCP 四次挥手过程:

  • 数据传输结束之后,通信双方都可以主动发起断开连接请求,这里假定客户端发起
  • 客户端发送释放连接报文,第一次挥手 (FIN=1,seq=u),发送完毕后,客户端进入 FIN_WAIT_1 状态。
  • 服务端发送确认报文,第二次挥手 (ACK=1,ack=u+1,seq =v),发送完毕后,服务器端进入 CLOSE_WAIT 状态,客户端接收到这个确认包之后,进入 FIN_WAIT_2 状态。
  • 服务端发送释放连接报文,第三次挥手 (FIN=1,ACK1,seq=w,ack=u+1),发送完毕后,服务器端进入 LAST_ACK状态,等待来自客户端的最后一个 ACK。
  • 客户端发送确认报文,第四次挥手 (ACK=1,seq=u+1,ack=w+1),客户端接收到来自服务器端的关闭请求,发送一个确认包,并进入 TIME_WAIT 状态,等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。服务器端接收到这个确认包之后,关闭连接,进入 CLOSED 状态。

8.TCP 挥手为什么需要四次呢?

因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端 收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户 端发FIN报文(所以不能一次性将确认报文和 FIN报文发给客户端,就是这里多出来了一次)。   【回答】

9.为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?

这里同样是要考虑丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认 ack报文就会重发第三次挥手的报文,这样报文一去一回 长时间就是2MSL,所以需要等这么长 时间来确认服务端确实已经收到了。           【回答】

 10.保活计时器有什么用?

除时间等待计时器外,TCP 还有一个保活计时器(keepalive timer)。

设想这样的场景:客户已主动与服务器建立了 TCP 连接。但后来客户端的主机突然发生故障。显然,服务器以后就不能再收到客户端发来的数据。因此,应当有措施使服务器不要再白白等待下去。这就需要使用保活计时器了。        【回答】

服务器每收到一次客户端的数据,就重新设置保活计时器,时间的设置通常是两个小时。若两个小时都没有收到客户端的数据,服务端就发送一个探测报文段,以后则每隔 75 秒钟发送一次。若连续发送 10 个探测报文段后仍然无客户端的响应,服务端就认为客户端出了故障,接着就关闭这个连接。

11.TIME_WAIT 状态过多会导致什么问题?怎么解决?

防⽌旧连接的数据包,保证连接正确关闭         【回答】

CLOSE-WAIT状态有什么意义?

服务端收到客户端关闭连接的请求并确认之后,就会进入CLOSE-WAIT状态。此时服务端可能还有一些数据没有传输完成,因此不能立即关闭连接,而CLOSE-WAIT状态就是为了保证服务端在关闭连接之前将待发送的数据处理完。

TIME-WAIT有什么意义?

TIME-WAIT状态发生在第四次挥手,当客户端向服务端发送ACK确认报文后进入TIME-WAIT状态。它存在的意义主要是两个:

  • 防⽌旧连接的数据包如果客户端收到服务端的FIN报文之后立即关闭连接,但是此时服务端对应的端口并没有关闭,如果客户端在相同端口建立新的连接,可能会导致新连接收到旧连接残留的数据包,导致不可预料的异常发生。
  • 保证连接正确关闭假设客户端最后一次发送的ACK包在传输的时候丢失了,由于TCP协议的超时重传机制,服务端将重发FIN报文,如果客户端没有维持TIME-WAIT状态而直接关闭的话,当收到服务端重新发送的FIN包时,客户端就会使用RST包来响应服务端,导致服务端以为有错误发生,然而实际关闭连接过程是正常的。

 12.说说 TCP 报文首部的格式?

计算机网络第37讲-TCP报文段的首部格式(计算机网络简明教程及仿真实验)_哔哩哔哩_bilibili

16 位端口号(源端口+目的端口)、32序号和确认号、数据偏移、6个标志位、窗口、检验和、紧急指针、扩展首部    【回答】

  • 16 位端口号:源端口号,主机该报文段是来自哪里;目标端口号,要传给哪个上层协议或应用程序
  • 32 位序号:一次 TCP 通信(从 TCP 连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。

  • 32 位确认号:用作对另一方发送的 tcp 报文段的响应。其值是收到的 TCP 报文段的序号值加 1。

  • 4 位首部长度(数据偏移):表示 tcp 头部有多少个 32bit 字(4 字节)。因为 4 位最大能标识 15,所以 TCP 头部最长是 60 字节。

  • 6 位标志位:URG(紧急指针是否有效),ACk(表示确认号是否有效),PST(缓冲区尚未填满),RST(表示要求对方重新建立连接),SYN(建立连接消息标志接),FIN(表示告知对方本端要关闭连接了)

  • 16 位窗口大小:是 TCP 流量控制的一个手段。这里说的窗口,指的是接收通告窗口。它告诉对方本端的 TCP 接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。

  • 16 位校验和:由发送端填充,接收端对 TCP 报文段执行 CRC 算法以检验 TCP 报文段在传输过程中是否损坏。注意,这个校验不仅包括 TCP 头部,也包括数据部分。这也是 TCP 可靠传输的一个重要保障。

  • 16 位紧急指针:一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP 的紧急指针是发送端向接收端发送紧急数据的方法。
  • 保留字段  :

举例1:序号、确认号、ACK

ACK=1,确认号有效

上面是,A -> B 的报文,表示TCP数据载荷的第一个字节报文序号201数据载荷长度100字节ACK为1,表明确认号有效确认号800,表明收到了B的报文序号799为止的数据,期望收到报文序号为800开始的数据。

下面是,回复报文,B->A

举例2:数据偏移

 举例3:保留字段

 举例4:SYN

SYN=1 表示这是TCP连接请求报文段或者TCP连接请求确认报文段。

 TCP连接请求报文段(不能携带数据),TCP连接请求确认报文段(不能携带数据),普通的TCP确认报文段(可以携带数据也可以不携带数据)。

举例5:FIN

 中间还可以进行多次数据传输

举例6:RST

举例7:PST 

 举例8:URG和紧急指针

 举例9:选项(长度可变)——扩展TCP功能

 举例10:填充

13.TCP 是如何保证可靠性的?

TCP主要提供了连接管理、检验和、序列号/确认应答、超时重传、最大消息长度、拥塞控制、流量控制等方法实现了可靠性传输。  【回答】

  1. 连接管理TCP使用三次握手和四次挥手保证可靠地建立连接和释放连接,这里就不用多说了。
  2. 校验和TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果接收端的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  3. 序列号/确认应答:TCP 给发送的每一个包进行编号,接收方会对收到的包进行应答,发送方就会知道接收方是否收到对应的包,如果发现没有收到,就会重发,这样就能保证数据的完整性。
  4. 超时重传:超时重传是指发送出去的数据包到接收到确认包之间的时间,如果超过了这个时间会被认为是丢包了,需要重传。
  5. 最大消息长度:在建立TCP连接的时候,双方约定一个最大的长度(MSS)作为发送的单位,重传的时候也是以这个单位来进行重传。理想的情况下是该长度的数据刚好不被网络层分块。
  6. 拥塞控制:如果网络非常拥堵,此时再发送数据就会加重网络负担,那么发送的数据段很可能超过了最大生存时间也没有到达接收方,就会产生丢包问题。为此TCP引入慢启动机制,先发出少量数据,就像探路一样,先摸清当前的网络拥堵状态后,再决定按照多大的速度传送数据。
  7. 流量控制:TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)

14.说说 TCP 的流量控制?

双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来,这时候接收方只能把处理不过来的数据存在缓存区里(失序的数据包也会被存放在缓存区里)。

如果缓存区满了发送方还在疯狂着发送数据,接收方只能把收到的数据包丢掉,大量的丢包会极大着浪费网络资源,因此,我们需要控制发送方的发送速率,让接收方与发送方处于一种动态平衡才好。对发送方发送速率的控制,我们称之为流量控制。【回答】

15.详细说说 TCP 的滑动窗口?

TCP每发送一个数据,都需要进行一次应答。当收到了上一个应答,在发下一个数据,但这种方式效率比较低。数据包往返时间越长,通信的效率就越低。 为了解决这个问题,TCP引入了滑动窗口概念 

窗口:通俗点讲,就是接受方每次收到数据包,在发送确认报文的时候,同时告诉发送方,自己的缓存区还有多少空余空间,缓冲区的空余空间,我们就称之为接受窗口大小。这就是 win 【回答】

TCP 滑动窗口分为两种: 发送窗口和接收窗口。

发送端的滑动窗口包含四大部分,如下:

  • 已发送且已收到 ACK 确认
  • 已发送但未收到 ACK 确认
  • 未发送但可以发送
  • 未发送也不可以发送

深蓝色框里就是发送窗口。

  • SND.WND: 表示发送窗口的大小, 上图虚线框的格子数是 10个,即发送窗口大小是 10。
  • SND.NXT:下一个发送的位置,它指向未发送但可以发送的第一个字节的序列号。
  • SND.UNA: 一个绝对指针,它指向的是已发送但未确认的第一个字节的序列号

接收方的滑动窗口包含三大部分,如下:

  • 已成功接收并确认
  • 未收到数据但可以接收
  • 未收到数据并不可以接收的数据

  • 蓝色框内,就是接收窗口。
  • REV.WND: 表示接收窗口的大小, 上图虚线框的格子就是 9 个。
  • REV.NXT: 下一个接收的位置,它指向未收到但可以接收的第一个字节的序列号。

16.Nagle 算法

1、为什么要引入Nagle算法

Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块,

小数据块,指报文小于MSS的分组,TCP报文数据载荷的最大长度,

如果有大量的小数据块,会造成网络拥塞,浪费网络资源 。【回答】

2、Nagle算法的原理

该算法要求在TCP连接中,如果还有未被确认的分组,在收到ACK确认包之前禁止发送其他小的分组。【回答】

该算法的伪码如下:

 
if there is new data to send
  if the window size >= MSS and available data is >= MSS
    send complete MSS segment now
  else
    if there is unconfirmed data still in the pipe
      enqueue data in the buffer until an acknowledge is received
    else
      send data immediately
    end if
  end if
end if

17.说说TCP 的拥塞控制和拥塞控制算法?

拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况。

1、拥塞窗口

拥塞窗口 cwnd(congestion window)是发送方维护的一个的状态变量,它会根据网络的拥塞程度动态变化的。拥塞控制的本质就是使用算法控制拥塞窗口,从而避免过多的数据注入到网络。

但是其实真正决定传输速率的是发送方的滑动窗口大小,发送窗口 = min(拥塞窗口,接收窗口)

当发生了重传,就会认为网络出现了拥塞,拥塞窗口减小;否则拥塞窗口增大。

2、拥塞控制算法

拥塞控制算法:慢启动、拥塞避免、快速重传、快速恢复 

整体过程大约如下:

1、在 TCP 连接建立完毕后,会先使用慢启动算法,指数级逐渐增大拥塞窗口(+1 +2 +4 +8…)。
2、当拥塞窗口达到慢启动门限 ssthresh(slow start threshold)时,会使用拥塞避免算法,线性逐渐增大拥塞窗口。(+1 +1 +1…)
3、当发生超时重传或快速重传时,会使用拥塞发生算法:

  • 发生超时重传,将 ssthresh 设为 cwnd/2,将 cwnd 设为初始值,然后会再次使用慢启动算法。如超时重传时 cwnd=24,则此时慢启动门限 ssthresh为12。
  • 发生快速重传,使用快速恢复算法,然后进入拥塞避免阶段。 【回答】

参考:TCP的拥塞控制_贪玩的木木的博客-CSDN博客_tcp的拥塞控制

18.说说 TCP 的重传机制?

重传包括超时重传、快速重传两种。【回答】

1.超时重传

1.1 什么是超时重传
在发送数据时,发送方会设置一个定时器,当超过指定的时间后,没有收到对方的ACK确认应答报文,就会重发该数据,这就是超时重传。    【回答】
两种情况下会发生超时重传:

  • 数据包丢失
  • 确认应答丢失

1.2 超时时间应该设置为多少

  • RTO(Retransmission Timeout 超时重传时间)
  • RTT: 往返时延,一个数据报从发送到接收到响应所需要的时间
  • 超时重传时间RTO的初始值应该略大于报文往返时延RTT的值

2.快速重传---后面无需慢启动,直接快速恢复算法,然后进入拥塞避免。

2.1什么是快速重传

超时重传最大的问题就是太慢了,需要一直等到超时了才重传,「快速重传」可以解决超时重发的时间等待问题。【回答】

概述:

2.2 快速重传机制是如何工作的?
快重传要求,接收者如果接收到一个乱序的分组的话,就返回对前一个正确分组的确认应答,
当发送方连续收到三个冗余ACK,就会马上快速重传丢失数据,不必等到超时时间再重传。

 3.超时重传和快速重传的对比

超时重传缺点是太慢了,RTO的设置不好把握
快速重传解决了超时重传的慢速缺点,但是多发了好几个ACK会导致网络更加拥塞

19.说说TCP 的粘包和拆包?

1、粘包和拆包概念

2、为什么会出现粘包/拆包?
1.应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。

2.应用程序写入的数据小于套接字缓冲区大小,网卡将应用多次写入数据发送到网络,这将会发生粘包。

3.进行MSS(最大报文长度)大小TCP分段,当报文长度-TCP头部长度>MSSd的时候将会发生拆包。

4.接收方法不及时读取套接字缓冲区数据,也会发生粘包

3、解决粘包和拆包问题

 

五、UDP

1.说说 TCP 和 UDP 的区别?

最根本区别:在是否面向连接上,TCP 是面向连接,而 UDP 是无连接;传输可靠性:......; 传输形式:......;传输效率:......;所需资源:......;  应用场景:......;首部字节:......【回答】

2.TCP和UDP的应用场景?

  • TCP应用场景: 效率要求相对低,但对准确性要求相对高的场景。因为传输中需要对数据确认、重发、排序等操作,相比之下效率没有UDP高。例如:文件传输(准确高要求高、但是速度可以相对慢)、收发邮件、远程登录。
  • UDP应用场景: 效率要求相对高,对准确性要求相对低的场景。例如:QQ聊天、在线视频、网络语音电话(即时通讯,速度要求高,但是出现偶尔断续不是太大问题,并且此处完全不可以使用重发机制)、广播通信(广播、多播)

3.为什么QQ采用UDP协议?

  • 首先,QQ并不是完全基于UDP实现。比如在使用QQ进行文件传输等活动的时候,就会使用TCP作为可靠传输的保证。
  • 使用UDP进行交互通信的好处在于,延迟较短,对数据丢失的处理比较简单。同时,TCP是一个全双工协议,需要建立连接,所以网络开销也会相对大。
  • 如果使用QQ语音和QQ视频的话,UDP的优势就更为突出了,首先延迟较小。最重要的一点是不可靠传输,这意味着如果数据丢失的话,不会有重传。因为用户一般来说可以接受图像稍微模糊一点,声音稍微不清晰一点,但是如果在几秒钟以后再出现之前丢失的画面和声音,这恐怕是很难接受的。
  • 由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。【回答】

简单总结一下:UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,对服务器的压力比较小。但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。

4.UDP协议为什么不可靠?

UDP在传输数据之前不需要先建立连接,远地主机的运输层在接收到UDP报文后,不需要确认,提供不可靠交付。【回答】

总结就以下四点:

  • 不保证消息交付:不确认,不重传,无超时
  • 不保证交付顺序:不设置包序号,不重排,不会发生队首阻塞
  • 不跟踪连接状态:不必建立连接或重启状态机
  • 不进行拥塞控制:不内置客户端或网络反馈机制

5.DNS为什么要用UDP?

更准确地说,DNS既使用TCP又使用UDP。主域名服务器向辅助域名服务器传送变化的那部分数据)时会使用TCP,当客户端想DNS服务器查询域名(域名解析)返回数据的时候【回答】

当进行区域传送(主域名服务器向辅助域名服务器传送变化的那部分数据)时会使用TCP,因为数据同步传送的数据量比一个请求和应答的数据量要多,而TCP允许的报文长度更长,因此为了保证数据的正确性,会使用基于可靠连接的TCP。

当客户端想DNS服务器查询域名(域名解析)的时候,一般返回的内容不会超过UDP报文的最大长度,即512字节,用UDP传输时,不需要创建连接,从而大大提高了响应速度,但这要求域名解析服务器和域名服务器都必须自己处理超时和重传从而保证可靠性。

六、IP

1.IP 协议的定义和作用?

IP协议:又被称为互联网协议,是支持网间互联的数据包协议,工作在网际层,主要目的就是为了提高网络的可扩展性。

IP协议作用:寻址和路由,分段和重组  【回答】

IP协议是什么?

IP协议(Internet Protocol)又被称为互联网协议,是支持网间互联的数据包协议,工作在网际层,主要目的就是为了提高网络的可扩展性。

通过网际协议IP,可以把参与互联的,性能各异的网络看作一个统一的网络

和传输层TCP相比,IP协议是一种无连接/不可靠、尽力而为的数据包传输服务,和TCP协议一起构成了TCP/IP协议的核心。

IP协议有哪些作用?

IP协议主要有以下几个作用:

  • 寻址和路由:在IP数据报中携带源IP地址和目的IP地址来表示该数据包的源主机和目标主机。IP数据报在传输过程中,每个中间节点(IP网关、路由器)只根据网络地址来进行转发,如果中间节点是路由器,则路由器会根据路由表选择合适的路径。IP协议根据路由选择协议提供的路由信息对IP数据报进行转发,直至目标主机。
  • 分段和重组:IP数据报在传输过程中可能会经过不同的网络,在不同的网络中数据报的最大长度限制是不同的,IP协议通过给每个IP数据报分配一个标识符以及分段与组装的相关信息,使得数据报在不同的网络中能够被传输,被分段后的IP数据报可以独立地在网络中进行转发,在达到目标主机后由目标主机完成重组工作,恢复出原来的IP数据报。

2.传输层协议和网络层协议有什么区别?

网络层协议负责提供主机间的逻辑通信;传输层协议负责提供进程间的逻辑通信。【回答】

3.IP 地址有哪些分类?

一个IP地址在这个互联网范围内是惟一的,一般可以这么认为,IP 地址 = {<网络号>,<主机号>}。

  1. 网络号:它标志主机所连接的网络地址表示属于互联网的哪一个网络。
  2. 主机号:它标志主机地址表示其属于该网络中的哪一台主机。

IP 地址分为 A,B,C,D,E 五大类:

  • A 类地址 (1~126):以 0 开头,网络号占前 8 位,主机号占后面 24 位。
  • B 类地址 (128~191):以 10 开头,网络号占前 16 位,主机号占后面 16 位。
  • C 类地址 (192~223):以 110 开头,网络号占前 24 位,主机号占后面 8 位。
  • D 类地址 (224~239):以 1110 开头,保留为多播地址。
  • E 类地址 (240~255):以 1111开头,保留位为将来使用  【回答】

4.什么是域名和IP地址?

域名是由一串用点分隔的名字组成的,Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。

IP地址,在互联网范围内是惟一的,IP 地址 = {<网络号>,<主机号>},是一个1个32位的二进制数,通常用十进制表示。

【回答】

5.域名和 IP 的关系?

ip地址是数字型的,为了方便记忆,才有了域名,通过域名地址就能找到ip地址。

ip地址和域名是一对多的关系,一个ip地址可以有多个域名,但是相反,一个域名只能有一个ip地址。【回答】

一个域名可以对应多个IP,但这种情况DNS做负载均衡的,在用户访问过程中,一个域名只能对应一个IP。而一个IP却可以对应多个域名,是一对多的关系。

6.子网掩码

他是告述计算机那些是网络号,哪些是主机号。如

7.IPV4 地址不够如何解决?

动态主机配置协议(DHCP)、无类别域间路由(CIDR)、网络地址转换协议(NAT)和IPv6

【回答】

我们知道,IP地址有32位,可以标记2的32次方个地址,听起来很多,但是全球的网络设备数量已经远远超过这个数字,所以IPV4地址已经不够用了,那怎么解决呢?

  • DHCP:动态主机配置协议,动态分配IP地址,只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网时,得到的IP地址不一定是相同的,该协议使得空闲的IP地址可以得到充分利用。
  • CIDR:无类别域间路由。CIDR消除了传统的A类、B类、C类地址以及划分子网的概念,因而更加有效地分配IPv4的地址空间,但无法从根本上解决地址耗尽的问题。

参考:无类别域间路由(CIDR)网络地址计算器

  • NAT:网络地址转换协议,我们知道属于不同局域网的主机可以使用相同的IP地址,从而一定程度上缓解了IP资源枯竭的问题,然而主机在局域网中使用的IP地址是不能在公网中使用的,当局域网主机想要与公网主机进行通信时,NAT方法可以将该主机IP地址转换为全球IP地址。该协议能够有效解决IP地址不足的问题。
  • IPv6:作为接替IPv4的下一代互联网协议,其可以实现2的128次方个地址,而这个数量级,即使给地球上每一粒沙子都分配一个IP地址也够用,该协议能够从根本上解决IPv4地址不够用的问题。IPv6的地址长度为128位,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。IPv6有3种表示方法。

8.说下 ARP 协议的工作过程?

ARP 协议,Address Resolution Protocol,地址解析协议,它是用于实现 IP 地址到 MAC 地址的映射。【回答】

  1. 首先,每台主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址的对应关系。
  2. 当源主机需要将一个数据包要发送到目的主机时,会首先检查自己的 ARP 列表,是否存在该 IP 地址对应的 MAC 地址;如果有﹐就直接将数据包发送到这个 MAC 地址;如果没有,就向本地网段发起一个 ARP 请求的广播包,查询此目的主机对应的 MAC 地址。此 ARP 请求的数据包里,包括源主机的 IP 地址、硬件地址、以及目的主机的 IP 地址。
  3. 网络中所有的主机收到这个 ARP 请求后,会检查数据包中的目的 IP 是否和自己的 IP 地址一致。如果不相同,就会忽略此数据包;如果相同,该主机首先将发送端的 MAC 地址和 IP 地址添加到自己的 ARP 列表中,如果 ARP 表中已经存在该 IP 的信息,则将其覆盖,然后给源主机发送一个 ARP 响应数据包,告诉对方自己是它需要查找的 MAC 地址。
  4. 源主机收到这个 ARP 响应数据包后,将得到的目的主机的 IP 地址和 MAC 地址添加到自己的 ARP 列表中,并利用此信息开始数据的传输。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。

9.IP地址和MAC地址比较

  • MAC地址是数据链路层和物理层使用的地址,是写在网卡上的物理地址,用来定义网络设备的位置,不可变更。
  • IP地址是网络层和以上各层使用的地址,是一种逻辑地址。IP地址用来区别网络上的计算机。

10.为什么有了MAC地址还需要IP地址?

IP地址是网络寻址,MAC地址链路寻址。P 地址可以比作为地址,MAC 地址为收件人,在一次通信过程中,两者是缺一不可的。【回答】

如果我们只使用MAC地址进行寻址的话,我们需要路由器记住每个MAC地址属于哪个子网,不然一次路由器收到数据包都要满世界寻找目的MAC地址。而我们知道MAC地址的长度为48位,也就是最多共有2的48次方个MAC地址,这就意味着每个路由器需要256T的内存,显然是不现实的。

和MAC地址不同,IP地址是和地域相关的,在一个子网中的设备,我们给其分配的IP地址前缀都是一样的,这样路由器就能根据IP地址的前缀知道这个设备属于哪个子网,剩下的寻址就交给子网内部实现,从而大大减少了路由器所需要的内存。

11.ICMP 协议的功能?

ICMP(Internet Control Message Protocol) ,网际控制报文协议,用于主机与路由器之间传递信息,如网络是否畅通,我们日常使用得比较多的 ping,就是基于 ICMP 的。【回答】

  • ICMP 协议是一种面向无连接的协议,用于传输出错报告控制信息。
  • 它属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。
  • 当遇到 IP 数据无法访问目标、IP 路由器无法按当前的传输速率转发数据包等情况时,会自动发送 ICMP 消息。

12.说下 ping 的原理?

ping,Packet Internet Groper,是一种因特网包探索器,用于测试网络连接量的程序。Ping 是工作在 TCP/IP 网络体系结构中应用层的一个服务命令, 主要是向特定的目的主机发送 ICMP(Internet Control Message Protocol 因特网报文控制协议) 请求报文,测试目的站是否可达及了解其有关状态。【回答】

一般来说,ping 可以用来检测网络通不通。它是基于ICMP协议工作的。假设机器 Aping 机器 B,工作过程如下:

  1. ping 通知系统,新建一个固定格式的 ICMP 请求数据包
  2. ICMP 协议,将该数据包和目标机器 B 的 IP 地址打包,一起转交给 IP 协议层
  3. IP 层协议将本机 IP 地址为源地址,机器 B 的 IP 地址为目标地址,加上一些其他的控制信息,构建一个 IP 数据包
  4. 先获取目标机器 B 的 MAC 地址。
  5. 数据链路层构建一个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址是本机的 MAC 地址
  6. 机器 B 收到后,对比目标地址,和自己本机的 MAC 地址是否一致,符合就处理返回,不符合就丢弃。
  7. 根据目的主机返回的 ICMP 回送回答报文中的时间戳,从而计算出往返时间
  8. 最终显示结果有这几项:发送到目的主机的 IP 地址、发送 & 收到 & 丢失的分组数、往返时间的最小、最大 & 平均值。

七、网络安全

1.说说有哪些安全攻击?

主要分为两种类型:被动攻击主动攻击。被动攻击是指攻击者从网络上窃听他人的通信内容,通常把这类攻击称为截获;主动攻击,如篡改,恶意程序,拒绝服务Dos等【回答】

网络安全攻击主要分为两种类型,被动攻击主动攻击

  • 被动攻击:是指攻击者从网络上窃听他人的通信内容,通常把这类攻击称为截获,被动攻击主要有两种形式:消息内容泄露攻击和流量分析攻击。由于攻击者没有修改数据,使得这种攻击很难被检测到。
  • 主动攻击:直接对现有的数据和服务造成影响,常见的主动攻击类型有:篡改:攻击者故意篡改网络上送的报文,甚至把完全伪造的报文传送给接收方。恶意程序:恶意程序种类繁多,包括计算机病毒、计算机蠕虫、特洛伊木马、后门入侵、流氓软件等等。拒绝服务Dos:攻击者向服务器不停地发送分组,使服务器无法提供正常服务。

2.DNS劫持了解吗?

DNS劫持即域名劫持,是通过将原域名对应的IP地址进行替换,从而使用户访问到错误的网站,或者使用户无法正常访问网站的一种攻击方式。【回答】

域名劫持往往只能在特定的网络范围内进行,范围外的DNS服务器能够返回正常的IP地址。攻击者可以冒充原域名所属机构,通过电子邮件的方式修改组织机构的域名注册信息,或者将域名转让给其它主持,并将新的域名信息保存在所指定的DNS服务器中,从而使用户无法对原域名来进行解析以访问目标地址。

怎么应对DNS劫持?
  • 直接通过IP地址访问网站,避开DNS劫持
  • 由于域名劫持往往只能在特定的网络范围内进行,因此一些高级用户可以通过网络设置让DNS指向正常的域名服务器以实现对目标网址的正常访问,例如计算机首选DNS服务器的地址固定为8.8.8.8。 【回答】
DNS劫持的步骤是什么样的?
  1. 获取要劫持的域名信息:攻击者会首先访问域名查询要劫持的站点的域名信息。
  2. 控制域名响应的E-Mail账号:在获取到域名信息后,攻击者通过暴力破解或者专门的方法破解公司注册域名时使用的E-mail账号所对应的密码,更高级的攻击者甚至能够直接对E-Mail进行信息窃取。
  3. 修改注册信息:当攻击者破解了E-Mail后,会利用相关的更改功能修改该域名的注册信息,包括域名拥有者信息,DNS服务器信息等。
  4. 使用E-Mail收发确认函:在修改完注册信息后,攻击者E-Mail在真正拥有者之前收到修改域名注册信息的相关确认信息,并回复确认修改文件,待网络公司恢复已成功修改信件后,攻击者便成功完成DNS劫持。

3.什么是 CSRF 攻击?如何避免?

什么是 CSRF 攻击?

CSRF,跨站请求伪造(英文全称是 Cross-site request forgery),是一种挟持用户在当前已登录的 Web 应用程序上执行非本意的操作的攻击方法。【回答】

CSRF 是如何攻击的呢?

来看一个例子:

  1. 用户登陆银行,没有退出,浏览器包含了用户在银行的身份认证信息。
  2. 攻击者将伪造的转账请求,包含在在帖子
  3. 用户在银行网站保持登陆的情况下,浏览帖子
  4. 将伪造的转账请求连同身份认证信息,发送到银行网站
  5. 银行网站看到身份认证信息,以为就是用户的合法操作,最后造成用户资金损失。
怎么应对 CSRF 攻击呢?
  • 检查 Referer 字段HTTP头中的Referer字段记录了该 HTTP 请求的来源地址。在通常情况下,访问一个安全受限页面的请求来自于同一个网站,而如果黑客要对其实施 CSRF攻击,他一般只能在他自己的网站构造请求。因此,可以通过验证Referer值来防御CSRF 攻击。
  • 添加校验 token以在 HTTP 请求中以参数的形式加入一个随机产生的 token,并在服务器端建立一个拦截器来验证这个 token,如果请求中没有token或者 token 内容不正确,则认为可能是 CSRF 攻击而拒绝该请求。
  • 敏感操作多重校验对一些敏感的操作,除了需要校验用户的认证信息,还可以通过邮箱确认、验证码确认这样的方式多重校验。

4.什么是 DoS、DDoS、DRDoS 攻击?

  • DOS: (Denial of Service), 翻译过来就是拒绝服务, 一切能引起拒绝 行为的攻击都被称为 DOS 攻击。最常见的 DoS 攻击就有计算机网络宽带攻击连通性攻击
  • DDoS: (Distributed Denial of Service),翻译过来是分布式拒绝服务。是指处于不同位置的多个攻击者同时向一个或几个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器,并利用这些机器对受害者同时实施攻击。主要形式有流量攻击和资源耗尽攻击,常见的 DDoS攻击有: SYN Flood、Ping of Death、ACK Flood、UDP Flood 等。
  • DRDoS: (Distributed Reflection Denial of Service),中文是分布式反射拒绝服务,该方式靠的是发送大量带有被害者 IP 地址的数据包给攻击主机,然后攻击主机对 IP 地址源做出大量回应,从而形成拒绝服务攻击。
如何防范DDoS?

针对DDoS中的流量攻击,最直接的方法是增加带宽,理论上只要带宽大于攻击流量就可以了,但是这种方法成本非常高。在有充足带宽的前提下,我们应该尽量提升路由器、网卡、交换机等硬件设施的配置。

针对资源耗尽攻击,我们可以升级主机服务器硬件,在网络带宽得到保证的前提下,使得服务器能够有效对抗海量的SYN攻击包。我们也可以安装专业的抗DDoS防火墙,从而对抗SYN Flood等流量型攻击。瓷碗,负载均衡,CDN等技术都能有效对抗DDos攻击。

5.什么是 XSS 攻击,如何避免?

XSS 攻击也是比较常见,XSS,叫跨站脚本攻击(Cross-Site Scripting),因为会与层叠样式表 (Cascading Style Sheets, CSS) 的缩写混淆,因此有人将跨站脚本攻击缩写为 XSS。它指的是恶意攻击者往 Web 页面里插入恶意 html 代码,当用户浏览网页的时候,嵌入其中 Web 里面的 html 代码会被执行,从而达到恶意攻击用户的特殊目的。【回答】

XSS 攻击一般分三种类型:存储型 、反射型 、DOM 型 XSS

XSS 是如何攻击的呢?

简单说,XSS的攻击方式就是想办法“教唆”用户的浏览器去执行一些这个网页中原本不存在的前端代码。

拿反射型举个例子吧,流程图如下:

  1. 攻击者构造出特殊的 URL,其中包含恶意代码。
  2. 用户打开带有恶意代码的 URL 时,访问正常网站服务器
  3. 网站服务端将恶意代码从 URL 中取出,拼接在 HTML 中返回给浏览器。
  4. 用户浏览器接收到响应后解析执行,混在其中的恶意代码也被执行,请求恶意服务器,发送用户数据
  5. 攻击者就可以窃取用户的数据,以此冒充用户的行为,调用目标网站接口执行攻击者指定的操作。

如何应对 XSS 攻击?
  • 对输入进行过滤,过滤标签等,只允许合法值。
  • HTML 转义
  • 对于链接跳转,如<a href="xxx" 等,要校验内容,禁止以 script 开头的非法链接。
  • 限制输入长度

6.对称加密与非对称加密有什么区别?

对称加密:指加密和解密使用同一密钥,优点是运算速度较快,缺点是如何安全将密钥传输给另一方。常见的对称加密算法有:DES、 3DES、AES 等。

  •      DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。
  •      3DES(Triple DES):是基于DES,对一块数据用三个不同的密钥进行三次加密,强度更高。
  •      AES(Advanced Encryption Standard):高级加密标准,是下一代的加密算法标准,速度快,安全级别高;

非对称加密:指的是加密和解密使用不同的密钥(即公钥和私钥)。公钥与私钥是成对存在的,如果用公钥对数据进行加密,只有对应的私钥才能解密。常见的非对称加密算法有 RSA、DSA和 ECC。

  •         RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的;
  •         DSA(Digital Signature Algorithm):数字签名算法,是一种标准的 DSS(数字签名标准);
  •         ECC(Elliptic Curves Cryptography):椭圆曲线密码编码学。

7.RSA和AES算法有什么区别?

  • RSA采用非对称加密的方式,采用公钥进行加密,私钥解密的形式。其私钥长度一般较长,由于需要大数的乘幂求模等运算,其运算速度较慢,不合适大量数据文件加密
  • AES采用对称加密的方式,其秘钥长度最长只有256个比特,加密和解密速度较快,易于硬件实现。由于是对称加密,通信双方在进行数据传输前需要获知加密密钥。

参考:

【转】面试必备:计算机网络常问的六十二个问题(建议收藏) - 知乎

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机网络是计算机科学中的一个重要领域,面试中常常会涉及到计算机网络的基础知识。以下是一些常见的计算机网络面试题基础: 1. 什么是计算机网络计算机网络是指将多台计算机通过通信设备连接起来,实现信息交换和资源共享的系统。 2. OSI七层模型是什么? OSI七层模型是一种将计算机网络通信过程划分为七个不同层次的模型,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 3. TCP/IP协议族包括哪些协议? TCP/IP协议族包括IP协议、TCP协议、UDP协议、HTTP协议、FTP协议等。 4. 什么是IP地址和MAC地址? IP地址是用于在网络中唯一标识一个设备的地址,分为IPv4和IPv6两种格式。MAC地址是网卡的物理地址,用于在局域网中唯一标识一个设备。 5. TCP和UDP的区别是什么? TCP是面向连接的可靠传输协议,提供数据传输的可靠性和顺序性;UDP是无连接的不可靠传输协议,提供数据传输的快速性和实时性。 6. 什么是HTTP协议? HTTP协议是一种用于传输超文本的应用层协议,常用于Web浏览器和Web服务器之间的通信。 7. 什么是DNS? DNS(Domain Name System)是用于将域名转换为IP地址的分布式数据库系统,实现域名解析功能。 8. 什么是网络拓扑结构? 网络拓扑结构指的是计算机网络中各个节点之间连接的方式,常见的拓扑结构有总线型、星型、环型、树型等。 9. 什么是路由器和交换机? 路由器是一种网络设备,用于在不同网络之间转发数据包;交换机是一种网络设备,用于在局域网内转发数据包。 10. 什么是网络安全? 网络安全是指保护计算机网络及其资源不受未经授权的访问、使用、披露、破坏、修改或干扰的能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值