Hanya untuk memastikan kita berada di halaman yang sama (pertanyaan Anda ambigu dengan cara ini), meminta untuk mengikat TCP pada port 0 menunjukkan permintaan untuk secara dinamis menghasilkan nomor port yang tidak digunakan. Dengan kata lain, nomor port yang Anda dengarkan setelah permintaan itu bukan nol. Ada komentar tentang dalam hal ini [linux kernel source]/net/ipv4/inet_connection_sock.c
di inet_csk_get_port()
:
/* Obtain a reference to a local port for the given sock,
* if snum is zero it means select any available local port.
*/
Yang merupakan konvensi unix standar. Mungkin ada sistem yang benar-benar akan memungkinkan penggunaan port 0, tetapi itu akan dianggap praktik yang buruk. Perilaku ini tidak ditentukan secara resmi oleh POSIX, IANA, atau protokol TCP. 1 Anda mungkin menemukan ini menarik .
Itu sebabnya Anda tidak dapat secara wajar membuat koneksi TCP ke port nol. Agaknya nc
menyadari hal ini dan memberi tahu Anda bahwa Anda membuat permintaan yang tidak masuk akal. Jika Anda mencoba ini dalam kode asli:
int fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = 0;
inet_aton("127.0.0.1", &addr.sin_addr);
if (connect(fd, (const struct sockaddr*)&addr, sizeof(addr)) == -1) {
fprintf(stderr,"%s", strerror(errno));
}
Anda mendapatkan kesalahan yang sama dengan yang Anda coba sambungkan ke port lain yang tidak tersedia:, ECONNREFUSED
"Sambungan ditolak". Jadi sebagai balasan untuk:
Di mana dalam sistem ini ditangani? Dalam tumpukan TCP dari kernel OS?
Mungkin tidak; itu tidak memerlukan penanganan khusus. Yaitu, jika Anda dapat menemukan sistem yang memungkinkan pengikatan dan pendengaran pada port 0, Anda mungkin dapat terhubung dengannya.
1. Tapi IANA tidak menyebutnya sebagai "Reserved" ( lihat di sini ). Artinya, port ini tidak boleh digunakan online. Itu membuatnya oke sehubungan dengan konvensi penugasan dinamis (karena itu tidak akan benar-benar digunakan). Menetapkan bahwa secara khusus sebagai tujuan mungkin akan berada di luar ruang lingkup IANA; pada dasarnya sistem operasi bebas untuk melakukan apa yang mereka inginkan dengan itu, termasuk tidak ada.