Может ли объект SCTP по-прежнему отправлять данные после получения фрагмента SHUTDOWN?

я изучаю протоколы SCTP и не могу понять одну вещь.

После того, как сервер получил сообщение SHUTDOWN от клиента, можно ли отправить данные обратно? А как насчет сообщений ACK, они все еще могут быть отправлены/получены или сервер должен немедленно ответить SHUTDOWN ACK?

Спасибо за вашу помощь!


person mwstudingi    schedule 10.01.2018    source источник


Ответы (1)


Фрагмент SHUTDOWN — это просто указание на то, что удаленная сторона хотела бы закрыть ассоциацию. Локальная сторона по-прежнему может передавать данные, которые она ранее получила от верхнего уровня. По сути, локальная сторона должна доставить все, что было получено от верхнего уровня и еще не доставлено на удаленный конец.

Согласно RFC 4960, глава 9.2:

После получения SHUTDOWN одноранговая конечная точка должна

  • войти в состояние SHUTDOWN-RECEIVED,

  • прекратить прием новых данных от своего пользователя SCTP и

  • проверить, проверив поле Cumulative TSN Ack фрагмента, что все его ожидающие фрагменты DATA были получены отправителем SHUTDOWN.

...

Если все еще остались необработанные блоки ДАННЫХ, получатель SHUTDOWN ДОЛЖЕН продолжать следовать обычным процедурам передачи данных, определенным в Разделе 6, до тех пор, пока не будут подтверждены все необработанные блоки ДАННЫХ; однако получатель SHUTDOWN НЕ ДОЛЖЕН принимать новые данные от своего пользователя SCTP.

Как только все исходящие данные будут успешно доставлены на удаленный конец, можно отправить SHUTDOWN_ACK:

Если у получателя SHUTDOWN больше нет ожидающих обработки фрагментов DATA, получатель SHUTDOWN ДОЛЖЕН отправить SHUTDOWN ACK и запустить собственный таймер отключения T2, перейдя в состояние SHUTDOWN-ACK-SENT. Если таймер истекает, конечная точка должна повторно отправить SHUTDOWN ACK.

То же самое относится к частям SACK. Локальная сторона по-прежнему может получать сообщения SACK, подтверждающие невыполненные данные. Однако локальная сторона не должна отправлять какой-либо новый фрагмент SACK на удаленный конец, потому что фрагмент SHUTDOWN отправляется только после того, как удаленный конец успешно доставил все исходящие данные.

Надеюсь, это поможет.

person Alexander Zinovyev    schedule 11.01.2018