欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 总结网络原理面试题

总结网络原理面试题

2025/2/8 1:19:29 来源:https://blog.csdn.net/2301_76446998/article/details/144368992  浏览:    关键词:总结网络原理面试题

目录

一:TCP和UDP

1:TCP

1:TCP原理

2:三次握手四次挥手 

3:TCP的粘包和分包

2:UDP原理

 3:TCP和UDP的区别

二:HTTP

1:介绍

2:区别

3:GET和POST的区别


一:TCP和UDP

1:TCP

1:TCP原理

面向连接:一定是一对一连接,不能像UDP协议一样可以一个主机向多个进行发送消息。

可靠的:无论网络发生什么变化,TCP可以保证一个报文一定能够到达对方。

字节流:是流式传输,因此在传输的时候,可以被分成多个组,并且字节流是没有边界保护的,因此被分组之后可能无法读出一个有效的用户消息。并且TCP是有序的,按顺序接收。

优点:是可靠的稳定的

在传数据之前会进行三次握手,在传数据的时候,有确认,窗口,重传,拥塞控制等机制。传完之后还会断开连接来节约资源。

缺点:慢,效率低,占用资源高,易被攻击

要先建立连接,会消耗时间,在确认机制,重传机制,拥塞机制都会消耗大量时间,而且要维护这个连接。这些都会消耗资源,并且传输速率慢。

2:三次握手四次挥手 

TCP为什么是三次握手四次挥手

        TCP三次握手是为了建立可靠连接,首先客户端向服务端发送一个SYN包到服务端,表示自己想要建立连接,然后服务端接收后,发送回一个SYN+ACK包,表示自己收到这个请求,并且自己同意建立连接。最后客户端发送一个ACK包,表示自己也收到这个包了,并且表示同意建立连接。

        TCP四次挥手是客户端想要断开连接,发送一个FIN包到服务端表示想要断开,服务端收到后发送一个ACK包,表示我收到请求了,但是这个时候,服务端还没有将所有消息进行发送完毕,当全部发送完之后,会再次发送一个FIN包,表示我不发送数据了,客户端收到之后发送一个ACK包,表示自己收到请求,然后就可以断开连接。

注意:这里我们发送的SYN+ACK是不可以分开发送的,因为他们是一个整体。

3:TCP的粘包和分包

什么是粘包和分包:因为在TCP是面向字节流的协议,是一串数据,没有边界保护,当两个数据连接在一起,就形成了粘包。而分包:因为我们发送数据过大,我们需要对这个包进行拆分。因为UDP是报文传输,是有边界保护的,因此不会出现粘包问题,并且没有网络拥塞等,不会进行分包操作。

怎么解决呢?

1:我们采用固定大小,每次发送数据和接收都只接收固定大小,不满的使用0等补齐。

2:我们在数据的最后加入'\r\n',生成我们自己的边界,这样就可以解析出来。

3:我们可以在头部加入我们数据的具体长度,但是不要忘了头部的这个数据大小。

2:UDP原理

非面向连接:UDP是非面向连接的,因此可以一对多或者多对一的发送消息。

不可靠:不保证报文到达,不提供报文到达确认机制,排序,流量控制能功能。因此可能不会到达以及重复乱序等。因此很快。

报文:报文提供了边界保护,因此是不会出现分包和粘包的。

优点:

由于没有各种机制,是无状态连接,所以传输很快。

缺点:不可靠,不稳定

因为没有tcp的机制,在网络不好的时候会出现丢包造成数据的损失。

 3:TCP和UDP的区别

连接:TCP是面向连接的。UDP是无连接的。

服务对象:TCP是点对点的通信,是一对一。UDP是支持一对一,一对多,多对一,多对多的通信的。

可靠性:TCP是可靠的,确保数据的到达,无差错,不丢失,不重复,按顺序到达。UDP不保证可靠交付。

拥塞控制/流量控制:TCP可以保证传输的安全性,而UDP没有拥塞控制,网络拥塞是不会影响源主机的发送效率。

报文长度:TCP是动态的报文长度,即TCP长度是根据接收方的窗口大小和当前的网络拥塞进行控制的。UDP面向报文,不合并不拆分,拥有边界。

首部开销:TCP的首部开销大,20个字节。UDP开销小,8个字节。

二:HTTP

1:介绍

HTTP是超文本传输协议,通过TCP/IP通信来进行传递数据的。1.0,1.1,2.0都是基于TCP实现的。但是3.0是基于UDP实现的。

2:区别

HTTP1.0:每次发送请求都需要建立一个TCP连接,完成后要断开连接,当需要发送多个请求,那就要建立多个连接,大量增加资源的消耗。虽然是建立多个连接,但是还是按顺序进行执行的。也就是一个完成才能弄第二个。并且1.0是默认使用无连接的,但是可有在请求头中设置为长连接,保证连接的不断开,节约资源。

---

HTTP1.1PipeLine(管道)模式,默认支持长连接,直接就可以在一个连接中处理多个请求,节约资源。但是在同一个连接中,我们没办法区分这个回复是给到哪个请求,一旦多个返回的文本混到一起,我们是没办法区分的,因此我们只能串行化执行,也就是排队返回,但是发送请求是不需要进行等待的,无序等待第一个返回就可以发送第二个请求,这样就导致了TCP资源的闲置

---

HTTP2.0谁快谁先的模式。这里采用了二进制格式。在这里提出了流的模式,每次请求都会对应一个流,这个流有一个ID,用来区分不同的请求,在流的基础上我们提出了帧的概念,一个请求会被划分成多个,方便进行数据的分割传输,每个帧都有唯一属于某个流的ID,然后将帧按着流进行分组,这样就可以分理处不同的请求来,这样我们就可以在一个TCP连接中并发多个请求了。2.0解决了1.1的核心痛点,可以提高TCP的利用率

---

HTTP3.0:采用了UDP的QUIC协议,因为在TCP中是有重传机制的,需要接收全部完整的信息之后,才会进行处理操作,会造成队头阻塞问题(第一个TCP数据,一直在重传,那后面的TCP数据都需要等待),因此使用UDP的可靠性传输QUIC机制。QUIC中有自己的可靠性传输机制,当某个流的包丢失,那我们只需要阻塞这一个流,其他不会被阻塞。因此会比2.0快。

3:GET和POST的区别

最本质的区别就是约定和规范中的区别

GET:是用来获取资源的,也就是进行查询操作。将参数放入到URL上进行传递,但是URL是有长度限制的。

POST:是用来传输实体对象的,因此会使用POST来进行添加,修改,删除等操作。它会将参数放入到body中,比如jsonbody。并且没有限制。

0voice · GitHub

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com