Пусть есть клиентские приложения, запускаемые с хостов в сети с частными адресами, коннект идет к серверу в Internet, при этом происходит преобразование частных адресов клиентов в один внешний, пусть при этом у клиентов совпали номера портов.Вопрос: как сервер поймет who is who?
Ясно что все это работает, но как?
>Пусть есть клиентские приложения, запускаемые с хостов в сети с частными адресами,
>коннект идет к серверу в Internet, при этом происходит преобразование частных
>адресов клиентов в один внешний, пусть при этом у клиентов совпали
>номера портов.
>
>Вопрос: как сервер поймет who is who?
>Ясно что все это работает, но как?по хендлу соединения - когда ты создаешь соединение в tcp.ip - у тебя создается "канал", софт работает не по связке ип+порт, а по хендлу соединения
>по хендлу соединения - когда ты создаешь соединение в tcp.ip - у
>тебя создается "канал", софт работает не по связке ип+порт, а по
>хендлу соединенияНу ладно, тогда возникает другой вопрос: как ядро поймет какой из хендлов соединения ему нужно использовать когда на интерфейс приходят 2 пакета от разных хостом а фактически в качестве IP:PORT источника одно и то же?
>коннект идет к серверу в Internet, при этом происходит преобразование частных
>адресов клиентов в один внешний, пусть при этом у клиентов совпали
>номера портов.NAT в этом случае делает маппинг портов. Т.е. за натирующую машину в этом случае никогда не выйдет два разных соедниения с одним source портом.
>NAT в этом случае делает маппинг портов. Т.е. за натирующую машину в
>этом случае никогда не выйдет два разных соедниения с одним source
>портом.То есть все таки соединение однозначно идентифицируется уникалной парой IP:PORT источника и IP:PORT получателя (как собственно я и думал) и NAT собственно и прдерживается такой политики, а что будем делать когда порты исчерпаются?
>прдерживается такой политики, а что будем делать когда порты исчерпаются?сосать лапу. Или получать еще один внешний адрес. Или пул адресов, на каждом адресе из которого так же производить ремаппинг портов.
Советую по этому поводу почитать документацию на пакетные фильтры, там все довольно четко изложено. Снимает массу впросов.
>сосать лапу. Или получать еще один внешний адрес. Или пул адресов, на
>каждом адресе из которого так же производить ремаппинг портов.
>
>Советую по этому поводу почитать документацию на пакетные фильтры, там все довольно
>четко изложено. Снимает массу впросов.Видимо я упустил тот момент, что NAT отмепит еще и порт в другой, тогда все становится прозрачным, вопрос с исчерпанием уже был риторическим и явно излишним :-)
В этой ветке мне еще один ответ приходил, как его понимать (я имею ввиду ссылку на работу на уровне дескрипторов, это немного выше твоего ответа), я по этому поводу еще один вопросик задал. Посмотри, будь добр, что ты по этому поводу скажешь?
>будь добр, что ты по этому поводу скажешь?Ничего не могу сказать, так как даже представить себе такой ситуации не могу. Но если вдаваться в тонокости протокола TCP/IP, то еще не маловажную роль играет пордяковый номер пакета(ISN кажается) и окно этих номеров.
Если текущий пакет имеет номер отличный от более чем на -1, то какой пакет будет отвергнут. Но это так. Поверхностно. За более точными формулировками отсылаю к http://www.zeiss.net.ru/docs/technol/tcpip/tcp00.htm
>Ничего не могу сказать, так как даже представить себе такой ситуации не
>могу. Но если вдаваться в тонокости протокола TCP/IP, то еще не
>маловажную роль играет пордяковый номер пакета(ISN кажается) и окно этих номеров.
>
>Если текущий пакет имеет номер отличный от более чем на -1, то
>какой пакет будет отвергнут. Но это так. Поверхностно. За более точными
>формулировками отсылаю к http://www.zeiss.net.ru/docs/technol/tcpip/tcp00.htmДа, порядковые номера учитываются, но это, на сколько я понимю, косается лишь TCP, а что если в качестве сервера выступает DNS сервер и на 53-ий порт идет запрос по UDP?
А вообще, по моему этой проблемы нет, выдуманная она, ибо:
The source port number is also changed to indicate the table entry applying to the packet. (выдержка из man natd).
Мне этот вопрос на собеседовании задан был, я стушевался, ответ был мне дан довольно пространный (видимо тот кто спрашивал сам толком не знал его), сказали что данная проблема решается в самом протоколе (что имелось в виду???), это так, предыстория, в общем чистой воды провокация а не реальная проблема...
> это так, предыстория, в общем чистой воды провокация а
>не реальная проблема...Рад что все разрешилось.
>Пусть есть клиентские приложения, запускаемые с хостов в сети с частными адресами,
>коннект идет к серверу в Internet, при этом происходит преобразование частных
>адресов клиентов в один внешний, пусть при этом у клиентов совпали
>номера портов.
>
>Вопрос: как сервер поймет who is who?
>Ясно что все это работает, но как?Мусье, Вы тему предложили на двухчасовую лекцию. Аналогия - вызвать скорую помощь и попросить врачей рассказать про то как происходит сворачивание крови или воспаление слепой кишки.
>Мусье, Вы тему предложили на двухчасовую лекцию. Аналогия - вызвать скорую помощь
>и попросить врачей рассказать про то как происходит сворачивание крови или
>воспаление слепой кишки.Приношу свои извенения, что затронул тему о которой сложно рассказать. Но может тогда подскажещь какой из двух коротких ответов ближе к истине?
>>Мусье, Вы тему предложили на двухчасовую лекцию. Аналогия - вызвать скорую помощь
>>и попросить врачей рассказать про то как происходит сворачивание крови или
>>воспаление слепой кишки.
>
>Приношу свои извенения, что затронул тему о которой сложно рассказать. Но может
>тогда подскажещь какой из двух коротких ответов ближе к истине?
в каждой OS это делаеться по разному
сформулируйте правильно вопрос:-)
>в каждой OS это делаеться по разному
>сформулируйте правильно вопрос:-)Ну пусть это будет FreeBSD, если так станет легче ответить.
>>в каждой OS это делаеться по разному
>>сформулируйте правильно вопрос:-)
>
>Ну пусть это будет FreeBSD, если так станет легче ответить.Уважаемый, Антон.
Могу порекомендовать почитать что-нить про стек протокола TCP/IP и маршрутизацию. Статей много, из них есть толковые. Про функционирования natd мне нечего добавить к вышесказанному.
>Уважаемый, Антон.
>Могу порекомендовать почитать что-нить про стек протокола TCP/IP и маршрутизацию. Статей много,
>из них есть толковые. Про функционирования natd мне нечего добавить к
>вышесказанному.Вот с этого (что все уже сказано про natd) и нужно было начинать, ответ уже был, и весьма простой и абсолютно понятный и без всяких лекций, ибо что-нить про стек протокола TCP/IP и маршрутизацию я прочитал много статей, но как выяснилось, кое-что пропустил читая о natd. Если есть еще что добавить к выше сказанному, с превиликим удовольствием выслушаю, ну а если нет будем считать что такой проблемы просто не существует, NAT перемепит порт на не используемый и уникальность пары IP:PORT источника и IP:PORT получателя сохранится, в случае невозможности данного действа, мы получим простой ОБЛОМ.
OK?
>Вот с этого (что все уже сказано про natd) и нужно было
>начинать, ответ уже был, и весьма простой и абсолютно понятный и
>без всяких лекций, ибо что-нить про стек протокола TCP/IP и маршрутизацию
>я прочитал много статей, но как выяснилось, кое-что пропустил читая о
>natd. Если есть еще что добавить к выше сказанному, с превиликим
>удовольствием выслушаю, ну а если нет будем считать что такой проблемы
>просто не существует, NAT перемепит порт на не используемый и уникальность
>пары IP:PORT источника и IP:PORT получателя сохранится, в случае невозможности данного
>действа, мы получим простой ОБЛОМ.
>
>OK?"Рад, что у вас все хорошо кончилось!" (с) Почтальон Печкин