首页 > 其他分享 >为什么每次建立 TCP 连接时,初始化的序列号都要求不一样呢?

为什么每次建立 TCP 连接时,初始化的序列号都要求不一样呢?

时间:2022-10-07 22:11:36浏览次数:90  
标签:初始化 TCP 发送 序列号 连接 服务端 客户端

为什么每次建立 TCP 连接时,初始化的序列号都要求不一样呢?

主要原因有两个方面:

  • 为了防止历史报文被下一个相同四元组的连接接收(主要方面);
  • 为了安全性,防止黑客伪造的相同序列号的 TCP 报文被对方接收;

接下来,详细说说第一点。

假设每次建立连接,客户端和服务端的初始化序列号都是从 0 开始:

img

过程如下:

  • 客户端和服务端建立一个 TCP 连接,在客户端发送数据包被网络阻塞了,然后超时重传了这个数据包,而此时服务端设备断电重启了,之前与客户端建立的连接早就消失了,于是服务端设备就会发送 RST 报文给客户端(连接异常中断)。
  • 紧接着,客户端又与服务端建立了与上一个连接相同四元组的连接;
  • 在新连接建立完成后,上一个连接中被网络阻塞的数据包正好抵达了服务端,刚好该数据包的序列号正好是在服务端的接收窗口内,所以该数据包会被服务端正常接收,就会造成数据错乱。

:假如QQ现在有两个人A和B正在聊天,QQ使用的是TCP连接,并且初始化序列号为0。(省去中间服务器,不代表实际的连接)

A:我在上厕所?(发送第一条信息0网络阻塞)

A:我在上厕所?(重传消息0,此时B已经掉线,消息0未送达显示异常)

B:吃饭了吗?(此时B重新上线,上次连接的消息0正好到达,被其接收,新连接发送消息0失败)

A:你在肝肾么?(此时B重新上线,发送消息0成功)

B:刚断网了?(成功回复消息1)

A:好吧(消息3)

如果每次建立连接客户端和服务端的初始化序列号都「不一样」,就有大概率因为历史报文的序列号「不在」对方接收窗口,从而很大程度上避免了历史报文,比如下图:

img

可以看到,如果每次建立连接,客户端和服务端的初始化序列号都是一样的话,很容易出现历史报文被下一个相同四元组的连接接收的问题

seq:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。

流量窗口大小可以进行设置,seq序列号范围是根据上次所发送数据的ack和流量窗口大小来确定起始和结束。

首先说一下,ack是用来接收端确认接收到发送端的数据包,比如发送端seq = 1024,那么接收端下次回复的ack = 1025.

每次建立连接时,客户端和服务端都会随机生成相应的seq序列号,接收端都会将发送端的seq + 1作为 ack,将ack回复给发送端。

注意:这里的发送端和接收端可以是服务器也可以是客户端。只要你有属于自己的 IP 地址,也就是网络层的ip: 网络号+主机号 。

·
如果你想真正学懂计算机网络中的原理:那么请看这里小林code

标签:初始化,TCP,发送,序列号,连接,服务端,客户端
From: https://www.cnblogs.com/malongfeistudy/p/16767330.html

相关文章

  • TCP与UDP的联系与区别
    TCP(TransmissionControlProtocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来......
  • TCP与UDP的区别和联系
     TCP与UDP的区别1.UDP支持一对一,一对多,多对一,多对多通信而TCP只能是一对一通信2.UDP不与对方建立连接,通信效果好实时通话,而TCP需要和对方建立连接。但是UDP虽然通信效......
  • TCP与UDP的联系与区别
    TCP(TransmissionControlProtocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其......
  • TCP与UDP的联系与区别
    一、联系这两个都是运输层协议;都是建立在ip之上的TCP叫做流式套接字,UDP是报文套接字。二、区别1、基于连接与无连接。2、TCP要求系统资源较多,UDP较少。3、UDP程序结构......
  • TCP与UDP区别与联系
    TCP与UDP区别总结:TCP面向连接,通过三次握手建立连接,四次挥手接除连接;UDP是无连接的,即发送数据之前不需要建立连接,这种方式为UDP带来了高效的传输效率,但也导致无法确保数......
  • TCP和UDP的联系与区别
    TCP和UDP是传输层的两个协议。1、UDP的概念:UDP(UserDatagramProtocol用户数据报协议):是OSI(OpenSystemInterconnection开放式系统互联)参考模型中一种无连接的传输层......
  • TCP digest
    TCP在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——DataLink层,在第二层上的数据,我们叫Frame,在第三层上的数据叫Packet,第四层的数据......
  • TCP与UDP的区别
    TCPTCP称为传输控制协议TransmissionControlProtocolTCP协议的特点:TCP是面向连接的协议连接方式是"三次握手",建立连接可以为数据传输的可靠性提供保证只......
  • TCP和UDP的联系与区别
    TCP    TCP是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。TCP仅支持单播传输,面向字节流,提供全双工通信,是可靠传输。    首先:TCP和UDP都是工作......
  • TCP和UDP的区别
    1.TCPTCP的全称是TransmissionControlProtocol,传输控制协议。其首部字节为20~60字节1.1特点面向连接传输是可靠的,保证了数据的正确性和数据顺序以字节流的形式进行......