Флаг сброса TCP (RST)

717
Salem Masoud

Я пытаюсь транслировать видео между двумя хостами, также пытаюсь смоделировать сценарий смены IP, клиент начал слушать сервер, затем я переместил клиента на новый коммутатор, и он получил 192.168.2.5, я использую Mininet и Ryu контроллер. моя топология выглядит следующим образом:

ha-eth0<->s1-eth1 (OK OK) hb-eth0<->s2-eth12 (OK OK) hc-eth0<->s1-eth3 (OK OK) s2-eth1<->s1-eth4 (OK OK) s2-eth2<->s3-eth1 (OK OK) 

Я использую vlc-wraper и HTTP-протокол для streaminh. также я установил следующие потоки, чтобы изменить IP-адрес клинта на коммутаторах 1 и 2:

 cookie=0x0, duration=1012.669s, table=0, n_packets=2, n_bytes=1894, idle_age=1004, priority=3,ip,nw_src=192.168.2.2,nw_dst=192.168.2.3 actions=output:4  cookie=0x0, duration=1012.668s, table=0, n_packets=1, n_bytes=54, idle_age=1004, priority=3,ip,nw_src=192.168.2.3,nw_dst=192.168.2.2 actions=output:1  cookie=0x0, duration=1059.340s, table=0, n_packets=1, n_bytes=947, idle_age=1051, priority=3,ip,nw_src=192.168.2.2,nw_dst=192.168.2.3 actions=mod_nw_dst:192.168.2.5,output:12  cookie=0x0, duration=1059.340s, table=0, n_packets=1, n_bytes=54, idle_age=1051, priority=3,ip,nw_src=192.168.2.5,nw_dst=192.168.2.2 actions=mod_nw_src:192.168.2.3,output:1 

ha (Host A) IP - 192.168.2.2 (клиентский хост)
hb (Host B) старый IP - 192.168.2.3, а новый IP - 192.168.2.5 (хост сервера)

когда поток остановился, я проверил Wireshark и заметил, что там был TCP RST, но я не знаю почему? может кто-нибудь посмотреть в файлах Wireshark и сказать мне причины.

Я прикрепил вывод Wireshark для обоих хостов https://drive.google.com/open?id=1rcVlNT2cwnvNL4-4j061xGpKJohSdU9z

0
Что такое `192.168.2.3`? Что вы делаете с "Mininet и Ryu controller" точно? Вы заявляете, что пытаетесь смоделировать изменение IP, поэтому поясните немного, что именно вы имеете в виду и как вы пытаетесь это сделать тоже. Pimp Juice IT 6 лет назад 0
@PimpJuiceIT 192.168.2.3 - старый IP-адрес hb. У меня есть скрипт Mininet, который перемещает хост B с коммутатора 1 на коммутатор 2, когда он перемещается, он получает новый IP-адрес 192.168.2.5, также когда контроллер обнаруживает, что горячий b переместился, он установит упомянутые потоки. Salem Masoud 6 лет назад 0

1 ответ на вопрос

1
telcoM

В соответствии со спецификациями TCP, идентичность TCP-соединения определяется комбинацией этих четырех вещей:

  • IP-адрес конечной точки A
  • Номер порта TCP конечной точки A
  • IP-адрес конечной точки B
  • Номер порта TCP конечной точки B

Если какая-либо из этих четырех вещей изменяется, то по определению базового протокола TCP это больше не то же самое соединение .

Когда ваш Хост B переключился со своего старого IP-адреса на новый, все существующие соединения и связанное с ними состояние были привязаны к старому IP-адресу. Операционная система достаточно умна, чтобы знать, что после изменения IP-адреса интерфейса любые существующие TCP-соединения не могут быть продолжены, так как старый IP-адрес больше не может использоваться.

Очевидно, что изменение IP-адреса было довольно резким в том, что касается хоста B: нет ни DHCPRELEASE, ни каких-либо попыток упорядоченного завершения существующих соединений перед разрушением старого IP-адреса.

В результате на сетевом интерфейсе хоста B, поскольку старый IP-адрес разрушен, также возникают любые TCP-соединения, которые были связаны со старым IP-адресом.

Ваша программно-определяемая сеть, очевидно, позаботится о преобразовании адресов назначения пакетов, поступающих с хоста A, на новый IP-адрес - но операционная система хоста B не знает об этом, и поэтому не имеет ни малейшего представления, что в этом конкретном случае она было бы возможно сохранить состояние соединения и продолжать использовать его даже с новым IP-адресом.

Таким образом, как только хост B получает один из повторно переданных пакетов от хоста A, он видит, что он адресован с 192.168.2.2, с порта 1234 по 192.168.2.5, с порта 37186. Нет записи о существующем TCP-соединении с этими точными параметрами. - поэтому операционная система может отправлять только TCP RST в качестве ответа.

(Даже если информация о старом соединении была сохранена, она имела сторону хоста B в IP-адресе как 192.168.2.3, поэтому, насколько известно узлу B, этот новый пакет для 192.168.2.5 не имеет абсолютно никакого отношения к этому старому соединению.)

Когда ответ RST возвращается к хосту A, SDN преобразует свой адрес источника в 192.168.2.3, поэтому хост A распознает его как принадлежащий существующему соединению. И поэтому узел A получит сообщение о том, что поток мертв.