计算机网络相关的所以题目汇总,应该是网上最全的汇总了。

1. 网络结构

1.1 计算机网络有哪些结构?

计算机网络一共有3种模型。

  1. OSI七层结构
  2. TCP/IP结构
  3. 五层协议结构

OSI是Open Systems Interconnect,也就是开放的互联系统,将复杂的互联网系统划分为不同块,方便处理。实际应用中,并没有采用这个理论模型,而是使用TCP/IP协议的四层模型。而5层模型是一个理论上的网络通信模型,方便教学的时候理解,实际上并不存在。

1.2 计算机网络中各层分别有什么作用?

(1)应用层

应用层的任务是通过应用进程间的交互来完成特定网络应用,常见的协议有域名系统DNS,万维网应用的HTTP协议,支持电子邮件的SMTP协议。把应用层交互的数据单元称为报文

(2)运输层

为两台主机进程之间的通信提供通用的数据传输服务。主要包含两种协议:

  • 传输控制协议 TCP(Transmisson Control Protocol)。提供面向连接的,可靠的数据传输服务。

  • 用户数据报协议 UDP(User Datagram Protocol)。提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

(3)网络层

使用IP协议。网络层有两个任务:

  • 把运输层产生的报文段或用户数据报封装成分组和包进行传送。在 TCP/IP 体系结构中,由于网络层使用 IP 协议,因此分组也叫 IP 数据报 ,简称 数据报。注意:不要把运输层的用户数据报UDP和网络层的IP数据报弄混。
  • 选择合适的路由,找到目的主机

(4)数据链路层

两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装程帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。

(5)物理层

物理层的任务就是透明地传输比特流,换句话说实际电路传送后比特流没有发生变化。

2. TCP/IP协议

2.1 描述一下TCP/IP协议的结构

2.3 TCP和UDP的区别?

简单来说:

  • TCP:面向连接,面向字节流,可靠,传输慢,有流量控制阻塞控制
  • UDP:广播形式不需要连接,面向报文,不可靠,传输快,无流量控制阻塞控制。

解释一下报文和字节流的区别:

  • 字节流:发送次数和接收次数可以不相同,比如向水池倒了20盆水,可以开水龙头一次性全放出。
  • 报文:发送次数和接收次数必须相同

两者的应用场景:

  • TCP:邮件,远程登录,文件传输等对准确性要求较高的地方
  • UDP:及时通信,比如QQ,网络电话等。

2.4 三次握手和四次挥手

https://jiangren.work/2019/08/01/Socket%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B%E5%8E%9F%E7%90%86/

2.5 TCP协议如何保证可靠行

(1)采用三次握手四次挥手保证建立的传输信道是可靠的

(2)采用了ARQ自动重传请求协议数据传输的可靠性

(3)采用滑动窗口协议进行流量控制

(4)使用慢开始拥塞避免快重传快恢复来进行拥塞控制

2.6 TCP协议如何进行流量控制?

控制流量的前提当然需要保证正确率,因此首先要引入ARQ协议。

无差错时,A向B发送分组M1,B收到M1后向A回复,A收到回复后,发送下一个M2…..

如果出现差错,B没有收到信息,自然不会回复,A等待超时后,自动重传一个信息M,这就是所谓的ARQ。

停止等待ARQ协议信道利用率太低,所以需要使用连续ARQ协议来进行改善。这个协议会连续发送一组数据包,然后再等待这些数据包的ACK。

连续ARQ协议通常是结合滑动窗口协议来使用的,发送方需要维持一个发送窗口,如下图所示:

位于发送窗口内的5个分组都可以连续发送出去,而不需要等待对方的确认,这样就提高了信道利用率。发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。

接收方一般都是采用累积确认的方式。收到几个分组后,对按序到达的最后一个分组发送确认。

下载时我们的速度一般都是由慢变快,原因就是拥塞控制。

2.7 TCP协议如何进行拥塞控制?

网络拥塞是指在分组交换网络中传送分组的数目太多时,由于存储转发节点的资源有限而造成网络传输性能下降的情况。

常见的拥塞控制有:

  • 慢开始
  • 拥塞避免
  • 快重传
  • 快恢复

发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。当cwndssthresh时,改用拥塞避免算法。

慢开始:不要一开始就发送大量的数据,由小到大逐渐增加拥塞窗口的大小。

拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1而不是加倍。这样拥塞窗口按线性规律缓慢增长。

快重传:我们可以剔除一些不必要的拥塞报文,提高网络吞吐量。比如接收方在收到一个失序的报文段后就立即发出重复确认,而不要等到自己发送数据时捎带确认。快重传规定:发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

快恢复:主要是配合快重传。当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半(为了预防网络发生拥塞),但接下来并不执行慢开始算法,因为如果网络出现拥塞的话就不会收到好几个重复的确认,收到三个重复确认说明网络状况还可以。

3. DNS协议和ARP协议

为什么这两个要放在一起说呢?因为这两个协议都是用于地址间的转化,都是起到了翻译官的职责。

3.1 DNS解析过程是什么?

DNS (Domain Name System) 是 域名系统 的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于 TCP/IP 网络,它从事将主机名或域名转换为实际 IP 地址的工作,类似于翻译官

DNS查询时优先考虑本地的Host文件本地的DNS解析器是否保留有缓存映射,如果没有就向上一级请求。依次按照DNS根服务器,DNS顶层服务器,DNS管理方服务器的顺序请求。

所谓递归查询就是变更查询者,迭代查询则没有变更:这个例子中查询者由客户端变为了本地DNS服务器,所以是递归查询。

3.1 什么是MAC地址?

MAC地址是数据链路层和物理层使用的地址是硬件地址,IP地址网络层和以上各层使用的地址,是一种逻辑地址。在发送数据时,数据从高层到低层,然后才到通信链路上传输。使用IP地址的IP数据报一旦交给了数据链路层,就被封装成了MAC帧。MAC帧在传送时使用的源地址和目的地址都是硬件地址。

3.2 ARP协议工作机制是什么?

ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址

在每台安装有TCP/IP协议的电脑或路由器里都有一个ARP缓存表,表里的IP地址与MAC地址是一对应的,如下表所示。

解析MAC地址时,主机A首先在其ARP高速缓存中查找有无主机B的IP地址。

如果没有就就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址

收到后在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。并且采用LRU机制,及时淘汰。

4. HTTP协议

4.1 HTTP常见的状态码有哪些?

4.2 HTTP协议和其他协议之间的关系是什么?

HTTP(超文本传输协议)是利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议。如果TCP是高速路,HTTP就是卡车。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们能方便地使用TCP/IP协议。

4.3 解释一下HTTP长连接和短连接

短连接:客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。

长连接:客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。有一个保持时间。

4.4 HTTP和HTTPS的区别

HTTP:运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份

HTTPS:Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP

4.5 GET和POST的区别

  1. GET用于从服务器获取资源,POST用于更新服务器的资源
  2. GET不会改变服务器的资源,而POST会
  3. GET请求的数据会附在URL之后,比如http:localhost:8080/id=101?,而POST的数据则是放在请求体中。因此,GET不安全,GET的长度受限制。

4.6 Cookie和Session的区别

Cookie和Session都是客户端与服务器之间保持状态的解决方案,具体来说,cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。

Cookie实际上是一小段文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态。

Session的区别在于,会话状态完全保存在服务器。客户端请求服务器,如果服务器记录该用户状态,就获取Session来保存状态,这时,如果服务器已经为此客户端创建过session就按照sessionid把这个session检索出来使用。服务器Session常常依赖于Cookie机制检索ID,但Cookie被禁用时也有其他方法比如URL重写机制。

4.7 HTTP请求报文和响应报文的格式

请求报文格式:

  1. 请求行(请求方法+URI协议+版本)
  2. 请求头部
  3. 空行
  4. 请求主体
GET/sample.jspHTTP/1.1 请求行
Accept:image/gif.image/jpeg, 请求头部
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate

username=jinqiao&password=1234 请求主体

响应报文:

  1. 状态行(版本+状态码+原因短语)
  2. 响应首部
  3. 空行
  4. 响应主体
HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112

<html>
    <head>
        <title>HTTP响应示例<title>
    </head>
    <body>
        Hello HTTP!
    </body>
</html>

4.8 HTTP1.1和2.0

1.1新功能

  • 支持长链接
  • 通过虚拟站点技术能够使不同域名配置在同一个IP地址的服务器上

2.0新功能

  • 可以使用同一个连接并行发送多个请求和相应,可以承接双向数据流
  • 允许设定数据流中不同资源的优先级,明确资源处理的先后顺序
  • 打破了请求-响应的束缚,除了最初的请求响应外,服务器还能向客户端推送额外的资源(客户端没有明确要求的情况下)

5. IP地址

5.1 IP地址的格式是什么?

什么是IP地址?IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP地址编址方案将IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D、E类作为多播和保留使用,为特殊地址。

每个IP地址包括两个标识码(ID)

  • 网络ID
  • 主机ID。

同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。3字节的网络地址 + 1字节主机地址的意思就是:前三段号码为网络号码,剩下的一段号码为本地计算机的号码。

  • A类地址:1字节的网络地址 + 3字节主机地址,网络地址的最高位必须是0。A类IP地址的地址范围1.0.0.0到127.255.255.255,IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256^3-2
  • B类地址:2字节的网络地址 + 2字节主机地址,网络地址的最高位必须是10。B类IP地址地址范围128.0.0.0-191.255.255.255B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256^2-2。注:1000 0000=128
  • C类地址:3字节的网络地址 + 1字节主机地址,网络地址的最高位必须是110。C类IP地址范围192.0.0.0-223.255.255.255每个网络支持的最大主机数为256-2适用于小规模局域网络
  • D类地址:多播地址,用于1对多通信,最高位必须是1110。范围从224.0.0.0到239.255.255.255。
  • E类地址:为保留地址,最高位必须是“1111”

5.2 单播广播多播的区别是什么?

单播:主机间一对一通信。优点:个性化服务,及时响应;缺点:流量压力大。

广播:主机间一对所有通信。优点:布局简单,维护方便,流量负载低。缺点:缺乏个性化服务,无法在Internet宽带上传播。

多播(组播):主机间一对一组通信。优点:兼具流量负载和个性化的优点,允许在Internet宽带上传播。缺点:与单播协议相比没有纠错机制。

5.3 如何划分子网?

划分子网的方法是从主机号借用若干个位作为子网号,而主机号也就相应减少了若干个位。于是两级IP地址在本单位内部就变为三级IP地址:网络号、子网号和主机号。

区分子网号和主机号的办法是:通过子网掩码网络号和子网号全设为1的IP地址为子网掩码。

假设公司有4个部门,A部门有10台主机,B部门有15台主机,C部门有30台主机,D部门有20台主机。分配了一个总的网段为:192.168.2.0/24。请问该如何划分子网?

网段前面的数字是我们的网络地址,后面的24表示用24位来表示网络位,用32-24=8位来表示主机位。主机数目不多,可以小型组网,因此采用C类地址(最大254个主机),默认掩码为225.255.255.0。

首先假设借用主机位2位来划分4个子网,则子网掩码组合为:

11111111.11111111.11111111.00000000
11111111.11111111.11111111.01000000
11111111.11111111.11111111.10000000
11111111.11111111.11111111.11000000

然而全为0和全为1的地址不能用,所以我们需要借用主机位3位,划分8-2=6个子网:

11111111.11111111.11111111.00100000
11111111.11111111.11111111.01000000
11111111.11111111.11111111.01100000
11111111.11111111.11111111.10000000
11111111.11111111.11111111.10100000
11111111.11111111.11111111.11000000

验证一下:最后提供的主机位数是2^5=32,也就是说每个子网最大的主机数是32,符合题目要求。所以子网划分如下:

(1)255.255.255.32:    192.168.2.33~ 192.168.2.62
(2)255.255.255.64:   192.168.2.65~ 192.168.2.94
(3)255.255.255.96:   192.168.2.97~ 192.168.2.126 
(4)255.255.255.128:  192.168.2.129~ 192.168.2.158
(5)255.255.255.160:  192.168.2.161~ 192.168.2.190 
(6)255.255.255.192:  192.168.2.193~ 192.168.2.222

子网掩码是:

11111111.11111111.11111111.11100000
255.255.255.224

6. 网络安全

6.1 什么是DDos攻击?

DDos全称Distributed Denial of Service,分布式拒绝服务攻击。最基本的DOS攻击过程如下:

  1. 客户端向服务端发送请求链接数据包
  2. 服务端向客户端发送确认数据包
  3. 客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认

DDoS则是采用分布式的方法,通过在网络上占领多台“肉鸡”,用多台计算机发起攻击。

DOS攻击现在基本没啥作用了,因为服务器的性能都很好,而且是多台服务器共同作用,1V1的模式黑客无法占上风。对于DDOS攻击,预防方法有:

  • 减少SYN timeout时间。在握手的第三步,服务器会等待30秒-120秒的时间,减少这个等待时间就能释放更多的资源。
  • 限制同时打开的SYN半连接数目。

6.2 什么是XSS攻击?

XSS也称 cross-site scripting,跨站脚本。这种攻击是由于服务器将攻击者存储的数据原原本本地显示给其他用户所致的。比如一个存在XSS漏洞的论坛,用户发帖时就可以引入带有<script>标签的代码,导致恶意代码的执行。

预防措施有:

  • 前端:过滤
  • 后端:转义,比如go自带的处理器就具有转义功能。

6.3 什么是注入SQL攻击?

XSS是将脚本代码注入,而SQL注入攻击顾名思义就是注入SQL语句。

比如代码:

username:=r.Form.Get("username")
password:=r.Form.Get("password")
sql:="SELECT * FROM user WHERE username='"+username+"' AND password='"+password+"'"

当用户输入myuser' or 'foo' = 'foo' --,那么SQL就变成了:

SELECT * FROM user WHERE username='myuser' or 'foo'=='foo' --'' AND password='xxx'

在SQL里面--是注释标记,所以查询语句会在此中断。这就让攻击者在不知道任何合法用户名和密码的情况下成功登录了。

预防方法:

  • 限制数据库权限,给用户提供仅仅能够满足其工作的最低权限。
  • 对进入数据库的特殊字符(’”\尖括号&*;等)转义处理。
  • 提供参数化查询接口,不要直接使用原生SQL

7. 综合问题

7.1 浏览器中输入URL地址到显示主页的过程是什么?

7.2 ping命令的具体过程是什么?

假设现在有ABCD四台主机,一台路由,子网掩码为255.255.255.0,默认路由为192.168.0.1

在主机 A 上运行Ping 192.168.0.5后,

  1. Ping命令会构建一个ICMP协议的数据包,交到网络层的IP协议中。IP层协议将目的地址和源地址打包后,形成IP数据包
  2. 获取192.168.0.5的MAC地址
  3. 交到数据链路层,添加一些控制信息,构建数据帧
  4. 交到物理层,通过以太网访问

主机B收到后,

  1. 检查目的地址,不相符就丢弃
  2. 将IP数据包提取后送入网络层的IP层协议,IP层检查后将有用的信息提取后送入ICMP协议
  3. ICMP协议马上构建一个ICMP应答包以之前的相同方式发送给主机

根据条件:是否在同一网段内,流程可能有所不同,区别在于MAC的获取方式,具体参见ARP协议。

7.3 负载均衡算法有哪些?

多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,能互相分担负载。

  • 轮询法:将请求按照顺序轮流的分配到服务器上。大锅饭,不能发挥某些高性能服务器的优势
  • 随机法:随机获取一台,和轮询类似
  • 哈希法:通过ip地址哈希化来确定要选择的服务器编号。好处是,每次客户端访问的服务器都是同一个服务器,能很好地利用session或者cookie
  • 加权轮询:根据服务器性能不同加权