tcp: use nonzero initial sequence number.

v0.7.x
Dario Nieuwenhuis 2021-06-11 22:33:13 +02:00
parent 0e7f78f47d
commit 3baa5fd28f
1 changed files with 9 additions and 2 deletions

View File

@ -54,6 +54,11 @@ impl fmt::Display for State {
}
}
/// Initial sequence number. This used to be 0, but some servers don't behave correctly
/// with that, so we use a non-zero starting sequence number. TODO: randomize instead.
/// https://github.com/smoltcp-rs/smoltcp/issues/489
const INITIAL_SEQ_NO: TcpSeqNumber = TcpSeqNumber(42);
// Conservative initial RTT estimate.
const RTTE_INITIAL_RTT: u32 = 300;
const RTTE_INITIAL_DEV: u32 = 100;
@ -390,7 +395,7 @@ impl<'a> TcpSocket<'a> {
listen_address: IpAddress::default(),
local_endpoint: IpEndpoint::default(),
remote_endpoint: IpEndpoint::default(),
local_seq_no: TcpSeqNumber::default(),
local_seq_no: INITIAL_SEQ_NO,
remote_seq_no: TcpSeqNumber::default(),
remote_last_seq: TcpSeqNumber::default(),
remote_last_ack: None,
@ -591,7 +596,7 @@ impl<'a> TcpSocket<'a> {
self.listen_address = IpAddress::default();
self.local_endpoint = IpEndpoint::default();
self.remote_endpoint = IpEndpoint::default();
self.local_seq_no = TcpSeqNumber::default();
self.local_seq_no = INITIAL_SEQ_NO;
self.remote_seq_no = TcpSeqNumber::default();
self.remote_last_seq = TcpSeqNumber::default();
self.remote_last_ack = None;
@ -2842,10 +2847,12 @@ mod test {
(1048576, 5),
] {
let mut s = socket_with_buffer_sizes(64, *buffer_size);
s.local_seq_no = LOCAL_SEQ;
assert_eq!(s.remote_win_shift, *shift_amt);
s.connect(REMOTE_END, LOCAL_END).unwrap();
recv!(s, [TcpRepr {
control: TcpControl::Syn,
seq_number: LOCAL_SEQ,
ack_number: None,
max_seg_size: Some(BASE_MSS),
window_scale: Some(*shift_amt),