1// SPDX-License-Identifier: GPL-2.0 2// 3// RFC 9293 Section 3.10.7.4: in SYN-RECEIVED, an exact RST resets 4// the connection. A non-exact in-window RST elicits a challenge ACK, 5// while an out-of-window RST is silently discarded. 6 7`./defaults.sh` 8 9// An exact RST removes the request socket. 10 0 socket(..., SOCK_STREAM|SOCK_NONBLOCK, IPPROTO_TCP) = 3 11 +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 12 +0 bind(3, ..., ...) = 0 13 +0 listen(3, 1) = 0 14 +0 < S 0:0(0) win 1000 <mss 1000,sackOK,nop,nop,nop,wscale 0> 15 +0 > S. 0:0(0) ack 1 <...> 16 +0 < R 1:1(0) win 1000 17 +.1 < . 1:1(0) ack 1 win 1000 18 +0 > R 1:1(0) 19 +0 close(3) = 0 20 21// A non-exact in-window RST gets a challenge ACK and the request survives. 22 +0 socket(..., SOCK_STREAM|SOCK_NONBLOCK, IPPROTO_TCP) = 3 23 +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 24 +0 bind(3, ..., ...) = 0 25 +0 listen(3, 1) = 0 26 +0 < S 0:0(0) win 1000 <mss 1000,sackOK,nop,nop,nop,wscale 0> 27 +0 > S. 0:0(0) ack 1 <...> 28 +0 < R 2:2(0) win 1000 29 +0 > . 1:1(0) ack 1 30 +0 < . 1:1(0) ack 1 win 1000 31 +0 accept(3, ..., ...) = 4 32 +0 close(4) = 0 33 +0 close(3) = 0 34 35// RST sequence validation precedes ACK validation. Even an RST|ACK 36// with an unacceptable ACK value gets a challenge ACK. 37 +0 socket(..., SOCK_STREAM|SOCK_NONBLOCK, IPPROTO_TCP) = 3 38 +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 39 +0 bind(3, ..., ...) = 0 40 +0 listen(3, 1) = 0 41 +0 < S 0:0(0) win 1000 <mss 1000,sackOK,nop,nop,nop,wscale 0> 42 +0 > S. 0:0(0) ack 1 <...> 43 +0 < R. 2:2(0) ack 100 win 1000 44 +0 > . 1:1(0) ack 1 45 +0 < . 1:1(0) ack 1 win 1000 46 +0 accept(3, ..., ...) = 4 47 +0 close(4) = 0 48 +0 close(3) = 0 49 50// An out-of-window RST is silent and does not remove the request. 51 +0 socket(..., SOCK_STREAM|SOCK_NONBLOCK, IPPROTO_TCP) = 3 52 +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 53 +0 bind(3, ..., ...) = 0 54 +0 listen(3, 1) = 0 55 +0 < S 0:0(0) win 1000 <mss 1000,sackOK,nop,nop,nop,wscale 0> 56 +0 > S. 0:0(0) ack 1 <...> 57 +0 < R 100001:100001(0) win 1000 58 +.1 < . 1:1(0) ack 1 win 1000 59 +0 accept(3, ..., ...) = 4 60 +0 close(4) = 0 61 +0 close(3) = 0 62