TCP为什么安全

简介: 老八股了,都说TCP比UDP安全,那他安全再哪呢。。

确认应答机制

  1. 确认与重传接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传
  2. 每次接受端收到数据后会返回ACK,ACK中带有对应的确认序号告诉发送端从哪开始
  3. 所有的数据都有序列号,TCP在发送数据时不是按顺序发送的,接收方接收后按序号排序,如果中间某个数据报丢失了,之后的数据报还是会被接收,但是不会对发送端返回之后的确认,而是会重复发送对丢失出之前的数据确认,让发送端重发丢失的数据段。

超时重传、数据校验

  • 接收方的ACK丢失,发送方在特定的时间间隔内没有收到接收方发来的确认影带会进行重发,这是接收方会利用

数据合理分片和排序

  • UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报.
  • tcp会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。

流量控制

  • 滑动窗口:
  • 窗口大小是指无需等待确认应答而可以继续发送数据的最大值
  • 在发送数据时并不是一次发送窗口的大小,而是将其分段,当第一段的数据收到一个ACK应答时,窗口就会向后滑动,继续发送下一段数据。
  • 操作系统维护了一个缓冲区,发送端有发送端缓冲区用来记录哪些数据发送未应答,只有收到ACK后才会在缓冲区删除。
  • 接受端有接收端缓冲区,接收端处理数据的速度是有限的,如果发送方发送数据的速度过快,导致接收端的缓冲区满,而发送方继续发送,就会造成丢包,继而引起丢包重传等一系列连锁反应。
  • TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制叫做流量控制。
  • 在TCP报文段首部中有一个16位窗口长度,当接收端接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16窗口大小中。
  • 这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接收方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。
  • 如果缓冲区满,就将窗口置为0,发送方收到后就不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。

拥塞控制

  • 慢开始
  • 开始先发送少量数据,试探当前网络状态,再决定以多大的速度发送数据。慢开始的发送速度成指数型增长,但不能一直增长。
  • 拥塞窗口
  • 代表传输速度的状态
  • 设置一个拥塞窗口的阈值,当拥塞窗口大小超过阈值时(tcp开始启动时阈值等于拥塞窗口的最大值),不能再按照指数来增长,而是线性的增长。每次超时重发时,慢启动的阈值就会变成原来的一半,同时拥塞窗口变成1
  • 快重传
  • 当1001~2000这段报文段丢失后,接收端就会以只收到1001的ACK,它告诉发送端,我收到了1~1000的数据报,我想要1001,但是后面的报文段(2001-7000)它也会接收,却仍然发送丢失之前的应答(下一个1001发送)
  • 直到发送方连续三次收到同样一个“1001”这样的应答,就会将对应的数据“1001~2000”重新发送
  • 接收端收到1001~2000之后,就会直接返回ACK=7000(因为2001~7000接收端之前都收到过了,都放在了之前提到的接收缓冲区中),这就是快重传
  • 快恢复
  • 当发送端连续收到三个重复确认,就执行“乘法减小”算法,把慢开始阈值减半。
  • 与慢开始不同之处是现在不执行慢开始算法,而是直接将拥塞窗口的值设置为慢开始阈值ssthresh减半后的数值,然后直接进行拥塞避免,使拥塞窗口缓慢地线性增大


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
缓存 网络协议 安全
CentOS7下使用TCP over TLS方式安全传输远程主机系统日志
CentOS7下使用TCP over TLS方式安全传输远程主机系统日志
264 0
CentOS7下使用TCP over TLS方式安全传输远程主机系统日志
|
安全 网络协议 Windows
|
安全 网络安全 数据库
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 18 章 服务器设置和操作_18.10. 使用SSH隧道的安全 TCP/IP 连接
18.10. 使用SSH隧道的安全 TCP/IP 连接 可以使用SSH来加密客户端和PostgreSQL服务器之间的网络连接。如果处理得当,这将提供一个足够安全的网络连接,即使是对那些无 SSL 能力的客户端。
1163 0
|
安全 关系型数据库 网络安全
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 18 章 服务器设置和操作_18.9. 用 SSL 进行安全的 TCP/IP 连接
18.9. 用 SSL 进行安全的 TCP/IP 连接 18.9.1. 使用客户端证书 18.9.2. SSL 服务器文件用法 18.9.3. 创建自签名的证书 PostgreSQL有一个对使用SSL连接加密客户端/服务器通讯的本地支持,它可以增加安全性。
1813 0
|
安全 网络协议 C#
|
安全 网络协议 网络安全