> 1. да Нет. В случае tcp/ip соединение - двусторонний туннель между endpoint'ами заданными парами ip:port:
src_ip:src_port <-> dst_ip:dst_port.
Итого 4 числа. Для однозначной идентификации туннеля, очевидно, хоть 1 из этих 4 чисел у разных туннелей должно отличаться.
Для исходящего соединения src_ip - айпи машины-клиента которая инициирует соединение (для multihome машин у которых их несколько в принципе можно явно ткнуть какой из айпи юзать), порт src_port как правило автоматически назначается ОС, хотя при наличии особых соображений можно его задать явно. Обычно ОСи назначают порты старше 1024, инкрментя на 1 по мере надобности. Очень характерно выглядит в netstat. Ну а сервер слушает на одном(а может и нескольких, если multihomed) dst_ip, и на одном конкретном dst_port.
Что отсюда следует? Клиент не может инициировать к серверу более чем 65к соединений(на 1 имеющийся айпи ифейса), иначе утратит возможность различать туннели между собой.Потому что со стороны сервера 2 числа не меняются, а со стороны клиента портов 65К ну и 1 или несколько ip.
С другой стороны, серверу ничто не мешает принимать до 65К соединений одновременно с каждого клиента: он ловит все пакеты на 1 входной порт, а вот у разных клиентов же еще и ip разный! Меняются src_ip и src_port, 2 числа для уникальной идентификации туннеля. В случае ipv4 сервер в теории мог бы принять почти (2^32) * (2^16) т.е. примерно 2^48 соединений. Реально разумеется ресурсы у сервера закончатся раньше. Поскольку хоть на входящее соединение и не выделяется новый порт, зато как минимум отслеживать состояние соединения-надо.
В случае udp - вообще нет понятия "соединение". Поэтому и такого понятия как "65к соединений" там тоже нет.
> 2. Hint: на сетевухе может быть много IP адресов
Только вот у сервера и с одним никаких проблем не будет: айпишник у клиентов то меняется, что тоже позволяет отличать туннели. Клиент не может реюзать порты на выход как раз потому что при этом все 4 числа были бы одинаковы, не давая возможности отличать туннели друг от друга(айпи сервера и клиента не меняются, порт сервера тоже, вот и остается менять исходящий порт клиента при открытии еще 1 соединения к тому же хосту, т.к. это единственное что получается менять). Но у сервера этой проблемы нет. Потому что он может различать туннели по айпи клиента и порту.
> 3. Нет (частичный=некорректный. пакет просто дропнется)
4. Буфера рассчитываются исходя из желаемой скорости и латентности. Чем выше желаемая скорость передачи данных и латентность сети и/или обслуживания сокетов, тем жирнее надо буфер чтобы удержать в нем то что навалилось за это время. Вообще, однозначно определить оптимальный размер буфера нетривиально. Для 10 Гбит эзернета между соседними машинами оптимальный буфер будет немного иной чем для тощего adsl с 128 кбит аплоада. А какой линк подсунут - заранее неизвестно.А, ну и операционка имеет свое мнение о том сколько еще можно вам дать, а сколько уже больно жирно(для некоторых типов соединений этот параметр ОС еще и тюнят для макс. производительности).