1.谈一谈对OSI七层模型和TCP/IP四层模型的理解?
1.1.为什么要分层?
在计算机中网络是个复杂的系统,不同的网络与网络之间由于协议,设备,软件等各种原因在协调和通讯时容易产生各种各样的问题。例如:各物流公司的快递站点,快递人员,货运方式都有可能不同,但对更个流程之间进行划分,就方便了客户和物流公司的管理。所以网络也需要一个标准化的思想或者模型来统一协调。
1.2.分层的好处?
-
各层之间是独立的,不用过多关心其他层次的内容,更好找出问题;
-
灵活性好,任何一层发生变化不容易影响上下层;
-
架构上可分割开,各层可用最好的技术实现;
-
能促进标准化的工作,易于实现和维护;
1.3.OSI七层模型
OSI
(Open System Interconnect
)网络7
层模型是ISO
组织定义的一个计算机互联的标准分层模型,但它只是一个定义,目的是为了简化网络各层的操作,提供标准接口便于实现和维护,从上至下依次包括:应用层、表示层、会话层、传输层、网络层、链路层、物理层。
1.4. TCP/IP四层模型
但在实际使用时根据使用协议对七层模型部分层级进行合并简化。分成4层:应用层、传输层、网络层、网络接口层(数据链路层、物理层)。
其中将应用,表示,会话三层合称为应用层,将数据链路,物理合称网络接口层。
2.谈谈TCP协议的3次握手过程?
2.1.简述
握手过程就是TCP发送端和接收端通过三次对话应答的方式进行建立可靠连接的过程
2.2.具体过程
注意:大写字母SYN,ACK都是TCP首部中的控制位内容,确定本次报文的性质。
- 确认
ACK
:ACK
是对已接受数据的确认。TCP
规定:ACK
默认为0
,在连接建立后,所有传送的报文段都必须把ACK
设置为1
。当ACK=1
时,确认号字段才有效,否则无效。 - 同步
SYN
:在连接建立时使用,表示这是一个连接请求或连接接受报文。当SYN=1,ACK=0
时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中SYN=1,ACK=1
。
第一次挥手:
由发送方向接收方发送请求连接的报文。
报文首部内容:同步SYN=1
,确认ACK=0
,序号seq=x。
序号:即发送报文中数据的第一个字节序号。
第二次挥手:
由接收方向发送方发送请求连接的确认报文。
报文首部内容:同步SYN=1,确认ACK=1,序号seq=y,确认号ack=x+1
确认号:即下次期待接收的第一字节序号。
第三次挥手:
由发送方向接收方发送确认报文
报文首部内容:同步SYN=0,确认ACK=1,序号seq=x+1,确认号ack=y+1
3.TCP协议为什么要3次握手?2次,4次不行吗?
TCP协议的3次握手的作用是为了在建立连接时,避免重复连接,防止旧的重复连接引起连接混乱问题。另外,通过三次握手,可以得到一个确认的可靠初始化序列号seq,用于进行可靠性传输。而如果只有2次握手,则无法初始化序列号seq。
综上所述:TCP协议最少需要通过3次握手建立连接。当然, TCP 连接也通过4次握手或5次握手建立连接,实现 TCP 连接的稳定性,但3次握手是最节省资源的连接方式。
4.谈谈TCP协议的四次挥手过程?
4.1.简述
挥手过程就是TCP发送端和接收端通过四次对话应答的方式进行可靠连接释放的过程。
4.2.具体过程
- 终止 FIN (
FINis
) : 用来释放一个连接。FIN = 1
表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
第一次挥手:
首先客户端向服务器发送连接释放的请求报文,并停止发送数据。
报文首部内容:FIN=1,ACK = 0
第二次挥手:
服务器收到连接释放的报文之后,给客户端发送确认报文。
报文首部内容:FIN=0,ACK=1。
注意:第二次挥手后,客户端到服务器方向的连接就释放了,TCP连接处于半关闭状态。此时客户端无法发送数据给服务器,但是服务器还可以发送数据给客户端,客户端仍可以接收。
第三次挥手:
服务器向客户端发送完数据后,向客户端发送释放连接的确认报文。
报文首部内容:ACK=1,FIN=1
第四次挥手:
客户端收到服务器的连接释放报文段后,向服务器发出确认报文。
报文首部内容:ACK=1,FIN = 0
5.什么是流量控制?
简述:就是由接收方根据处理数据的能力控制发送方每次传输数据的量。
控制方法:使用可变大小的流量控制协议——滑动窗口协议。
窗口大小:通过接收方发送的确认报文中的窗口字段控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
6.什么是滑动窗口?
概念:是TCP协议用于实现流量控制的一种协议或者机制。
窗口内容划分:
发送方:
- 已发送并确认,窗口处理过多成功内容。
- 已发送未确认,等待接受的内容。
- 未发送未超出接收方窗口范围,在流量允许范围内窗口需要处理但尚未处理的内容。
- 未发送但超出接收方窗口范围。窗口尚未接收的内容。
接收方:
- 接受已确认,窗口已成功接收的内容,不在窗口范围内。
- 未收到但可以接受,等待接收的内容。
窗口在完成一个个数据处理后,按顺序向后执行即为滑动。
7.什么是拥塞控制?
简述:就是在网络传输中,维护一个叫做拥塞窗口(cwnd)的状态变量,决定每次可以发送的数据包(报文)的数量,来判断拥塞程度。
TCP主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、拥塞发生、快速恢复。
慢开始:cwnd从1开始,每次加倍cwnd值,由小到大逐渐增大。
拥塞避免:慢开始会让发送方发送的速度越来越快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每次将 cwnd加 1,降低拥塞窗口的增长速度。
拥塞发生:当网络慢慢进入拥塞状况,就可能出现丢包现象,这时需要对丢失的数据包进行重传。
当触发了重传机制,也就进入了拥塞发生。分为两种重传处理:
超时重传:将ssthresh 设为 cwnd/2,cwnd 重置为 1,重新进入慢启动。
快速重传:将cwnd = cwnd / 2,ssthresh = cwnd,进入快速恢复。
快速恢复:和快重传配合使用,当执行快重传时,ssthresh=ssthresh*0.5,cwnd = ssthresh + 3。
8.TCP和UDP有什么区别?
面向连接:TCP协议需要建立连接,仅支持一对一通信;UDP协议无需建立连接,支持一对一、一对多、多对一和多对多的交互通信。
传输可靠:TCP协议通过多种机制来确保可靠性传输;UDP不保证可靠性传输。
性能效率:TCP协议需要保证可靠性传输,相对传输效率慢,需要消耗较多的资源。UDP协议传输效率快,需要较少的资源开销。
首部格式:TCP协议的首部需要20-60个字节,UDP协议需要8个字节
应用场景:TCP协议保证可靠性传输,所以对数据准确性有要求的连接。如文件传输、发送和接收邮件、远程登录等场景。UDP协议可以进行广播,对数据量少场景由奇效。如QQ 语音、 QQ 视频 、直播等等