Я хочу установить TCP-соединение через Интернет между двумя компьютерами, которые находятся в разных локальных сетях (в локальных сетях используется Wi-Fi). Я искал описание протокола TCP, особенно структуру заголовка TCP: http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Checksum_computation
На основании этих данных я предположил, что необходимы только: исходный адрес (глобальный IP-адрес), целевой адрес (глобальный IP-адрес), исходный порт, целевой порт.
Но как маршрутизатор в локальной сети получателя узнает, какой компьютер в этой сети является конечным пунктом назначения без MAC-адреса или локального IP-адреса?
РЕДАКТИРОВАТЬ: В моей ситуации у меня есть: мобильный телефон, подключенный к Интернету (не через Wi-Fi), и сервер (ПК) в домашней локальной сети, подключенный к маршрутизатору через Wi-Fi.
Итак, возникает вопрос: являются ли глобальные IP-адрес отправителя / получателя и порты всем, что необходимо, или же MAC-адреса также необходимы для установления соединения?
Если MAC не нужен, что делать, если в одной сети есть два компьютера, которые прослушивают один и тот же порт. Насколько я помню, все компьютеры используют порт 80 для http, который использует tcp. Почему нет конфликтов?
В коммутируемой сети да, MAC-адрес требуется клиенту.
В маршрутизируемой сети клиенту не требуется MAC-адрес.
В примере с маршрутизацией пакет покидает исходную сеть по маршруту по умолчанию. Затем этот маршрутизатор обращается к своей таблице маршрутизации, чтобы решить, как отправить трафик в пункт назначения. По прибытии в сеть назначения маршрутизатор использует протокол ARP для обнаружения правильного MAC-адреса в локальной сети, и пакет отправляется.
Если MAC не нужен, что делать, если в одной сети есть два компьютера, которые прослушивают один и тот же порт. Насколько я помню, все компьютеры используют порт 80 для http, который использует tcp. Почему нет конфликтов?
Есть конфликты. Это одна из причин того, что NAT и сеть с одним публичным IP - отстой. Маршрутизатор может определить, на какую машину нужно отправить пакет тремя способами:
Если соединение возникло изнутри, маршрутизатор может сделать запись в таблице NAT. Когда он видит входящий пакет, он ищет исходный IP-адрес, исходный порт и порт назначения в своей таблице NAT. Это говорит о внутреннем IP-адресе назначения. Затем он может перезаписать IP-адрес назначения.
Если в маршрутизаторе специально настроена переадресация портов, он может найти этот порт назначения и перезаписать IP-адрес назначения в соответствии с настройками.
Если настроен динамический протокол, такой как UPnP, то внутренний компьютер может создать запись динамической пересылки в маршрутизаторе, позволяя ему перезаписать IP-адрес назначения.