美文网首页
为什么TCP/IP的接收方需要在ACK和seq上加一?

为什么TCP/IP的接收方需要在ACK和seq上加一?

作者: 与子笑 | 来源:发表于2021-03-18 15:04 被阅读0次

作者:车小胖
链接:https://www.zhihu.com/question/34400902/answer/191928024
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

TCP是一个有状态协议,A与B之间有一个TCP连接,C想搞破坏,于是想伪造A的IP给B发一个Reset,要分两种情景:情景一:C处于A与B之间流量的路径上C可以捕获到A、B的IP包,伪造是小菜一碟,比如大防火墙reset用户连接情景二:C不在A与B之间流量的路径上C可以在世界的任何角落,伪造一个合法TCP报文,最关键是TCP字段里的sequence number 、acknowledged number,只要这两项位于接收者滑动窗口内,就是合法的,对方可以接收并Reset A、B之间的TCP连接。而TCP握手采用随机序列号(不完全随机,而是随着时间流逝而线性增长,到了2^32尽头再回滚),为的就是让攻击者更难以猜测sequence number,因为伪造的sequence number不在合法范围内,而被接收方丢弃,增加安全性。至于加一,不知道你说的是SYN标志位占据sequence的一个序号,还是对方确认加一?如果是前者,那是因为SYN是建立连接的关键字段,而为了确保对方接收到,使用超时重传机制,TCP规定,只为有数据的TCP报文重传,SYN占据一个序号(可以认为只有一个字节数据的报文),所以TCP会重传SYN报文。如果是后者,对方接收到数据,比如sequence number = 1000,TCP Payload = 1000,数据第一个字节编号为1000,最后一个为1999对方会回应一个确认报文,确认号为2000,意味着编号2000前的字节接收完成,准备接收编号为2000及更多的数据。这里的加一表现为 1999 + 1 = 2000。

暂时还是没搞太清楚,以后再说。

相关文章

  • 为什么TCP/IP的接收方需要在ACK和seq上加一?

    作者:车小胖链接:https://www.zhihu.com/question/34400902/answer/1...

  • TCP的seq和ack号计算方法

    seq和ack号存在于TCP报文段的首部中,seq是序号,ack是确认号,大小均为4字节(注意与大写的ACK不同,...

  • 技能树-网络-TCP

    必备知识: SYN :请求报文 是TCP/IP建立连接时使用的握手信号ACK :确认字符FIN :释放报文seq:...

  • 网络

    TCP/IP 一、三次握手过程及状态变化 客户端发送SYN = 1 ACK = 0 seq = x,状态变为SYN...

  • TCP连接释放学习记录

    关于释放过程中,《TCP IP详解卷1》和《计算机网络》中的seq和ack的值有点不太一致。可能是对应不同的场景?...

  • Http网络请求

    一、TCP/IP协议 1.TCP/IP三次握手SYN:TCP/IP 建立连接时使用的握手信号ACK:确认字符,确认...

  • TCP三次握手四次挥手

    TCP三次握手四次挥手 重要字段 序号(Seq) 确认号(Ack) 32位,只有ACK标志位为1时,Ack序号才有...

  • 传输层tcp/udp

    tcp tcp有相当多的控制,包括次序丢包重发等等。 确认应答(ack):发送方的数据到达接收方后,为了让发送方知...

  • TCP三次握手,四次挥手、状态图

    1,TCP三次握手 1)ACK确认位、SYN同步位、ack确认号、seq序号。image.png2)三次握手的必要...

  • Nagle算法

    TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。...

网友评论

      本文标题:为什么TCP/IP的接收方需要在ACK和seq上加一?

      本文链接:https://www.haomeiwen.com/subject/lnnucltx.html