Słuchanie portu TCP 0 przydziela mi wolny numer portu w systemie.
Ale co się stanie, gdy spróbuję połączyć się z portem TCP 0? Oczywista odpowiedź brzmi: „To nie działa”:
$ nc localhost 0
nc: port number too small: 0
Gdzie w systemie jest to obsługiwane? W stosie TCP jądra systemu operacyjnego? Czy istnieją systemy uniksowe, w których działałoby połączenie z portem TCP 0?
networking
tcp
nh2
źródło
źródło
Odpowiedzi:
Aby upewnić się, że jesteśmy na tej samej stronie (twoje pytanie jest w ten sposób dwuznaczne), pytanie o powiązanie TCP na porcie 0 oznacza żądanie dynamicznego wygenerowania nieużywanego numeru portu. Innymi słowy, numer portu, którego faktycznie słuchasz po tym żądaniu, nie jest równy zero. Jest komentarz na ten temat w
[linux kernel source]/net/ipv4/inet_connection_sock.c
sprawieinet_csk_get_port()
:Która jest standardową konwencją unixową. Mogą istnieć systemy, które faktycznie pozwolą na użycie portu 0, ale byłoby to uważane za złą praktykę. Jednak takie zachowanie nie jest oficjalnie określone przez POSIX, IANA ani protokół TCP. 1 Może Cię to zainteresować .
Dlatego nie można rozsądnie nawiązać połączenia TCP z portem zero. Prawdopodobnie
nc
jest tego świadomy i informuje Cię, że składasz niemądre żądanie. Jeśli spróbujesz w natywnym kodzie:Otrzymujesz ten sam błąd, który chciałbyś połączyć z innym niedostępnym portem
ECONNREFUSED
:, „Odmowa połączenia”. W odpowiedzi na:Prawdopodobnie nie; nie wymaga specjalnej obsługi. To znaczy, jeśli możesz znaleźć system, który umożliwia wiązanie i nasłuchiwanie na porcie 0, prawdopodobnie możesz się z nim połączyć.
1. Ale IANA nie odnoszą się do niego jako „Zastrzeżone” ( patrz tutaj ). Oznacza to, że ten port nie powinien być używany online. To sprawia, że jest to w porządku w odniesieniu do konwencji przypisywania dynamicznego (ponieważ tak naprawdę nie będzie używana). Ustalenie, że konkretnie jako cel prawdopodobnie wykraczałoby poza zakres IANA; w istocie systemy operacyjne mogą robić z nim, co chcą, w tym nic.
źródło
INADDR_ANY
, do czego odnosi się Richard (system zastąpi go domyślnym). Ale korzystanie z adresu w sieci wydaje się mieć implikacje, o których wspomina Andrea (z wyjątkiem nie tak wyraźnych, że liczy się to jako „transmisja”): en.wikipedia.org/wiki/0.0.0.0Użycie Portu 0 powoduje, że system operacyjny wyszukuje i przydziela następny dostępny port. Pozwala to uniknąć konieczności kodowania określonego portu lub szukania dostępnego portu. System My Mint Linux powraca
do
źródło
nc -l 0
poprosi system operacyjny, aby nasłuchiwał na porcie 0. Ale jak wspomniano powyżej, większość systemów operacyjnych zobaczy 0 i przywoła swoje szczególne zwyczaje dotyczące wyboru portu o numerze dodatnim dla twojej aplikacji, więcnc
kończy się nasłuch na jakimś porcie, takim jak 56514.źródło