Perbedaan antara soket dan porta

121

Bisakah seseorang tolong jelaskan dengan jelas perbedaan antara port dan soket. Saya tahu bahwa port berfungsi sebagai pintu ke jaringan untuk proses aplikasi dan bahwa proses aplikasi menggunakan koneksi soket ke nomor port yang diberikan untuk menangani komunikasi jaringan tetapi ketika Anda memiliki beberapa proses mendengarkan pada nomor port tunggal, saya menemukan sulit untuk memahami perbedaan antara soket dan port dan bagaimana mereka semua cocok bersama.

cobie
sumber
9
Port adalah alamat fisik, sedangkan soket adalah objek.
superM
14
Jika sebuah paket menyentuh saku pada soket di port ...
user16764

Jawaban:

116

S adalah program server: katakanlah ini adalah server HTTP, jadi ia akan menggunakan nomor port terkenal untuk HTTP , yaitu 80. Saya menjalankannya pada host dengan alamat IP 10.0.0.4, jadi ia akan mendengarkan koneksi pada 10.0.0.4:80(karena di situlah semua orang berharap menemukannya).

Di dalam S , saya akan membuat soket dan mengikatnya ke alamat itu: sekarang, OS tahu bahwa koneksi yang masuk 10.0.0.4:80harus dialihkan ke proses S saya melalui soket tertentu.

  • output netstat setelah soket terikat:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    

    NB. alamat lokal semuanya nol karena S tidak peduli bagaimana kliennya mencapainya

Setelah S memiliki ikatan soket ini, ia akan menerima koneksi - setiap kali klien baru terhubung, acceptmengembalikan soket baru , yang khusus untuk klien itu

  • output netstat setelah koneksi diterima:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    tcp        0      0 10.0.0.4:80                 10.0.0.5:55715             ESTABLISHED
    
    • 10.0.0.4:80mewakili S end 's sambungan, dan berhubungan dengan socket dikembalikan olehaccept
    • 10.0.0.5:55715adalah ujung koneksi klien, dan dikaitkan dengan soket yang dilewati klien untuk menghubungkan . Port klien tidak digunakan untuk apa pun kecuali merutekan paket pada koneksi TCP ini ke proses yang benar: itu ditugaskan secara acak oleh kernel klien dari rentang port sementara.

Sekarang, S dapat dengan senang hati menerima lebih banyak koneksi klien ... masing-masing akan mendapatkan soketnya sendiri, setiap soket akan dikaitkan dengan koneksi TCP yang unik, dan setiap koneksi akan memiliki alamat jarak jauh yang unik. S akan melacak status klien (jika ada) dengan menghubungkannya dengan soket.

Jadi, kira-kira:

  • alamat IP untuk perutean antar host di jaringan
  • port untuk routing ke soket yang benar pada host
    • Saya hampir mengatakan proses yang benar , tetapi sebenarnya mungkin untuk memiliki beberapa (biasanya anak) proses semua menerima pada soket yang sama ...
    • Namun, setiap kali salah satu acceptpanggilan bersamaan kembali, ia melakukannya hanya dalam satu proses, setiap soket koneksi masuk unik untuk satu contoh server
  • soket adalah objek proses yang digunakan untuk berbicara dengan OS tentang koneksi tertentu, seperti deskriptor file
    • seperti disebutkan dalam komentar, ada banyak kegunaan lain untuk soket yang tidak menggunakan port sama sekali: misalnya socketpair membuat sepasang soket yang terhubung bersama yang tidak memiliki skema pengalamatan sama sekali - satu-satunya cara untuk menggunakan pipa itu adalah dengan menjadi proses yang disebut socketpair, menjadi anak dari proses itu dan mewarisi satu, atau secara eksplisit melewati salah satu soket dari proses itu
Tak berguna
sumber
1
@Useless Layak disebutkan bahwa soket tidak perlu berbasis IP seperti yang ditunjukkan oleh jawabannya. Ini tidak persis relevan dengan OP tetapi penjelasan keluarga soket akan membantu melengkapi jawaban ini.
hafichuk
Poin bagus - Saya sudah mulai khawatir tentang cakupan creep ketika saya mulai menulis tentang server multi-proses. Jangan ragu untuk mengeditnya, dan jika tidak, saya akan memperbaikinya di beberapa titik ...
berguna
11
ini sama sekali tidak berguna
l
Saya mencoba memahami soket dalam elektronik, server mengikat soket ke nomor port seperti meletakkan soket di dinding menunggu beberapa perangkat elektronik untuk plugin pengisian baterai. Tetapi ketika diterima, soket baru dikembalikan? Mengapa? Soket baru diletakkan di dinding? Tolong bantu saya masuk akal dengan analogi.
Aaron Shen
3
Masalahnya di sini adalah analogi Anda salah. Lupakan arti soket di dunia fisik - ini bukan metafora untuk hal lain, hanya istilah teknis untuk konsep perangkat lunak teknis tertentu. Bahkan tidak terkait erat dengan port jaringan fisik atau soket - Anda hanya perlu memahaminya, dalam domain ini, sebagai konsep dengan istilah sendiri.
berguna
49

Pikirkan mesin Anda sebagai bangunan apartemen:

  • Port adalah nomor apartemen.

  • Soket adalah pintu sebuah apartemen.

  • Alamat IP adalah alamat jalan gedung.

Caleb
sumber
3
Saya suka analogi ini meskipun sekarang saya berpikir untuk berada di dalam apartemen itu melihat koridor tanpa akhir dengan banyak pintu. Saya tidak bisa keluar. Saya tidak bisa keluar! :)
Daniel Hollinrake
1
@ Caleb A socket is the door of an apartment.Tapi tidak bisakah ada banyak soket terbuka di satu port?
Suhail Gupta
3
@ suhail Terkadang apartemen memiliki lebih dari satu pintu. Mereka semua memiliki nomor apartemen yang sama, tetapi mereka pintu yang berbeda.
Caleb
45

Port adalah bagian dari alamat dalam protokol TCP dan UDP. Ini digunakan untuk membantu OS mengidentifikasi aplikasi mana yang harus mendapatkan data yang diterima. OS harus mendukung port untuk mendukung TCP dan UDP karena port adalah bagian intrinsik dari TCP dan UDP.

Soket adalah bagian dari antarmuka yang disajikan OS ke aplikasi untuk memungkinkan mereka mengirim dan menerima data jaringan. Sebagian besar implementasi soket mendukung banyak protokol di luar TCP dan UDP, beberapa di antaranya tidak memiliki konsep port. OS tidak harus mendukung soket untuk mendukung TCP atau UDP; itu bisa menyediakan antarmuka yang berbeda untuk aplikasi untuk digunakan. Soket hanyalah salah satu cara mengirim dan menerima data pada port tertentu.

Dirk Holsopple
sumber
Soket pada dasarnya adalah 4 tuple yang terdiri dari: Sumber IP: Port-Dest IP: Port.
Tony The Lion
Anda maksud bahwa port hanya ada dalam protokol TCP dan UDP ??? Bagaimana dengan http dan protokol lainnya?
Hosein Aqajani
HTTP adalah protokol lapisan aplikasi yang berjalan di atas protokol lapisan transport seperti TCP atau UDP. Itu tidak memiliki konsep port sendiri, itu mewarisi mereka dari protokol lapisan transport yang mendasarinya.
Dirk Holsopple
8

Komputer memiliki alamat IP yang mengidentifikasinya sebagai entitas terpisah di jaringan. Kami menambahkan nomor tambahan untuk itu agar kami dapat membedakan antara koneksi ke komputer itu. Ini adalah nomor port. Di sisi OS koneksi Anda memerlukan buffer, status koneksi, dll. Objek logis ini adalah soket.

stonemetal
sumber
0

Soket adalah jalur komunikasi ke port. Ketika Anda ingin program Anda berkomunikasi melalui jaringan, Anda telah memberikannya cara mengatasi port dan ini dilakukan dengan membuat soket dan memasangnya ke port. Pada dasarnya, socket = IP + ports Soket menyediakan akses ke port + ip

Sitati
sumber
-1

Alamat IP mengidentifikasi perangkat, yaitu alamat ke perangkat tertentu, ketika Anda mencapai mesin menggunakan port IP now, menentukan proses yang mana dalam mesin itu untuk berkomunikasi.

Jadi untuk komunikasi yang sebenarnya terjadi, Anda membutuhkan port + IP yang disebut socket.

pj
sumber