Ethernet 系列(11)-- 基础学习::TCP/IP

目录

1. TCP简介:

1.1 什么是TCP:

1.2 什么时候使用TCP:

2. TCP的特点:

2.1 面向连接: 

2.2 可靠: 

2.3 流控制: 

2.4 更多开销: 

3. TCP头部:

4.TCP协议:

4.1 序列号跟踪发送的内容。确认号跟踪收到的内容:

4.2  序列号或确认号是字节的度量:

4.3  在发送任何内容之前,TCP始终在缓存中保留该数据的副本,持续时间为“重传超时”。如果没有收到ACK,则重新发送该段:

4.4 延迟确认-向每个其他段发送ACK:

4.5 窗口大小限制了在发送方必须停止并等待确认之前可以发送多少未确认的数据:

4.6 窗口大小在每个段中发送,可以通过连接动态更新:

4.7 TCP是双向的,这意味着两个对等体都有SEQ来跟踪发送的字节,有ACK来跟踪接收的字节:

4.8 初始序列号(ISN)由发送方随机选择。这些ISN必须在建立连接时共享(三次握手):

4.9 三次握手(同步、确认过程)包括4个事件:

4.10 TCP有两个关闭连接的选项:

4.11 优雅的方法包括4个事件:

4.12 暴力的方法:


1. TCP简介:

1.1 什么是TCP:

  • TCP传输控制协议是Internet协议的核心之一。为了便于理解,想象一下你有一台电脑,它正在使用各种程序,例如:网站、游戏应用程序、聊天框应用程序,…。 
  • 每个程序都有自己的特定数据,这些数据由该程序的服务器提供。换句话说,我们有不同类型的数据,只有一台电脑。 
  • 不同类型的数据被提供给这台唯一的计算机,所以问题是计算机如何为正确的程序提供正确的数据?TCP和UDP就是在这个时候发明的。总之,TCP和UDP是区分数据流的两种不同策略。

1.2 什么时候使用TCP:

当您需要确保数据传输的一致性时,会使用TCP。使用TCP的一些应用程序是: 

  • SSH-安全外壳。 
  • FTP-文件传输协议。 
  • SMTP-简单邮件传输协议。 
  • POP-邮局协议。 
  • IMAP-互联网邮件访问协议。 
  • HTTP-超文本传输协议(用于web访问)。

2. TCP的特点:

2.1 面向连接: 

  • 这意味着该协议有一个正式的“开始”和“结束”。例如,主机A想和主机B说话,然后首先主机A需要用人类语言发送请求:“我想开始和你说话,让我们建立连接”,主机B必须回复:“我准备好说话了”。现在,主机A可以将数据发送到线路上。 
  • 当主机A完成发送需要发送的数据时,主机A需要发送一个请求,比如:“发送完数据,结束连接”,主机B必须做出回应,比如:”我已经收到所有数据,我也准备好连接了”。 

2.2 可靠: 

  • 这意味着每次主机A发送数据时,它都会收到主机B的数据传输确认。因此,主机A会知道哪些数据没有传输到另一端。然后,此主机可以通知发起TCP连接的应用程序发生了错误。应用程序将向用户宣布错误消息。 
  • 数据按顺序交付: 
    • 想象一下,主机A正在运行一些应用程序,这些应用程序告诉该主机将特定的数据包放在线路上,并通过TCP或UDP发送。在TCP的情况下,应用程序说要发送的数据包以特定的序列号标记,该序列号的目标是当数据到达另一端时,它将以正确的顺序传递给应用程序。

  • 如果只有一条路径在主机A和B之间传递数据包,那么数据包将有序地到达另一端,这意味着当主机A发送数据包1、2、3时,它将以正确的顺序1、2和3到达主机B。但实际上,主机A和B之间有多条路径来传递数据包。例如,数据包1采用最快的路由,首先到达主机B,数据包2采用最长的路由,最后到达主机B。这使得数据包3在主机B中排名第二。这意味着当主机A发送数据包1、2、3时,它将按照1、3、2的顺序到达主机B的。在TCP的情况下,由于TCP已经用序列号标记了这些数据包,因此TCP可以在将这些数据包移交给应用程序之前进行切换。

2.3 流控制: 

  • TCP调整传输速率,以安全地使用最大可用带宽,而不会超过它。 
  • 想象一下,整个路径的带宽在主机A和B之间是不一致的。在下图中,假设我们在发送侧有更高的带宽,在接收侧有更低的带宽。对于TCP,它将从低速率开始,然后开始增加带宽,直到它注意到某些数据包被丢弃,然后将带宽调整到整个路径可用的任何带宽。

2.4 更多开销: 

  • 这意味着与UDP相比,TCP将为数据添加更大的报头。在下图中,TCP标头至少包含20个字节。

3. TCP头部:

  • 源端口:发送主机的端口。 
  • 目标端口:接收主机的端口。 
  • 序列号:跟踪发送的内容。 
  • 确认号:跟踪收到的内容。 
  • 旗帜: 
    • A代表确认标志。 
    • R代表重置标志。 
    • S代表同步标志。 
    • F代表终点旗。 
  • 窗口:跟踪在接收主机发回ACK消息之前可以发送多少字节。

4.TCP协议:

本节将为您提供12种简单的方法来记住传输控制协议。 

4.1 序列号跟踪发送的内容。确认号跟踪收到的内容:

主机A向主机B发送SEQ=101的数据。主机B向主机A发回ACK=102的响应。这意味着主机B已从主机A接收到序列为101的数据。

4.2  序列号或确认号是字节的度量:

主机A向主机B发送SEQ=1001的200字节数据。主机B向主机A发回ACK=1201的响应。这意味着主机B已从主机A接收到以序列1001开头的200字节。换句话说,主机B在序列1201之前已接收到200字节。 

如果主机A继续向主机B发送200字节的数据,则主机A需要以SEQ=1201向主机B进行发送。

4.3  在发送任何内容之前,TCP始终在缓存中保留该数据的副本,持续时间为“重传超时”。如果没有收到ACK,则重新发送该段:

其工作原理如下:当主机A向主机B发送数据时,它将保留该数据的副本并启动“重传超时”,如果主机B发回ACK响应,主机A将删除缓存中的该数据副本并重置“重传暂停”。如果主机B在“重传超时”期间没有发回ACK响应,主机a将重新传输数据包,保留副本并再次启动超时。

4.4 延迟确认-向每个其他段发送ACK:

当主机A向主机B发送2个数据包时,第一个200字节的数据包以SEQ=1001开头,第二个200字节数据包以SEQ=1201开头,主机B可以发回ACK=1401,以指示主机B已从主机A接收到以序列1001开头的所有400个字节。这意味着主机B不会在每次从主机a接收到数据包时都严格地发送回ACK消息。 

ACK消息将发送到每个数据包或距离最后一个数据包不超过500毫秒。

4.5 窗口大小限制了在发送方必须停止并等待确认之前可以发送多少未确认的数据:

这意味着主机A需要知道主机B的窗口大小,才能知道在确认之前可以发送多少数据。 
当主机A决定向主机B发送200字节的数据时,它将主机A的窗口大小减小到300字节。这意味着,如果主机A想要发送接下来的400个字节,它需要发送前300个字节,然后等待主机B的确认,然后发送接下来的100个字节。当主机A收到主机B的确认时,主机A的窗口大小被重置,然后主机A可以继续发送过程。

4.6 窗口大小在每个段中发送,可以通过连接动态更新:

窗口大小实际上是TCP标头中的一个字段,因此在主机a和主机B之间发送的每个TCP标头都包含此字段。但是发送方必须先发送数据才能得到ACK消息,所以问题是主机A在主机B发送第一条ACK消息之前知道窗口大小吗?答案就在点子上。现在,让我们只关注窗口大小的动态更新。

例如,当主机A向主机B发送500个字节时,主机B意识到需要时间来处理主机A或连接到主机B的任何其他主机发送的数据。为此,主机B发送回一个ACK=1501,WIN=0,表示主机B已从主机A接收到从序列1001开始的所有500个字节,并将主机A的窗口大小减小到0,使主机A停止发送数据,直到主机B发送ACK消息。 

当主机B已经处理了所有数据时,主机B可以向主机A发送带有WIN=600消息的ACK=1501,以指示主机B已准备好从主机A接收更多数据,数据大小可达600字节。

4.7 TCP是双向的,这意味着两个对等体都有SEQ来跟踪发送的字节,有ACK来跟踪接收的字节:

主机A:SEQ=1001,ACK=3001[200字节]表示主机A正在向主机B发送200字节,从序列1001开始,从确认3001开始。 

主机B:SEQ=3001,ACK=1201[300字节]表示主机B正在从序列3001开始向主机A发送回300字节,并且主机B在序列1201之前从主机A接收到200字节。 

主机B:SEQ=3301,ACK=1201[300字节]表示主机B继续向主机A发送300字节,从序列3301开始,此时主机B刚刚从主机A接收到序列1201之前的200字节。 

主机A:SEQ=1201,ACK=3601[200字节]表示主机A正在向主机B发送从序列1201开始的200字节,并且在序列3601之前从主机A接收了600字节。

4.8 初始序列号(ISN)由发送方随机选择。这些ISN必须在建立连接时共享(三次握手):

4.9 三次握手(同步、确认过程)包括4个事件:

A -> B: SYN和我的X的ISN。

A<-B:我收到了你的SYN,我确认我已经为X+1做好了准备。 

这表示主机B通过发送回SEQ=X+1的ACK消息,肯定已从主机A接收到SYN消息 

A<-B:SYN与我的ISN的Y。

A->B:我收到了你的SYN,我确认我已经为Y+1做好了准备。

这表示主机A通过发送回SEQ=Y+1的ACK消息,肯定已从主机B接收到SYN消息 

此时,请注意主机A发送的ACK消息的SEQ=1001,而不是SEQ=1000。这被称为幻影字节。这发生在两台主机之间打开和关闭连接期间。主机A发送SEQ=1001的ACK消息的原因是主机B的ACK为1001。来自主机B的ACK=1001有两种理解方式: 

  • 首先,主机B已经接收到序列1001之前的所有字节。 
  • 第二个理解是,主机B已准备好接收从序列1001开始的数据。

由于第二种理解,主机A需要从序列1001开始发送数据。

  • 由于这种握手,可以交换窗口大小的信息,以便发送主机能够知道在接收主机的ACK之前可以发送多少字节。 
  • 在数据交换过程中,每个消息都会打开ACK标志。

4.10 TCP有两个关闭连接的选项:

优雅的方法-FIN(Finish)标志,这将在一切正常时发生。 

暴力的方法-RST(重置)标志,当出现问题时会发生。

4.11 优雅的方法包括4个事件:

A->B:我有FIN发送数据,我的最后一个序列是X。 

A<-B:我确认收到你的FIN,并确认X+1。 

A<-B:我有FIN发送数据,我的最后一个序列是Y。 

A->B:我确认收到你的FIN,确认Y+1。

请注意,当主机B向主机A的FIN消息发送ACK时,它实际上不需要在那之后发送FIN消息,而是可以在发送FIN信息之前发送所有需要发送的数据,以实际关闭连接。此外,当接收到主机B发送的数据时,主机A实际上可以在已经发送FIN消息后发回ACK消息。

4.12 暴力的方法:

当主机收到意外的东西时,就会发生这种情况。任何主机都可以发送RST标志,以指示出现了问题,连接已关闭。当连接关闭时,两台主机都将删除它所知道的有关TCP连接的所有内容,并等待另一个新连接。 

请注意,RST消息未被确认。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道法自然0402

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值