Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » Как работает TCP-соединение

Ответить
Настройки темы
Как работает TCP-соединение

Старожил


Сообщения: 483
Благодарности: 8

Профиль | Отправить PM | Цитировать


Здравствуйте! Подскажите, пожалуйста, не получается усвоить материал касающийся TCP-соединений. Я не очень понял то, как это в этой статье описано. TCP-пакет не содержит никакой информации о IP-адресе источника и приёмника, она есть в IP-пакете в который TCP-пакет вложен. Ключевой информацией в заголовке TCP-пакета являются номера портов источника и приёмника и, что наиболее интересно - флаги.
Вот написано, что для установления соединения клиент посылает серверу TCP-пакет с флагом SYN. В случае, если сервер может ответить на такой запрос, он отсылает клиенту SYN+ACK, если не может - то отсылает RST. Далее написано, что при передаче данных периодически идут пакеты с флагами SYN и ACK, а завершается соединение либо отсылкой пакета с флагом FIN, либо по таймауту.

Что мне непонятно в описании:
1. SYN это всегда запрос, а ACK это всегда ответ, либо бывают ответы с флагом SYN. В общем непонятно, как при помощи фаерволла можно запрещать хосту входящие соединения, фильтруя пакеты по флагам. Какие именно флаги при этом нужно отфильтровывать?
2. Допустим, что это HTTP-соединение. Клиент серверу шлёт GET-запрос, сервер клиенту высылает запрашиваемый файл. И файл и запрос в один пакет не поместятся, речь идёт о последовательности пакетов. Так вот, флаги SYN и ACK установлены только на первом пакете в последовательности или во всех?
3. Ещё раз про HTTP.
а) Сначала на клиенте браузер выбирает произвольный свободный порт, номер которого выше 1024 и начинает его слушать.
б) Потом браузер шлёт SYN-пакет серверу, указав портом источника этот самый выбранный порт, а портом приёмника 80. Начало GET-запроса как раз в этом самом SYN-пакете будет?
в) Дальше непонятно, но об этом я уже в пунктах 1 и 2 задал. Какие флаги должны будут стоять на пакетах, когда запрашиваемая страница придёт к клиенту и как должен вести себя фаерволл, чтобы не допустить в открытый порт пакеты не от общающегося сервера, а от какого-то левого хоста?
г) Какой механизм используется, чтобы отставить соединение открытым, чтобы браузер потом мог запросить изображения, таблицы стилей и другие компоненты веб-страницы?

Отправлено: 21:08, 11-03-2013

 

Старожил


Сообщения: 483
Благодарности: 8

Профиль | Отправить PM | Цитировать


up!

Отправлено: 18:33, 16-03-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 2029
Благодарности: 704

Профиль | Отправить PM | Цитировать


Цитата RasKolbas:
SYN это всегда запрос, а ACK это всегда ответ, либо бывают ответы с флагом SYN. »
Бывают. В процессе установления сессии, который описан в статье wiki, ссылку на которую Вы приводите, всё подробно описано.

Цитата RasKolbas:
В общем непонятно, как при помощи фаерволла можно запрещать хосту входящие соединения, фильтруя пакеты по флагам. Какие именно флаги при этом нужно отфильтровывать? »
Флаги SYN и ACK. Необходимо проверять оба флага. Первый должен быть установлен, а второй - нет. (Естественно в данном случае речь идет исключительно о протоколе TCP. Для UDP этот метод, как легко догадаться, абсолютно непригоден - этот протокол не предусматривает установки сессий).
Однако! Есть один нюанс. Многие протоколы устанавливают сразу несколько соединений. К примеру, FTP в активном режиме.
Причем эти соединения инициируются сервером, а не клиентом. Поэтому простая проверка флагов TCP-пакета заодно заблокирует и все подобные протоколы, начиная с активного режима FTP и заканчивая torrent'ом.
Цитата RasKolbas:
Так вот, флаги SYN и ACK установлены только на первом пакете в последовательности или во всех? »
Только в первом. Они не могут быть установлены в других пакетах, поскольку установленный SYN задает новый начальный номер последовательности.
Цитата RasKolbas:
б) Потом браузер шлёт SYN-пакет серверу, указав портом источника этот самый выбранный порт, а портом приёмника 80. Начало GET-запроса как раз в этом самом SYN-пакете будет? »
Непредсказуемо и не имеет ни малейшего значения.
Цитата RasKolbas:
Какие флаги должны будут стоять на пакетах, когда запрашиваемая страница придёт к клиенту»
Зависит от обстоятельств (в процессе передачи может потребоваться установка каких-то флагов, к примеру, для изменения размера tcp-окна), но необходимости в обязательном порядке устанавливать какие-то флаги нет.

Цитата RasKolbas:
как должен вести себя фаерволл, чтобы не допустить в открытый порт пакеты не от общающегося сервера, а от какого-то левого хоста? »
С одной стороны, "левому хосту" будет сложно влезть в чужую последовательность - ведь он не знает, какие номера необходимо присваивать пакетам. Но обычно, перед отправкой запроса на установление TCP-сессии межсетевой экран открывается для приема пакетов с ip узла на который был отправлен запрос.
Поскольку пакеты от "левых узлов" имеют другой ip отправителя, они легко отсеиваются брандмауэром.

Цитата RasKolbas:
Какой механизм используется, чтобы отставить соединение открытым, чтобы браузер потом мог запросить изображения, таблицы стилей и другие компоненты веб-страницы? »
Как уже было сказано, в основе TCP-протокола лежит понятие сессии. Сессия открывается трехэтапным процессом установления соединения ("3-way handshake"). Сессия закрывается либо по истечению периода таймаута, если в течение некоторого времени от сервера не поступает ни одного пакета, либо, обычно, по получению пакета с установленным флагом FIN. Завершение сессии - такой же трехэтапный процесс. только вместо флага инициации сессии (SYN) посылается пакет с установленным флагом завершения сессии (FIN). В остальном эти процессы абсолютно одинаковы.
Поэтому никакого механизма "чтобы отставить соединение открытым" не существует в природе. Существует прямо обратный механизм - закрытия сессии. До тех пор, пока он не применен, сессия будет оставаться открытой (если не прервется по таймауту).

-------
Господа! Убедительная просьба не обращаться за консультациями в ЛС. Поверьте, создать ветку в соответствующем разделе форума гораздо эффективнее.


Отправлено: 19:14, 16-03-2013 | #3


Ветеран


Сообщения: 1024
Благодарности: 263

Профиль | Отправить PM | Цитировать


RasKolbas, Протокол TCP

Протокол TCP/IP или как работает Интернет .

How TCP/IP Works.

How TCP/IP Works™ .com Lecture Series.

Ускорение доступа в Internet с помощью функции Traffic Shaping.

Обновлено:
Цитата RasKolbas:
к сожалению мне ваши ссылки не помогли, я пока только только собираюсь через два месяца на курсы английского пойти »
онлайн-переводчики еще не отменили.

-------
Он ушел.


Последний раз редактировалось prosto user, 11-04-2013 в 19:53.


Отправлено: 14:17, 17-03-2013 | #4


Старожил


Сообщения: 483
Благодарности: 8

Профиль | Отправить PM | Цитировать


prosto user, к сожалению мне ваши ссылки не помогли, я пока только только собираюсь через два месяца на курсы английского пойти. А в последней ссылке - просто принципы функционирования сети даны, я это ещё 4 года назад проходил.

AMDBulldozer, не совсем понял и статью в википедии, и ваш ответ. Или и там, и там недостаточно подробно алгоритм описан. Интересуюсь не просто так, а для потому что для дипломной работы нужно написать экспертную систему, которая будет закрывать порты и защищать от атак типа SYN flood.

На счёт понятия сессии вроде понятно. Сессия открывается трехэтапным процессом установления соединения. То есть браузер должен сначала открыть сессию (убедиться что на удалённом сервере сокет перешёл в состояние ESTABLISHED), а только потом посылать GET-запрос, я правильно понял? И меня больше интересуеют настройки клиента. Правила сетевой безопасности рекомендуют блокировать входящие соединения на хосте, если он не является сервером. В то же время нельзя просто взять и заблокировать весь входящий трафик, потому как хост должен работать как клиент (принимать входящие пакеты, являющиеся ответом в созданные им исходящие соединения). Понять является ли пакет ответом или попыткой приконнектиться можно только посмотрев на его флаги.

То есть, если я заблокирую все пакеты содержащие единственный флаг SYN, я при этом отключу на хосте возможности сервера, оставив возможности клиента или как?

То есть при помощи брадмауэра netfilter, входящего в состав ядра Linux это так делается?
Код: Выделить весь код
iptables -t filter -A INPUT -i eth0 -p tcp --tcp-flags SYN,ACK,FIN SYN -j DROP
iptables -t filter -A INPUT -i eth0 -p tcp -j ACCEPT
Но в статьях я больше такие варианты видел:
Код: Выделить весь код
iptables -t filter -A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -i eth0 -p tcp j ACCEPT -j DROP
Какой вариант более правильный?

Отправлено: 03:10, 21-03-2013 | #5


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата RasKolbas:
. Или и там, и там недостаточно подробно алгоритм описан. Интересуюсь не просто так, а для потому что для дипломной работы нужно »
Если мы касаемся серьезных документов как то "Дипломная работа", то правильно будет ссылаться не на википедию, не на форум, а на первоисточник. Первоисточником информации о протоколах взаимодействия в сети являются RFC ()
TCP (русский) Одна из атак на TCP Сканирование портов TCP rfc 793 (оригинал) Статья про стандарты интернета
От себя хочу добавить. Стандарты - крайне интересная вещь, если "распробовать". Есть риск провалиться в них и потерять время.
Цитата RasKolbas:
Какой вариант более правильный? »
С виду оба. Просто один основывается на разборе TCP пакета и передаваемых флагов, второй на основе состояния соединения.
Если дробить:
  1. Передали флаг SYN,
  2. Получили флаг SYN,
  3. Перешли в следующие состояние
В совокупности это один этап. Кстати, в предложенном документе (rfc 793 на русском) есть подробная диаграмма переходов (рис. 6) (Этот рисунок лишь иллюстрирует возможные состояния и не является спецификацией таковых. (В параграфе 4.2.2.8 RFC-1122 приведен ряд поправок к этой диаграмме. Прим. перев.) RFC-1122

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:49, 21-03-2013 | #6



Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » Как работает TCP-соединение

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интернет - [решено] Как отключить одно TCP соединение с помощью командной строки? 4pok Microsoft Windows 2000/XP 7 13-10-2013 00:39
Разное - не работает сеть по протоколу TCP/IP akalibr Microsoft Windows 2000/XP 4 27-06-2011 23:05
Интерфейс - Не работает диалоговое окно при смене настроек TCP\IP Ar4ers Microsoft Windows 7 0 03-03-2010 22:07
Прочее - "Ошибка tcp/ip или соединение закрыто" zsa Сетевые технологии 3 11-08-2009 06:59
Как закрыть tcp соединение средствами Windows VladimirET Microsoft Windows 2000/XP 4 13-06-2006 06:56




 
Переход