【网络原理】TCP 协议中比较重要的一些特性(二)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 【网络原理】TCP 协议中比较重要的一些特性(二)

1、TCP 状态转换

TCP 状态和“线程状态”是类似的概念,用于描述 TCP 连接过程中正在执行什么操作。


TCP 服务器和客户端都有一定的数据结构来保存连接信息,而这个数据结构中有一个属性叫“状态”,操作系统内核根据状态的不同,决定当前应该执行什么操作。


TCP 状态转换图

1.1、三次握手状态


  • LISTEN 状态表示服务器创建好了 serverSocket,并且绑定客户端完成,等待客户端 new Socket 进行三次握手连接。
  • ESTABLISHED 状态表示连接已经建立完毕,三次握手完成。图中的两个 ESTABLISHED 状态可以认为是几乎同时进入。

1.2、四次挥手状态


  • CLOSE_WAIT 表示收到对方发送过来的 fin,接下来的代码中需要调用 close 来主动返回 fin,由于关闭速度 socket 非常快,该状态不太容易被察觉到。【谁被动断开连接,谁进入 CLOSE_WAIT】
  • TIME_WAIT 表示本端给对方发起 fin 之后,对方也给返回了 fin,该状态存在的意义是给最后一个 ack 重传留有一定时间,防止最后一个 ack 丢包,只要该状态还存在,就依然会保存对端的信息,才能为连接提供各种操作(包括返回 ack )。【谁主动断开连接,谁进入 TIME_WAIT】

需要注意的是:TIME_WAIT 也不会无休止的等待,最多等待 2 MSL(MSL 是系统内核的配置项,表示客户端到服务器之间,允许消耗的最长时间),一旦超过这个时间,就再也不会发送 ack 了。


2、滑动窗口

滑动窗口时是 TCP 中非常有特点的机制。


正常机制下


滑动窗口下

正常的确认应答机制下,每次发送放收到一个 ack 后才会发送下一个数据,导致大量的时间都消耗在等 ack 上。


而滑动窗口就可以在保证可靠性传输的基础上,提高效率(减少损失的速度,而不是增加速度),通过批量传输,把多次请求的等待时间,使用同一份时间来等,减少了总的等待时间。


例如:此时批量4个数据,对应4个 ack,这4个 ack 到达的时间各异,此时不需要等所有 ack 都到达,只要有一个 ack到达,就发送下一个数据,不需要管 ack 的顺序。



当采用滑动窗口的策略时,如果出现丢包,如何进行重传?这里分两种情况讨论:


1、ack 丢了

这种情况下, 部分 ack 丢了并不要紧,对可靠性没有影响,不需要进行重传,因为可以通过后续的 ack 进行确认。



2、数据丢了


数据丢了必然需要重传。 上述重传的过程中,整体的效率是非常高的,因为这里的重传做到了“针对性”重传,不会有重复发送,整体的效率没有额外的损失,这种重传称为“快速重传”。


TCP 有接收缓冲区(生产者消费者模型),发送的数据先放到缓冲区里排队,当发现缓冲区中的数据不连续时证明数据丢失,就会重传对应的数据,待数据补齐后再继续接收后面的数据。



3、流量控制

滑动窗口的窗口大小不能无限大,如果窗口过大导致发送速度大于接收方的处理速度(导致接收缓冲区满了),就会出现丢包问题,进而影响了 TCP 的可靠传输。【任何提升效率的行为都不应该影响到可靠性】


为了让发送速度与处理速度保持步调一致,就需要根据接收方的处理能力反过来影响发送方的发送速率,称为“流量控制”。通过这个字段来给发送方反馈发送速度。该字段在普通报文中无意义,在 ack 报文中才有意义。接收方会按照自身接收缓冲区的剩余空间大小(又称为“接收窗口”)作为 ack 中窗口大小的数值,发送方就能根据该数值调整窗口大小。



当接收窗口逐渐较少,直至到 0 后,此时接收方的接收缓存区已满,发送方将停止发送。然后发送方会周期性发送窗口探测包(不携带载荷),用于查询窗口大小,当查询到窗口大小不为 0 时继续发送。


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
12天前
|
负载均衡 网络协议 算法
|
3天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
20 3
|
6天前
|
网络虚拟化
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性
生成树协议(STP)及其演进版本RSTP和MSTP,旨在解决网络中的环路问题,提高网络的可靠性和稳定性。本文介绍了这三种协议的原理、特点及区别,并提供了思科和华为设备的命令示例,帮助读者更好地理解和应用这些协议。
18 4
|
6天前
|
运维 物联网 网络虚拟化
网络功能虚拟化(NFV):定义、原理及应用前景
网络功能虚拟化(NFV):定义、原理及应用前景
21 3
|
14天前
|
存储 缓存 网络协议
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点,GET、POST的区别,Cookie与Session
计算机网络常见面试题(二):浏览器中输入URL返回页面过程、HTTP协议特点、状态码、报文格式,GET、POST的区别,DNS的解析过程、数字证书、Cookie与Session,对称加密和非对称加密
|
3天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第39天】在数字化时代,网络安全和信息安全成为了我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和方法来保护自己的信息安全。
14 2
|
4天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第38天】本文将探讨网络安全与信息安全的重要性,包括网络安全漏洞、加密技术和安全意识等方面。我们将通过代码示例和实际操作来展示如何保护网络和信息安全。无论你是个人用户还是企业,都需要了解这些知识以保护自己的网络安全和信息安全。
|
3天前
|
存储 安全 网络安全
云计算与网络安全:探索云服务中的信息安全策略
【10月更文挑战第39天】随着云计算的飞速发展,越来越多的企业和个人将数据和服务迁移到云端。然而,随之而来的网络安全问题也日益突出。本文将从云计算的基本概念出发,深入探讨在云服务中如何实施有效的网络安全和信息安全措施。我们将分析云服务模型(IaaS, PaaS, SaaS)的安全特性,并讨论如何在这些平台上部署安全策略。文章还将涉及最新的网络安全技术和实践,旨在为读者提供一套全面的云计算安全解决方案。
|
3天前
|
存储 安全 网络安全
网络安全与信息安全:漏洞、加密技术与安全意识的交织
【10月更文挑战第39天】在数字化时代,网络安全与信息安全成为保护个人隐私和组织资产的重要屏障。本文将探讨网络安全中的常见漏洞、加密技术的应用以及提升安全意识的重要性。通过具体案例分析,我们将深入了解网络攻击的手段和防御策略,同时提供实用建议,以增强读者对网络安全的认识和防护能力。
|
3天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第39天】在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将探讨网络安全漏洞、加密技术以及安全意识等方面的内容,帮助读者更好地了解网络安全的重要性,并提供一些实用的技巧和建议来保护个人信息和设备安全。