首页 > 其他 > 详细

TCP协议复习

时间:2020-11-17 19:24:15      阅读:32      评论:0      收藏:0      [点我收藏+]

TCP包结构

技术分享图片

  • 序号(Sequence Number):指定了当前数据分片中分配给首字节数据的序列号,用来解决包乱序问题。
  • 确认号(Acknowledgement Number):表示期望接受下一个数据分片的序列号,用来解决不丢包的问题。
  • 标志位(Flags):从低位到高位值依次为FIN,SYN,RST,PSH,ACK,URG,用来标识包的类型。
  • 窗口(Window):表示滑动窗口的大小,用于解决流量控制问题。

TCP协议状态机

技术分享图片

初始化序号(ISN)为什么不是固定值

  • 防止伪造TCP包:若初始化序号是静态的,那么容易被伪造,如果是动态变化的,则增加了安全性,起码伪造的序号要在对方的滑动窗口范围之内。
  • 防止混淆新的连接和旧的连接的tcp包:比如发送rst之后,或者允许端口的reuse,那么网络上就很可能存在旧的连接的tcp包,动态的初始化需要能一定程度防止这种情况。

TIME_WAIT为什么是2MSL

假设A发送了ACK报文后过了一段时间t之后B才收到该ACK,则有 0 < t <= MSL。因为A并不知道它发送出去的ACK要多久对方才能收到,所以A至少要维持MSL时长的TIME_WAIT状态才能保证它的ACK从网络中消失。同时处于LAST_ACK状态的B因为收到了ACK,所以它直接就进入了CLOSED状态,而不会向网络发送任何报文。所以晃眼一看,A只需要等待1个MSL就够了,但仔细想一下其实1个MSL是不行的,因为在B收到ACK前的一刹那,B可能因为没收到ACK而重传了一个FIN报文,这个FIN报文要从网络中消失最多还需要一个MSL时长,所以A还需要多等一个MSL。

TCP协议复习

原文:https://www.cnblogs.com/HachikoT/p/13995223.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!