Приложение связывается с локальным IP-адресом и портом, используя функцию bind()
. Удаленный IP-адрес и порт определяются другим концом соединения во время установления соединения.
В ядре во время установления TCP-соединения сокет помещается в хеш-таблицу на основе данных, включающих локальный адрес, локальный порт, удаленный адрес и удаленный порт. Когда поступает входящий tcp-сегмент, эти значения извлекаются из заголовка и используются для поиска соответствующего сокета в хэш-таблице. В Linux этот поиск происходит в функции inet_lookup_established()
. Аналогичная функция inet_lookup_listener()
используется для поиска прослушивающего сокета из другой хеш-таблицы для нового соединения; в этом случае удаленный IP-адрес и порт не используются.