官方网站搭建,宝塔自助建站系统源码,苏州市网站,html个人网页制作源代码目录 0 引言1 TCP 的特性1.1 拓展#xff1a;全双工、单工、半双工通信 2 TCP报文段结构3 TCP如何实现RDT4 TCP 流量控制4.1 题外话#xff1a;算法感悟 5 TCP连接3次握手、断开连接4次握手5.1 连接5.2 断开连接 6 拥塞控制6.1 拥塞控制原理6.2 TCP拥塞控制 #x1f64b;♂… 目录 0 引言1 TCP 的特性1.1 拓展全双工、单工、半双工通信 2 TCP报文段结构3 TCP如何实现RDT4 TCP 流量控制4.1 题外话算法感悟 5 TCP连接3次握手、断开连接4次握手5.1 连接5.2 断开连接 6 拥塞控制6.1 拥塞控制原理6.2 TCP拥塞控制 ♂️ 作者海码007 专栏计算机四大基础专栏 其他章节网络快速入门系列、计网概述、计网应用层详解、计网Web和HTTP、计网FTP、计网EMail、计网DNS、计网P2P 标题【计算机网络 TCP】 中科大笔记 十 二❣️ 寄语书到用时方恨少事非经过不知难。 最后文章作者技术和水平有限如果文中出现错误希望大家能指正 0 引言
其实之前就已经学了 TCP 协议了但是只是概略的学习今天就详细的学习一下 TCP 协议的原理。
参考文章知乎
1 TCP 的特性
TCPTransmission Control Protocol是一种面向连接、点到点、可靠、全双工的传输层协议。以下是TCP协议的主要特性
面向连接 TCP在通信之前必须先建立连接通信完成后需要释放连接。连接的建立和释放过程分别是三次握手和四次挥手。 可靠性 TCP通过序号、确认和重传机制来确保数据的可靠传输。每个TCP报文段都有一个唯一的序号接收方会确认已成功接收的数据并对未成功接收的数据进行重传。 流控制 TCP使用滑动窗口机制进行流控制。接收方可以告知发送方它的接收窗口大小从而限制发送方发送的数据量防止接收方不堪重负。 拥塞控制 TCP通过拥塞窗口和慢启动等机制来进行拥塞控制。拥塞窗口控制发送方的数据流量以避免网络拥塞。慢启动机制在连接刚建立时通过逐渐增加发送窗口的大小来适应网络状况。 全双工通信 TCP是全双工通信的意味着在一个TCP连接中数据可以在两个方向上同时传输。MSS最大报文段的大小Max Segment Size 面向字节流 TCP是面向字节流的它不保留消息的边界。发送方将数据流分割成适当大小的报文段而接收方则负责重新组装这些报文段。字节流的数据是没有字符编码的所以想以正确方式进行输出打印还需要进行正确的解码操作 头部信息 TCP报文头部包含了很多信息包括源端口、目标端口、序号、确认号、窗口大小、控制标志等以控制连接的建立、维护和数据传输。 超时与重传 TCP使用超时与重传机制来处理丢失的数据。如果发送方在一定时间内未收到确认触发超时重新发送相应的数据。 可插拔 TCP是一种可插拔的协议它可以在不同的网络环境中运行而上层应用无需关心底层网络的细节。
总体而言TCP提供了一种高度可靠的数据传输服务适用于那些对数据可靠性要求高、能够容忍一些延迟的应用例如文件传输、Web浏览等。 TCP的特性和机制确保了数据的完整性、有序性和可靠性。
1.1 拓展全双工、单工、半双工通信
他们三者描述了通信设备之间信息流动的方向和能力。 全双工通信Full-Duplex Communication
在全双工通信中通信的双方可以同时发送和接收数据而且这两个方向的通信是相互独立的。这意味着在同一时间内设备 A 可以发送数据给设备 B同时设备 B 也可以发送数据给设备 A实现了双方之间的双向通信。电话对讲机、互联网电话和计算机网络中的TCP协议等都是全双工通信的例子。 单工通信Simplex Communication
在单工通信中通信的双方只能有一个方向的通信。其中一个设备只能发送数据而另一个设备只能接收数据不能同时发送和接收。通信是单向的类似于广播或电视广播其中信息只能从一个地方传输到另一个地方而反向通信是不可行的。 半双工通信Half-Duplex Communication
在半双工通信中通信的双方可以在不同的时间段内进行双向通信但不能同时进行。设备 A 在某一时刻发送数据给设备 B然后在另一时刻设备 B 发送数据给设备 A。对讲机通信就是半双工通信的一个例子。 总结 全双工通信 双方可以同时发送和接收数据实现双向通信。 单工通信 通信双方只能有一个方向的通信不能同时发送和接收。 半双工通信 双方可以进行双向通信但不能同时进行需要切换发送和接收的方向。 选择使用哪种通信模式取决于特定的应用需求和通信设备的能力。在许多实际应用中全双工通信更为常见因为它提供更高的灵活性和效率。
2 TCP报文段结构
TCP报文的Body部分就是存储的应用层的数据。例如应用层是HTTP协议那么TCP报文的Body就是存储的请求报文或者响应报文。 TCPTransmission Control Protocol报文段是在TCP通信中传输数据的基本单元。TCP报文段的结构如下
源端口号Source Port 占用2个字节用于标识发送方应用程序的端口号。 目标端口号Destination Port 占用2个字节用于标识接收方应用程序的端口号。 序号Sequence Number 占用4个字节表示本报文段的第一个数据字节在完整数据流中的序号。用于按序传递数据。 确认号Acknowledgment Number 占用4个字节如果设置了ACK标志位则表示期望接收的下一个数据字节的序号。用于确认已经成功接收的数据。 数据偏移Data Offset 占用4个位表示TCP报文段头部的长度以4个字节为单位。最大值为15因此头部长度最大为60字节。 保留Reserved 占用6个位保留字段未使用。 标志位Flags 占用6个位包括URG、ACK、PSH、RST、SYN、FIN等标志用于指示TCP报文段的各种状态和控制信息。 窗口大小Window Size 占用2个字节表示发送方愿意接收数据的窗口大小。用于流量控制。 校验和Checksum 占用2个字节用于检测TCP报文段头部和数据的错误。 紧急指针Urgent Pointer
占用2个字节如果URG标志被置位则表示紧急数据的偏移量。用于指示紧急数据。
可选项Options
长度可变最长为Data Offset - 5 * 4 字节用于传递一些可选的信息如最大报文段大小MSS、时间戳等。
数据Data
包含应用层数据的部分。可以是0个或多个字节。
TCP报文段的头部是固定长度的但其选项和数据部分的长度是可变的。报文段的结构提供了对数据传输的控制和管理包括流量控制、错误检测、序号和确认号的管理等。除了数据部分之外TCP报文段的所有信息都包含在TCP报文头部。
3 TCP如何实现RDT
TCPTransmission Control Protocol是一种在IPInternet Protocol网络上实现可靠数据传输的协议。IP本身是一种无连接、不可靠的数据包交换协议它主要负责在网络中传递数据包并将数据包从源地址传输到目标地址。然而TCP在IP的基础上提供了一种可靠的、面向连接的通信服务。
下面是TCP如何在IP不可靠的基础上实现可靠数据传输的基本原理 建立连接Three-Way Handshake 在进行数据传输之前发送方和接收方需要建立一个连接。这是通过三次握手来完成的。第一步客户端向服务器发送一个请求SYN以建立连接。第二步服务器收到请求后回复一个确认ACK并发送自己的SYN。第三步客户端收到确认后回复一个确认完成连接的建立。 可靠数据传输 一旦连接建立数据的传输就会开始。数据被划分成小的数据块称为数据段segment。发送方将数据段发送到接收方并等待接收方的确认。如果发送方在一定时间内未收到确认它会重新发送相同的数据段。 流量控制Flow Control TCP使用滑动窗口机制来进行流量控制。发送方和接收方都有一个窗口大小的概念。接收方通过发送窗口大小告诉发送方自己能够接收的数据量。发送方根据接收方的窗口大小来控制发送数据的速率以防止数据丢失或拥塞。 拥塞控制Congestion Control TCP通过拥塞窗口来进行拥塞控制。当网络拥塞时TCP会减小拥塞窗口的大小降低发送速率以减轻网络压力。当网络条件好转时拥塞窗口会逐渐增大提高发送速率。 顺序控制 接收方通过对接收到的数据包进行排序确保数据包按正确的顺序组装。如果接收方发现有丢失的数据包它会要求发送方重新发送这些数据包。 连接的关闭Four-Way Handshake 数据传输完成后双方需要进行连接的关闭。关闭是通过四次握手来完成的包括发送方和接收方各发送一个FINFinish报文表示数据传输结束。对方收到FIN后回复一个确认表示同意关闭连接。这个过程分为两个步骤先由客户端发送FIN然后由服务器发送FIN。
通过这些机制TCP实现了在IP网络上的可靠数据传输。它提供了一种面向连接、有序、可靠、流式的传输服务使得应用层可以在不同的设备之间进行可靠的数据交换。
4 TCP 流量控制
TCP实现流量控制的主要机制是通过滑动窗口Sliding Window来调整发送方的发送速率以适应接收方的处理能力和网络状况。滑动窗口机制是TCP用于管理数据流的一种重要方式以下是详细解剖流量控制原理的步骤 接收方通告窗口大小 接收方在TCP头部的窗口字段中通告自己的窗口大小即接收方当前能够接收的数据量。接收方动态调整窗口大小根据自身处理能力和可用缓存的大小。 发送方的发送窗口 发送方也有一个窗口大小的概念称为发送窗口。发送窗口大小表示发送方可以发送但还未被确认的数据量。 滑动窗口的原理 发送方发送窗口的起始位置称为发送方的基序号Sequence Number。发送方将数据按照窗口大小划分成多个段每个段的大小不超过窗口大小。发送方发送窗口会随着接收到对端的确认而滑动即基序号向前移动。滑动窗口的滑动过程是动态的它根据接收方通告的窗口大小和网络状况来进行调整。 流量控制过程 发送方发送数据并等待接收方的确认。接收方接收到数据后根据自身处理能力和可用缓存的大小通告发送方自己的窗口大小。发送方根据接收方通告的窗口大小和当前未被确认的数据量来决定发送的数据量。如果发送方的发送窗口超过了接收方通告的窗口大小发送方需要等待接收方的确认并调整发送窗口的大小。 窗口调整 如果接收方的窗口变大发送方可以增加发送窗口的大小提高发送速率。如果接收方的窗口变小发送方需要适时减小发送窗口的大小以防止发送过多的数据导致网络拥塞或接收方无法处理。
通过这种滑动窗口的机制TCP实现了流量控制使得发送方的发送速率可以根据接收方的处理能力和网络状况进行动态调整从而保证在不同网络条件下的可靠数据传输。这种流量控制机制有效地防止了发送方发送过多的数据以及接收方无法及时处理导致的问题。
4.1 题外话算法感悟
学习算法是触类旁通的。算法是解决问题的一般方法而不仅仅是应用于某一特定领域。很多常见的算法和数据结构在计算机科学的各个领域都有广泛的应用。滑动窗口算法就是一个很好的例子它在多个领域都有用途包括计算机网络、字符串处理、数组处理等。
学习算法具有以下优势 通用性 算法是解决问题的通用方法可以应用于各种领域和情境。 解决复杂问题 算法使得我们能够更有效地解决复杂的问题提高程序的效率和性能。 思维模式 学习算法有助于培养抽象思维和问题求解的能力。解决一个算法问题通常需要分析问题、设计解决方案并进行实现。 编码技能 熟练掌握算法有助于提高编码技能使代码更加清晰、高效和可维护。 面试和招聘 在计算机科学领域算法和数据结构是面试中常见的考察点掌握这些知识可以提高在招聘过程中的竞争力。
当你学习一种算法时你会学到解决特定问题的通用思维模式。这种思维模式可以应用于其他类似的问题使你更容易理解和解决新的挑战。例如学习了滑动窗口算法后你可能会发现在其他领域的类似问题中也可以采用相似的思路。
总的来说算法是计算机科学的基础学习它们不仅有助于解决具体问题还能够提高你在各种计算机科学领域的问题解决能力。
5 TCP连接3次握手、断开连接4次握手
5.1 连接
三次握手可以解决半连接和接受老数据的问题。
TCPTransmission Control Protocol连接的三次握手是在建立 TCP 连接时进行的一系列步骤以确保通信的双方都能够理解并同意建立连接。这三个步骤是 第一次握手SYN 客户端发送一个 TCP 报文段其中包含一个设置了 SYNSynchronize标志的序列号Sequence Number。这表示客户端请求建立连接。客户端选择一个初始的序列号用于后续数据传输的标识。 第二次握手SYN ACK 服务器收到客户端的 SYN 请求后如果同意建立连接会发送一个包含 SYN 和 ACKAcknowledgment标志的 TCP 报文段作为响应。服务器也选择一个初始的序列号用于后续数据传输并确认收到了客户端的序列号。 第三次握手ACK 客户端收到服务器的 SYN ACK 后向服务器发送一个带有 ACK 标志的 TCP 报文段表示连接已经建立。服务器收到客户端的 ACK 后双方正式建立连接可以开始进行数据传输。
这个过程确保了双方都同意建立连接同时也用于同步双方的初始序列号。这种三次握手机制可以防止已失效的连接请求导致的问题并确保每一方都具有相同的连接参数。在连接建立后双方就可以进行正常的数据传输。
5.2 断开连接
可以将连接看作两个不同方向的连接。分别是客户端到服务端方向的传输、服务器到客户端的传输。两次握手只能断开一个方向的连接所以总共需要四次握手。
TCP连接的四次握手是在关闭连接时进行的一系列步骤以确保双方都愿意终止连接。这四个步骤是 第一次握手FIN 主动关闭方通常是客户端发送一个 TCP 报文段其中包含设置了 FINFinish标志的序列号。这表示主动关闭方不再发送数据但仍然可以接收数据。 第二次握手ACK 被动关闭方通常是服务器收到关闭方的 FIN 后向关闭方发送一个带有 ACK 标志的报文段确认收到了关闭方的 FIN。此时被动关闭方进入半关闭状态可以继续发送数据给主动关闭方。 第三次握手FIN 被动关闭方向主动关闭方发送一个 FIN 报文段表示被动关闭方也准备关闭连接。主动关闭方收到 FIN 后进入等待状态继续发送数据。 第四次握手ACK 主动关闭方收到被动关闭方的 FIN 后向被动关闭方发送一个 ACK 报文段表示收到了 FIN。此时连接正式关闭。
这个过程确保了双方都有足够的时间完成尚未完成的数据传输并且都同意关闭连接。在四次握手完成后连接被完全释放。
需要注意的是TCP 的四次握手过程是为了保证数据的完整性和可靠性。在实际应用中可能存在 TIME_WAIT 状态即连接关闭后一小段时间内系统会保持连接的信息以确保已传输的数据被接收方完全接收。这可以防止连接中残留的数据干扰下一次连接。 对称释放并不完美
6 拥塞控制
6.1 拥塞控制原理
6.2 TCP拥塞控制