Mengapa hanya port 80 untuk layanan web?


54

Mengapa tidak masuk akal untuk mendedikasikan lebih dari satu port TCP / IP ke http? Meskipun memang naif, bukankah itu intuitif untuk berpikir bahwa kinerja server bisa meningkat?


17
Anda benar sekali. Saya mengubah port default server web saya dari 80 menjadi 90,91,92 & 93. Beban di server turun drastis.
David Houde

17
... mungkin karena tidak ada klien yang dapat menemukan server lagi?
Marcos Gonzalez

5
80 hanyalah porta yang digunakan untuk http. Ketika Anda mengatakan "something.com"; (atau bahkan "something.com") browser menyelesaikannya menjadi permintaan untuk "something.com:80"; (pada port 80, karena ini adalah port http terkenal terkenal). Sama untuk https pada 443. Jika Anda memutuskan untuk mengubahnya, Anda harus mengatakannya di URL: "myserver.com:1280"; jika tidak, browser akan mencoba pada port 80 dan tidak akan menemukannya. Daftar dapat dilihat di wikipedia
Olivier Dulac

6
Maaf Marcos, itu adalah upaya yang buruk untuk humor. Saya tidak pernah bagus dalam hal itu.
David Houde

3
@ Davidvidou, waktu untuk penyegaran pada emoticon untuk Anda. :-) cs.cmu.edu/~sef/sefSmiley.htm
generalnetworkerror

Jawaban:


70

Port 80 adalah port terkenal , yang artinya terkenal sebagai lokasi Anda biasanya akan menemukan server HTTP. Anda dapat menemukannya didokumentasikan dalam HTTP / 1.1 RFC .

Memiliki default berguna justru karena Anda tidak perlu mengetiknya di browser web Anda dengan URI. Jika Anda menjalankan server HTTP (atau bahkan layanan apa pun) pada port non-standar, Anda memaksa klien untuk mengingat nomor 16-bit mana saja yang Anda pilih dan ketik.

Selain ketidaksepakatan ini, tidak ada manfaat kinerja: port hanyalah salah satu bagian dari (dst ip:port, src ip:port)4-tuple yang secara unik mengidentifikasi koneksi TCP. Jika dua koneksi berbagi a dst ip:port, itu tidak berarti mereka berbagi beberapa sumber daya sistem - mereka dapat berada di utas yang berbeda, atau proses yang berbeda.

Sekarang, jika Anda memiliki layanan logis yang berbeda yang keduanya terjadi untuk menggunakan HTTP, tidak ada masalah dengan menjalankan mereka pada port yang berbeda. Itu hanya membuat URI sedikit lebih jelek.


7
Itu dia! Port 80 bukan sumber daya! Itu hanya bagian dari sebuah tuple! Terima kasih telah menjelaskannya dengan jelas.
Marcos Gonzalez

2
Tidak ada artinya sama sekali bahkan untuk layanan yang berbeda, koneksi HTTP yang sebenarnya biasanya diterima pada port 80 oleh driver seluruh sistem yang melakukan analisis protokol awal dan kemudian menyerahkannya ke layanan yang benar, sehingga memungkinkan layanan yang sama sekali berbeda dalam proses yang berbeda untuk berbagi port yang sama.
Monstieur

1
Userful of Useless
Deckard

26

Server tidak membuang sumber daya dengan menangani koneksi di satu atau beberapa port. Sumber daya server dialokasikan untuk menangani koneksi, dan nomor port hanyalah cara untuk menghubungkan program tertentu ke koneksi tertentu.

Sebagai contoh: server HTTP tahu bahwa ia akan mendengarkan koneksi yang datang di port 80. Dan server tahu bahwa kapan saja ia menerima beberapa permintaan pada port 80, ia akan menanganinya ke server http. Setelah itu, server http akan menangani komunikasi dan kemudian akan menghabiskan sumber daya.


8
Saya akan menambahkan jawaban ini bahwa port 80 tidak dikonsumsi oleh pengguna yang mengirimkan permintaan mereka. Inilah sebabnya mengapa hanya menggunakan port 80 (atau port apa pun yang terkenal untuk protokol masuk yang Anda lihat) bukan hambatan untuk skalabilitas.
Craig Sirkin

1
Itulah tepatnya yang tidak saya mengerti. Bahkan 100.000 pengguna yang terhubung secara bersamaan ke www.example.com:80 tidak akan mengkonsumsi port 80. Terima kasih atas klarifikasi. Saya menemukan informasi @Useless 'di bawah ini juga sangat mencerahkan.
Marcos Gonzalez

Beberapa perangkat lunak webservers memiliki Batas per instance dan / atau proses. Terkadang bisa jadi ide yang baik untuk menjalankan banyak instance, tetapi melakukannya pada mesin yang sama membutuhkan port pendengaran lain, yang pertama (TCP80 / 443) meneruskan koneksi ke instance pertama.
Remi Letourneau

22

Anda tampaknya menganggap port sebagai sesuatu yang nyata; itu hanya nomor unsigned 16-bit (0-65535) yang merupakan label di header paket IP. Ini membantu dengan multiplexing tingkat aplikasi. Ketika paket yang masuk tiba di kartu jaringan, OS mendapat pemberitahuan. Ia memeriksa ke port mana paket masuk diarahkan, dan kemudian meneruskan paket hanya ke aplikasi yang tepat. Jika Anda menjalankan server web Anda (nginx) untuk mendengarkan pada port 80, hanya nginx yang menerima paket yang dikirim ke port 80.

Ketika klien (IP: 100.200.100.200) membuat permintaan HTTP ke server (55.55.55.55), mereka membuat permintaan itu ke port tujuan 80 di server (55.55.55.55:80), tetapi port sumber dipilih secara acak oleh OS untuk browser web (sekitar 45490). Respons HTTP dari server web kemudian berasal dari (55.55.55.55:80), tetapi dikirim ke tujuan (IP Anda) (100.200.100.200:454904). OS komputer Anda tahu bahwa paket yang masuk pada port 45490 (mulai 55.55.55.55:80) perlu diberikan ke browser web yang mengajukan permintaan. Karena setiap koneksi unik ke situs web dari klien mendapatkan port acak yang unik, sehingga Anda dapat memiliki beberapa browser web yang terhubung ke situs web yang sama dan ketika sebuah halaman dimuat ulang di satu browser, windows lain tidak terpengaruh.

Setiap paket IP memiliki sumber dan tujuan alamat IP dan port yang tersedia untuknya di header. OS dan aplikasi (browser web atau server web) dapat menggunakan keduanya untuk mengetahui tindakan yang sesuai tentang cara memproses paket.


2
+2 suara jika aku bisa.
generalnetworkerror

13

Port 80 & 443 adalah port "default" untuk HTTP / HTTPS

Ini berarti bahwa Anda tidak perlu menentukan port ( http://www.example.com:80 , https://www.example.com:443 ) saat menggunakan browser web.

Jika Anda ingin server web mendengarkan pada port lain, pengguna harus menambahkan port secara manual ke URL, atau harus dikodekan dalam tautan apa pun ke port tertentu.

Juga, sebagian besar Proxy dan Firewall tidak akan membiarkan koneksi ke port tersebut kecuali jika dikonfigurasikan secara khusus untuk melakukannya (Tanpa konfigurasi, Proxy keluar tidak akan mendengarkan port non-default, maka tidak akan meneruskan permintaan ke server web, sementara Firewall hanya akan memblokir upaya koneksi non-TCP80 / 443)

Semua ini membatasi apa yang dapat dilakukan pada level TCP / IP

Salah satu cara untuk meningkatkan kinerja adalah dengan memiliki alat / layanan penyeimbang beban yang mendengarkan TCP80 / 443 yang kemudian akan mengarahkan permintaan ke server pada port yang berbeda dan / atau ip (Penyeimbangan Lokal) atau bahkan situs jarak jauh yang berbeda (Penyeimbangan Global). Tapi ini adalah topik lain


Terima kasih telah memperkenalkan saya pada konsep "load balancing".
Marcos Gonzalez

1
Jika Anda ingin memiliki "pseudo" langsung dan gagasan tentang beberapa konsep penyeimbangan beban, F5 memiliki beberapa pelatihan online gratis di university.f5.com. Pendaftaran gratis dan memberikan Anda akses ke LTM (Manajer Lalu Lintas Lokal - penyeimbang lokal mereka) ) pelatihan, di mana Anda dapat melihat seperti apa dan mempelajari beberapa konsep penyeimbangan beban (mis: IP Real, Virtual IP, Pools, pemeriksaan kesehatan, dll ...)
Remi Letourneau

Saran yang bagus!
Marcos Gonzalez

9

Menambahkan port tambahan tidak menambah bandwidth ekstra atau semacamnya, port lebih merupakan label daripada pipa , dapat "tumbuh" selebar yang Anda butuhkan tanpa menjadi lebih lambat karena pipa penuh.

Jika server menerima terlalu banyak permintaan, tentu saja server akan melambat, namun ini bukan jenis masalah yang dapat diperbaiki dengan menambahkan nomor port lain.


s / label then / label than / - Saya akan mengedit, tetapi tampaknya hanya satu karakter yang tidak dapat diedit.
Paul Gear

7

Jika Anda menggunakan port acak, pengguna harus menambahkan nomor port yang benar setiap kali mereka pergi ke situs Anda. yaitu www.example.com:80; www.example.com:81; www.example.com:82 dll

Itu tidak akan meningkatkan kinerja untuk menggunakan lebih banyak port. Port-port sumber untuk setiap koneksi merupakan porta porte dan sebagainya pula


7

Setiap koneksi TCP / IP memiliki sourceIP: sourcePort dan destinationIP: destinationPort.

Ketika Anda memulai koneksi, Anda akan selalu menggunakan 80 sebagai port tujuan (yang masuk akal karena Server hanya perlu mendengarkan pada port 80 untuk HTTP dan bukan pada beberapa port). Triknya adalah sourcePort dinamis untuk setiap koneksi.

Contoh:

pengguna1: 1.1.1.1:9999 hingga 2.2.2.2:80

user2: 1.1.1.2:45333 hingga 2.2.2.2:80


2

Jangan salah mengira port yang berbeda untuk koneksi fisik yang berbeda atau bandwidth jaringan yang lebih tinggi atau kinerja pemrosesan server. Apa yang didapat server adalah paket TCP atau UDP, yang kebetulan memiliki nomor port sebagai bagian dari alamat. Mereka masih datang dengan kabel yang sama, melalui perangkat keras dan driver antarmuka jaringan yang sama, dan sebagainya.

Jika Anda mengirim dua paket ke server, dalam hal sumber daya yang dikeluarkan server untuk memproses dua paket ini, tidak masalah jika salah satu dari keduanya memiliki nomor port yang berbeda atau nomor port yang sama yang terkait dengannya, penanganan internal akan dekat dengan identik.

Karena itu, ini bukan metode untuk meningkatkan kinerja dengan cara apa pun.

Satu-satunya pengecualian yang mungkin untuk ini adalah jika Anda mengaitkan dua setan yang berbeda (atau dua salinan dari yang sama) berjalan pada waktu yang sama ke dua nomor port yang berbeda, dan jika masing-masing setan ini akan naik skala sangat buruk dengan beban. Yang biasanya tidak demikian.


1

Seperti yang disebutkan Remi, Port 80 & 443 adalah port "default" untuk HTTP / HTTPS.

Sebagian besar jaringan dan firewall tidak memblokir lalu lintas melalui port ini. Jadi menggunakan port ini lebih mudah karena sebagian besar waktu Anda mungkin tidak perlu khawatir tentang firewall memblokir layanan Anda, Anda mungkin harus melalui konfigurasi ulang aturan firewall dan mendapatkan persetujuan dari kepatuhan / keamanan untuk hal yang sama.


1
Amin, situs web yang menggunakan port tidak standar adalah kutukan dari keberadaan administrator keamanan, satu pengguna di kantor Anda perlu menggunakan satu situs web dengan port aneh = perubahan proxy, perubahan FW, tinjauan keamanan dll.
wintermute000

0

Seperti yang dikatakan semua orang di sini, pada dasarnya tidak ada gunanya meng-host server web pada port apa pun selain port 80 ... kecuali Anda hosting dari rumah. Banyak ISP membatasi port TCP / UDP 80 dan 443 outbound ( masing-masing IANA didefinisikan sebagai HTTP dan HTTPS ), dan dalam hal ini, menggunakan port tersebut akan mengurangi kecepatan pemuatan situs, dll. Namun, IANA telah menetapkan 3 port HTTP-ALT untuk baik TCP dan UDP. Ini adalah: 591, 8008 dan 8080. Menggunakan port-port ini juga dapat diterima, tetapi Anda akan membuat kehidupan admin server menjadi gila.

Sumber nomor port: https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.