面试复习之计算机网络
Posted 中二病没有蛀牙
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试复习之计算机网络相关的知识,希望对你有一定的参考价值。
真的有被问到的
arp协议和rarp协议
网络模型
OSI 的七层模型分别是?各自的功能是什么?
自下向上:
物理层:底层数据传输,如网线;网卡标准。(比特流)
数据链路层:定义数据的基本格式,如何传输,如何标识;如网卡MAC地址。(帧)
网络层:定义IP编址,定义路由功能;如不同设备的数据转发。(包)
传输层:端到端传输数据的基本功能;如 TCP、UDP。(段)
会话层:控制应用程序之间会话能力;如不同软件数据分发给不同软件。
表示层:数据格式标识,基本压缩加密功能。
应用层:各种应用软件,包括 Web 应用。
什么是信道?有几种通信方式?
信道表示向单方向传送信息的媒体,通信线路通常包含一条发送信道和一条接收信道。
单工通信:只能有一个方向的通信
半双工通信:通信双方都可以发送和接收,但不能同时发送或者同时接收
全双工通信:通信双方可以同时发送和接收
物理层(比特)
物理层的任务就是透明地传送比特流。
数据链路层
关键词:透明传输,封装成帧,差错检测,流量控制
封装成帧:添加帧头和帧尾的操作,称为封装成帧,主要目的是为了在链路上以帧为单元传输数据,从而实现数据链路层本身的功能。
差错检测
奇偶检验码
CRC循环冗余校验
数据链路层使用硬件地址
网络层
网络层的主要任务是实现网络互连,进而实现数据包在网络之间的传输。
ip地址
链路层传输需要的是物理地址MAC,网络之间通过路由器转发分组需要的地址是IP地址。
IP地址是逻辑的,MAC地址基于物理设备。
A类地址:
B类地址:
C类地址:
D类地址:
ARP
ARP协议一般指ARP。地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到硬件地址的映射表。
rarp协议
将局域网中某个主机的物理地址转换为IP地址,比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。RARP协议广泛应用于无盘工作站引导时获取IP地址。
用处:当设置一台新的机器时,其 RARP 客户机程序需要向路由器上的 RARP 服务器请求相应的 IP 地址。假设在路由表中已经设置了一个记录,RARP 服务器将会返回 IP 地址给机器,此机器就会存储起来以便日后使用。注意,RARP协议曾经作为逆向的地址解析协议和ARP配合使用,但是现在RARP协议已经被淘汰,在DHCP(动态主机配置协议)协议中已经包含了RARP的功能,所以大家现在主要关注的是ARP。
NAT(Network Address Translation,网络地址转换协议)
网络地址转换NAT
装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。
简而言之就是让专用网络可以访问外界网络
所有使用本地地址的主机在和外界通信时,都要在 NAT 路由器上将其本地地址转换成全球 IP 地址,才能和互联网连接。
原理
数据包的地址转换
NAT 路由器将数据报的源地址 IPA转换成全球地址 IPG,并把转换结果记录到NAT地址转换表中,目的地址 IPB保持不变,然后发送到互联网。
NAT 路由器收到主机 B 发回的数据报时,知道数据报中的源地址是 IPB而目的地址是 IPG。
根据 NAT 转换表,NAT 路由器将目的地址 IPG转换为 IPA,转发给最终的内部主机 A。
注意
当 NAT 路由器具有 n 个全球 IP 地址时,专用网内最多可以同时有n 台主机接入到互联网。
为了更加有效地利用 NAT 路由器上的全球IP地址,现在常用的NAT 转换表把运输层的端口号也利用上。这样,就可以使多个拥有本地地址的主机,共用一个 NAT 路由器上的全球 IP 地址,因而可以同时和互联网上的不同主机进行通信。
使用端口号的 NAT 叫做网络地址与端口号转换NAPT (NetworkAddress and Port Translation),而不使用端口号的 NAT 就叫做传统的 NAT (traditional NAT)。
传输层
提供端到端的服务
TCP和UDP对比
无连接不可靠但是很快速的UDP(面向报文)
有连接可靠但是管理麻烦的TCP(面向字节流)。
TCP是面向连接的协议,UDP是一个非连接的协议
TCP与UDP的区别:
1、基于连接与无连接;
2、对系统资源的要求(TCP较多,UDP少);
3、UDP程序结构较简单;
4、流模式与数据报模式 ;
5、TCP保证数据正确性,UDP可能丢包;
6、TCP保证数据顺序,UDP不保证。
传输控制协议 TCP(Transmission Control Protocol)
- 有连接的
- 每一条 TCP连接只能是点对点的(一对一)
- 提供可靠交付
- 全双工通信
- 有流量控制(滑动窗口),拥塞控制,面向字节流
用户数据报协议 UDP(User Datagram Protocol)
- 无连接的
- 尽最大可能交付
- 面向报文,对于应用程序传下来的报文不合并也不拆分
- 没有拥塞控制
- 支持一对一、一对多、多对一和多对多的交互通信
为什么udp是数据报模式?
UDP是无连接的协议,也就是说,只要知道接收端的IP和端口,且网络是可达的,任何主机都可以向接收端发送数据。这时候,如果一次能读取超过一个报文的数据,则会乱套。比如,主机A向发送了报文P1,主机B发送了报文P2,如果能够读取超过一个报文的数据,那么就会将P1和P2的数据合并在了一起,这样的数据是没有意义的。
TCP
三次握手
- 发送端首先发送一个带SYN(synchronize)标志的数据包给接收方【第一次的seq序列号是随机产生的,这样是为了网络安全,如果不是随机产生初始序列号,黑客将会以很容易的方式获取到你与其他主机之间的初始化序列号,并且伪造序列号进行攻击】
- 接收端收到后,回传一个带有SYN/ACK(acknowledgement)标志的数据包以示传达确认信息【SYN 是为了告诉发送端,发送方到接收方的通道没问题;ACK 用来验证接收方到发送方的通道没问题】
- 最后,发送端再回传一个带ACK标志的数据包,代表握手结束。若在握手某个过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包
四次挥手
四次挥手是 TCP 连接释放的过程,通信双方都可以释放连接:
- 第一次挥手:主机 A 向主机 B 发送连接释放报文,报文首部 FIN 设为 1,并且序号为 u,u 是已发送数据的最后一个字节序号加 1。A 进入终止等待 1 状态。
- 第二次挥手:B 收到连接释放报文后进行确认,报文首部 ACK 设为 1,确认号为 u+1,序号为 v,v 是已发送数据的最后一个字节序号加 1。同时 B 进入关闭等待状态;这个时候的 TCP 连接处于半关闭状态,也就是,A 已经没有数据需要发送,但 B 可能还会有数据。A 收到确认后,进入终止等待 2 状态,等待 B 发送连接释放报文。
- 第三次挥手:B 没有数据发往 A 了,则将发送连接释放报文,首部 FIN 设为 1,序号为 w,确认号还是 u+1,同时 B 进入最后确认状态。
- 第四次挥手:A 收到 B 的连接释放报文后,发出确认,ACK 为 1,确认号为 w+1,序号为 u+1,同时进入时间等待状态。需要等待 2MSL 后,才进入关闭状态。
为啥要等待2msl?
流量控制
流量控制就是让发送方的发送速率不要太快,让接收方来得及接受。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。TCP的窗口单位是字节,不是报文段,发送方的发送窗口不能超过接收方给出的接收窗口的数值。
实现:
a、停等协议。 滑动窗口的大小为1, 每个发送报文都要等到被确认以后,发送方才继续发送下一个报文。
b、后退n步协议。 该协议下,滑动窗口大于1,发送方可以一直发送报文,但是当接收到接收方发送的三个连续的同一序列号的ACK报文时,说明该序列号的报文是已经丢失的,那么此时重发该丢失报文以及该报文以后的报文(包括那些已经发送的)。
c、选择重传。在后退n步协议当中,如果某个报文丢失,那么将要重新发送这个丢失报文及以后的所有报文(包括已经发送的),选择重传协议不用做此要求,只要重新发送丢失的报文即可。
拥塞控制
流量控制考虑的是单纯的发送方与接收方,这两个在全部网络过程中的两个端点。而拥塞控制考虑的是整个网络,防止过多的数据注入到网络中
QUIC
QUIC ,即 快速UDP网络连接 ( Quick UDP Internet Connections ), 是由 Google 提出的实验性网络传输协议 ,位于 OSI 模型传输层。 QUIC 旨在解决 TCP 协议的缺陷,并最终替代 TCP 协议, 以减少数据传输,降低连接建立延迟时间,加快网页传输速度。
多流设计
采用错路服用思想,一个连接承载多个流可以同时发起请求
低等待延迟
将tcp与tls连接合二为一,降低延迟
更优的安全机制
前向纠错机制
采用纠错机制,每n个包发送一个校验和,前面若丢包可以使用校验和复原
连接保持
应用层
HTTP
从输入网址到出现界面发生了什么
域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。
DNS
浏览器缓存 ----> 本地hosts文件 ----> 本地DNS服务器 ----> 根DNS服务器 ----> 顶级域名服务器 ----> 管理.com的DNS服务器 ----> 本地DNS服务器
GET 和 POST
GET 一般用于获取或者查询资源信息,它是幂等的(对同一个 URL 的多个请求返回同样的结果) 和安全的(没有修改资源的状态),而 POST 一般用于更新资源信息。
采用 GET 方法时,客户端把要发送的数据添加到 URL 后面,HTTP 协议没有对 URL 长度进行限制,但浏览器和服务器对 URL 的长度存在限制,所以传递的数据量有限;并且数据是明文出现在 URL 上面,所以一般只用于传输不敏感的信息。
而 POST 把要传递的数据放到 HTTP 请求报文的请求体中;HTTP 协议也没有进行大小限制,起限制作用的是服务器的处理能力,传送的数据量比 GET 方法更大些; 由于传递的数据在消息体中, 安全性比 GET 高些
GET 请求的数据会被浏览器缓存起来,会留下历史记录;而 POST 提交的数据不会被浏览器缓存, 不会留下历史记录
mqtt
具体看:https://www.runoob.com/w3cnote/mqtt-intro.html
全称:(Message Queuing Telemetry Transport,消息队列遥测传输协议)
一个常用的物联网传输协议,毕竟真的用过,还是有被无聊的老师问到的。
基于发布/订阅(publish/subscribe)模式的"轻量级"通讯协议,该协议构建于TCP/IP协议上,MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。
MQTT协议实现方式
实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload);
(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
以上是关于面试复习之计算机网络的主要内容,如果未能解决你的问题,请参考以下文章
前端技能树,面试复习第 32 天—— 计算机网络:HTTP 状态码详解