IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络面试题 -> 正文阅读

[网络协议]计算机网络面试题

计算机网络

OSI七层模型自底向上

1、物理层
物理层就是实体层,我们的电脑需要联网,首先需要网线(包括光缆,电缆,无线电波),主要规定网络传输的一些电器特性

机械特性:例接口形状,大小,引线数目
电气特性:例规定电压范围(-5V到+5V)
功能特性:例规定-5V表示),+5V表示1
过程特性:也称规程特性,规定建立连接时各个相关部件的工作步骤

这些特性的作用是传输0和1组成的电信号,但是单纯传输这些是没有意义的,所以要引出数据链路层。

2、数据链路层

以太网帧,就是由一组电信号构成的一个数据包

head称为标头(固定长度18byte),date(46~1500byte)即数据。标头中包括数据包的说明项(如发送者,接受者,数据类型等),如果数据长度大于1518的话,数据就不得不分为多个组发送

head中的发送者和接受者使用Mac地址标识的(通常是12个16进制数,长度为48bit)

以太网数据包必须知道Mac地址才能发送数据,采用的是广播的形式,向本网络的所有计算机发放,然后每台收到数据的计算机用标头中的接收方的Mac地址和自己的Mac地址比对,相同就接受,不同就丢弃。

在同一子网中用广播还可以,但是如果不属于同一子网,用以太网广播形式来发送数据显然是不现实的,所以在不属于同一子网络下传输数据,就出现路由的方式发送数据,路由的意思就是如何向不同的子网去发送数据包,而Mac地址只与厂商有关,和网络环境无关,这就导致了网络层的诞生。

3、网络层

网络层引入了一套新的地址,让我们能够区分不同计算机是否在同一子网内,这个地址即为网址,于是计算机就有了两个地址,一个是Mac地址,绑在网卡上,一个就是ip地址,由管理员分配。

ip地址确定计算机所在的子网络,Mac地址负责把数据包发送到子网络中的目标网卡上,逻辑上就能知道是先处理网络地址然后再处理Mac地址,由此又引入ip协议

ipv4:用子网掩码判断网络部,网络部相同则为同一子网

ip数据包也分为标头和数据两部分

ip数据包的标头(20~60byte)主要包含版本号、长度、ip的地址信息,ip数据包直接放入以太网数据包的数据部分(最大65515byte,date大小超过做大值时要分成多个数据包)

通常发送数据的情况,对方的ip地址是已知的,但是Mac地址并不知道,于是就有了ARP协议

ARP协议:当两个想要交互信息的计算机不处于同一子网时,没法知道对方的Mac地址,只能将数据包传送到两个子网络连接的网关处理,来查询对方的Mac地址,也就是通过ip地址来查询Mac地址

先发出一个数据包,此包中包含被查询主机的ip地址,和一个广播的6组16位Mac地址,于是此子网下所有计算机都会接收到该数据包,收到后就会取出包里面的查询的IP地址,然后和自己的ip地址进行比对,相同就会做回复,并报上自己的Mac地址,不相同就会丢弃该包,在得到Mac地址后就可以发数据发送到主机,引出一个问题,当我们打开了多个程序时,我们接收到一个数据包,如何知道他是属于哪一个程序的,于是引出一个参数,端口。

端口:每一个数据包发送到主机特定的端口上,所以不同程序会取到自己的数据,端口都是0-65535之间的整数,也就是16个二进制位,其中1-1023是系统占用的

4、传输层

传输层的功能就是建立端口到端口之间的通信,相比之下,网络层是主机与主机之间的通信,只要确定了主机和程序,就可以实现程序之间的交流,所以Unix系统中把主机加端口叫套接字(socket),网络编程有两个协议:

  • UDP协议

格式就是在数据前加上端口号,UDP也由标头和数据包组成,标头部分定义发出端口和接收端口,date部分为具体内容,然后UDP 数据包又放在ip数据包的数据部分,前面说过ip数据包又是放在以太网数据包中

UDP的标头部分只有8个字节,总长度不超过65535字节,正好可以放进一个ip数据包,优点:简单易实现,缺点:可靠性差。于是引入了TCP协议

  • TCP协议

有确认机制,每发出数据包都进行确认,有遗失就进行重发,三次握手,可以保证数据不会丢失,缺点是过程实现复杂,消耗资源大,TCP数据包长度不超过ip数据包长度即可,确保TCP包不被分割

TCP是面向连接的(先确立连接再发送数据)

UDP是无连接的(发送数据前不需要建立连接)

5、会话层

负责两个节点的传输连接,以便确保点到点传输不中断,以及管理数据交换等功能。

主要内容是通过会话进行身份认证,会话管理和通讯方式,一但建立连接,会话层的任务就是管理会话

6、表示层

用于处理在两个通信系统中交换信息的表示方法,主要是解释通讯数据的意义,如代码转换、格式变换,使不同终端可以表示,数据加密与解密,压缩与恢复等功能

7、应用层

以上几层仅为应用程序提供了端到端的通信服务,但不同的网络应用的应用进程之间,还需要有不同的通信规则,因此还需要有应用层协议

主要功能:文件传输,访问和管理,电子邮件,虚拟终端,查询服务和远程作业登录等

DNS协议:

域名系统DNS能够把互联网上的主机名字转为ip地址

互联网的域名系统DNS被设计成为一个联机分布式数据库系统,采用客户服务器方式

当某一个应用进程需要把主机名解析为ip地址时,该应用进程就调用解析程序,成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP为了减小开销)。本地域名服务器在查找域名后,把对应的ip地址放在回答报文中返回,应用进程获得目的主机的ip地址后即可进行通信。

解析过程

1、浏览器缓存:浏览器会按照一定的频率缓存DNS记录

2、操作系统缓存:如果在这里制定了一个域名对应的ip地址,那浏览器会首先使用这个ip地址

3、如果还没有命中,才会请求本地域名服务器来解析这个域名,这个服务器在你的城市的某个角落,距离不会太远,性能会很好,一般都会缓存域名解析结果,绝大多数的域名解析在这里就完成了

4、如果还没有命中,就直接跳到根域名服务器域名解析服务器来请求解析

5、根域名服务器返回给本地域名服务器顶尖域名服务器的地址

6、接受请求的顶尖域名服务器查找并返回储存所查询域名的的权限服务器地址(网站在哪里注册,权限域名服务器就是谁负责部署管理),如果有多级域名,则有多步权限域名服务器,最后一层权限域名服务器的查询服务器就有所负责的部门来完成

7、权限域名服务器根据映射关系表找到目标ip,返回给本地缓存,再返回给用户

超文本传输协议HTTP:

当用户在浏览器的地址栏中输入所要访问Web的URL以后,HTTP的处理过程即会开始,HTTP中默认的端口是80端口,它的工作机制,首先是客户端向服务器的80端口建立一个TCP连接,然后再这个连接上进行请求和应答以及数据报文的发送。

一次HTTP操作称为一个事务,其工作整个过程如下:

1、DNS地址解析获得主机的IP地址2、封装http请求数据包3、封装成TCP包,建立TCP连接(TCP的三次握手)4、客户 5、服务器响应 6、服务器关闭TCP连接

HTTP协议和HTTPS协议区别及优缺点:

1)HTTP协议是以明文的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密后的,HTTPS具有更高的安全性
2)HTTPS在TCP三次握手阶段之后,还需要进行SSL 的handshake,协商加密使用的对称加密密钥
3)HTTPS协议需要服务端申请证书,浏览器端安装对应的根证书
4)HTTP协议端口是80,HTTPS协议端口是443

HTTPS优点:

HTTPS传输数据过程中使用密钥进行加密,所以安全性更高
HTTPS协议可以认证用户和服务器,确保数据发送到正确的用户和服务器

HTTPS缺点:

HTTPS握手阶段延时较高:由于在进行HTTP会话之前还需要进行SSL握手,因此HTTPS协议握手阶段延时增加
HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身的安全性,所以需要购买CA证书;另一方面由于采用HTTPS协议需要进行加解密的计算,占用CPU资源较多,需要的服务器配置或数目高

简述一下 TCP/IP

TCP/IP 意味着 TCP 和 IP 在一起协同工作。
TCP 负责应用软件(比如您的浏览器)和网络软件之间的通信。
IP 负责计算机之间的通信。
TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。
IP 负责将包发送至接受者。

TCP 与 UDP 的区别,应用场景

1. 连接

TCP: 是面向连接的传输协议,即:传输数据之前必须先建立好连接。

UDP: 是属于无连接的传输协议。

2. 服务对象

TCP: 是点对点的两点之间的服务,即:一条TCP连接只能有两个端点。

UDP: 支持一对一、一对多、多对一、多对多的交互通信。

3. 可靠性

TCP: 是可靠的传输协议,进行的是可靠交付,即:无差错、不丢失、不重复、按序到达等。

UDP: 是不可靠的传输协议,只是尽最大努力交付,不能保证可靠交付。

4. 拥塞控制&流量控制

TCP: 有拥塞控制和流量控制保证数据传输的安全性。

UDP: 没有拥塞控制,当网络拥塞时不会影响源主机的发送效率。

5. 报文长度

TCP: 属于“动态报文长度”,即:TCP的报文长度是根据接收方的窗口大小和当前网络拥塞情况来决定的。

UDP: 是面向报文的,它是保留上面传下来的报文边界,不合并,不拆分。

6. 首部开销

TCP: 首部开销大,因为首部就占了20个字节。

UDP: 首部开销相对小一点,只占了8个字节。

应用场景

TCP 是可靠的传输协议,但传输速度慢;
TCP的适用场景: 要求通信数据的完整性和准确性较高,eg: 文件传输、邮件发送与接收、重要状态的更新等。

而UDP 是不可靠的传输协议,但传输速度快;
UDP的适用场景: 要求通信的响应度高,对数据信息的安全性和完整性要求相对较低,常用于实时通信,eg: 网络电话、网络视频、实时通信等

三次握手

  • 第一次握手:起初两端都处于关闭状态,发起端将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给接收端,发起端进入到SYN-sent状态,等待接收方确认
  • 第二次握手:接收端收到数据包,由SYN=1得知发起方想要请求连接,所以接收端也将SYN置为1,ACK置为1,ack=x+1(意思是确认接收到你的数据包了),随机产生一个值seq=y,并将该数据包发送给发起端,确认连接请求,接收端进入到SYN-rcvd状态,此时操作系统为该TCP连接分配缓存和变量
  • 第三次握手:发起端收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则连接建立成功,两端进入establish,可以开始传输数据了

四次挥手

由于TCP连接是全双工的,因此, 每个方向都要单独进行关闭,就是当一方完成数据发送任务后发送一个FIN(final)来终止这一方向的连接,收到FIN意味着在这一方向不会在收到数据了,但是接收到FIN仍可以发送数据,一直到这一端也发送了FIN,首先进行关闭的一方将执行主动关闭,另一方执行被动关闭

  • 第一次挥手:发起端应用进程发出连接释放报文,并停止发送数据,客户端进入FIN-WAIT-1状态(此时发起端仍然可以收到接收端发来的数据)
  • 第二次挥手:接收端收到FIN后,立刻发送一个ACK给客户端,确认序号为收到的序号加1,接收端进入到CLose-wait状态(因为接收端还有数据没发完),客户端收到后进入FIN_WAIT_2状态。
  • 第三次挥手:当接收方也没有数据要发送时,接收方发送一个FIN,此时服务器进入LAST-ACK状态,等待客户端的确认
  • 第四次挥手:发起端收到接收端的FIN后,给服务端发送一个ACK,同样确认序号为收到序号+1,此时发起端进入TIME_WAIT状态,等待2MSL(报文段最大生存时间)然后关闭连接

等待 2MSL 的原因:

  • MSL 是最大报文段寿命,等待 2MSL 可以保证 A 发送的最后一个确认报文被 B 接收,如果该报文丢失,B 会超时重传之前的 FIN+ACK 报文,保证 B 正常进入 CLOSED 状态。

  • 2MSL 后,本连接中的所有报文就都会从网络中消失,防止已失效请求造成异常。

拜占庭将军问题

描述的是分布式系统的除了存在故障行为,还存在恶意行为的场景
讲的是 有多个节点, 如何就某个计划达成一致性的问题, 节点与节点之间只能通过消息来通信, 但是在互相通信的过程中可能存在通讯故障或者消息丢失 , 消息被劫持伪造, 节点被劫持发送错误信息等问题.

解决办法一:口信消息型

  • 每个被发送的消息都能够被正确投递
  • 信息接受者知道消息是谁发的
  • 沉默(不发消息)可以被检测

口头协议的算法很简单,如果其中一个节点,比如1发布消息出去,2、1、0都接受到1的消息,然后2、1、0也分别转告给其他的节点,每个节点都是信息的转达者,一轮下来,每个节点手上都会有10个信息(进攻或者撤退),有叛徒的话,那信息可能有进攻或者不进攻的不一致消息。每个人相当于手里有一本消息的账本,该怎么决策呢?如果有一半以上的人说进攻,那么采取进攻行动就是能成功的,所以这时即便有叛徒,只要听大部分人的,少数服从多数来行动即是有利的。
缺点:口头协议并不会告知消息的上一个来源是谁,也就是消息不可追根溯源,出现信息不一致也很难找到叛徒在哪

解决方案二:用书面协议

  • 使用签名技术,签名不可伪造,一旦篡改即可发现
  • 任何人都可以验证签名的可靠性
  • 书面协议相比口头协议,所有的消息都是有记录的,解决了追根溯源的问题

终极解决方案:区块链技术
一段时间内只有一个节点可以传播信息,节点必须完成一个计算工作才能向各节点传播消息,当某个节点发出统一进攻的消息后,各个节点收到发起者的消息必须签名盖章,确认各自的身份,引用非对称加密技术为这个信息签名,每个节点都有一份实时与其他节点同步的消息账本。
账本里有每个节点的签名都是可以验证身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些节点。
尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成。
由此,在一个分布式的系统中,尽管有坏人,坏人可以做任意事情(不受protocol限制),比如不响应、发送错误信息、对不同节点发送不同决定、不同错误节点联合起来干坏事等等。但是,只要大多数节点是好人,就完全有可能去中心化地实现共识

TCP协议如何保证可靠传输

  1. 应用数据被分割成 TCP 认为最适合发送的数据块。
  2. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传输给应用层
  3. 校验和:TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化,如果收到段的检验和有差错,TCP将丢弃这个报文而且不确认收到此报文段
  4. TCP端会丢弃重复的数据
  5. 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
  6. 拥塞控制:如果把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵(大家都在用网,你在这狂发,吞吐量就那么大,当然会堵),甚至造成网络的瘫痪。所以TCP在为了防止这种情况而进行了拥塞控制。
    慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答(经过一个rtt),将拥塞窗口大小*2。
    拥塞避免:设置慢启动阈值,一般开始都设为65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答/每个rtt,拥塞窗口大小+1),以此来避免拥塞。
    将报文段的超时重传看做拥塞,则一旦发生超时重传,我们需要先将阈值设为当前窗口大小的一半,并且将窗口大小设为初值1,然后重新进入慢启动过程。
  7. 停止等待协议:也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-07-22 14:35:20  更:2021-07-22 14:37:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 17:21:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码