目录
一、面试
计算机网络面试题整理了自己学过的面试题,以及网络上别人整理过的 ( ̄^ ̄)ゞ感觉很全的 (∩•̀ω•́)⊃--*⋆
https://blog.youkuaiyun.com/weixin_48554146/article/details/122799637
二、OSI模型
2.1、OSI七层模型
应用层
只关心业务逻辑,不关心数据的传输
-
应用层(Application Layer)是OSI参考模型的最高层,其功能是直接向用户提供服务。
-
它在其他6层工作的基础上,负责完成网络中应用程序与网络操作系统之间的联系
表示层
负责协商用于传输的数据格式,并装换数据格式
-
压缩和解压缩:为了减少数据的传输量,这一层还负责数据的压缩与恢复
-
数据的加密和解密:可以提高网络的安全性
会话层
负责管理两个联网实体的连接
-
两个联网实体:可以是用户端跟服务器,也可以是服务器跟服务器
-
建立连接 ---> 维持通信 ---> 释放连接
传输层
负责将数据从一个实体传输到另一个实体,但不负责数据传输的方式
-
数据分割重组:数据量大将数据拆分,并封包,后按顺序重组
-
纠错:在数据传输过程中出现问题后采取方式进行纠正
-
管理连接:处理数据的频繁交换
-
流量控制:控制传输数据的速率
-
端口寻址:我们通常说的,TCP UDP就是在这一层,端口号既是这里的“端”
网络层
负责把一个封包从一个IP地址传输到另一个IP地址
-
路由算法:目的在于防止阻塞,并进行差错检测
-
这一层就是我们经常说的IP协议层,IP协议是Internet的基础
数据链路层
确保两个临近设备间数据的传输,并隐藏底层实现
-
将比特组合成字节,再将字节组合成帧,使用链路层地址 (以太网使用MAC地址)来访问介质,并进行差错检测
-
数据链路层又分为2个子层:逻辑链路控制子层(LLC)和媒体访问控制子层(MAC)
物理层
封装和隐藏具体的传输手段,并且提供稳定的传输接口
-
蓝牙、WIFI、光纤。。。
-
通过物理介质传输比特流
2.2、五层模型与OSI模型区别
分层设计较为臃肿,并非每一层都为必要
-
删除了会话层,会话是虚拟概念不是必须的
-
删除了表现层,数据压缩、数据格式转换不是应用必须的
三、TCP/IP协议群
3.1、需要解决协议群的五个问题
1.报文拆分
-
数据量大,网络底层设备不支持
-
复用路径
2.增加协议头
数据分块后在接手端需要重组,所以需要使用头部来添加一些描述字段
3.数据在相邻设备间数据传递
4.路由和寻址
5.数据重组
3.2、TCP
连接
-
是虚拟、抽象的概念
-
能让两个通信的程序间确保彼此都在线
-
加快响应请求速度
-
连接也被称为会话(Session)
-
使通信更稳定、安全
-
消耗更多资源
全双工
-
单工:任何时刻数据只能单向发送
-
半双工:允许数据在两个方向上传输,在某一时刻,只允许数据在一个方向上传输
-
全双工:任何时刻都能双向发送数据,至少需要两条链路
无损传输
-
使无序的数据恢复原有顺序
-
多个接收方时,都能收到无损副本
3.2.1、TCP三次挥手、四次握手
-
连接过程(三次握手)
-
断开连接过程(四次挥手)
【注意】中断连接端可以是Client端,也可以是Server端
确认应答 和 超时重传是 TCP 可靠性中最核心的机制
3.2.2、传输数据
报文拆分
顺序保证
可自行百度搜索TCP滑动窗口,来查看TCP端特别多的时候,该如何排序
-
TCP序号:发送序号(Seq)、接受序号(Ack)
-
一个端的发送序号是另一个端的接受序号
TCP头-9个标志位
-
NS、CWR、ECN:TCP扩展协议
-
ECN:显示拥塞控制协议,有助于帮助解决延迟和丢包问题
-
URG:紧急标志位,像远程控制服务器,按CTRL+C
-
SYN(Synchronization sequence number):同步序号
-
FIN(finish):终止连接
-
ACK(Achnowledgment):响应
-
PSH(push):传送数据
-
RST(Rest Connection):重置连接
3.2.3、TCP协议周边配置
-
纠错能力:保证数据可靠性
-
拥塞控制能力:网络拥堵的时候,传输慢一点
-
Checksum:是一个函数,把原文映射到一个不可逆的16bit的编码中,这样就可以知到原文传输过程中有没有发生变化,发生变化就不接受,另一端自动会发送一份新的
-
流控能力:让两端协商一个合理的收发速率,利用滑动窗口
3.3、IP协议
3.3.1、IPv4协议
寻址
IPv4地址(32位:4*8):逐级寻址
寻址过程
寻址步骤
1 & 1 = 1 , 1 & 0 = 0 , 0 & 1 = 0 , 0 & 0 = 0
-
1-找到顶层网络:
最顶层的网络号和子网掩码做位运算得到:顶层网络
103.16.3.1 & 255.0.0.0 = 103.0.0.0(顶层网络)PS:255=111
-
2-找到下一层网络
用IP地址和下一级的子网掩码做位与得到:下一级网络
103.16.3.1 & 255.255.0.0 = 103.16.0.0(下一级网络)
-
3-找到再下一层网络
使用255.255.255.0子网掩码找到下一级网络:
103.16.3.1 & 255.255.255.0 = 103.16.3.0(再下一级网络)
-
4-定位设备
设备就在子网 103.16.3.0 中,最终找到设备号是 1
子网掩码不一定都是255,默认是255而已
路由
-
若寻找的IP地址不在局域网中,需要路由找到去往对应网络的路径
-
IP地址和子网掩码位与的过程是由路由算法实现的
3.3.2、IPv6协议
IPv4只能支持43亿设备,不够用
IPv4协议与IPv6协议区别
区别一:地址
-
地址数量:IPv4有4个8位,共32位,IPv6有8个16位,共128位
-
分割符号:
-
IPv4地址用 .分割,如 103.28.7.35 每一个是8位,用0-255的数字表示
-
IPv6地址用 :,如 0123:4567:89ab:cdef:0123:4567:89ab:cdef,每个是一个16位的16进制数字,就是4个符
-
-
书写方式:IPv6地址可简写
区别二:寻址
-
全局单播
-
站点前缀(Site Prefix):48bit,一般是由ISP,或者RIR(地区性互联网注册机构),将IP地址分配给运营商
-
子网号(Subnet ID):16bit,用于站点内部区分子网
-
接口号(Interface ID):64bit,用于站点内部区分设备
-
-
本地单播
定义:给定地址,本地网定位设备
例子:fe80::123e:456d。Link-local必须以fe80开头
扩展:fe80开头就像169.254.x.x,是这个网段里没人给你分ip,自动协商的地址,其地址不能在网络上路由,也就是说,通常无法用于上网 。现在各大运营商用的ipv6
电信是240e开头的(240e::/20)
移动是2409开头的(2409:8000::/20)
联通是2408开头的(2408:8000::/20)
其他一些标记有teredo也不是原生ipv6
-
多组多播
-
需要以8个1,也就是 ff00 开头,后面跟上一个分组的编号
-
所在的网络中已经定义了该分组编号,而且有设备可以识别这个编号
-
拥有分组下设备的完整清单,并把数据发送给对应的设备们
-
IPv4也支持分组多播,但需要网络配置整体配合
-
区别三:新设备接入
新设备接入IPv6后,会使用IPv6的邻居发现协议(ND协议)为自己申请一个IP地址。当新设备需要发送信息到达目的地时,还可以通过ND协议广播查询目标设备。如果还需要路由,还可以通过ND查找路由器
传统:ARP协议(地址解析协议)每个节点存储许多额外信息
IPv6:更加无状态化,减少数据冗余带来的风险和负担
四、UDP协议
出生晚
协议简单,搭建在IP协议之上
尽可能的减少通信机制,速度非常快
UDP协议的RFC只有两页
在传输层提供直接发送报文的能力,报文时数据传输的最小单位
发送报文,无法拆分数据
为什么不能直接调用IP协议?
IP协议只能把数据从一个网络接口发送到另一个网络接口,无法寻址到应用
UDP的封包格式
设计目标:允许用户直接发送报文的情况下最大限度的简化应用的设计
TCP与UDP区别
扩展
聊天室是否适合UDP?
不合适,聊天室并发高但流量不大,依赖可靠性
HTTP协议适不适合UDP?
合适,HTTP3.0就是建立在UDP上的
五、Wireshark
是世界上应用最广泛的网络协议分析器
在微观层面上看到整个网络正在发生的事情
Wireshark功能集
-
深入检查数百个协议,并不断添加更多协议
-
实时捕获和离线分析
-
支持Windows、Linux、macOS、Solaris。。。好多平台
-
提供GUI浏览,也可以通过TTY(命令行)
-
VoIP支持
-
Gzip支持
-
IPSec支持
六、Socket编程
线程模型
Socket模型位置
socket编程偏底层,学了可以加深对网络编程的理解,如果有时间的话可以学。但是还是建议要先把应用先学好,如果不是将来打算去做中间件的开发,socket编程了解一下即可
七、HTTP协议
目标:处理客户端和服务端之间的通信
请求
一次请求,分成请求头(Header)和请求体(Body),下面是一个请求头+请求体的实例
返回
一次返回,分成返回头(Header)和消息体(Body),200:状态码,OK:状态码的描述
URL
统一资源定位器(用输入法输入URL自动就显示)
DNS
DNS(Domain Name System):域名解析系统
DNS 查询分级缓存策略(DNS Query)
找缓存顺序:浏览器 ---> 操作系统 ---> 本地服务商 ---> 根服务器
-
先查询浏览器的本地缓存(通常在内存中)
-
本地没找到,查找操作系统的 host 文件,该文件在 Linux 中在 /etc/hosts 里
-
上述还没找到,DNS会查询本地服务提供商(ISP)
-
ISP没找到,请求指向ROOT根服务器,返回顶级域名服务器地址
-
浏览器发送请求给顶级域名服务器,返回权威域名服务器地址
-
浏览器发送 Lookup 请求给权威域名服务器,找到具体DNS记录,返回给浏览器
DNS概述
DNS的数据以记录形式存储,就叫DNS记录。DNS记录的种类非常多,有30多种,每条记录描述了网址(URL)的一种关系
CDN
CDN:将请求分散到全世界各地,分发流量,加快访问速度
HTTPS和HTTP2.0及同源策略比较干。。。https://blog.youkuaiyun.com/weixin_48554146/article/details/122793344