TCP概述(了解TCP协议及其工作原理)

来自自己实现redis的挑战中:TCP: An Overview。感觉写的简洁明了,很适合用于了解tcp/ip

TCP是一种广泛使用的网络协议。它是一个运行在“不可靠”协议(IP,Internet 协议的缩写)的“可靠”的协议。(后面会解释为什么ip不可靠,tcp协议可靠)。

让我们深入了解TCP的工作原理。

我们先来看看 IP(互联网协议的简称),它是 TCP 的基础协议。

IP - 互联网的邮政服务

当程序使用 IP 在网络上发送数据时,数据会被分割成多个 “数据包 “发送。

每个数据包包含

  • 报头部分
  • 数据部分

标头包含源地址和目的地地址,就像通过本地邮政服务发送的信封一样。

IP 与邮政服务的重要相似之处在于,数据包不能保证到达目的地。虽然我们会尽一切努力将数据包送到目的地,但有时数据包会在传输过程中丢失。

此外,如果您同时发送 5 个数据包,也不能保证它们会在同一时间或以相同的顺序到达目的地。

所以当你使用IP协议传输数据时,数据包可能会丢失,也可能不按顺序传送,因为 IP 是一种尽力而为的协议,这意味着它不保证数据包的传送或顺序。

TCP 的出现就是为了解决 IP 的这些局限性。

TCP的保证

TCP 主要提供两种保证:(a) 可靠的数据包传送和 (b) 有序的数据包传送。

保证 #1–可靠传输

TCP 可确保数据包在传输过程中不会丢失。为此,它要求接收方确认所有发送的数据包,如果没有收到确认,则重新传输任何数据包。

保证 #2–有序递送

除了保证数据包到达目的地外,TCP 还保证数据包按顺序传送。为此,它为每个数据包标上一个顺序号。接收方会跟踪这些编号,并对不按顺序的数据包重新排序。如果数据包丢失,接收方会等待重新传输。

TCP 使用序列号来保持正确的数据传输顺序,并在目的地重新组装数据包。

TCP 链接

TCP 是一种面向连接的协议,这意味着要通过 TCP 进行交互,程序必须首先 “建立连接”。为此,一个程序扮演 “服务器 “的角色,另一个程序扮演 “客户端 “的角色。

服务器等待连接,客户端启动连接。连接建立后,客户端和服务器都可以接收和发送数据(这是一个双向通道)。

TCP 是一种双向通信协议,即客户端和服务器都可以发送和接收数据。

TCP 连接使用四个值的唯一组合来识别:

  • 目标 IP 地址
  • 目标端口号
  • 源 IP 地址
  • 源端口号

例如,假设您正在连接 google.com。您的 TCP 连接值将如下所示:

目标 IP 地址:x.x.x.x(Google 的网络服务器) 目标端口号:443(HTTPS 使用的默认端口) 源 IP 地址:y.y.y.y(您的计算机) 源端口号:26789(随机数,计算机上的任何其他连接均未使用)

如果浏览器与谷歌服务器打开多个连接,只有 “源端口号 “会发生变化,其他端口号将保持不变。

MAC 地址不用于识别 TCP 连接,因为它们与数据链路层有关,而与 TCP 运行的传输层无关。

TCP 握手

TCP 握手是客户端与服务器建立连接的方式。这个过程分为 3 个步骤。

步骤 1:SYN

首先,客户端向服务器发送 SYN(同步)数据包,表示请求建立连接,从而启动连接。该数据包还包含一个序列号,以保持数据包的发送顺序。

步骤 2:SYN-ACK

服务器收到 SYN 数据包后,会发回一个 SYN-ACK(同步确认)数据包。

步骤 3:ACK

在三方握手的最后一步,客户端通过发送 ACK(确认)数据包来确认服务器的 SYN-ACK 数据包。服务器收到最后一个数据包后,连接即被视为建立。

客户端发送 SYN 数据包,服务器响应 SYN-ACK 数据包,客户端回复 ACK 数据包。

三方握手确保建立可靠的连接,验证两台设备是否都已准备好进行数据传输,并设置初始序列号以正确排列数据包。

something a blog

Recording,Writing,Reading


2023-10-20