计算机网络面经

概述

网络模型

在这里插入图片描述
在向下的过程中,需要添加下层协议所需要的首部或者尾部,而在向上的过程中不断拆开首部和尾部。

各层协议

在这里插入图片描述

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

  • 假设主机最开始没有 IP 地址以及其它信息,那么就需要先使用 DHCP 来获取本机IP和网关IP ARP 解析DNS服务器MAC 地址
  • DNS解析,查找域名对应的IP地址
  • 与服务器通过三次握手,建立TCP连接
  • 向服务器发送HTTP请求
  • 服务器处理请求,返回网页内容
  • 浏览器解析并渲染页面
  • TCP四次挥手,连接结束

网络攻击

跨站脚本攻击(Cross-Site Scripting, XSS)

原理
将代码注入到用户浏览的网页上,这种代码包括 HTML 和 JavaScript,获取用户cookie或伪造表单骗取用户信息
防范

  • 设置 Cookie 为 HttpOnly,使代码不能获取cookie
  • 对输入进行过滤,过滤标签等,只允许合法值。
  • HTML转义
  • 对于链接跳转,如<a href=“xxx” 等,要校验内容,禁止以script开头的非法链接。
  • 限制输入长度

跨站请求伪造(Cross-site request forgery,CSRF)

原理
利用浏览器中未过期的token,伪装用户访问用户之前访问的正常网站,如银行转账
防范

  • 检查Referer字段。
  • 添加校验token。

SQL 注入攻击

原理
通过拼接使服务器上的数据库运行非法的 SQL 语句。XSS注入前端代码,并需要诱导用户访问被注入了正常网站的非法网站;SQL注入由攻击者直接访问正常网站
防范

  • 使用#{}而不是 ${}
  • 过滤union,or等数据库关键词

拒绝服务攻击(denial-of-service attack,DoS)

原理
亦称洪水攻击,其目的在于使目标电脑的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。

SYN Flood是一种典型的DDos攻击,它在短时间内,伪造不存在的IP地址,向服务器大量发起SYN报文。当服务器回复SYN+ACK报文后,不会收到ACK回应报文,导致服务器上建立大量的半连接半连接队列满了,这就无法处理正常的TCP请求啦。

防范

  • 尽可能少的把端口暴露在公网上,减少可能的攻击点。
  • 识别异常流量,监控系统性能指标
  • 限制不明客户端的访问
  • 优化内核参数如半连接timeout时间、全连接队列长度等等。

应用层

HTTP协议

URL

HTTP 使用 URL( Uniform Resource Locator,统一资源定位符)来定位资源,它是 URI(Uniform Resource Identifier,统一资源标识符)的子集,URL 在 URI 的基础上增加了定位能力。URI 除了包含 URL,还包含 URN(Uniform Resource Name,统一资源名称),它只是用来定义一个资源的名称,并不具备定位该资源的能力。例如 urn:isbn:0451450523 用来定义一个书籍名称,但是却没有表示怎么找到这本书。
在这里插入图片描述

HTTP状态码

在这里插入图片描述

HTTP请求方式

在这里插入图片描述

GET 和 POST 比较

GETPOST
参数在 URL 中,直接暴露且受URL长度限制在实体主体中
编码URL编码,中文需要转换支持多种编码
缓存主动缓存手动缓存
浏览器书签收藏支持不支持
浏览器历史记录保存不保存
浏览器请求Header和Data一起发送浏览器会先发送 Header 再发送 Data。但并不是所有浏览器会这么做,例如火狐就不会。
应用幂等的查询数据提交

HTTP/1.0,1.1,2.0的区别

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

HTTP/1.1

  • 默认长连接,即TCP连接默认不关闭,可以被多个请求复用。
  • 分块传输编码,在长连接传输时通过分块长度0作为结束标识,优化Content-Length标识的性能
  • 流水线操作,同一个TCP连接中,多个 HTTP 请求可以整批提交
  • 缓存机制优化

HTTP/2.0

  • 完全多路复用,在通信过程中,只会有一个 TCP 连接存在,它承载了任意数量的双向数据流。
  • 服务端推送,允许服务器未经请求,主动向客户端发送资源。
  • 首部压缩

一个数据流(Stream)都有一个唯一标识符和可选的优先级信息,用于承载双向信息。
消息(Message)是与逻辑请求或响应对应的完整的一系列帧。
帧(Frame)是最小的通信单位,来自不同数据流的帧可以交错发送,然后再根据每个帧头的数据流标识符重新组装。

HTTPS是什么?

HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信,也就是说 HTTPS 使用了隧道进行通信。通过使用 SSL,HTTPS 具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)。

HTTPS工作流程

对称加密非对称加密
密钥加密和解密使用同一密钥加密和解密使用不同的密钥
优点速度快能安全地将公开密钥传输给通信发送方
缺点无法安全地将密钥传输给通信方速度慢
  1. 客户端发起Https请求,连接到服务器的443端口。 服务器必须要有一套数字证书(证书内容有公钥、证书颁发机构、失效日期等)。
  2. 服务器将自己的数字证书发送给客户端(公钥在证书里面,私钥由服务器持有)。
  3. 客户端收到数字证书之后,通过第三方数字证书认证机构验证证书的合法性。如果证书验证通过,就会生成一个随机的对称密钥,用证书的公钥加密。
  4. 客户端将公钥加密后的密钥发送到服务器。
  5. 服务器接收到客户端发来的密文密钥之后,用自己之前保留的私钥对其进行非对称解密,解密之后就得到客户端的密钥,然后用客户端密钥对返回数据进行对称加密
  6. 服务器将加密后的密文返回到客户端。 客户端收到后,用自己的密钥对其进行对称解密,得到服务器返回的数据。

Session和Cookie的区别

Cookie是保存在客户端的一小块文本串的数据;Session利用Cookie进行映射,存储在服务端的数据

CookieSession
位置客户端服务器
类型ASCII任意
安全
容量

常用协议端口

在这里插入图片描述

DNS

DNS 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。这里的分布式数据库是指,每个站点只保留它自己的那部分数据。主要使用UDP连接

域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。
在这里插入图片描述
DNS解析流程

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

FTP

FTP 使用 TCP 进行连接,它需要两个连接来传送一个文件。
控制连接:将客户端的命令传送给服务器,并传回服务器的应答。
数据连接:用来传送一个文件数据。

主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0~1023 是熟知端口号。
被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。

DHCP 动态主机配置协议

DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息。DHCP 配置的内容不仅是 IP 地址,还包括子网掩码、网关 IP 地址。

DHCP 工作过程如下:

  1. 客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。
  2. DHCP服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。
  3. 因为客户端可能收到多个 DHCP服务器提供的信息,因此客户端需要进行选择。 如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该DHCP 服务器。
  4. DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。

传输层

UDP 和 TCP

用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。

传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。

基于TCP的应用层协议有:HTTP、FTP、SMTP、TELNET、SSH
基于UDP的应用层协议:DNS、TFTP、SNMP

TCP三次握手

在这里插入图片描述
三次握手的原因
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

TCP四次挥手

在这里插入图片描述
四次挥手的原因
客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

TIME_WAIT
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:

  • 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A等待一段时间就是为了处理这种情况的发生。
  • 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

TCP的粘包和拆包

产生

  • 要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包;
  • 接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包;
  • 要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包;
  • 待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。

解决

  • 发送端将每个数据包封装为固定长度
  • 在数据尾部增加特殊字符进行分割
  • 将数据分为两部分,一部分是头部,一部分是内容体;其中头部结构大小固定,且有一个字段声明内容体的大小。

TCP 可靠传输

连接和断开的可靠性(三次握手,四次挥手)、有状态(哪些数据发送了,哪些没发)、可控制(超时重传、流量控制、拥塞控制等)。

TCP的滑动窗口

通过缓存空间来实现数据的并行传输,避免每个包的传输都需要等待应答后才发起下一个。同时通过接收方发送TCP头部win字段,控制发送方窗口大小,从而进行流量控制

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

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

TCP 拥塞控制

流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。

TCP 主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。

发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。
假设无流量控制
在这里插入图片描述

慢开始与拥塞避免

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

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

如果出现了超时,则令 ssthresh = cwnd / 2,然后重新执行慢开始。

快重传与快恢复

在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认。在发送方,如果收到三个重复确认,那么可以知道下一个报文段丢失,此时执行快重传,立即重传下一个报文段。在这种情况下,只是丢失个别报文段,而不是网络拥塞。因此执行快恢复,令 ssthresh = cwnd / 2 ,cwnd = ssthresh,注意到此时直接进入拥塞避免

慢开始和快恢复的快慢指的是 cwnd 的设定值,而不是 cwnd 的增长速率。慢开始 cwnd 设定为 1,而快恢复 cwnd 设定为 ssthresh。

网络层

IP 地址编址方式

分类

在这里插入图片描述

子网划分

通过在主机号字段中拿一部分作为子网号,把两级 IP 地址划分为三级 IP 地址。

IP 地址 ::= {< 网络号 >, < 子网号 >, < 主机号 >}

要使用子网,必须配置子网掩码。一个 B 类地址的默认子网掩码为 255.255.0.0,如果 B 类地址的子网占两个比特,那么子网掩码为 11111111 11111111 11000000 00000000,也就是 255.255.192.0。

注意,外部网络看不到子网的存在。

无分类

无分类编址 CIDR 消除了传统 A 类、B 类和 C 类地址以及划分子网的概念,使用网络前缀和主机号来对 IP 地址进行编码,网络前缀的长度可以根据需要变化。

IP 地址 ::= {< 网络前缀号 >, < 主机号 >}

CIDR 的记法上采用在 IP 地址后面加上网络前缀长度的方法,例如 128.14.35.7/20 表示前 20 位为网络前缀。

CIDR 的地址掩码可以继续称为子网掩码,子网掩码首 1 长度为网络前缀的长度。

一个 CIDR 地址块中有很多地址,一个 CIDR 表示的网络就可以表示原来的很多个网络,并且在路由表中只需要一个路由就可以代替原来的多个路由,减少了路由表项的数量。把这种通过使用网络前缀来减少路由表项的方式称为路由聚合,也称为构成超网 。

在路由表中的项目由“网络前缀”和“下一跳地址”组成,在查找时可能会得到不止一个匹配结果,应当采用最长前缀匹配来确定应该匹配哪一个。

地址解析协议 ARP

ARP 实现由 IP 地址得到 MAC 地址。

每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。

如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。
在这里插入图片描述

网际控制报文协议 ICMP

Ping
Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。

Ping 的原理是通过向目的主机发送 ICMP Echo 请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。

Traceroute
Traceroute 是 ICMP 的另一个应用,用来跟踪一个分组从源点到终点的路径。

Traceroute 发送的 IP 数据报封装的是无法交付的 UDP 用户数据报,并由目的主机发送终点不可达差错报告报文。

网络地址转换 NAT

由于 IP 地址的紧缺,一个机构能申请到的 IP 地址数往往远小于本机构所拥有的主机数。并且一个机构并不需要把所有的主机接入到外部的互联网中,机构内的计算机可以使用仅在本机构有效的 IP 地址(专用地址)。

专用网内部的主机使用本地 IP 地址又想和互联网上的主机通信时,可以使用 NAT 来将本地 IP 转换为全球 IP。

在以前,NAT 将本地 IP 和全球 IP 一一对应,这种方式下拥有 n 个全球 IP 地址的专用网内最多只可以同时有 n 台主机接入互联网。为了更有效地利用全球 IP 地址,现在常用的 NAT 转换表把传输层的端口号也用上了,使得多个专用网内部的主机共用一个全球 IP 地址。使用端口号的 NAT 也叫做网络地址与端口转换 NAPT。

路由器

路由器从功能上可以划分为:路由选择和分组转发。
分组转发结构由三个部分组成:交换结构、一组输入端口和一组输出端口。
在这里插入图片描述
分组转发流程
路由表能够自动学习维护目的网络和端口关系

  1. 从数据报的首部提取目的主机的 IP 地址 D,得到目的网络地址 N。 若 N 就是与此路由器直接相连的某个网络地址,则进行直接交付;
  2. 若路由表中有目的地址为 D 的特定主机路由,则把数据报传送给表中所指明的下一跳路由器;
  3. 若路由表中有到达网络 N的路由,则把数据报传送给路由表中所指明的下一跳路由器;
  4. 若路由表中有一个默认路由,则把数据报传送给路由表中所指明的默认路由器;
  5. 报告转发分组出错。

路由选择协议
自治系统内部的路由选择:RIP 和 OSPF
自治系统间的路由选择:BGP

RIP 是一种基于距离向量的路由选择协议,实现简单,开销小。距离是指跳数,直接相连的路由器跳数为 1。跳数最多为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。

OSPF最短路径优先 ,度量用费用、距离、时延、带宽等来表示不仅仅是跳数,且相比于 RIP,更新过程收敛的很快

AS 之间的路由选择很困难,主要是由于:
互联网规模很大;
各个 AS 内部使用不同的路由选择协议,无法准确定义路径的度量;
AS 之间的路由选择必须考虑有关的策略,比如有些 AS 不愿意让其它 AS 经过。
BGP 只能寻找一条比较好的路由,而不是最佳路由。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值