当前位置: 首页 > article >正文

跟着小德学C++之TCP基础

嗨,大家好,我是出生在达纳苏斯的一名德鲁伊,我是要立志成为海贼王,啊不,是立志成为科学家的德鲁伊。最近,我发现我们所处的世界是一个虚拟的世界,并由此开始,我展开了对我们这个世界本源的探索。那么就由我来带领大家拨开迷雾,深入探究我们世界的根本。

上一篇我们介绍了AZ端authserver启动监听,本期我们先来讲讲TCP的内容,为以后打下基础。

什么是TCP

TCP,全称为传输控制协议(Transmission Control Protocol),是一种在网络中用于数据传输的通信协议。以下是TCP的一些关键特性:

  1. 面向连接:在进行数据传输之前,TCP需要建立一个连接,确保数据能够从源头准确到达目的地。
  2. 可靠性:TCP通过各种机制(如确认应答、重传等)来保证数据的可靠传输,即数据不会在传输过程中丢失或出错。
  3. 字节流服务:TCP处理数据时,将数据视为一连串的字节流,而不是独立的数据包。
  4. 流量控制:TCP有能力调节数据传输的速度,以防止快速的发送者压倒慢速的接收者。
  5. 与IP协议共同使用:TCP通常与互联网协议(IP)一起工作,共同构成了TCP/IP协议族,这是互联网通信的基础。
  6. 头部结构:TCP数据包有一个特定的头部结构,包含了源端口、目的端口、序列号、确认号等信息,这些信息用于确保数据的正确传输和接收。
  7. 套接字端点:应用程序通过套接字(Socket)接口与TCP进行交互,套接字定义了通信的端点,包括IP地址和端口号。
  8. 适应多种网络:TCP设计上可以在不同的网络类型上运行,无论是硬线连接还是分组交换网络。
  9. 分层协议体系:TCP位于OSI模型的传输层,为上层的应用层提供服务,同时依赖下层的网络层来进行实际的数据包传输。
  10. 滑动窗口机制:TCP使用滑动窗口机制来进行流量控制,确保数据的有效传输,并允许接收方根据自身的缓冲区大小调整接收数据的速度。

综上所述,TCP是一种复杂的协议,它提供了许多机制来确保数据在不可靠的网络环境中能够可靠地传输。它是互联网通信的基础之一,对于支持全球数据通信至关重要。

为什么需要TCP

在计算机最开始发展的时期,网络传输速率低,而且不稳定,那如何在两台计算机之间进行可靠的数据传输呢?所以就需要有双方的认证机制、重传机制和流量控制机制等。最经典的例子就是TCP连接开始的三次握手协议。

三次握手协议

假如战场上两个将军A和B需要建立可靠的通信,A将军先命令通讯员携带者书信(SYN标记)到B将军处;B将军看到书信后,写了封回信(ACK标记),并命令通讯员返回;A将军看到B将军回信后,又写了一份回信(SYN标记)。至此,A将军和B将军就建立了可靠的连接。

思考

上述连接真的是可靠的吗?其实还是有风险,风险点在哪里呢?就在最后一次握手。最后一次A发出信息后,不再接收B的反馈,所以实际A并不知道B收没收到消息,所以还是有风险。那怎么办呢?别着急,TCP还有重传机制,当一个消息发出去后没回复,TCP会重新发送消息。这两个机制共同确保只要三次握手执行完毕,就可以算作是建立了可靠的连接。

攻击点——Synflooding攻击

这种攻击手段一点也不新鲜,是一种最古老的攻击手段,用通俗的话讲,就是拒绝服务攻击(DoS),该攻击利用TCP/IP协议天生的特点,通过大量的虚假IP地址建立不完整连接,使得服务器超载,陷入瘫痪状态。这种攻击的特点是简单,没有任何技术含量。

面对这种攻击,目前也有很多技术手段反制,比如Syn Cache、Syn Cookie、SYN Proxy防火墙等技术,都可以防御此攻击。

好了,今天就到这里吧,我要去呵护我的世界之树了,拜拜。


http://www.kler.cn/a/232292.html

相关文章:

  • Tessy学习笔记—requirement(需求)的管理
  • 游戏引擎学习第九天
  • 五、函数封装及调用、参数及返回值、作用域、匿名函数、立即执行函数
  • C#笔记(3)
  • 【数据结构】线性表——栈与队列
  • [Admin] Dashboard Filter for Mix Report Types
  • 常用的文件系统、存储类型小整理
  • Rust语言入门小结(第1篇)
  • Nginx 缓存集成、清除、设置不缓存资源
  • JavaScript实现轮播图方法
  • LabVIEW动平衡测试与振动分析系统
  • spring boot(2.4.x 开始)和spring cloud项目中配置文件application和bootstrap加载顺序
  • 企微群管理机器人的价值与应用
  • 深入探索C++ Move语义:现代编程中的性能革命
  • Debezium发布历史118
  • 【QT】day6
  • 文件上传-Webshell
  • 消息中间件:Puslar、Kafka、RabbigMQ、ActiveMQ
  • Canvas的js库:Konva.js-像操作DOM一样,操作canvas
  • 【机器学习】全网最全模型评价指标(性能指标、YOLOv5训练结果分析、轻量化指标、混淆矩阵详解)【基础收藏】
  • 基于SSM的网络在线考试系统(有报告)。Javaee项目。ssm项目。
  • C++服务器端开发(10):性能优化
  • MySQL基础查询篇(10)-正则表达式的基础使用
  • 关于数字图像处理考试
  • 【Java八股面试系列】JVM-内存区域
  • WebSocket+Http实现功能加成