OSI七层协议模型?
OSI七层模型包括应用层,表示层,会话层,传输层,网络层,数据链路层以及物理层
- 应用层 : 由用户自己规定,规定各个应用之间消息传递的形式等,包括各机互访协议,分布式数据库协议等。常见的应用层协议有HTTP协议和FTP等
- 表示层 : 在满足用户需求的基础上,尽可能的节省传输费用而设置的,比如传输压缩文件,jpeg或者加密文件等格式
- 会话层 : 用于建立和拆除会话
- 传输层 : 负责将来自会话层的消息传递给网络层,常见的传输层协议有TCP和UDP等协议
- 网络层 : 规定通信网内的路由选择等方式,建立用户间的信息报传输设施。常见的网络层协议有IP,ICMP以及ARP等协议
- 数据链路层 : 与建立数据传输链路相关
- 物理层 : 规定一些机电性能,也包括工作方式如双工、单工或半双工,建立通信的启动和终止等
TCP/IP协议有了解吗?
TCP/IP协议是一系列网络协议的总称,是网络通信的基本骨架。TCP/IP协议模型在OSI七层模型的基础上,通过合并的方式,简化为四层,分别为应用层,传输层,网络层以及链路层
我们通常的应用程序都工作在应用层,当各个应用之间通信时,传输层的TCP模块负责给HTTP数据添加TCP头部等信息;网络层的IP模块负责给HTTP数据添加IP头部等信息;链路层添加以太网首部等信息,并且通过电信号来传输数据包;然后数据包会依次经过对方的链路层,网络层,传输层以及应用层,实现数据的通信
- IP协议:
IP协议制定了一套网络地址,也就是IP地址,根据IP协议能够区分两台主机是否同属一个网络(子网)
- ARP协议(地址解析协议):
根据IP地址获取MAC地址,将目标的IP地址在链路层进行包装,生成以太网数据包,在同一个子网内进行广播出去,各个主机拿到IP地址和自己的IP地址对比,若一样,则返回自己的MAC地址。注意,MAC地址与对应的IP地址存入本机ARP缓存中并保留一定时间。
- 路由协议:
ARP的寻址必须是在同一个子网内,我们可以通过IP协议来确定是否是同一个子网。如果不是同一个子网,则通过网关将数据包多次转发到对应的子网中,完成这个路由协议的物理设备就是路由器
可以详细说一下三次握手以及四次挥手吗?(重点掌握)
TCP协议是一种可靠的协议,在正式传输数据之前必须通过三次握手建立连接并且互相交换窗口大小。在传输结束之后,通过四次挥手来确认双方都结束数据交互
- 图解和相关介绍参考我之前一篇博客:网络与WEB基础小结
四次挥手主动方为什么需要等待2MSL?
-
主动关闭方在收到被动一方发出的FIN信号,会立马发送ACK确认信号,之后状态转变为TIME_WAIT,等待2MSL后才会进入CLOSE状态。我们先来解释下什么叫MSL(Maximum Segment Lifetime)吧。MSL表示最大报文生存周期,任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃
-
主动关闭方需要等待2MSL是为了防止最后一次ACK没有被正确的传给被动方,被动关闭方会再次发送第三次的FIN信号
滑动窗口:
位于传输层的TCP协议是面向连接的,可靠的传输协议,拥有着确认机制。理论上,每发一个数据包都会收到其对应的确认包,然后才可以继续发送数据
在三次握手阶段,双方互相将自己的最大可接收的数据量告诉对方,也就是自己的数据接收缓冲池的大小。这样对方可以根据已发送的数据量来计算是否可以接着发送。在处理过程中,当接收缓冲池的大小发生变化时,要给对方发送更新窗口大小的通知,利用滑动窗口机制有效提高通信效率
TCP和UDP协议的区别?(重点掌握)
TCP和UDP协议都是传输层常见的协议,它们的主要区别如下所示:
- TCP协议进行数据通信之前需要三次握手建立连接,UDP协议不需要建立连接即可发送数据
- TCP有确认机制,丢包可以重发,保证数据的正确性;UDP不保证正确性,只是单纯的负责发送数据包
- TCP协议可能会对大数据包进行拆分,并且在接收方进行重组数据包操作;UDP协议是面向报文的,不会进行分片和重组,所以需要注意传输的报文大小
- 网络包中的TCP头部为20个字节;UDP头部只有8个字节
丢包重传机制:请注意SACK (Selective ACK),SACK是TCP选项,它使得接收方能告诉发送方哪些报文段丢失,哪些报文段重传了,哪些报文段已经提前收到等信息,根据这些信息TCP就可以只重传哪些真正丢失的报文段
UDP协议的应用:UDP协议由于传输不需要建立连接,资源消耗较小。常用在视频或者语音传输中,域名解析服务DNS都使用了UDP协议
一个网络数据包包括哪些?
网络数据包一般包括头部和数据部分,在TCP协议中,要发送的数据经过TCP模块添加TCP头部;然后IP模块添加IP头部和MAC头部;然后在最前面加上报头/起始帧分界符以及末尾假如FCS(帧校验序列),这样就构成了一个完成的数据包
在UDP协议中就是UDP头部,各个头部都有其固定的格式,TCP头部最小20个字节,UDP头部最小8个字节
TCP协议中的数据包分片与重组功能?
当TCP传输的数据包比较大时,在发送方会进行分片,在接收方进行数据包的重组
发送方:
将数据包分为多个TCP头部+数据包的组合,TCP头部中存着不同的数据序号;之后将多个组合交由IP模块,统一添加IP头部和MAC头部,IP头部的ID号设为统一的
接收方:
IP模块具有分片重组的功能,如果接收到的包是经过分片的,那么IP模块会将它们还原成原始的包
分片的包会在IP头部的标志字段中进行标记,当收到分片的包时,IP模块会将其暂时存在内部的内存空间中,然后等待IP头部中具有相同ID的包全部到达,因为同一个包的所有分片都具有相同的ID。此外,IP头部还有一个分片偏移量的字段,它表示当前分片在整个包中所处的位置。根据这些信息,在所有的分片全部收到之后,就可以将它们还原成原始的包
解析:
数据包的分片和重组里边还涉及到了MTU和MSS的概念,介绍如下:
- MTU: Maxitum Transmission Unit 最大传输单元
- MSS: Maxitum Segment Size 最大分段大小,MSS就是TCP数据包每次能够传输的最大数据分段
TCP协议的拥塞避免算法有哪些?
当网络中的资源供应不足,网络的性能就要明显变坏,整个网络的吞吐量随之负荷的增大而下降。也就是说对资源的需求超过了可用的资源,因为传输数据是需要资源的
拥塞控制 :防止过多的数据注入到网络中,使得网络中的路由器或链路不致过载
拥塞避免算法主要有如下两种:
- 慢启动 + 拥塞避免
- 快重传 + 快恢复
- tcp拥塞控制算法
TCP的粘包现象?
- TCP粘包是指一种发送方发送的数据包在接收方的缓冲区中粘成了一包,也就是出现了数据包首尾相接的现象。产生原因主要是发送方使用了Nagle算法,或者接收方的处理速度小于数据包的接收速度,导致接收缓冲区中消息堆积。可以通过关闭Nagle算法或者规定每个数据包的具体格式和长度,在接收方的应用层来进行判断
- UDP是不会产生粘包现象的,因为数据包之间具有明确的消息保护边界
路由汇聚?
答:路由汇聚是指把一组路由汇聚为一个单个的路由广播。路由汇聚优点是可以缩小网络上的路由表的尺寸
算法实现:
- 将各子网地址的网段以二进制写出
- 比较,从第1位比特开始进行比较,将从开始不相同的比特到末尾位填充为0。由此得到的地址为汇总后的网段的网络地址,其网络位为连续的相同的比特的位数。
举例:
假设下面有4个网络:
172.18.129.0/24
172.18.130.0/24
172.18.132.0/24
172.18.133.0/24
这四个进行路由汇聚,那么能覆盖这四个网络的汇总地址是 : 172.18.128.0/21
解法:
129 的二进制代码是 10000001
130 的二进制代码是 10000010
132 的二进制代码是 10000100
133 的二进制代码是 10000101
这四个数的前五位相同都是10000,所以加上前面的172.18这两部分相同的位数(各占8位了已经),网络号就是 8+8+5=21 。而10000000的十进制数是128,所以,路由汇聚的IP地址就是172.18.128.0。所以最终答案就是172.18.128.0/21
子网掩码的求法?
-
根据划分的子网数求法:
算法实现:在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。- 将子网数目转化为二进制来表示
- 取得该二进制的位数,为 N
- 取得该IP地址的类子网掩码,将其主机地址部分的前N位置为1 即得出该IP地址划分子网的子网掩码。
举例:
如欲将 B类IP地址 168.195.0.0 划分成27个子网,则其子网掩码为 : 255.255.248.0
子网数目二进制: 27 = 11011 该二进制为五位数,N = 5
将B类地址的子网掩码 255.255.0.0 的主机地址前5位置1(B类地址的主机位包括后两个字节,所以这里要把第三个字节的前5位置1),得到 255.255.248.0
-
根据每个子网中的主机数求解:
算法实现:利用主机数来计算- 将主机数目转化为二进制来表示
- 如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为 N,这里肯定N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位。
- 使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。
举例:
如欲将B类IP地址 168.195.0.0 划分成若干子网,每个子网内有主机700台,则其子网掩码为 :255.255.252.0
1. 主机数目划为二进制:
700 = 1010111100
该二进制位数:
N = 10
2. 将该B类地址的子网掩码 255.255.0.0 的主机地址全部置1,得到 255.255.255.255
3. 然后再从后向前将后10位置0,即为: 11111111.11111111.11111100.00000000
即 -> 255.255.252.0