什么时候发送RST包

这里写目录标题什么时候发送RST包UDP首部
TCP首部
TCP 首部长度为20字节,加上选项部分最大可达60字节 。
第一个4字节 源端口,16位;发送数据的源进程端口 。目的端口,16位;接收数据的进程端口 。
由于端口号最多为16位,因此端口号最大值为65535 。
第二个4字节与第三个4字节 序号,32位;代表当前TCP数据段第一个字节占整个字节流的相对位置 。确认号,32位;代表接收端希望接收的数据序号,为上次接收到数据报的序号+1,当ACK标志位为1时才生效 。第四个4字节 数据偏移,4位;实际代表TCP首部长度,最大为60字节 。6个标志位,每个标志位1位: SYN,为同步标志,用于数据同步;ACK,为确认序号,ACK=1时确认号才有效;FIN,为结束序号,用于发送端提出断开连接;URG,为紧急序号,URG=1是紧急指针有效;PSH,指示接收方立即将数据提交给应用层,而不是等待缓冲区满;RST,重置连接 。窗口值,16位;窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口) 。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位) 。第五个4字节 校验和,16位;用于检验数据完整性 。紧急指针,16位;只有当URG标识位为1时,紧急指针才有效 。紧急指针的值与序号的相加值为紧急数据的最后一个字节位置 。用于发送紧急数据 。选项
长度可变,最长可达40字节 。当没有使用“选项”时,TCP的首部长度是20字节,加上选项部分最大可达60字节 。
最大报文段长度(MSS)选项
TCP最初只规定了一种选项,即最大报文段长度MSS(Szie) 。MSS是每一个TCP报文段中的数据字段的最大长度 。数据字段加上TCP首部才等于整个的TCP报文段 。所以MSS并不是整个TCP报文段的最大长度,而是“TCP报文段长度减去TCP首部长度 。
为什么要规定一个最大报文长度MSS呢?这并不是考虑接受方的接收缓存可能存放不下TCP报文段中的数据 。实际上,MSS与接收窗口值没有关系 。我们知道,TCP报文段的数据部分,至少要加上40字节的首部(TCP首部20字节和IP首部20字节,这里还没有考虑首部中的可选部分)才能组装成一个IP数据报 。若选择较小的MSS长度,网络的利用率就降低 。设想在极端情况下,当TCP报文段只含有1字节的数据时,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部) 。这样,对网络的利用率就不会超过1/41 。到了数据链路层还要加上一些开销 。但反过来,若TCP报文段非常长,那么在IP层传输时就有可能要分解成多个短数据报片 。在终点要把收到的各个短数据报片组成成原来的TCP报文段,当传输出错时还要进行重传,这些也都会使开销增大 。
因此,MSS应尽可能大些,只要在IP层传输时不需要分片就行 。由于IP数据报所经历的路径是动态变化的,因此在这条路径上确定的不需要的分片的MSS,如果改走另一条路径就可能需要进行分片 。因此最佳的MSS是很难确定的 。在连接过程中,双方都把自己能够支持的MSS写入这一字段,以后就按照这个数值传输数据,两个传送方向可以有不同的MSS值 。若主机未填写这一项,则MSS的默认值是536字节长 。因此,所有在互联网上的主机都应该接受的报文段长度是536+20(固定首部长度)=556字节 。
窗口扩大选项
窗口扩大选项是为了扩大窗口 。我们知道,TCP首部中窗口字段长度是16位,因此最大的窗口大小为64K字节 。虽然这对早期的网络是足够用的,但对于包含卫星信道的网络,传播时延和宽带都很大,要获得高吞吐量需要更大的窗口大小 。