谈一谈对OSI七层模型和TCP/IP四层模型的理解?
OSI七层模型是ISO组织定义的一个计算机网络标准分层模型,他的目的是为了简化网络各层操作提供标准接口便于实现和维护。从上到下依次分别是应用层,表示层,会话层,传输层,网络层,数据链路层,传输层。
TCP/IP四层模型是对OSI七层模型的简化,他被分为四层,分别是应用层,传输层,网络层,数据链路层。
应用层负责定义应用进程之间的通信和交互规则,应用层的常见协议有:
- DNS域名解析协议,负责将域名解析成IP地址
- HTTP超文本传输协议,用于接收和发布HTML网页
- 电子邮件协议,常见的电子邮件协议有
SMTP
、POP3
、IMAP4
- 文件传输协议,FTP协议是一套文件在网络传输的标准协议,它允许用户以文件操作的方式与另一台主机相互通信。
传输层 为两台主机提供端到端的传输服务
网络层也叫IP层,负责处理IP数据包的路由、传输、建立主机间的通信。
数据链路层也叫做网络接口层,它包含了OSI七层模型中的数据链路层和传输层,负责把电脑连接起来
谈谈TCP协议的3次握手过程?
TCP协议的三次握手确保了连接的可靠性
- 第一次握手发送端向接收端发送了一个TCP数据包,数据包首部包含SYN=1(双方未建立连接)、ACK=0 ,表示连接请求报文段。
- 第二次握手接收端向发送端回复了一个TCP数据包,其首部包含SYN=1、ACK=1(同意建立连接),表示同意建立连接。
- 第三次握手发送端向接收端发送一个数据包,其首部包含SYN=0(双方以建立连接)、ACK=1,表示发送端接收到接收端发送的确认数据包。
![](https://i-blog.csdnimg.cn/blog_migrate/d25fb75cee5b548ad9671d201b11affb.png)
TCP协议为什么要3次握手?2次,4次不行吗?
应为三次握手最为可靠,避免了重复连接,防止旧的重复连接引起连接混乱问题。,三次握手确定了一个可靠的初始化序号seq,可以进行可靠传输,如果只进行两次握手,则无法确定初始化序号,而进行四次握手则显得效率低下,三次握手是在可靠性和连接效率中选择的平衡点。
谈谈TCP协议的四次挥手过程?
- 第一次挥手:客户端发送一个数据包,首部为终止FIN=1,确认ACK = 0,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT_1状态。
- 第二次挥手:服务器收到数据包后,发送一个FIN=0,ACK=1给客户端,确认序号为收到序号+1,服务器进入CLOSE_WAIT状态。
- 第三次挥手:服务器发送一个确认ACK=1,终止FIN=1,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
- 第四次挥手:客户端收到FIN=1后,客户端进入TIME_WAIT状态,接着发送一个确认ACK=1,终止FIN = 0给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。
什么是流量控制?
TCP的流量控制是为了解决端到端的数据传输速率问题,即根据接收方的实际接收能力,来控制发送方的数据发送速率,从而让发送方的发送速率不要太快,要让接收方来得及接收。接收方来不及接收就会造成数据的丢失。
TCP协议使用滑动窗口机制来实现对发送方的流量控制。在建立连接时,发送的报文段中就会有接收窗口的单位值,发送方的窗口不能超过接收方给出的接收窗口的数值。滑动窗口的大小是动态调整的,每一次接收方回复给发送方的确认报文段里会更新新的接收窗口值。当接收窗口为0时,代表暂时不接收数据了,直到接收方重新给发送方发出一个新的窗口值为止。
什么是滑动窗口?
TCP滑动窗口是一种用于网络数据传输的流量控制技术,它的主要作用是避免网络拥塞和丢失数据。
在TCP滑动窗口协议中,发送方和接收方各自维护着一个滑动窗口,一般而言,这个窗口代表了当前可以发送或接收的数据量。滑动窗口的大小是动态调整的,它由接收方通过确认报文段来通知发送方。具体来说,当发送方发送数据后,接收方会返回一个确认报文段,这个确认报文段中包含了当前接收到的数据包序列号和接收窗口的大小。发送方在接收到这个确认报文段后,就可以知道接下来可以继续发送多少数据。在滑动窗口协议中,数据包是连续不断地发送的,而滑动窗口的大小决定了可以连续发送的数据包的个数。当滑动窗口为0时,发送方不能再发送数据报,必须等待接收方的确认报文段更新窗口大小后才能继续发送。TCP滑动窗口协议的优点在于,它允许发送方在不必每发一个分组就停下来等待确认的情况下,传输更多的数据,从而提高了网络吞吐量。同时,通过滑动窗口的大小调整,可以有效地进行流量控制,避免了网络拥塞的发生。需要注意的是,滑动窗口协议是TCP协议中实现流量控制的重要机制之一,但它并不是唯一的机制。TCP协议还采用了其他多种机制来保证数据传输的可靠性和效率,如确认机制、重传机制、慢启动机制等。
什么是拥塞控制?
TCP的拥塞控制是为了解决网络拥塞问题,即在网络中避免过多的数据注入,以防止网络中的路由器或链路过载。它是全局性的过程,涉及到所有的主机、路由器以及与降低网络传输性能有关的所有因素。
具体来说,TCP拥塞控制主要通过以下几种方式实现:
- 慢开始:当一个TCP连接建立时,发送方会从初始速率开始,以指数级方式增加发送速率,直到达到目标速率。这种方式可以避免一开始就发送大量的数据,导致网络拥塞。
- 拥塞避免:当发送方的窗口大小达到一定阈值后,会采取拥塞避免策略。此时,发送方将以线性方式增加发送速率,而不是指数级方式,以避免网络拥塞的发生。
- 拥塞发生:当接收方发现数据包丢失或延迟超过一定时间时,会发送一个快速重传信号给发送方。发送方接收到这个信号后,会立即重传丢失的数据包,而不必等待定时器超时。这样可以减少数据包丢失和网络拥塞的发生。
- 快速恢复:当发送方接收到快重传信号后,会采取快恢复策略。发送方将窗口大小减半,暂停发送数据一段时间,然后重新开始发送数据。这样可以迅速恢复网络状态,避免网络拥塞的发生。
超时重传
快速重传
TCP和UDP有什么区别?
- 连接性:TCP是面向连接的,在发送方和接收方在发送数据之前,必须通过三次握手建立连接。相反,UDP是无连接的,发送方和接收方之间的数据传输不需要建立连接。
- 可靠性:TCP通过添加序号机制、确认机制、超时重传机制、数据校验等功能,保证传输的可靠性。而UDP则没有这些机制,因此其传输可靠性相对较低。
- 传输方式:TCP协议是面向字节流的,它将应用层传递下来的数据仅仅当做无结构的数据流处理,并不知道所传数据流的含义。而UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。
- 数据传输效率:由于TCP的可靠性和连接性,其数据传输效率相对较低。而UDP由于无需建立连接和无需确认机制,其数据传输效率相对较高。
- 应用场景:TCP主要用于需要可靠传输的应用场景,如网页浏览、文件传输等。而UDP则主要用于不需要可靠传输的应用场景,如实时音视频流、在线游戏等。