Dapatkah soket TCP dan UDP menggunakan port yang sama?

104

Pertama-tama, apakah ada masalah dengan menggunakan UDP dan TCP pada server yang sama?

Kedua, dapatkah saya menggunakan nomor port yang sama?

pengguna800799
sumber

Jawaban:

110

Ya, Anda dapat menggunakan nomor port yang sama untuk TCP dan UDP. Banyak protokol yang sudah melakukan ini, misalnya DNS berfungsi di udp / 53 dan tcp / 53.

Secara teknis, kumpulan port untuk setiap protokol benar-benar independen, tetapi untuk protokol tingkat yang lebih tinggi yang dapat menggunakan TCP atau UDP, konvensi bahwa mereka default ke nomor port yang sama .

Saat menulis server Anda, ingatlah bahwa urutan kejadian untuk soket TCP jauh lebih sulit daripada untuk soket UDP, karena serta panggilan normal socketdan bindAnda juga harus listendan accept.

Selanjutnya bahwa acceptpanggilan akan kembali soket baru dan itu yang socket yang kemudian harus juga jajak pendapat untuk menerima peristiwa. Server Anda harus siap untuk melanjutkan acceptkoneksi pada soket asli sementara secara bersamaan melayani beberapa klien yang masing-masing akan memicu peristiwa penerimaan pada soket mereka sendiri.

Alnitak
sumber
2
@Eric Fortis RFC 1700 penuh dengan contoh, mari kita tidak mencantumkan semuanya, oke? ;-)
Marquis dari Lorne
2
@Eric Fortist mengapa tepatnya 'semua orang tahu tentang' nomor port NetBIOS?
Marquis dari Lorne
4
Silakan kirimkan sebagai pertanyaan sehingga Anda dapat memberi saya jawabannya
Eric Fortis
6
Sesuatu yang tidak dijelaskan oleh jawaban ini: semantik 'port' adalah spesifik untuk setiap protokol (tetapi beberapa mungkin tidak memiliki semantik ini) dari level transport (model OSI level 4). Jadi TCP memiliki portnya sendiri, yang diinterpretasikan oleh tumpukan TCP; UDP memiliki portnya sendiri, yang diinterpretasikan oleh tumpukan UDP. Jadi bisa dikatakan, port tidak dibagi antara UDP dan TCP; kebetulan kedua protokol memiliki definisi yang sama tentang "port" dan untuk menyederhanakan, kami menggunakan nilai port yang sama untuk beberapa koneksi dengan tipe berbeda ke layanan yang sama.
moala
2
@EricFortis Karena pertanyaan seperti itu sama sekali tidak menarik bagi saya atau siapa pun, seperti halnya alasan Anda menganggapnya menarik, dan juga keberatan Anda untuk mengutip satu RFC yang ada di sini tepat untuk tujuan yang sedang kita diskusikan.
Marquis dari Lorne
8

Pertama, tidak ada masalah menggunakan tcp dan udp di server.

Kedua, kita dapat memiliki permintaan UDP dan TCP pada port yang sama, karena setiap permintaan diidentifikasi oleh quintuple yang terdapat dalam IP sumber, IP Tujuan, Port Sumber, Port Tujuan, PROTOCOL (karena protokol dapat berupa TCP atau UDP).

aMooly
sumber
3
Alasan Anda menyatakan sering diberikan tetapi sebenarnya tidak ada artinya. Tidak ada yang namanya koneksi UDP, dan tidak ada konteks di mana koneksi dianggap terlepas dari protokol terkait. Faktanya adalah bahwa port adalah artefak dari TCP dan UDP secara terpisah, dan oleh karena itu tidak ada kemungkinan untuk membingungkan mereka.
Marquis dari Lorne
Terima kasih sudah menunjukkan kesalahan saya, benar tidak ada koneksi menggunakan UDP.
aMooly