面试计算机网络八股文十问十答第八期

面试计算机网络八股文十问十答第八期

作者:程序员小白条个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1) TCP到底是什么连接?

TCP(Transmission Control Protocol)是一种在计算机网络中常用的传输层协议,它提供了可靠的、面向连接的数据传输服务。TCP连接是一种面向连接的通信方式,它通过三次握手来建立连接,确保数据的可靠性和有序性。TCP连接是全双工的,意味着数据可以在两个方向上同时传输,而且在通信结束时需要进行四次挥手来关闭连接。

2) HTTP 1.0 和 2.0 有什么区别?

HTTP 1.0 和 HTTP 1.1 的主要区别在于性能和功能上的改进。HTTP 1.1 对持久连接(Keep-Alive)的支持,以及对请求管道(Pipeline)的支持,使得在一个连接上可以发送多个请求,从而减少了建立和关闭连接的开销,提高了性能。而 HTTP 2.0 则在 HTTP 1.x 的基础上引入了多路复用(Multiplexing)、头部压缩(Header Compression)、服务器推送(Server Push)等新特性,进一步提高了性能和效率。

3) HTTP 2.0 和 3.0 有什么区别?

HTTP 3.0 是基于 UDP 协议的 QUIC 协议上的 HTTP 协议,而 HTTP 2.0 是基于 TCP 协议的。HTTP 3.0 使用了 QUIC 协议来解决 TCP 在传输层面上的一些问题,如连接的建立和重传等,从而进一步提高了性能。HTTP 3.0 与 HTTP 2.0 相比,最大的区别在于传输层协议的不同,以及使用了更快的连接建立和传输方式,从而在高延迟和丢包率较高的网络环境下表现更好。

4) HTTP 和 HTTPS 有什么区别?

HTTP(HyperText Transfer Protocol)是一种用于传输超文本数据的协议,它是基于 TCP 协议的。HTTP 是明文传输的,数据在传输过程中不加密,因此存在被窃听和篡改的风险。而 HTTPS(HyperText Transfer Protocol Secure)是在 HTTP 的基础上加入了 SSL/TLS 加密机制,通过使用 SSL/TLS 协议对数据进行加密,从而保证了传输过程的安全性。HTTPS 使用了公钥加密和私钥解密的方式,确保了数据的机密性、完整性和可信度。

5) TCP 是用来解决什么问题?

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输层协议,它主要解决了网络传输中的可靠性和有序性问题。TCP 提供了数据包的重传机制、数据包的排序和流量控制等功能,确保了数据的完整性、顺序性和可靠性。TCP 还通过拥塞控制算法来避免网络拥塞,从而提高了网络的性能和稳定性。

6) TCP 和 UDP 有什么区别?

TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是两种不同的传输层协议,它们在功能和特性上有很大的区别:

  • 连接性:TCP 是面向连接的,通过三次握手建立连接,而 UDP 是无连接的,每个数据包都是独立的,不需要建立连接。
  • 可靠性:TCP 提供可靠的数据传输服务,通过重传机制和确认机制来确保数据的可靠性和有序性;而 UDP 不保证数据的可靠性,数据包可能会丢失、重复或者乱序。
  • 流量控制:TCP 提供了流量控制功能,通过滑动窗口机制来调节发送方的发送速率,防止数据包的丢失和网络拥塞;而 UDP 没有流量控制功能,发送方发送的数据包速率不受限制。
  • 应用场景:TCP 适用于要求可靠传输、数据量较大、对时序要求严格的应用,如网页浏览、文件下载等;而 UDP 适用于实时性要求高、数据量较小、对实时性要求高的应用,如实时音视频传输、在线游戏等。

7) 为什么要 TCP,IP 层实现控制不行么?

TCP和IP层位于网络协议栈的不同层次,各自负责不同的功能:

  • IP(Internet Protocol)层:负责在网络中传输数据包,并通过 IP 地址来标识网络中的设备。IP 层是一种无连接、不可靠的传输协议,它只负责将数据包从源地址传输到目的地址,并不关心数据包的可靠性和顺序性。
  • TCP(Transmission Control Protocol)层:位于传输层,负责在应用程序之间建立可靠的连接,保证数据的可靠性、有序性和流量控制。TCP 提供了连接的建立、数据的传输、数据的重传、数据的排序、流量的控制等功能,能够适应复杂的网络环境和应用需求。

虽然IP层也可以进行一些简单的控制,但是它不提供连接的建立和管理、数据的可靠性保证以及流量的控制等功能,因此无法满足许多应用对于可靠性和有序性的需求。而TCP层提供了这些功能,能够更好地满足应用的需求,因此在实际应用中通常选择使用TCP协议。

8) TCP 的粘包和拆包能说说吗?

TCP的粘包和拆包是由于TCP是面向流的协议,在发送数据时并不保证数据包的边界,因此可能出现多个发送的数据包被合并成一个或者一个发送的数据包被拆分成多个的情况,这就是粘包和拆包问题。

  • 粘包(Packet Sticking):多个发送的数据包被合并成一个的情况。这可能发生在发送方连续发送多个小数据包时,TCP 在发送端会尽可能地将数据合并成一个更大的数据包进行发送,以提高网络的利用率。
  • 拆包(Packet Splitting):一个发送的数据包被拆分成多个的情况。这可能发生在发送方发送一个大数据包时,TCP 在传输过程中将大数据包拆分成多个小数据包进行传输,然后在接收端进行重新组装。

解决粘包和拆包问题的常用方法包括消息边界标记、消息长度标记、固定长度消息等。

9) 说说 TCP 的三次握手?

TCP的三次握手是建立TCP连接时的一种协商过程,用于确保通信双方的收发能力和可靠性。三次握手的过程如下:

  1. 客户端发送SYN(同步)请求:客户端发送一个特殊的TCP数据包,其中设置SYN标志位为1,并选择一个初始的序列号(ISN)。
  2. 服务器回应SYN-ACK(同步-确认):服务器接收到客户端的SYN请求后,如果同意建立连接,就会发送一个ACK确认包作为应答,并且也设置SYN标志位为1,同时选择自己的初始序列号。
  3. 客户端发送ACK(确认):客户端收到服务器的SYN-ACK后,发送一个ACK确认包,表示连接建立成功。

通过这样的三次握手,客户端和服务器双方都确认了彼此的收发能力和初始序列号,建立了可靠的连接。

10) 初始序列号 ISN 怎么取值的?

初始序列号(Initial Sequence Number,ISN)是在TCP连接建立时由每一端生成的一个随机数,用于标识每个数据包的顺序。ISN的取值通常由以下几个因素决定:

  • 时间戳:ISN的一部分可以是当前的时间戳,这样可以确保每次生成的ISN都是唯一的。
  • 随机数:ISN的另一部分可以是随机数,以增加ISN的随机性,防止恶意攻击者对ISN进行猜测。
  • 其他因素:ISN的取值还可能受到操作系统、TCP实现和网络环境等因素的影响。

由于ISN是一个32位的数值,因此理论上可以有2^32个不同的取值,通常情况下ISN的取值会比较大,以减小被猜测的可能性。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1300+ Star,2W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

相关推荐

  1. 面试计算机网络八股文

    2024-06-12 11:04:03       9 阅读
  2. 面试前端八股文

    2024-06-12 11:04:03       13 阅读
  3. 面试计算机网络八股文

    2024-06-12 11:04:03       9 阅读
  4. 面试计算机网络八股文

    2024-06-12 11:04:03       4 阅读
  5. 面试计算机网络框架八股文

    2024-06-12 11:04:03       38 阅读
  6. 面试计算机网络框架八股文

    2024-06-12 11:04:03       34 阅读
  7. 面试计算机网络框架八股文

    2024-06-12 11:04:03       39 阅读
  8. 面试计算机网络框架八股文

    2024-06-12 11:04:03       35 阅读
  9. 面试计算机网络框架八股文

    2024-06-12 11:04:03       34 阅读
  10. 面试计算机网络八股文

    2024-06-12 11:04:03       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 11:04:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 11:04:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 11:04:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 11:04:03       20 阅读

热门阅读

  1. C语言从头学19——类型的显式转换

    2024-06-12 11:04:03       9 阅读
  2. mysql的锁和事务、索引的关系

    2024-06-12 11:04:03       9 阅读
  3. B/S项目如何上线?前端如何打包

    2024-06-12 11:04:03       5 阅读
  4. C++算法——埃氏筛

    2024-06-12 11:04:03       7 阅读
  5. 安全通告:NGINX HTTP/3 QUIC 漏洞

    2024-06-12 11:04:03       7 阅读
  6. 切换到root用户的方法和区别

    2024-06-12 11:04:03       8 阅读
  7. Git最全管理详解

    2024-06-12 11:04:03       8 阅读
  8. STM32 UART 错误代码 HAL_UART_ERROR_PE

    2024-06-12 11:04:03       7 阅读
  9. 实现EM算法的主循环

    2024-06-12 11:04:03       7 阅读
  10. go语言接口之http.Handler接口

    2024-06-12 11:04:03       8 阅读
  11. 富格林:活用经验可信提高出金

    2024-06-12 11:04:03       7 阅读