【八股cover#3】计网 Q&A与知识点

发布时间 2023-06-15 00:18:11作者: dayceng

计网知识点Q&A

简历cover

1、TCP/IP网络模型

网络模型

​ TCP/IP 协议族,它是一个分层、多协议的通信体系。

​ TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层网络层传输层应用层

img

​ 在 TCP/IP 协议中,OSI 模型被简化为了四个层次。

应用层是网络的最高层,它提供用户接口和服务,比如HTTPFTPSMTP等协议。

传输层主要负责数据的可靠传输和错误检测,其中最常见的协议为TCPUDP

网络层则负责数据包的路由和寻址,常用的协议有IPICMP和IGMP等。

数据链路层则负责物理传输介质的访问和帧同步,常用的协议包括ARP协议PPP

IP协议

​ IP协议是网络层的协议,主要负责将数据报从发送端传输到接收端,它只关心源地址和目标地址的传输

TCP协议和UDP协议

​ TCP协议和UDP协议则位于传输层,是在IP协议之上的协议。

​ TCP协议提供面向连接的可靠数据传输,而UDP协议则提供无连接的不可靠数据传输。

​ 应用程序可以根据需要选择使用TCP或UDP来进行数据传输。

HTTP/HTTPS协议

​ HTTP协议【明文传输】则是应用层的协议,它基于TCP协议或UDP协议传输数据,用于在Web浏览器和Web服务器之间传输超文本(HTML)文档和其他文件。

​ HTTPS【加密传输】是在HTTP之上加入了SSL(安全套接字层)或TLS(传输层安全)协议,以提供加密和身份验证功能。

​ HTTP/HTTPS协议定义了客户端和服务器之间的请求和响应消息格式,以及如何处理这些消息。

​ 因此,在进行Web通信时,通常使用TCP协议作为底层传输协议,然后使用HTTP/HTTPS协议来处理具体通信内容。

TCP和UDP的区别

​ TCP和UDP都是网络传输协议,二者最大的区别在于TCP提供可靠的数据传输服务,而UDP不保证数据传输的可靠性

​ TCP是面向连接的,需要经过三次握手建立连接,只能支持一对一点对点通信,保证数据可靠交付,具有确认应答重传机制。TCP基于字节流传输没有边界,但保证传输顺序可靠性。数据大于MSS(最大报文段长度)时会在TCP层将数据进行分片传输,到达目的地后同样在传输层进行合并;如果有某个片丢失,则只需要重传丢失的分片即可

​ UDP不需要连接,可以即刻传输数据,支持一对一一对多多对多通信,但不保证可靠性。UDP继承了IP层特性,基于数据包传输有边界,可能出现乱序丢包。UDP首部固定长度为8字节,数据大于MTU(最大传输单元)时会在IP层分片,也需要在目的IP层合并,但如果某个分片丢失,则需要将所有分片都进行重传,开销大。

细节:

1、连接
TCP是面向连接的,在传输前需要三次握手建立连接,UDP不需要连接,即刻传输数据
2、服务形式
TCP只能一对一,点对点服务,UDP支持一对一、一对多、多对多通信.
3、可靠性
TCP保证数据可靠交付,拥有确认应答和重传机制,无重复、不丢失、按序到达:UDP尽可能交付,不保证可靠性。
4、连接控制机制
TCP拥有流量控制、拥塞控制,保证传输安全性等,UDP在网络拥堵情况下不会降低发送速率
5、首部大小
TCP首部长度不适用选项字段是20字节,使用选项字段长度增加(可变),UDP首部固定8字节。

6、传输方式
TCP基于字节流,没有边界,但是保证传输顺序和可靠性;UDP继承了IP层特性,基于数据包,有边界可能出现乱序和丢包
7、分片方式
TCP数据大于MSS时会在TCP层将数据进行分片传输,到达目的地后同样在传输层进行合并如果有某个片丢失则只需要重传丢失的分片即可;
UDP数据大于MTU时会在IP层分片,同样也在目的IP层合并,如果某个IP分片丢失,则需要将
所有分片都进行重传,开销大。

2、TCP三次握手四次挥手

过程

​ 在建立连接时【三次握手】,客户端首先向服务端发送一个SYN包,表示请求建立连接;服务端收到SYN包后回复一个ACK包,表示确认收到了客户端的请求,并且也发送一个SYN包给客户端,表示服务端也愿意建立连接;最后客户端收到服务端的SYN+ACK包后,回复一个ACK包给服务端,表示连接已经成功建立。

​ 而在关闭连接时【四次挥手】,客户端发送一个FIN包,表示请求关闭连接;服务端在收到FIN包后回复一个ACK包,确认收到了客户端的请求;然后服务端发送一个FIN包给客户端,表示服务端也愿意关闭连接;最后客户端收到服务端的FIN包后回复一个ACK包,确认收到了服务端的请求,并且连接已经彻底关闭了。

更详细的见:举例说明

三次握手过程如下:

1.客户端向服务端发送一个SYN包,其中SYN标识位被设置为1,表示请求建立连接。

2.服务端接收到客户端的SYN包后,回复一个ACK包,其中ACK标识位被设置为1,表示确认收到了客户端的请求,并且同时也发送一个SYN包给客户端,表示服务端也愿意建立连接。

3.客户端收到服务端的SYN+ACK包后,回复一个ACK包给服务端,表示客户端已经收到了服务端的确认,并且连接已经建立成功。

四次挥手过程如下:

1.客户端完成数据传输后,发送一个FIN包,其中FIN标识位被设置为1,表示请求关闭连接。

2.服务端收到客户端的FIN包后,回复一个ACK包,确认收到了客户端的请求。

3.服务端再发送一个FIN包给客户端,表示服务端也愿意关闭连接。

4.客户端收到服务端的FIN包后,回复一个ACK包,确认收到了服务端的请求,并且连接已经关闭。此时客户端和服务端的连接就彻底关闭了。

为什么需要三次握手?

​ TCP三次握手的主要目的是确保双方建立了可靠的通信连接,并且互相确认对方的身份,从而确保数据的安全性和准确性。采用三次握手可以达到以下目标:

  1. 确认双方通信的能力。
  2. 确认服务器和客户端的身份以及防止历史连接重复初始化。(主要原因)
  3. 同步双方的初始序列号确保数据按顺序接收
  4. 避免资源浪费,防止在有消息滞留时重复分配资源或无限制的建立连接。

相比于两次握手,三次握手可以更加严格地控制连接的建立过程,从而保证数据传输的可靠性和安全性。

如果使用的是两次握手,那么在收到服务器的相应后,客户端会立刻发送数据,就不能判断该连接是否存在问题

详细解释

为什么需要四次挥手?

​ TCP四次挥手是指在客户端和服务端断开连接时,需要进行的一系列通信过程,以保证数据传输的完整性和可靠性。

​ 其中,客户端发送FIN报文表示不再发送数据,但仍可以接收数据;服务端先回复一个ACK应答报文,等待处理未发送完成的数据后再发送自己的FIN报文。这种分开发送ACK和FIN的方式能够让服务端充分利用网络资源,并保证已经发送的数据都能够被接收方处理完毕

​ 另外还有延迟确认机制,即接收方在收到包后,如果暂时没有内容回复给发送方,则延迟一段时间再确认。这样可以减轻网络负担,但有些情况下会影响网络性能

​ 因此,TCP四次挥手是为了保证数据传输的可靠性和完整性,同时通过合理的机制让网络资源得到最优化利用。

3、流量控制

​ 流量控制是指在通信过程中,通过一定的机制控制数据发送方和接收方之间的数据传输速率,以避免网络拥塞、数据丢失和延迟等问题。

其中,滑动窗口就是流量控制中常用的一种机制。滑动窗口协议的优点是能够在保证数据可靠性的前提下实现高效的数据传输。

通过使用滑动窗口,发送方可以根据接收方的当前状态进行数据发送,而接收方也能够控制自己能够处理的数据块数量,从而避免了资源浪费和性能下降的问题。

滑动窗口机制中什么是"窗口"?

​ 滑动窗口是一种解决TCP通信过程中数据确认应答效率低下的机制。

​ 它通过指定一个窗口大小来实现,窗口大小即为可以连续发送数据而无需等待确认应答的最大值

操作系统会开辟一个缓存空间作为窗口,发送方主机必须在缓存区中保留已发送的数据直到收到确认应答。如果确认应答按期返回,数据就可以从缓存区清除。这样即使往返时间较长,也不会降低网络通信效率。

什么决定窗口的大小?

​ TCP头部中的window字段代表接收端可以接收多少数据。这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据,因此发送端就可以根据接收端的处理能力来发送数据,而不会导致接收端处理不过来。窗口大小通常由接收方的窗口大小来确定。

简单来说,窗口大小是滑动窗口机制中用来调节数据传输速率和防止网络拥塞的重要参数,它能够提高通信效率并优化网络性能。

滑动窗口机制中的发送方与接收方

​ 发送方和接收方都可以使用滑动窗口协议来进行数据传输。在这种协议中,发送方将数据分成固定大小的数据块,并按顺序发送到接收方。接收方通过使用滑动窗口来控制它所期望接收的数据块。

​ 在发送方,滑动窗口是指已经发送但尚未被确认的数据块序列。发送方通过不断地向接收方发送新的数据块并等待确认消息,来逐步扩大它的滑动窗口。如果发送方收到了确认消息,则可以将对应的数据块从滑动窗口中删除。

​ 在接收方,滑动窗口是指已经接收但尚未被处理的数据块序列。接收方通过维护一个期望接收的下一个数据块编号以及一个可接受的最大编号来限制滑动窗口的大小。接收方会发送确认消息,告诉发送方它已经成功接收了某个数据块,同时也会更新其期望接收的下一个数据块编号。

拥塞控制通过拥塞窗口来防止过多的数据注入网络,使得网络中的路由器或者链路过载
拥塞窗口cwnd是发送方维护的一个状态变量,根据网络拥塞程度而变化。
发送窗口的值是swnd = min(cwnd,rwnd),也就是拥塞窗口和接收窗口中的最小值。
网络中没有出现拥塞,cwnd增大,出现拥塞、cwnd减小。
其实只要发送方没有在规定时间内接收到 ACK 应答报文,也就是发生了超时重传,就会认为网络出现了拥塞。

以上是阻塞控制相关知识的描述,请以面试回答的角度概括上述内容,要求口语化表达,简洁清晰

4、阻塞控制

拥塞控制是防止网络过载的重要机制,通过调整发送方维护的状态变量(拥塞窗口cwnd),来适应网络拥塞程度。

发送方会根据接收方反馈的窗口值和自身的拥塞窗口值,选择较小的值作为发送窗口的大小。如果发送方在规定时间内没有接收到ACK应答报文,即发生了超时重传,就认为网络出现了拥塞,并减小拥塞窗口cwnd的值,以缓解网络拥塞情况

常见的拥塞控制方法有以下几种:

  1. 慢启动:在开始传输数据之前,发送方会发送一些小的数据包进行测试,并逐渐增加发送速率,以确定网络的容量。
  2. 拥塞避免:当发送方确定了网络的容量后,它会逐渐增加数据包的大小和发送速率,直到网络出现拥塞的迹象。
  3. 快重传:在接收方发现缺失的数据包时,会通知发送方并请求重新发送,发送方则会马上重传该数据包,从而避免了缺失数据包的重复发送和拥塞突发。
  4. 快恢复:当发送方接收到接收方的缺失数据包的三次冗余确认时,会认为网络已经过载,并减少发送数据包的数量,等待网络空闲时再逐渐增加发送速率。

补充问题

TBD