Как сервер узнает что клиентский порт отправить к?

Что относительно hardlinking дубликаты файлов вместе? Тем путем пространство только используется однажды, но они все еще существуют во всех путях. Выгода с этим - то, что hardlinked файлы должны быть изменены на месте (они должны только быть изменены, удалив файл и воссоздав его с новым содержанием). Другой подход является к символьной ссылке файлами вместе, хотя у Вас есть та же проблема решения, которое "основной" файл. Это могло быть сделано со следующим сценарием (хотя примечание, что это не обрабатывает имена файлов, содержащие пробелы).

fdupes --quiet --recurse --sameline somedirectory/ | while read SOURCE DESTS; do
    for DEST in $DESTS; do
        ln -f $SOURCE $DEST
    done
done
26
08.05.2013, 02:07
4 ответа

Это - часть TCP (или UDP, и т.д.) заголовок, в пакете. Таким образом, сервер узнает, потому что клиент говорит его. Это подобно тому, как это узнает IP-адрес клиента (который является частью заголовка IP).

Например, каждый пакет TCP включает заголовок IP (с исходным IP, целевым IP и протоколом [TCP], по крайней мере). Затем существует заголовок TCP (с исходным и целевым портом, плюс больше).

Когда ядро получает пакет SYN (запуск соединения TCP) с удаленным IP 10.11.12.13 (в заголовке IP) и удаленный порт 12 345 (в заголовке TCP), это затем знает удаленный IP и порт. Это передает SYN|ACK обратно. Если это возвращает ACK, listen назовите возвраты новым сокетом, настройте для того соединения.

Сокет TCP однозначно определяется четырьмя значениями (удаленный IP, локальный IP, удаленный порт, локальный порт). У Вас могут быть многочисленные связи / сокеты, целый по крайней мере один из тех отличается.

Как правило, локальный порт и локальный IP будут тем же для всех соединений с серверным процессом (например, все соединения с sshd будут идти локальные-ip:22). Если одна удаленная машина установит многочисленные связи, то каждый будет использовать различный удаленный порт. Таким образом, все кроме удаленного порта будет тем же, но это прекрасно — только один из этих четырех должен отличаться.

Можно использовать, например, wirehsark для наблюдения пакета, и он маркирует все данные для Вас. Вот выделенный исходный порт (заметьте, что он выделился в декодируемом пакете, а также шестнадцатеричном дампе внизу):

Wireshark showing a TCP SYN packet

33
27.01.2020, 19:40
  • 1
    > спасибо за объяснение. Таким образом, u означал говорить, что новый дескриптор сокета сервера (т.е. кортеж) полученный после принятия () будет иметь клиентский порт и клиентские детали адреса и использовать тот новый сервер дескриптора сокета, отправляет и получает данные к и от клиента. Новому дескриптору файла сокета будут присваивать новый номер порта сервера ядро, IP сервера, клиентский IP и клиентский порт. Действительно ли я прав? –  Subi Suresh 07.05.2013, 20:21
  • 2
    @SubiSuresh да, кортеж хранится в ядре, связался с тем дескриптором файла. системный вызов –  derobert 07.05.2013, 20:21
  • 3
    > Спасибо derobert. Таким образом, я прихожу к заключению, что новый дескриптор сокета сервера будет иметь клиентский порт и клиентский адрес, который сервер получает из принятия ().My, понимание является прекрасным правом? –  Subi Suresh 07.05.2013, 20:24
  • 4
    @SubiSuresh Да, это корректно. С точки зрения приложения Вы обычно не заботитесь (за исключением входа). Ядро удостоверяется данные Вы write (и т.д.). переходит к правильному месту. –  derobert 07.05.2013, 20:27
  • 5
    > благодарит за Вашу справку, и я думаю, что понял. ;-) –  Subi Suresh 07.05.2013, 20:34

"Запрос подключения (клиентская программа connect() системный вызов, обычно), вызывает трехстороннее квитирование. Первому пакету трехстороннего квитирования (от клиента к серверу) установили флаг SYN и включает номер порта TCP, который клиентское ядро программы присваивает ему.

Вы видите это в статье о Nmap по сравнению с Естественными пакетами SYN. Пакетное декодирование Nmap SYN имеет фразу "источник 60058> dest.22". "Законный пакет SYN" декодирование имеет фразу "источник 35970> dest.80" в нем. Два пакета SYN говорят удаленному ядру, что пакеты от порта TCP 60058 и порта 35970, соответственно.

2
27.01.2020, 19:40
  • 1
    >, Но Bruce, который происходит в бэкэнде. Но как мой сервер на самом деле выбирает детали как номер порта becuase обычно в клиент-серверных программах, я никогда не видел функции для выборки клиентский адрес и клиентский порт –  Subi Suresh 07.05.2013, 20:10
  • 2
    getpeername() должен позволить Вам сделать это на любом открытом сокете. accept() системный вызов, который серверный код должен использовать, чтобы заставить дескриптор файла сокета связываться назад с клиентом, имеет параметр ("sockaddr" в моих страницах справочника), который содержит IP-адрес возможного клиента и номер порта TCP. –  Bruce Ediger 07.05.2013, 20:23
  • 3
    > не возражайте если я elloborate. От всех исходных данных, я понял меня, которые принимают () имеет структуру sockaddr_in заполненный клиентскими деталями и новым дескриптором сокета сервера, возвращенным после того, как принятие () будет автоматически иметь клиентский порт и адрес. Вот почему мы можем отправить, использование отправляют (новый дескриптор сокета сервера).I надежду, до к точке? Это должно только удостовериться, что то, что я понял, правильно. Прекрасное право? –  Subi Suresh 07.05.2013, 20:32
  • 4
    @SubiSuresh - Я полагаю, что Вы записали истину. –  Bruce Ediger 07.05.2013, 22:48

Соединение определяется кортежем (исходный IP, исходный порт, целевой IP, целевой порт). Ответы идут реверс.

0
27.01.2020, 19:40
  • 1
    @vondrand, Которые указывают, что я понял von.But, от которого функция делает сервер, узнает о числе клиентского порта? Со знанием числа клиентского порта, как это отправит. Сервер использует структуру в, принимают () для выборки клиентского порта? –  Subi Suresh 07.05.2013, 19:57

Сокет TCP является потоковым сокетом. Два дескриптора сокета (принадлежавший Вам и Вашей коллеге) надежно соединены. Таким образом, Вы не должны волноваться о порте клиента - просто пишут Ваш дескриптор сокета!

Кроме того, не стесняйтесь к getsockname (2), если Вы действительно хотите знать что (для входа, возможно).

1
27.01.2020, 19:40

Теги

Похожие вопросы