【TCP/IP】图解TCP的通信机制(上)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: TCP(Transmission Control Protocol)是传输控制协议,其作用于传输层,是一种提供了面向连接通信服务的协议看TCP的英文全称就知道,其主要作用就是传输 、控制,传输的是数据,控制的是在传输过程中丢包后的重发 、分包乱序后的有序重组 、控制数据传输的速率防止网络拥塞等这也是我们口中一直说的TCP是一种可靠的传输协议的原因。本文就将对TCP的作用过程以及一些机制进行讲解

一、TCP连接管理


TCP是面向连接进行通信服务的协议,所谓连接,其实就是在两台需要数据交互的主机之间建立一条虚拟的线路,所有的数据交互都是通过这条线路进行的,而TCP就负责这整个线路的创建、销毁、维护管理等工作


在建立连接之前,需要做一些准备,为了确保通信两端是否可以进行正常通信,发送端会通过TCP的首部发送一个SYN包作为建立连接的请求并等待接收端确认应答。如果接收端确认应答并返回一个ACK包,则表示接收端同意与发送端进行通信,然后发送端再次发送一个ACK包给接收端,表示已收到你的同意通信的消息了,此后两端就可以正常通信了;若接收端没有返回给发送端一个确认应答的ACK包,则表示不同意与发送端进行通信,那么两端自然无法进行后续的通信了


两端若在通信完成以后肯定需要断开通信,同样也需要两端互发包来确认是否要断开通信。比如,发送端先发送一个FIN包给接收端,告知想要断开连接,然后接收端可以返回给发送端一个ACK包表示同意你断开连接的请求,紧接着接收端也向发送端发送了一个FIN包,表示其也想断开连接的意愿,发送端在接收到该包后随即返回给接收端一个ACK包表示我也同意你断开连接,这样,两端就断开连接了


总结一下,一次完整的TCP连接的建立与断开至少需要来回发送7个包,其中建立连接需要发3个包,断开连接需要发4个包


我们来看一下完整的通信过程简图


22042ac3f547aa96cda17a0478a84938.png


这就是大家常说的三次握手,四次挥手的过程


如果不好理解上面的建立、断开连接过程,这里我再给大家举一个小小的例子


发送端与接收端通信,就好比我们日常生活中两个人打电话,例如现在A给B打电话


  • A问B:喂?你是B吗?
  • B回答A:我是B呀,你是A吗?
  • A回答B:对的,我是A


就这样一个简单的三次对话就确认了双方是想要互相通信的对象,因此连接就此建立了

那么当A和B聊完天,准备挂电话了


  • A对B说:我的事说完了,那么没啥事我就挂电话了哈
  • B回答A:好的
  • B又对A补充了一句:我也没啥事了,那我也挂了哈
  • A回答B:好的


这三段对话就使通信双方确认了会话结束,因此连接就此断开了


二、分段数据发送


TCP不是拿到一整个包就直接原封不动地传给接收端的,因为若这样做,即使是发生了数据丢失,也不知道到底丢失了哪部分的数据,因此其采用的就是将数据分段发送的方式


这里先说明一点,不光建立和断开连接时接收端需要向发送端发送请求应答,在数据交互时也是需要的


例如有一个数据包,我们可以将其按顺序给每一个字节都标上一个序号,然后我们假设每次发送1000个序号区间的数据给接收端,所以第一次发送的是 序号 1 ~ 1000 的数据,接收端接收到了以后会返回给发送端一个请求应答,告知发送端下一次请发送 序号 1001 ~ 2000 的数据过来,过程如图所示


697a49f7f6ccb88a9a64befcc2016136.png


上面我们假设的是每次发送1000个序列号区间的单位,而实际过程中,却不一定是这个值。


在前面的学习中,我们得知数据在数据链路层中传输会收到MTU(最大传输单元)的影响,若数据大于该值,IP则会被分片处理,因此我们尽可能地不让这种事情发生,那么就要让传输的每段数据大小小于该通信线路上最小的MTU,该值称为MSS(最大消息长度)


该值是会在建立连接的三次握手时被计算获得的,比如发送端在请求接收端的时候,在发送的包上附带上其线路上的MTU大小为4000,然后接收端在发送确认应答给发送端时,也会在包上附带上其线路上的MTU大小为1460,此时发送端接收到确认应答后比较两个MTU的大小,取其中小的那个值作为之后数据传输每段的数据大小


如图:


ea67d2c4b94f94367a7b3d23175d2c1d.png


三、重发控制


我们都知道,在数据传输过程中可能会因为各种原因出现丢包现象,而当出现丢包现象时,即发送端在发完数据以后等待一段时间,并未收到接收端的确认应答,则视为丢包,于是就会进行重发


其中丢包现象又分为两种:


  1. 发送端向接收端发送数据的过程中,发生了丢包现象,接收端并未接收到数据,因此不会给发送端发送确认应答


  1. 接收端收到了发送端传过来的数据,并且也向发送端返回了确认应答,但确认应答的包却在发送的途中出现了丢包,所以发送端接收不到确认应答


以上两种情况如下图所示:


第一种情况:


31a59921ec19e3455e9ca8f2e4c342bd.png


第二种情况:


0901f22576020140fdeb054b96c333b8.png


那么,发送端发送完数据后多久没收到确认应答才判定数据丢包了呢?这个都是随着网络环境的变化而变化的,TCP会在每次发包时计算往返时间以及偏差来决定等待的时间


若重发后又出现了丢包,则下一次等待的时间会以2倍、4倍的指数函数延长


但其又不会无限进行重发,当重发次数达到一定程度后,会判定为网络异常,两端通信就会被强制关闭

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
6月前
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
113 4
|
3月前
|
网络协议 安全 网络安全
网络编程:基于socket的TCP/IP通信。
网络编程:基于socket的TCP/IP通信。
239 0
|
19天前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
27天前
|
网络协议 安全 大数据
TCP/IP协议栈中何时使用TCP?
【10月更文挑战第20天】TCP/IP协议栈中何时使用TCP?
28 2
|
5月前
|
网络协议 安全 Java
Java网络编程入门涉及TCP/IP协议理解与Socket通信。
【6月更文挑战第21天】Java网络编程入门涉及TCP/IP协议理解与Socket通信。TCP/IP协议包括应用层、传输层、网络层和数据链路层。使用Java的`ServerSocket`和`Socket`类,服务器监听端口,接受客户端连接,而客户端连接指定服务器并交换数据。基础示例展示如何创建服务器和发送消息。进阶可涉及多线程、NIO和安全传输。学习这些基础知识能助你构建网络应用。
50 1
|
网络协议
计算机通信地址【图解TCP/IP(笔记六)】
计算机通信地址【图解TCP/IP(笔记六)】
119 0
|
6月前
|
网络协议 安全 Java
Java网络编程入门指南:TCP/IP协议与Socket通信
Java网络编程入门指南:TCP/IP协议与Socket通信
151 1
|
SQL 网络协议 前端开发
🚀超级简单的图解TCP/IP,看不懂来打我:OSI模型与通信示例🚀
🚀超级简单的图解TCP/IP,看不懂来打我:OSI模型与通信示例🚀
|
监控 网络协议 网络架构
IP协议【图解TCP/IP(笔记九)】
IP协议【图解TCP/IP(笔记九)】
147 0
|
存储 网络协议 前端开发
OSI参考模型通信处理例子【图解TCP/IP(笔记四)】
OSI参考模型通信处理例子【图解TCP/IP(笔记四)】
168 0
下一篇
无影云桌面