【面试点】TCP为什么是安全可靠的传输协议

2023-11-21 01:11

本文主要是介绍【面试点】TCP为什么是安全可靠的传输协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一 面试问题

1.1 TCP为什么是安全可靠的传输协议

👨‍💻面试官:TCP为什么是安全的

🙋:因为TCP

  • 数据传输之前会有三次握手来进行连接
  • 在数据传输时候,有确认、滑动窗口、超时重传、拥塞控制之类机制
  • 数据传输之后会进行四次挥手断开连接来节约系统资源。

具体

  1. 应用数据被分割成TCP认为最适合发送的数据块
  2. TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
  3. 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
  4. TCP 的接收端会丢弃重复的数据。
  5. 利用滑动窗口实现流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP 的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
  6. 拥塞控制: 当网络拥塞时,减少数据的发送。
  7. ARQ 协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
  8. 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

二 补充点

2.1 为什么要三次握手?

三次握手的目的建立可靠的通信信道。通俗来说是确认双方的发送和接收正常。

  • 第一次握手(客户端发送标有SYN的数据包):客户端什么都不能确认;服务端确认了对方发送正常,自己接收正常。
  • 第二次握手(服务端发送标有SYN/ACK的数据包):客户端确认自己发送、接收正常,对方发送、接收正常;服务端确认对方发送正常,自己接收正常。
  • 第三次握手(客户端发送标有ACK的数据包给服务端):客户端确认自己发送、接收正常,对方发送、接收正常;服务端确认自己发送、接收正常,对方发送、接收正常。

因此三次握手后就能确认双方的发送和接收功能都正常。

img

2.2 为什么要四次挥手?

因为就像两个人打电话一样,在一方说完后,不能立马挂掉电话,另一方可能还有话要说。当双方都确认对方都没有数据要发送的时候,才能够完全断开TCP连接。

TCP四次挥手

四次挥手过程:

  • 第一次挥手(客户端发送一个FIN到服务器):客户端用来告知服务端自己要关闭数据传送
  • 第二次挥手(服务端接收到FIN,并返回一个ACK,确认序号为收到的序号加1):服务端告诉客户端我收到了
  • 第三次挥手(服务端关闭客户端的连接,发送一个FIN给客户端):服务端告诉客户端我也没有话要说了准备关闭
  • 第四次挥手(客户端发回ACK报文确认,并将确认序号设置为收到序号加1):客户端告知服务端我收到了,然后完全关闭TCP连接。

任何一方都可以在数据传送结束后发出主动关闭的通知,等对方确认后进入半关闭状态,当对方也没有数据发送的时候,就发出连接释放的通知,主动关闭方确认后就完全关闭TCP连接

举个例子:A和B两人通话。通话即将结束。A说:”我没有要说的了“。B说:“我知道了”。然后B开始想还有什么要说的,如果没有要说的话,B说:“我也没有什么要说的了”。等到A说:“知道了,那结束通话了"。此时通话才算结束。

2.3 TCP, UDP 协议的区别

TCP、UDP协议的区别

UDP在传送数据前不需要建立连接,因此不能提供可靠支付,但是常用与即时通信(如QQ通话、直播等)

TCP在传送数据之前必须建立连接,数据传输结束后需要释放连接(三次握手,四次挥手)。因此增加了如确认,流量控制,计时器以及连接管理等开销。仅使协议数据单元的首部增大很多,还要占用许多处理机资源。因此常用与文件传输、发送和接收邮件、远程登录等场景。

这篇关于【面试点】TCP为什么是安全可靠的传输协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/398766

相关文章

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty

Java对接MQTT协议的完整实现示例代码

《Java对接MQTT协议的完整实现示例代码》MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛,:本文主要介绍Ja... 目录前言前置依赖1. MQTT配置类代码解析1.1 MQTT客户端工厂1.2 MQTT消息订阅适配器1.

Linux中的自定义协议+序列反序列化用法

《Linux中的自定义协议+序列反序列化用法》文章探讨网络程序在应用层的实现,涉及TCP协议的数据传输机制、结构化数据的序列化与反序列化方法,以及通过JSON和自定义协议构建网络计算器的思路,强调分层... 目录一,再次理解协议二,序列化和反序列化三,实现网络计算器3.1 日志文件3.2Socket.hpp

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

Linux之UDP和TCP报头管理方式

《Linux之UDP和TCP报头管理方式》文章系统讲解了传输层协议UDP与TCP的核心区别:UDP无连接、不可靠,适合实时传输(如视频),通过端口号标识应用;TCP有连接、可靠,通过确认应答、序号、窗... 目录一、关于端口号1.1 端口号的理解1.2 端口号范围的划分1.3 认识知名端口号1.4 一个进程

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

SpringBoot快速搭建TCP服务端和客户端全过程

《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录TCPServerTCPClient总结由于工作需要,研究了SpringBoot搭建TCP通信的过程