OSI 七层模型
OSI
七层模型包括物理层、数据链路层、网络层、运输层、会话层、表示层、应用层,其中会话层、表示层、应用层一般统称为应用层,在TCP/IP
四层模型中物理层与数据链路层归为网络接口层,网络层与运输层是单独的层级,会话层、表示层、应用层归为应用层。
物理层
物理层的主要任务描述为确定与传输媒体的接口的一些特性,提供用于建立、保持和断开物理连接的机械的、电气的、功能的和过程的条件,也就是说物理层提供有关同步和比特流在物理媒体上的传输手段。
信号相关概念
单向通信,也称单工通信,只能有一个方向的通信而没有反方向的交互。
双向交替通信,也称半双工通信,通信的双方都可以发送信息,但不能双方同时发送,也不能同时接收。
双向同时通信,也称全双工通信,通信的双方可以同时发送和接收信息。
基带信号,即基本频带信号,来自信源的信号,像计算机输出的代表各种文字或图像文件的数据信号都属于基带信号。
带通信号,把基带信号经过载波调制后,把信号的频率范围搬移到较高的频段以便在信道中传输,即仅在一段频率范围内能够通过信道。
基本二元调制方法
调幅
AM
:载波的振幅随基带数字信号而变化。调频
FM
:载波的频率随基带数字信号而变化。调相
PM
:载波的初始相位随基带数字信号而变化。
信道复用
频分复用
FDM
: 将用于传输信道的总带宽划分成若干个子频带或称为子信道,每一个子信道传输1
路信号。时分复用
TDM
: 时分复用则是将时间划分为一段段等长的时分复用帧TDM
帧,每一个时分复用的用户在每一个TDM
帧中占用固定序号的时隙。统计时分复用
STDM
: 根据用户实际需要动态分配线路资源的时分复用方法,只有当用户有数据要传输时才给他分配线路资源。波分复用
WDM
: 就是光的频分复用。码分复用
CDM
: 靠不同的编码来区分各路原始信号,有码分多址,频分多址、时分多址和同步码分多址等相关技术。
数据链路层
数据链路层用于建立、维持和拆除链路连接,实现无差错传输的功能。将比特组合成字节,再将字节组合成帧,使用链路层地址,在以太网使用MAC
地址,来访问介质,并进行差错检测。
基本功能
封装成帧: 在一段数据的前后分别添加首部和尾部,然后就构成了一个帧,确定帧的界限。
透明传输: 当帧中出现控制字符时便插入一个转义字符,通常采用字符填充或零比特填充的方式。
差错控制: 由于物理线路存在噪声,可能出现比特差错,可以采用纠错码或检测码的方式进行差错控制,由于纠错码较为复杂且携带较多冗余信息,一般采用检测码配合重传机制,一般常用检测码是循环冗余编码
CRC
。
PPP 协议
简单
封装成帧
透明性
多种网络层协议
多种类型链路
差错检测
检测连接状态
最大传送单元
网络层地址协商
数据压缩协商
以太网 CSMA/CD 协议
多点接入: 许多计算机以多点接入的方式连接在一根总线上。
载波监听: 每一个站在发送数据之前先要检测一下总线上是否有其他计算机在发送数据,如果有,则暂时不要发送数据,以免发生碰撞。
碰撞检测: 也称为冲突检测,当总线上至少有两个站同时在发送数据,表明产生了碰撞。
半双工通信: 通信的双方都可以发送信息,但不能双方同时发送,也不能同时接收。
争用期: 将端到端往返时延称为争用期,经过争用期这段时间还没有检测到碰撞,就能肯定这次发送不会发生碰撞,以太网取
51.2
微秒为争用期。二进制指数类型退避算法: 发生碰撞的站在停止发送数据后,要推迟一个随机时间才能再发送数据。
最短有效帧长: 如果发生冲突,就一定是在发送的前
64
字节之内,以太网规定凡长度小于64
字节的帧都是由于冲突而异常中止的无效帧。透明网桥: 网桥通过自学习和转发帧以及生成树算法,记录
MAC
地址和接口信息,生成转发表,从而拓展局域网。
网络层
网络层规定了网络连接的建立、维持和拆除的协议,它的主要功能是利用数据链路层所提供的相邻节点间的无差错数据传输功能,通过路由选择和中继功能,实现两个系统之间的连接。
采用设计
网络层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。
网络在发送分组时不需要先建立连接。每一个分组即
IP
数据报,独立发送,与其前后的分组无关,即不进行编号。网络层不提供服务质量的承诺,即所传送的分组可能出错、丢失、重复和失序,也不保证分组传送的时限。
虚电路与电路交换
虚电路表示这只是一条逻辑上的连接,分组都沿着这条逻辑连接按照存储转发方式传送,而并不是真正建立了一条物理连接。
电路交换的电话通信是先建立了一条真正的连接,因此分组交换的虚连接和电路交换的连接只是类似,但并不完全一样。
虚电路与数据报
IP 地址分类
A
类地址: 网络号字段Net-Id
为1
字节,主机号字段Host-Id
为3
字节。B
类地址: 网络号字段Net-Id
为2
字节,主机号字段Host-Id
为2
字节。C
类地址: 网络号字段Net-Id
为3
字节,主机号字段Host-Id
为1
字节。D
类地址: 多播地址。E
类地址: 保留为今后使用。
ARP 协议
不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件``MAC`地址。
每一个主机都设有一个
ARP
高速缓存,里面有所在的局域网上的各主机和路由器的IP
地址到硬件MAC
地址的映射表。ARP
是解决同一个局域网上的主机或路由器的IP
地址和硬件MAC
地址的映射问题。
ICMP 协议
ICMP
报文的种类有两种,即ICMP
差错报告报文和ICMP
询问报文。ICMP
协议主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到IP
数据无法访问目标、IP
路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP
消息,ping
命令就是基于ICMP
协议。
划分子网方式
从主机号借用若干个位作为子网号
Subnet-id
,而主机号Host-Id
也就相应减少了若干个位。使用子网掩码标识将
IP
地址划分成网络地址和主机地址两部分。使用无分类域间路由选择
CIDR
,在IP
地址后面加上一个斜线/
,然后写上网络前缀所占的位数,将网络前缀都相同的连续的IP
地址组成CIDR
地址块。
路由协议
内部网关协议
IGP
,即在一个自治系统内部使用的路由选择协议,目前这类路由选择协议使用得最多,如RIP
和OSPF
协议。外部网关协议
EGP
,若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时,就需要使用一种协议将路由选择信息传递到另一个自治系统中,这样的协议就是外部网关协议EGP
,在外部网关协议中目前使用最多的是BGP-4
。
RIP 协议
仅和相邻路由器交换信息。
交换的信息是当前本路由器所知道的全部信息,即自己的路由表。
按固定的时间间隔交换路由信息。
RIP
存在的一个问题是当网络出现故障时,要经过比较长的时间才能将此信息传送到所有的路由器。RIP
协议最大的优点就是实现简单,开销较小。RIP
限制了网络的规模,它能使用的最大距离为15
,16
表示不可达。路由器之间交换的路由信息是路由器中的完整路由表,因而随着网络规模的扩大,开销也就增加。
OSPF 协议
向本自治系统中所有路由器发送信息,这里使用的方法是洪泛法。
发送的信息就是与本路由器相邻的所有路由器的链路状态,但这只是路由器所知道的部分信息,链路状态就是说明本路由器都和哪些路由器相邻,以及该链路的度量。
只有当链路状态发生变化时,路由器才用洪泛法向所有路由器发送此信息。
由于各路由器之间频繁地交换链路状态信息,因此所有的路由器最终都能建立一个链路状态数据库。
这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的,这称为链路状态数据库的同步。
OSPF
的链路状态数据库能较快地进行更新,使各个路由器能及时更新其路由表。OSPF
的更新过程收敛得快是其重要优点。OSPF
规定每隔一段时间刷新一次数据库中的链路状态。OSPF
没有坏消息传播得慢的问题。一个路由器的链路状态只涉及到与相邻路由器的连通状态,因而与整个互联网的规模并无直接关系,当互联网规模很大时,
OSPF
协议表现要比距离向量协议RIP
好。
BGP 协议
BGP
是不同自治系统的路由器之间交换路由信息的协议。每一个自治系统的管理员要选择至少一个路由器作为该自治系统的
BGP
发言人。一个
BGP
发言人与其他自治系统中的BGP
发言人要交换路由信息,就要先建立TCP
连接,然后在此连接上交换BGP
报文以建立BGP
会话,利用BGP
会话交换路由信息。使用
TCP
连接能提供可靠的服务,也简化了路由选择协议。使用
TCP
连接交换路由信息的两个BGP
发言人,彼此成为对方的邻站或对等站。
内网 IP 段
A
类:10.0.0.0 - 10.255.255.255
B
类:172.16.0.0 - 172.31.255.255
C
类:192.168.0.0 - 192.168.255.255
运输层
运输层完成网络各层次之间的数据传送控制,主要功能是开放系统之间的数据的收发确认,同时还用于弥补各种通信网络的质量差异,对经过下三层之后仍然存在的传输差错进行恢复,进一步提高可靠性,另外,还通过复用、分段和组合、连接和分离、分流和合流等技术措施,提高吞吐量和服务质量。
TCP 协议
TCP
是面向连接的协议,提供全双工通信,需要建立链接之后再传输数据,数据传输负载相对较大。TCP
提供可靠交付的服务,使用流量控制和拥塞控制等服务保证可靠通信。TCP
首部最小20
字节,最大60
字节,包括源端口、目的端口、序号、确认号、数据偏移、控制标志、窗口、校验和、紧急指针、选项等信息。TCP
只能是一对一通信。TCP
面向字节流通信。TCP
保证数据传输的顺序,通过给TCP
连接中传送数据流的每个字节都编上序号来确定传输顺序。TCP
提供校验和、确认应答、序列号、超时重传、连接管理、流量控制、拥塞控制等功能。TCP
适用于要求可靠传输的应用,如文件传输等
三次握手
第一次握手:客户端主动链接服务器,发送初始序列号
seq=x
与SYN=1
同步请求标志,并进入同步已发送SYN_SENT
状态,等待服务器确认。第二次握手:服务端收到消息后发送确认标志
ACK=1
与同步请求标志SYN=1
,发送自己的序列号seq=y
以及客户端确认序号ack=x+1
,此时服务器进入同步收到SYN_RECV
状态。第三次握手:客户端收到消息后发送确认标志
ACK=1
,发送自己的序列号seq=x+1
与服务器确认号ack=y+1
,发送过后即确认链接已建立状态ESTABLISHED
,服务端接收确认信息后进入链接已建立状态ESTABLISHED
四次挥手
第一次挥手:客户端发出释放标识
FIN=1
,自己的序列号seq=u
,进入终止等待FIN-WAIT-1
状态第二次挥手:服务端收到消息后发出
ACK=1
确认标志和客户端的确认号ack=u+1
,自己的序列号seq=v
,进入关闭等待CLOSE-WAIT
状态,客户端收到消息后进入终止等待FIN-WAIT-2
状态第三次挥手:服务器发送释放标识
FIN=1
信号,确认标志ACK=1
,确认序号ack=u+1
,自己的序列号seq=w
,服务器进入最后确认LAST-ACK
状态第四次挥手:客户端收到回复后,发送确认标志
ACK=1
,确认序号ack=w+1
,自己的序列号seq=u+1
,客户端进入时间等待TIME-WAIT
状态,经过2
个最长报文段寿命后,客户端CLOSE
。服务器收到确认后,立刻进入CLOSE
状态。
传输控制
流量控制: 利用滑动窗口实现流量控制,让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞。
拥塞控制慢开始,只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去,但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。拥塞避免,无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞,就要把慢开始门限设置为出现拥塞时的发送方窗口值的一半。快重传: 首先要求接收方每收到一个失序的报文段后就立即发出重复确认,这样做可以让发送方及早知道有报文段没有到达接收方,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。快恢复: 当发送端收到连续三个重复的确认时,就执行乘法减小算法,把慢开始门限减半,但接下去不执行慢开始算法,而是设置为慢开始门限减半后的数值,然后开始执行拥塞避免算法加法增大,使拥塞窗口缓慢地线性增大。
超时重传: 一般使用
Karn
算法,当计算平均往返时延RTT
时,只要报文段重传了,就不采用其往返时间样本,这样得出的加权平均平均往返时间RTT
和超时重传时间RTO
就较准确。
连续 ARQ 协议
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
累积确认有的优点是:容易实现,即使确认丢失也不必重传。缺点是:不能向发送方反映出接收方已经正确收到的所有分组的信息。
UDP 协议
UDP
是无连接的,即发送数据之前不需要建立连接,数据传输负载相对较小。UDP
使用尽最大努力交付,即不保证可靠交付,同时也不使用流量控制和拥塞控制。UDP
首部8
字节,包括源端口、目的端口、长度、校验和信息。UDP
具有单播、多播、广播的功能,支持一对一、一对多、多对多、多对一的数据传输方式。UDP
是面向报文通信,对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界,在添加首部后就向下交付IP
层。UDP
不保证数据传输的顺序,需要应用层程序在数据段加入序号等方式控制顺序。UDP
只在IP
的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。UDP
适用于实时应用,如网络电话、视频会议、直播等
应用层
一般将会话层、表示层、应用层归为为应用层。
会话层
会话层依靠传输层以下的通信功能使数据传送功能在开放系统间有效地进行。其主要功能是按照在应用进程之间的约定,按照正确的顺序收发数据,进行各种形式的对话。控制方式可以归纳为以下两类:一是为了在会话应用中易于实现接受处理和发送处理的逐次交替变换,设置某一时刻只有一端发送数据。因此需要有交替改变发信端的传送控制。二是在类似文件传送等单方向传送大量数据的情况下,为了防备应用处理中出现意外,在传送数据的过程中需要给数据记上标记。当出现意外时,可以由记标记处重发。例如可以将长文件分页发送,当收到上页的接受确认后,再发下页的内容。
表示层
表示层的主要功能是把应用层提供的信息变换为能够共同理解的形式,提供字符代码、数据格式、控制信息格式、加密等的统一表示,表示层仅对应用层信息内容的形式进行变换,而不改变其内容本身。
应用层
应用层是OSI
参考模型的最高层,其功能是实现应用进程之间的信息交换,同时还具有一系列业务处理所需要的服务功能。
常见应用层协议
DNS
协议: 域名服务协议,将域名地址转换为IP
地址,域名解析查询时通常使用UDP
传输数据,默认端口53
,在区域传输数据同步时一般使用TCP
传输数据。FTP
协议: 文件传输协议,提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限,使用TCP
进行数据传输,控制信息默认21
端口,主动模式下数据传输默认20
端口,被动模式下默认服务器与客户端协商在39000-40000
之间的端口。TFTP
协议: 简单文件传送协议,很小且易于实现的文件传送协议,使用UDP
传输数据,默认69
端口。TELNET
协议: 远程终端协议,简单的远程终端协议,明文传输协议,使用TCP
传输数据,默认端口23
。SSH
协议: 安全外壳协议,提供安全的远程终端会话,使用TCP
传输数据,默认端口22
。HTTP
协议: 超文本传输协议,简单的请求响应协议,使用TCP
传输数据,默认端口80
。HTTPS
协议: 超文本传输安全协议,在HTTP
协议的基础下加入SSL
层实现加密传输,使用TCP
传输数据,默认端口443
。SMTP
协议: 简单邮件传输协议,提供可靠且有效的电子邮件传输的协议,使用TCP
传输数据,默认端口25
。POP3
协议: 邮局协议,简单的邮件读取协议,使用TCP
传输数据,默认端口110
。IMAP
协议: 交互邮件访问协议,交互式进行邮件的访问,使用TCP
传输数据,默认端口143
。DHCP
协议: 动态主机配置协议,用于动态分配IP
地址,使用UDP
传输数据,客户端发送到DHCP
服务器默认67
端口,DHCP
服务器应答客户端默认68
端口。SNMP
协议: 简单网络管理协议,用于IP
网络管理的协议,使用UDP
传输数据,默认代理端口161
与管理站端口162
。
整理了一些最新 LinuxC/C++服务器开发/架构师面试题、学习资料、教学视频和学习路线脑图(资料包括 C/C++,Linux,golang 技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg 等),免费分享有需要的可以自行添加学习交流群973961276
评论