TCP(Transmission Control Protocol)传输控制协议

TCP(传输控制协议)是一个面向连接、可靠的传输层协议,广泛用于互联网和局域网中。TCP 在保证数据准确性、完整性和顺序的基础上,提供可靠的数据传输。它常用于需要高可靠性的数据传输应用,例如网页浏览(HTTP/HTTPS)、文件传输(FTP)、电子邮件(SMTP、POP3)等。

TCP 的核心特性:

1.面向连接(Connection-Oriented):

  • 在数据传输前,客户端和服务器必须建立连接,连接的建立过程称为“握手”。
  • 在数据传输完成后,连接需要被“关闭”。

2.可靠性:

  • TCP 确保数据的可靠传输。它通过确认机制(ACK)来确保数据包的到达,丢失的数据包会被重新传输。
  • 发送方发送数据包时,接收方会发送确认消息(ACK)给发送方,确认收到的数据包。如果发送方没有收到确认,它会重新发送数据包。

3.数据顺序:

  • TCP 保证数据包按顺序到达接收方。如果数据包乱序到达,接收方会重新排序。

4.流量控制:

  • TCP 使用滑动窗口机制控制数据流量。接收方可以告知发送方它的接收缓冲区大小,避免接收方因无法处理数据而丢包。

5.拥塞控制:

  • TCP 具有拥塞控制机制,可以根据网络的拥堵情况动态调整发送数据的速度,防止网络过载。

6.全双工通信:

  • TCP 支持全双工通信,即双方可以同时发送和接收数据。

7.差错检查:

  • 每个数据包都包含校验和,接收方通过校验和验证数据是否发生错误。

8.流量控制与拥塞控制:

  • 流量控制:通过滑动窗口调整发送速率,确保接收方能够处理数据。
  • 拥塞控制:使用如慢启动、拥塞避免、快速重传等机制来调节发送速率,避免网络拥塞。

TCP 的工作流程:

1. 三次握手(建立连接)

TCP 连接的建立使用三次握手的方式,确保双方准备好建立连接,并同步双方的序列号。

  • 第一次握手:客户端发送一个 SYN 包(同步请求)给服务器,请求建立连接,客户端进入 SYN_SENT 状态。
  • 第二次握手:服务器收到 SYN 包后,发送一个 SYN-ACK 包作为回应,表示同意建立连接,并进入 SYN_RECEIVED 状态。
  • 第三次握手:客户端收到服务器的 SYN-ACK 包后,发送一个 ACK 包,表示确认收到并完成连接的建立。此时,客户端和服务器都进入 ESTABLISHED 状态,连接建立成功。

2. 数据传输(可靠数据传输)

  • 在连接建立后,TCP 会开始传输数据。每个数据包都有一个序列号,用于标识数据包的顺序。
  • 接收方通过 ACK 包确认每个收到的数据包。如果某个数据包没有收到确认,发送方会重新发送该数据包。
  • 通过流量控制,接收方能够告知发送方它的缓冲区大小,防止数据溢出。

3. 四次挥手(断开连接)

当传输完成后,TCP 连接需要被关闭。这个过程叫做四次挥手:

  • 第一次挥手:主动关闭连接的一方(例如客户端)发送一个 FIN 包,表示不再发送数据。
  • 第二次挥手:接收方(服务器)收到 FIN 包后,发送一个 ACK 包,确认收到关闭连接的请求,客户端进入 FIN_WAIT_2 状态。
  • 第三次挥手:接收方(服务器)准备关闭连接时,发送一个 FIN 包给客户端,表示它也不再发送数据。
  • 第四次挥手:客户端收到 FIN 包后,发送 ACK 包确认关闭,连接彻底关闭。

TCP 的重要机制:

1. 序列号与确认机制(Reliability)

  • 序列号:TCP 将数据拆分成小的段进行传输,每个段都有一个序列号。序列号保证了接收方能按顺序重组数据。
  • 确认(ACK):接收方在收到数据后,发送 ACK 包,告诉发送方自己已经收到数据并确认。确认包会携带下一个期望接收的序列号。

2. 滑动窗口(Flow Control)

滑动窗口是流量控制的一种机制,允许接收方动态调整接收窗口的大小,告诉发送方自己能够处理多少数据。这样可以防止接收方的缓冲区溢出,避免丢包。

3. 拥塞控制(Congestion Control)

TCP 使用多种算法来应对网络拥塞问题:

  • 慢启动:初始时发送数据的速率较低,每收到一次 ACK,发送方就将发送窗口大小增加。
  • 拥塞避免:当发生拥塞时,TCP 会减慢数据发送速率。
  • 快速重传与快速恢复:当发送方发现数据包丢失时,会立即重传,并快速恢复数据传输。

4. 超时与重传(Timeout and Retransmission)

  • 当发送方发送数据包后,如果没有收到接收方的 ACK 确认,发送方会设定一个超时值,超时后会重新发送数据包。

TCP 应用实例:

  1. HTTP/HTTPS(网页浏览):网页的请求和响应都基于 TCP 进行。由于需要可靠性和数据完整性,TCP 是 HTTP 的基础协议。
  2. FTP(文件传输协议):文件的上传和下载通常使用 TCP 协议,确保文件的传输过程可靠且按顺序。
  3. SMTP(邮件传输协议):电子邮件的发送过程使用 TCP 协议,保证邮件的顺利到达。
  4. SSH(安全外壳协议):远程登录服务通常使用 TCP 连接,确保数据的安全与可靠传输。
  5. Telnet:用于远程管理系统的协议,依赖 TCP 保证交互式会话的可靠性。

TCP 与 UDP 的对比:

连接方式

面向连接(需要握手)

无连接(直接发送数据)

可靠性

可靠,保证数据按顺序传输且不丢失

不可靠,可能丢包或乱序

顺序保证

保证顺序(通过序列号和重传机制)

不保证顺序

流量控制

有流量控制(滑动窗口机制)

无流量控制

拥塞控制

有拥塞控制机制

无拥塞控制

数据包大小

包头较大(至少 20 字节)

包头较小(8 字节)

传输效率

较低,因确认、重传等操作增加了开销

较高,适合需要低延迟的应用

适用场景

需要可靠传输、数据完整性的场景

需要低延迟、实时性的场景

总结

TCP 是一种可靠、面向连接的协议,适用于需要高可靠性、顺序性的数据传输场景。它通过三次握手建立连接、通过确认机制确保数据传输的可靠性、通过滑动窗口控制流量并且通过拥塞控制调整数据传输速率。在数据传输时,TCP 保证数据包的顺序和完整性,使其成为大多数应用(如 Web、文件传输、电子邮件等)的首选协议。

全部评论

相关推荐

在JavaScript中,堆和栈是两种不同的内存管理方式,用于存储不同类型的数据。堆(Heap): 堆是用于动态分配内存的区域,用于存储引用类型的数据,如对象和数组。在堆中分配的内存不会自动释放,需要通过垃圾回收机制来回收不再使用的内存。堆的大小通常比栈大,并且可以动态增长和收缩。栈(Stack): 栈是用于管理函数执行上下文和存储基本类型值的一种数据结构。每当执行一个函数时,都会在栈中创建一个新的执行上下文,包括函数的参数、局部变量和函数的返回地址。当函数执行完成后,对应的执行上下文会被销毁,栈会自动释放相关的内存。栈的大小通常比较小且固定,内存分配由系统自动管理。下面是堆和栈的一些区别:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=d59bf6cbe74a47848bb179590bdf5f59#牛客AI配图神器#存储内容:堆用于存储引用类型的数据,如对象和数组;栈用于存储基本类型的数据,如布尔值、数值和字符串,以及函数执行的上下文。分配方式:堆通过动态分配内存来存储数据;栈通过在执行上下文中的栈帧上分配固定大小的内存来存储数据。大小和生长性:堆的大小通常比栈大,可以动态增长和收缩;栈的大小通常比较小且固定,由系统自动管理。管理方式:堆的内存管理需要使用垃圾回收机制来回收不再使用的内存;栈的内存管理由系统自动处理,通过栈指针的移动来分配和释放内存。生命周期:堆中分配的内存不会自动释放,需要通过垃圾回收来回收内存;栈中的内存由系统自动管理,在函数执行完成后自动释放。
点赞 评论 收藏
分享
BOM(浏览器对象模型)是指浏览器提供的一组JavaScript对象,用于表示和操作浏览器窗口、文档和其他相关功能。BOM与DOM(文档对象模型)一起构成了JavaScript与浏览器进行交互的API。BOM的主要作用是提供了访问和控制浏览器窗口、文档和浏览器功能的方法和属性。它允许开发人员通过JavaScript操作和控制浏览器的各个方面,包括以下功能:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=c4806023172848d9adaaa16ad86b2dfa#牛客AI配图神器#窗口管理:BOM提供方法来创建、关闭、移动、调整大小和操作浏览器窗口。它还允许访问和修改窗口的属性,如窗口尺寸、位置和标题等。文档访问:BOM允许通过window对象访问DOM树,并操作和修改文档的内容、结构和样式。URL处理:通过BOM,可以获取和修改地址栏中的URL,包括获取和修改URL的协议、主机名、路径、查询参数和锚点等。对话框交互:BOM提供了创建警告框、确认框和提示框等对话框的功能,可以与用户进行交互并获取用户的输入。cookie操作:BOM允许读取、设置和删除浏览器中的cookie,用于在客户端存储和读取数据。定时器:BOM提供了setTimeout和setInterval等定时器方法,用于在指定的时间间隔执行代码或延迟执行代码。屏幕信息:通过BOM,可以获取用户屏幕的尺寸、分辨率和颜色深度等信息。页面导航:BOM提供了history对象,允许在浏览器历史记录中前进和后退,以及操作当前页面的导航状态。
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客企业服务