Я захватил некоторые HTTP-трафик и заметил пакет с установленным флагом FIN, также содержащий данные полезной нагрузки.
Я искал эту тему и нашел несколько похожих вопросов, но ни один из них не говорит о следующем порядковом номере и ссылках на RFC для этой ситуации.
Мой вопрос в том, каким должен быть следующий порядковый номер после пакета с установленным флагом FIN, содержащим полезную нагрузку?
Другими словами, каким должен быть номер ACK пакета, который является ответом на пакет FIN активного открывателя? Какой номер подтверждения должен иметь ответный пакет, в то время как отправитель пакета FIN также имеет полезную нагрузку?
--> <SEQ=100><ACK=300><CTL=FIN,ACK> : payload length = 20 bytes
<-- <SEQ=300><ACK=X><CTL=FIN,ACK>
--> <SEQ=X><ACK=301><CTL=ACK>
Является X
101
, 120
, или 121
?
В RFC ясно говорится об этом сценарии?
Я также искал это в RFC 793, но не нашел четкого объяснения своего вопроса.
RFC 793 указывает, что контрольные флаги SYN и FIN занимают один порядковый номер.
В ГЛОССАРИИ написано об управляющем флаге FIN, который:
ПЛАВНИК
Бит управления (finis), занимающий один порядковый номер, который указывает, что отправитель больше не будет отправлять данные или управление, занимающее пространство последовательности.
Таким образом, можно понять, что ценность X
должно быть 121
если второй пакет подтверждает первый пакет.
Я не уверен на 100%, но я так понимаю:
Во втором пакете SEQ = 300 и ACK = 120, следовательно, подтверждение полезной нагрузки.
В третьем пакете SEQ = 121, потому что отправка ACK считается однобайтовой полезной нагрузкой, аналогично тому, что происходит в трехстороннем рукопожатии при открытии соединения.