【面试点】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

相关文章

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

【Linux】应用层http协议

一、HTTP协议 1.1 简要介绍一下HTTP        我们在网络的应用层中可以自己定义协议,但是,已经有大佬定义了一些现成的,非常好用的应用层协议,供我们直接使用,HTTP(超文本传输协议)就是其中之一。        在互联网世界中,HTTP(超文本传输协议)是一个至关重要的协议,他定义了客户端(如浏览器)与服务器之间如何进行通信,以交换或者传输超文本(比如HTML文档)。

【Go】go连接clickhouse使用TCP协议

离开你是傻是对是错 是看破是软弱 这结果是爱是恨或者是什么 如果是种解脱 怎么会还有眷恋在我心窝 那么爱你为什么                      🎵 黄品源/莫文蔚《那么爱你为什么》 package mainimport ("context""fmt""log""time""github.com/ClickHouse/clickhouse-go/v2")func main(

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

图解TCP三次握手|深度解析|为什么是三次

写在前面 这篇文章我们来讲解析 TCP三次握手。 TCP 报文段 传输控制块TCB:存储了每一个连接中的一些重要信息。比如TCP连接表,指向发送和接收缓冲的指针,指向重传队列的指针,当前的发送和接收序列等等。 我们再来看一下TCP报文段的组成结构 TCP 三次握手 过程 假设有一台客户端,B有一台服务器。最初两端的TCP进程都是处于CLOSED关闭状态,客户端A打开链接,服务器端

Modbus-RTU协议

一、协议概述 Modbus-RTU(Remote Terminal Unit)是一种基于主从架构的通信协议,采用二进制数据表示,消息中的每个8位字节含有两个4位十六进制字符。它主要通过RS-485、RS-232、RS-422等物理接口实现数据的传输,传输距离远、抗干扰能力强、通信效率高。 二、报文结构 一个标准的Modbus-RTU报文通常包含以下部分: 地址域:单个字节,表示从站设备