Bir port ile bir soket arasındaki fark nedir?


928

Bu, kuruluşumdaki yazılım mühendislerinden biri tarafından sorulan bir soruydu. En geniş tanımla ilgileniyorum.


19
Tekrarlamak gerekirse, soketler ağ GÇ ile sınırlı değildir. Çeşitli uygulamalar arasında veri akışı için her türlü durumda kullanılabilirler.
Oli

Yanıtlar:


976

özet

TCP soketi, belirli bir TCP bağlantısı veya dinleme durumu bağlamında IP adresi ve bağlantı noktası tarafından tanımlanan bir uç nokta örneğidir .

Bağlantı noktası, bir hizmet uç noktasını tanımlayan bir sanallaştırma tanımlayıcısıdır (hizmet örneği uç noktasından, yani oturum tanımlayıcısından farklı olarak).

TCP soketi bir bağlantı değildir , belirli bir bağlantının uç noktasıdır.

Bir hizmet uç noktasına eşzamanlı bağlantılar olabilir , çünkü bağlantı hem yerel hem de uzak uç noktaları tarafından tanımlanır ve trafiğin belirli bir hizmet örneğine yönlendirilmesine izin verir.

Belirli bir adres / port kombinasyonu için yalnızca bir dinleyici soketi olabilir .

sergi

Bu beni, içten dışa bildiğimi düşündüğüm bazı şeyleri yeniden incelemeye zorlayan ilginç bir soruydu. "Soket" gibi bir adın kendinden açıklayıcı olacağını düşünürdünüz: Açıkça bir ağ kablosunu taktığınız uç noktanın görüntülerini uyandırmak için seçildi, güçlü fonksiyonel paralellikler vardı. Bununla birlikte, ağ başlangıcında "soket" kelimesi o kadar çok bagaj taşır ki dikkatli bir yeniden inceleme gereklidir.

Mümkün olan en geniş anlamda, bir liman bir giriş veya çıkış noktasıdır. Bir ağ bağlamında kullanılmasa da, Fransızca porte kelimesi kelimenin tam anlamıyla kapı veya ağ geçidi anlamına gelir ve bu da bağlantı noktalarının veri veya büyük çelik kaplar gönderip taşımanızın ulaşım uç noktaları olduğunu vurgulamaktadır.

Bu tartışmanın amacı doğrultusunda, düşünmeyi TCP-IP ağlarının bağlamıyla sınırlayacağım. OSI modeli çok iyi, ancak hiçbir zaman tam olarak uygulanmadı, yüksek trafikli yüksek stresli koşullarda çok daha az yaygın bir şekilde konuşlandırıldı.

Bir IP adresi ile bir portun birleşimi kesinlikle bir uç nokta olarak bilinir ve bazen soket olarak adlandırılır. Bu kullanım orijinal TCP belirtimi olan RFC793'ten kaynaklanır.

TCP bağlantısı soketler olarak adlandırılan iki uç nokta ile tanımlanır .

Bir uç nokta (soket), bir ağ adresi ile bir bağlantı noktası tanımlayıcısı kombinasyonu tarafından tanımlanır. Olmadığını adres / port Not değil tamamen (bu konuda daha sonra) bir soket tanımlar.

Bağlantı noktalarının amacı, belirli bir ağ adresindeki birden çok uç noktayı ayırt etmektir. Bir bağlantı noktasının sanallaştırılmış bir bitiş noktası olduğunu söyleyebilirsiniz. Bu sanallaştırma, tek bir ağ arabiriminde birden çok eşzamanlı bağlantıyı mümkün kılar.

İnternetteki her TCP bağlantısını benzersiz şekilde tanımlayan iki uç noktayı belirten soket çiftidir (istemci IP adresi, istemci port numarası, sunucu IP adresi ve sunucu port numarasından oluşan 4-uç). ( TCP-IP Resimli Cilt 1 , W. Richard Stevens)

Çoğu C türevi dilde, TCP bağlantıları bir Socket sınıfının örneğindeki yöntemler kullanılarak oluşturulur ve işlenir. Genellikle bir NetworkStream sınıfının bir örneği olan daha yüksek bir soyutlama düzeyinde çalışmak yaygın olsa da, bu genellikle bir soket nesnesine bir başvuru ortaya koyar. Kodlayıcıya, bu soket nesnesi bağlantıyı temsil eder, çünkü bağlantı soket nesnesinin yöntemleri kullanılarak oluşturulur ve işlenir.

C # 'da (mevcut bir dinleyiciye) bir TCP bağlantısı kurmak için önce bir TcpClient oluşturursunuz . TcpClient yapıcısına bir bitiş noktası belirtmezseniz , varsayılanları kullanır - şu veya bu şekilde yerel bitiş noktası tanımlanır. Ardından, oluşturduğunuz örnekte Connect yöntemini çağırırsınız . Bu yöntem, diğer uç noktayı tanımlayan bir parametre gerektirir.

Bütün bunlar biraz kafa karıştırıcı ve bir soketin bir kilit, yani kilitler olduğuna inanmanıza neden oluyor. Richard Dorman soruyu sorana kadar bu yanlış anlama altında çalışıyordum.

Çok fazla okuma ve düşünme yaptıktan sonra, iki argüman alan LocalEndpoint ve RemoteEndpoint ile bir sınıf TcpConnection sınıfına sahip olmanın çok daha mantıklı olacağına ikna oldum . Yerel son nokta için varsayılanlar kabul edilebilir olduğunda büyük olasılıkla tek bir RemoteEndpoint bağımsız değişkenini destekleyebilirsiniz . Bu, birden çok ağ bağlantısı olan bilgisayarlarda belirsizdir, ancak uzak uç noktaya en kısa yol olan arabirimi seçerek yönlendirme tablosu kullanılarak belirlenebilir.

Netlik diğer açılardan da artırılacaktı. Bir yuva edilir değil IP adresi ve port kombinasyonu tarafından tespit:

[...] TCP, yerel ve yabancı adresleri içeren dört değerin tümünü kullanarak gelen segmentleri çoğaltır: hedef IP adresi, hedef port numarası, kaynak IP adresi ve kaynak port numarası. TCP, yalnızca hedef bağlantı noktasına bakarak hangi işlemin gelen segmenti alacağını belirleyemez. Ayrıca, [belirli bir bağlantı noktası numarası] 'ndaki [çeşitli] uç noktalardan gelen bağlantı isteklerini alacak olan tek kişi dinleme durumunda olan noktalardır. (p255, TCP-IP Resimli Cilt 1 , W. Richard Stevens)

Gördüğünüz gibi, sadece bir ağ hizmetinin aynı adres / bağlantı noktasına sahip çok sayıda sokete sahip olması mümkün değildir, ancak belirli bir adres / bağlantı noktası birleşiminde yalnızca bir dinleyici soketi vardır. Tipik kütüphane uygulamaları, örneği bir bağlantı oluşturmak ve yönetmek için kullanılan bir soket sınıfı sunar. Bu, son derece talihsiz bir durumdur, çünkü karışıklığa neden olur ve iki kavramın yaygın bir şekilde birleşmesine yol açar.

Hagrawal bana inanmıyor (yorumlara bakın) bu yüzden gerçek bir örnek. Bir web tarayıcısını http://dilbert.com adresine bağladım ve sonra koştum netstat -an -p tcp. Çıktının son altı satırı, adresin ve bağlantı noktasının bir soketi benzersiz olarak tanımlamak için yeterli olmadığına dair iki örnek içerir. 192.168.1.3 (iş istasyonum) ile 54.252.94.236:80 (uzak HTTP sunucusu) arasında iki ayrı bağlantı var

  TCP    192.168.1.3:63240      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63241      54.252.94.236:80       SYN_SENT
  TCP    192.168.1.3:63242      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:63243      207.38.110.62:80       SYN_SENT
  TCP    192.168.1.3:64161      65.54.225.168:443      ESTABLISHED

Bir soket bağlantının uç noktası olduğundan, adres / bağlantı noktası birleşimine sahip iki soket ve adres / bağlantı noktası birleşimine sahip iki yuva 207.38.110.62:80daha vardır 54.252.94.236:80.

Bence Hagrawal'ın yanlış anlaması "özdeşleşiyor" kelimesini çok dikkatli kullanmamdan kaynaklanıyor. "Tamamen, kesin ve benzersiz bir şekilde özdeşleşir" demek istiyorum. Yukarıdaki örnekte, adres / port kombinasyonuna sahip iki uç nokta vardır 54.252.94.236:80. Eğer tek adres ve port ise, bu soketleri birbirinden ayıracak kadar bilginiz yok. Bir soketi tanımlamak için yeterli bilgi yoktur .

ek

RFC793 bölüm 2.7'nin ikinci paragrafı şöyle diyor:

Bir bağlantı, uçlardaki soket çifti tarafından tamamen belirtilir. Yerel bir soket farklı yabancı soketlerle birçok bağlantıya katılabilir.

Soketin bu tanımı, belirli bir bağlantının uç noktası olan soket nesnesiyle aynı olmadığından programlama açısından yararlı değildir . Bir programcı için ve bu sorunun izleyicilerinin çoğu programcıdır, bu hayati bir işlevsel farktır.

Referanslar

  1. TCP-IP Resimli Cilt 1 Protokoller , W. Richard Stevens, 1994 Addison Wesley

  2. RFC793 , Bilgi Bilimleri Enstitüsü, DARPA için Güney Kaliforniya Üniversitesi

  3. RFC147 , Soketin Tanımı, Joel M. Winett, Lincoln Laboratuvarı


6
Belki de, soket ve bağlantı noktası anahtar kelimelerine gerçek bir dünya benzetmesi, soruyu en iyi oylayanlara yardımcı olacaktır. Hala harika bir açıklama!
rohitverma

5
@rationalcoder - Tüm yanıtı okuyun. Bir şey tarafından tanımlanmak ve onun tarafından tanımlanmak arasında bir fark vardır. Örneğin, bir sınıfın örnekleri sınıf tarafından tanımlanır. Kısmen ama tamamen tanımlanmadılar.
Peter Wone

6
Bu ifadeye katılmadığım için oy vermedim - " Bir soket IP adresi ve port kombinasyonu ile tanımlanmadı: " .. TCP RFC'yi okuyun - tools.ietf.org/html/rfc793 .. Çok açık soket IP ve bağlantı noktası birleşimidir, IP ve bağlantı noktasını biliyorsanız, bir soket veya uç noktası tanımlamış olursunuz, soket çiftini biliyorsanız istemci IP + bağlantı noktası ve sunucu IP + bağlantı noktası o zaman benzersiz bir bağlantı tanımladınız ..
hagrawal

6
"Yukarıdaki örnekte, 54.252.94.236:80 adres / bağlantı noktası birleşimine sahip iki uç nokta vardır. Sahip olduğunuz tek şey adres ve bağlantı noktasıysa, bu yuvaları birbirinden ayırmak için yeterli bilgiye sahip değilsiniz. priz." Aynı soketler değil, farklı bağlantılar, iki bağlantı arasında 3 soket, 2 yerel ve bir aynı sunucu soketi bağlı; ya da aslında iki farklı soket mi? Onları birbirinden ayıramazlar çünkü aynıdırlar, ancak bağlantıları ayırmak için farklı yerel soketlere ihtiyacınız olacaktır.
Andrew Clavin

6
-1 Cevabınız yanlış. Siz: "TCP soketi ... belirli bir bağlantının uç noktasıdır ." RFC 793 : "bir soket aynı anda birden fazla bağlantıda kullanılabilir ." Hangi kitaplıkları kullandığınızdan emin değilim, ancak kullandığım kitaplıklarda, soket nesneleri bir IP ve bağlantı noktası tarafından benzersiz bir şekilde tanımlanmış ve her uzak soket için bağlantı nesneleri oluşturmuş.
Zaz

187

Bir soket üç şeyden oluşur:

  1. Bir IP adresi
  2. Bir taşıma protokolü
  3. Bir port numarası

Bağlantı noktası, bir aygıttaki mantıksal bir kapıyı gösteren 1 ile 65535 arasında bir sayıdır. İstemci ve sunucu arasındaki her bağlantı için benzersiz bir soket gerekir.

Örneğin:

  • 1030 bir limandır.
  • (10.1.1.2, TCP, bağlantı noktası 1030) bir sokettir.

80
Hayır. Bir yuva beş şeyden oluşur : {protokol, yerel adres, yerel bağlantı noktası, uzak adres, uzak bağlantı noktası}.
user207421

19
@EJP Hayır, tekrar. Daha fazla bilgi için seçilen cevaba bakınız.
Kehlan Krumme

2
@KorayTugay IP başlığında. TCP katmanının bunu göremeyeceğini düşündüren nedir?
user207421

1
@EJP yukarıda en çok oy alan cevap görebileceğiniz gibi bir soket bağlantı kendisi DEĞİL ama bir bağlantı son noktası o zaman nasıl hem yerel hem de uzak bağlantı noktaları ve ip adresleri içerebilir. Bir soket, bağlantının yalnızca bir tarafını temsil eder, yani ya yerel bağlantı noktası ve yerel ip adresi VEYA uzak bağlantı noktası ve uzak ip bağlantısı. Yanılıyorsam lütfen beni düzeltin.
RBT

7
@EJP Still RFC 793: "Bir çift soket her bağlantıyı benzersiz olarak tanımlar. Yani, aynı anda birden çok bağlantıda bir soket kullanılabilir." Bir soket zaten beş şeyden oluşuyorsa, alıntımda "bir çift soket" nasıl olabilir?
Gab 是 好人

100

Bir soket , iki ağ uygulaması arasındaki tek bir bağlantıyı temsil eder. Bu iki uygulama nominal olarak farklı bilgisayarlarda çalışır, ancak soketler tek bir bilgisayarda işlemlerarası iletişim için de kullanılabilir. Uygulamalar birbirleriyle iletişim kurmak için birden fazla yuva oluşturabilir. Soketler çift yönlüdür, yani bağlantının her iki tarafında veri gönderebilir ve alabilir. Bu nedenle teorik olarak OSI modelinin herhangi bir seviyesinde 2'den yukarı doğru bir soket oluşturulabilir. Programcılar genellikle dolaylı da olsa ağ programlamasında yuva kullanır. Winsock gibi programlama kütüphaneleri, soket programlamanın düşük seviyeli ayrıntılarının çoğunu gizler. Soketler 1980'lerin başından beri yaygın olarak kullanılmaktadır.

Bağlantı noktası, ağ iletişimi için bir bitiş noktasını veya "kanalı" temsil eder. Bağlantı noktası numaraları, aynı bilgisayardaki farklı uygulamaların birbirine müdahale etmeden ağ kaynaklarını kullanmasına olanak tanır. Bağlantı noktası numaraları en yaygın olarak ağ programlamasında, özellikle soket programlamasında görülür. Ancak bazen bağlantı noktası numaraları sıradan kullanıcı tarafından görülebilir. Örneğin, bir kişinin İnternet'te ziyaret ettiği bazı Web siteleri aşağıdaki gibi bir URL kullanır:

http://www.mairie-metz.fr:8080/ Bu örnekte 8080 sayısı, Web tarayıcısı tarafından Web sunucusuna bağlanmak için kullanılan bağlantı noktası numarasını ifade eder. Normalde, bir Web sitesi 80 numaralı bağlantı noktasını kullanır ve bu numaranın URL'ye dahil edilmesi gerekmez (olmasına rağmen).

IP ağında, bağlantı noktası numaraları teorik olarak 0 ila 65535 arasında olabilir. Çoğu popüler ağ uygulaması, aralığın alt ucundaki bağlantı noktası numaralarını kullanır (HTTP için 80 gibi).

Not: Bağlantı noktası terimi, ağ teknolojisinin diğer bazı yönlerini de ifade eder. Bağlantı noktası, seri, paralel ve USB bağlantı noktaları gibi çevresel aygıtlar için fiziksel bir bağlantı noktasına başvurabilir. Bağlantı noktası terimi ayrıca bir hub, anahtar veya yönlendirici gibi belirli Ethernet bağlantı noktalarını ifade eder.

ref http://compnetworking.about.com/od/basicnetworkingconcepts/l/bldef_port.htm

ref http://compnetworking.about.com/od/itinformationtechnology/l/bldef_socket.htm


2
OSI modelindeki Katman 2, düğümler arasında bir bağlantıdır, bağlantı süreçleri mekanizması yoktur. OSI l2'de bulunan bir soketi düşünebileceğinize inanmıyorum.
Antonio Haley

18
Devre bir bağlantıdır - soket bir bitiş noktasıdır. Bir bağlantı 2 soketten oluşur.
Mark Brackett

" Soket, iki ağ uygulaması arasındaki tek bir bağlantıyı temsil eder. " RFC 793 ile eşleşmeyen , İletim Denetimi Protokolü şunları açıklar: " Tek bir Ana Bilgisayardaki birçok işlemin TCP iletişim olanaklarını aynı anda kullanmasına izin vermek için, TCP bir dizi adres sağlar . her ana içinde veya portlar Birleştirilmiş internet iletişim katmanından ağ ve ana bilgisayar adresleri ile bu formlar soket yuvalarına bir çift benzersiz her bağlantıyı tanımlar.. "
Ron Maupin

84

Biraz benzetmeyle

Yukarıda soketler için çok fazla teknik malzeme verilmiş olmasına rağmen ... Birisi hala ip, port ve soketler arasındaki farkı hissedemiyorsa, cevabımı eklemek istiyorum.

Bir sunucu S düşünün ,

ve X, Y, Z kişilerinin bu sunucudan bir servise (sohbet servisi diyelim) ihtiyacı var

sonra

IP adresi söyler -> kim? sohbet sunucusunun X, Y, Z ile iletişime geçmek istediği 'S'

tamam, "sunucu kim"

ancak "S" sunucusunun diğer kişilere de başka hizmetler sunduğunu varsayalım, "S" A, B, C kişisine depolama hizmetleri sağlıyorsa,

sonra

port --- hangisini söyler ? size (X, Y, Z) ihtiyaç duyduğunuz servis, yani sohbet servisi değil, sohbet servisi

tamam .., sunucunun 'sohbet servisi' nin depolamak yerine istediğiniz şey olduğunu bilmesini sağlıyorsunuz

fakat

üç yaşındasınız ve sunucu bu üçünü de farklı şekilde tanımlamak isteyebilir

soket geliyor

şimdi soket söyler -> hangisi? belirli bağlantı

yani,

kişi X için soket 1

Y kişi için soket 2

ve Z kişi için soket 3

Umarım hala şaşkın birine yardım eder :)


Yani X, Y, Z aynı bağlantı noktasına, yani aynı hizmete bağlanırdı, ancak sunucu tarafında farklı soketler var mı? Diyelim ki, X sunucuya bir paket gönderdiğinde, 'beni bul (protokol, X'in IP'si, X'in portu, S'nin IP'si, S'nin portu) soketi' ve sohbet uygulamasına gönder. Bazı uygulama-spesifik nesneler ve soket nesneleri arasında bir bağlayıcı olması gerektiğini varsayalım? Örneğin, soket-1'den bazı veriler aldığımda, bunu bir kullanıcı mesajı olarak görüntülemek istiyorum, ancak uygulamanın soket A'dan gelen mesajları User-X'den bilmesi gerekiyor.
monolith

44

Birincisi, sanırım A'dan B'ye bir paket almayı neyin oluşturduğuna dair biraz anlayışla başlamalıyız.

Bir ağ için ortak bir tanım, bir ağı amaca göre birkaç katmana ayıran OSI Modelinin kullanılmasıdır. Burada ele alacağımız birkaç önemli nokta var:

  • Veri katmanı bağlantısı . Bu katman, bir ağ cihazından diğerine veri paketleri almaktan sorumludur ve gerçekte iletimi yapan katmanın hemen üzerindedir. MAC adresleri hakkında konuşur ve MAC (donanım) adreslerine göre ana bilgisayarları nasıl bulacağını bilir, ancak başka bir şey değildir.
  • Ağ katmanı Eğer makine ve fiziksel cihazlar gibi aşırı fiziksel sınırlar, üzerinden veri taşımak için izin veren katmandır. Ağ katmanı esasen bir şekilde fiziksel adresle ilgili olan ek bir adres tabanlı mekanizmayı desteklemelidir; İnternet Protokolü'nü (IPv4) girin. Bir IP adresi, paketinizi internet üzerinden A'dan B'ye alabilir, ancak ayrı atlamaların nasıl geçileceği hakkında hiçbir şey bilmez. Bu, yönlendirme bilgilerine uygun olarak yukarıdaki katman tarafından ele alınır.
  • Taşıma katmanı . Bu katman, bilgilerin A'dan B'ye nasıl alınacağını ve bu davranışla ilgili kısıtlamaları, kontrolleri veya hataları tanımlamaktan sorumludur. Örneğin, TCP bir pakete, paketlerin kaybolup kaybolmadığını belirlemek için ek bilgi ekler.

TCP, diğer şeylerin yanı sıra bağlantı noktaları kavramını içerir . Bunlar, bir İnternet Soketinin ( AF_INET) bağlanabileceği aynı IP adresindeki etkin bir şekilde farklı veri uç noktalarıdır .

Olduğu gibi , UDP ve diğer taşıma katmanı protokolleri de öyle. Teknik olarak bağlantı noktalarına sahip olmaları gerekmez , ancak bu bağlantı noktaları yukarıdaki katmanlardaki birden fazla uygulamanın aynı bilgisayarı giden bağlantıları almak (ve aslında yapmak) için kullanması için bir yol sağlar.

Bu da bizi bir TCP veya UDP bağlantısının anatomisine getiriyor. Her birinde bir kaynak bağlantı noktası ve adresi ile bir hedef bağlantı noktası ve adresi bulunur. Böylece, herhangi bir oturumda, hedef uygulama kaynaktan yanıt alabileceği gibi, kaynaktan da alabilir.

Bu nedenle, portlar aslında aynı adresi paylaşan birden fazla eşzamanlı bağlantıya izin vermenin şartname zorunlu bir yoludur.

Şimdi, bir uygulama açısından dış dünyaya nasıl iletişim kurduğunuza bir göz atmamız gerekiyor. Bunu yapmak için, işletim sisteminize nazikçe sormanız gerekir ve çoğu işletim sistemi Berkeley Soketleri bir şeyler yapma şeklini desteklediğinden, böyle bir uygulamadan bağlantı noktalarını içeren soketler oluşturabileceğimizi görüyoruz:

int fd = socket(AF_INET, SOCK_STREAM, 0); // tcp socket
int fd = socket(AF_INET, SOCK_DGRAM, 0); // udp socket
// later we bind...

Harika! Yani sockaddryapılarda limanımızı ve bam'ımızı belirleyeceğiz! İş bitmiş! Neredeyse hariç:

int fd = socket(AF_UNIX, SOCK_STREAM, 0);

ayrıca mümkündür. Urgh, bu eserlere bir somun anahtarı attı!

Tamam, aslında olmadı. Tek yapmamız gereken bazı uygun tanımlar bulmaktır:

  • İnternet soketi, bir servisin veri sağlayabileceği bir IP adresi, protokol ve onunla ilişkili port numarasının birleşimidir. Yani tcp port 80, stackoverflow.com bir internet soketi.
  • Bir unix soketi, dosya sisteminde temsil edilen bir IPC uç noktasıdır, örn /var/run/database.sock.
  • Bir soket API'si, bir uygulamanın bir sokete veri okuyabilmesini ve yazabilmesini talep eden bir yöntemdir.

İşte bu kadar! Bu işleri düzenler. O halde planımızda,

  • Bağlantı noktası, taşıma katmanı protokolünün bir parçası olarak, verilen isteğe yanıt vermesi gereken hizmet numarasını tanımlayan sayısal bir tanımlayıcıdır.

Yani gerçekten bir port, bir internet soketi oluşturmak için gereksinimlerin bir alt kümesidir. Ne yazık ki, soket kelimesinin anlamı birkaç farklı fikre uygulanmıştır. Bu yüzden, sadece karışıklığa eklemek için bir sonraki proje soketinizi ismini vermenizi tavsiye ederim;)


Bu yüzden mermiler ayrılmaz ve Powerpoint'ten ayrılmaz; çalışırlar!
Anurag Kalia

Tcp-ip ve ağ iletişimine çok güzel bir giriş. Yeni başlayanlar, önce bunu okuyun.
Colin

32

Bir soket = IP Adresi + bir port (sayısal adres)
Birlikte, bir makinedeki ağ bağlantısı için bir bitiş noktası tanımlarlar. (Sadece ağ 101'i kullandım mı?)


7
Limanın tanımınızdan daha geniş bir anlamı olduğuna inanıyorum.
Richard Dorman

2
Ve soketler sadece TCP / IP yığınına tabi değildir. Bkz. Genel olarak UNIX etki alanı yuvaları veya süreçler arası iletişim yuvaları.
matthias krull

bu cevap hakkında emin değilim. Bir bağlantı noktası atamadan başka bir işlemle soketler aracılığıyla iletişim kurmak için HTTP'yi kullanabilirsiniz.
SeF

31

Genel olarak, çok fazla teorik olursunuz, ancak bu iki kavramı ayırt etmenin en kolay yollarından biri aşağıdaki gibidir:

Servis alabilmek için bir servis numarasına ihtiyacınız vardır. Bu servis numarasına port adı verilir. Bu kadar basit.

Örneğin, hizmet olarak HTTP 80 numaralı bağlantı noktasında çalışıyor.

Şimdi, birçok kişi hizmeti talep edebilir ve istemci-sunucudan bir bağlantı kurulmuştur. Çok fazla bağlantı olacak. Her bağlantı bir istemciyi temsil eder. Her bağlantıyı korumak için sunucu, istemcisini korumak için bağlantı başına bir soket oluşturur.


Her soket kendi portunu gerektirir mi?
PazartesiPaper

Muhteşem. Dağ bilgisini sunmanın en basit yolu.
Asif Mehmood

5
İfadenizin doğru olup olmadığından emin değilim: "sunucu, istemcisini korumak için bağlantı başına soket oluşturur".
Rushi Agrawal

1
@RushiAgrawal Sonra bakmanızı öneririm. Özellikle, bkz .
user207421

1
Bu, sunucunun istemcisini korumak için bağlantı başına oluşturduğu her soket için aynı bağlantı noktası numarasına (HTTP bağlantılarının devamı için bağlantı noktası 80 gibi) sahip olabileceğini, ancak bağlantı isteklerinin gönderildiği istemcilerin farklı IP adresleri olabileceğini gösterir. sağ?
Randika Vishman

25

2 PC arasındaki bağlantı ile soket denklem cevapları bir sürü var gibi görünüyor ... hangi kesinlikle yanlış olduğunu düşünüyorum. Bir soket her zaman 1 PC'de bitiş noktası olmuştur, bağlanabilir veya bağlanmayabilir - elbette hepimiz bir noktada dinleyici veya UDP soketleri * kullandık. Önemli olan, adreslenebilir ve aktif olmasıdır. 1.1.1.1:1234'e bir mesaj göndermek, bu uç nokta için tanımlanmış bir soket olmadığından işe yaramaz.

Yuva protokol özeldir - teklik uygulanması böylece hem bu TCP / IP ve UDP / IP kullanır. *: (İpadresi bağlantı noktası), daha örn farklıdır IPX - ama farklı (Ağ, Düğüm ve ... ehem, soket soket genel "soket" terimi ile kastedilmektedir IPX soket numaraları IP portlarına eşdeğerdir). Ancak, hepsi benzersiz bir adreslenebilir uç nokta sunar.

IP baskın protokol haline geldiğinden, bir bağlantı noktası (ağ oluşturma açısından) soket adresinin bir parçası olan bir UDP veya TCP bağlantı noktası numarasıyla eşzamanlı hale gelmiştir.

  • UDP bağlantısızdır, yani 2 uç nokta arasında hiçbir sanal devre oluşturulmamıştır. Ancak yine de UDP soketlerini uç nokta olarak adlandırıyoruz. API işlevleri, her ikisinin de sadece farklı türde bir soket olduğunu açıklar - SOCK_DGRAMUDP (sadece mesaj gönderme) ve SOCK_STREAMTCP (sanal devre oluşturma).

  • Teknik olarak, IP üstbilgisi IP Adresini tutar ve IP'nin üstündeki protokol (UDP veya TCP) bağlantı noktası numarasını tutar. Bu, başka protokollere (örn. Bağlantı noktası numarası olmayan, ancak IP adresleme bilgisi olan ICMP) sahip olmayı mümkün kılar .


25

Kısa kısa cevap.

Bir bağlantı noktası bir şekilde tarif edilebilir iç adresi , bir program veya işlem tanımlayan bir ev sahibi içinde.

Bir soket , bir programın diğer programlar veya süreçlerle, internette veya yerel olarak iletişim kurmasına izin veren bir programlama arabirimi olarak tanımlanabilir .


3
Bağlantı noktası açıklamasındaki 'dahili' kelimesi bana 'halka açık olmayan' gibi geliyor.
Jonas N

Yani diyebilir miyiz: Yuvalar Limanlar içinde çalışır mı? veya Bağlantı Yuvaları içinde çalışır?
Gucho Ca

@GuchoCa Soketlerin veya bağlantı noktalarının birbiri içine girmesine izin vermeksizin hiç çalıştığını söyleyemeyiz. Ne istediğini belli değil.
user207421

16

Bunlar iki farklı alandan gelen terimlerdir: 'port' TCP / IP ağından bir kavramdır, 'socket' bir API (programlama) olayıdır. Bağlantı noktası ve ana bilgisayar adı veya ağ bağdaştırıcısı alıp veri göndermek veya almak için kullanabileceğiniz bir veri yapısında birleştirilerek 'soket' yapılır (kodda).


En genel yanıt için, "bir bağlantı noktası ve bir ana bilgisayar adı veya ağ bağdaştırıcısı alıp bunları bir araya getirerek yapılır." Örneğin, bir UNIX soketi, veri göndermek veya almak için kullanabileceğiniz bir veri yapısıdır (veya kodda).
Josiah Yoder

14

Bunlar temel ağ oluşturma kavramlarıdır, bu yüzden onları ayrıntılı olarak anlamak için kolay ama kapsamlı bir şekilde açıklayacağım.

  • Soket telefon gibidir (örn. İletişim için uçtan uca cihaz)
  • IP , telefon numaranıza benzer (yani soketinizin adresi)
  • Liman , konuşmak istediğiniz kişi gibidir (yani, o adresten sipariş vermek istediğiniz hizmet)
  • Bir soket bir istemci veya bir sunucu soketi olabilir (yani bir şirkette müşteri desteğinin telefonu bir sunucudur, ancak evinizdeki bir telefon çoğunlukla bir istemcidir)

Yani ağdaki bir soket bir çift (ip, port) = (adres, servis) ile bağlantılı bir sanal iletişim cihazıdır.

Not:

  • Bir makine, bilgisayar, ana bilgisayar, cep telefonu veya PC birden fazla adrese, birden çok açık bağlantı noktasına ve dolayısıyla birden fazla sokete sahip olabilir. Bir ofiste olduğu gibi, birden fazla telefon numarası olan birden fazla telefona ve konuşmak için birden fazla kişiye sahip olabilirsiniz.
  • Açık / etkin bir bağlantı noktasının varlığı, bağlantı noktasına erişilebilir bir yuva olması nedeniyle ona bağlı bir sokete sahip olmanızı gerektirir. Ancak, şimdilik kullanılmayan bağlantı noktalarınız olabilir.
  • Ayrıca, bir sunucu soketinde, telefondaki gibi birçok telefon hattını (telefon numaraları) bağlayabileceğiniz gibi (bir bağlantı noktası, bir makinenin belirli bir adresi) veya (bir bağlantı noktası, bir makinenin tüm adresleri) ile bağlayabileceğinizi unutmayın. bir telefona veya belirli bir telefon hattına telefonla bağlanabilir ve yine de bir kişiye tüm bu telefon hatları veya belirli bir telefon hattı üzerinden ulaşabilirsiniz.
  • Bir soketi telefondaki gibi iki bağlantı noktasıyla ilişkilendiremezsiniz (bağlayamazsınız), genellikle aynı telefonu aynı anda kullanan iki kişi her zaman olamaz.
  • Gelişmiş: aynı makinede aynı türde (istemci veya sunucu) ve aynı bağlantı noktası ve ip ile iki sokete sahip olamazsınız. Ancak, bir istemciyseniz, bu istemcinin soketlerinin her birindeki yerel bağlantı noktası farklı olduğu için bir sunucuya iki soketli iki bağlantı açabilirsiniz)

Umarım şüphelerini temizler


Soket / port / ip adreslerinin tüm bu anlayışlarını ve analojilerini bu soru altında görmek ilginçtir. Ve bu yanıtı beğendim.
Bloodmoon

12

Mükemmel oylanan cevapları okuduktan sonra, aşağıdaki noktaların ağ programlamaya yeni katılan benim için vurgulanması gerektiğini buldum:

TCP-IP bağlantıları, bir adres: bağlantı noktası birleşimini başka bir adres: bağlantı noktası birleşimi ile bağlayan iki yönlü yollardır. Bu nedenle, yerel makinenizden uzak sunucudaki bir bağlantı noktasına (örneğin www.google.com:80) bir bağlantı açtığınızda, sunucunun göndermesine izin vermek için makinenizdeki yeni bir bağlantı noktası numarasını da bağlantıyla ilişkilendirirsiniz. bazı şeyleri size geri göndeririz (örneğin 127.0.0.1:65234). Makinenizin bağlantılarına bakmak için netstat kullanmak yararlı olabilir:

> netstat -nWp tcp (on OS X)
Active Internet connections
Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)    
tcp4       0      0  192.168.0.6.49871      17.172.232.57.5223     ESTABLISHED
...

12

Yuva adresi bir IP adresi ve bağlantı noktası numarasıdır

123.132.213.231         # IP address
               :1234    # port number
123.132.213.231:1234    # socket address

2 soket birbirine bağlandığında bir bağlantı oluşur.


İki soketi birbirine bağlamak diye bir şey yoktur. 'Bağlı' kelimesi bağlantı noktaları olan başka bir şey anlamına gelir.
user207421

10

Bir soket, bir işlem tarafından işletim sisteminden ağ hizmetleri istemek için kullanılan özel bir dosya tanıtıcı türüdür. Yuva adresi üçlüdür: {protokol, yerel adres, yerel işlem}, burada yerel işlem bir port numarası ile tanımlanır.

TCP / IP paketinde, örneğin:

{tcp, 193.44.234.3, 12345}

Bir konuşma iki süreç arasındaki iletişim bağlantısıdır, böylece iki süreç arasındaki ilişkiyi gösterir. İlişkilendirme, bir bağlantı içeren iki işlemi tamamen belirten 5-demettir: {protokol, yerel adres, yerel işlem, yabancı adres, yabancı işlem}

TCP / IP paketinde, örneğin:

{tcp, 193.44.234.3, 1500, 193.44.234.5, 21}

geçerli bir ilişkilendirme olabilir.

Yarım ilişkilendirme ya: {protokol, yerel adres, yerel işlem}

veya

{protokol, yabancı adres, yabancı süreç}

bağlantının her yarısını belirtir.

Yarı birleşime soket veya aktarım adresi de denir. Yani soket, bir ağda adlandırılabilen ve adreslenebilen iletişim için bir bitiş noktasıdır. Soket arayüzü, iletişim protokollerine yönelik çeşitli uygulama programlama arayüzlerinden (API) biridir. Genel bir iletişim programlama arayüzü olarak tasarlanan bu ürün, ilk olarak 4.2BSD UNIX sistemi tarafından tanıtıldı. Standartlaştırılmamış olmasına rağmen fiilen endüstri standardı haline gelmiştir.


Bu cevap benim için yaptı. Sanırım çünkü kimse dernek kelimesinden bahsetmedi. İyi açıklama.
rationalcoder

Örneklerinizin hiçbirinde işlem numarası yok. Aradığınız kelime 'port'.
user207421

İlk paragrafı oku .. Orada açıkça bahsediliyor. Herhangi bir belirsizlikten bahsederek kesin ifadeyi yazarak bana bildirin .. Doğaçlama yapmamda yardımcı olur.
Krishna

7

Bir soket bir iletişim uç noktasıdır. Bir soket doğrudan TCP / IP protokol ailesi ile ilgili değildir, sisteminizin desteklediği herhangi bir protokolle kullanılabilir. C soketi API'sı önce sistemden boş bir soket nesnesi almanızı bekler, ardından ya yerel soket adresine bağlayabilirsiniz (bağlantısız protokoller için gelen trafiği doğrudan almak veya bağlantıya yönelik protokoller için gelen bağlantı isteklerini kabul etmek) veya uzak soket adresine bağlanabilmeniz (her iki protokol için de). Her ikisini de kontrol etmek istiyorsanız, bir soketin bağlı olduğu yerel soket adresini ve bir soketin bağlı olduğu uzak soket adresini de yapabilirsiniz. Bir soketi bağlayan bağlantısız protokoller için bile isteğe bağlıdır, ancak bunu yapmazsanız, ayrıca soket üzerinden göndermek istediğiniz her paket ile hedef adresi iletmek zorunda kalacaksınız, çünkü soket bu verileri nereye göndereceğini nasıl biliyor? Avantajı, paketleri farklı soket adreslerine göndermek için tek bir soket kullanabilmenizdir. Soketinizi yapılandırdıktan ve hatta bağladıktan sonra, çift yönlü bir iletişim borusu olarak düşünün. Verileri bir hedefe aktarmak için kullanabilirsiniz ve bazı hedefler verileri size geri iletmek için kullanabilir. Bir sokete yazdıklarınız gönderilir ve alınanlar okunabilir. Verileri bir hedefe aktarmak için kullanabilirsiniz ve bazı hedefler verileri size geri iletmek için kullanabilir. Bir sokete yazdıklarınız gönderilir ve alınanlar okunabilir. Verileri bir hedefe aktarmak için kullanabilirsiniz ve bazı hedefler verileri size geri iletmek için kullanabilir. Bir sokete yazdıklarınız gönderilir ve alınanlar okunabilir.

Diğer taraftan bağlantı noktaları, TCP / IP protokol yığınının yalnızca belirli protokollerinin sahip olduğu bir şeydir. TCP ve UDP paketlerinde bağlantı noktaları bulunur. Bir port sadece basit bir sayıdır. Kaynak bağlantı noktası ve hedef bağlantı noktası birleşimi, iki ana bilgisayar arasındaki iletişim kanalını tanımlar. Örneğin, hem basit bir HTTP sunucusu hem de basit bir FTP sunucusu olacak bir sunucunuz olabilir. Şimdi bu sunucunun adresi için bir paket gelirse, bunun HTTP veya FTP sunucusu için bir paket olup olmadığını nasıl bilebilir? HTTP sunucusu 80 numaralı bağlantı noktasında ve FTP sunucusu 21 numaralı bağlantı noktasında çalışacağından, paket bir hedef bağlantı noktası 80 ile birlikte gelirse, FTP sunucusu için değil, HTTP sunucusu içindir. Ayrıca paketin bir kaynak portu vardır, çünkü böyle bir kaynak portu olmadan, bir sunucunun aynı anda sadece bir IP adresine tek bir bağlantısı olabilir. Kaynak bağlantı noktası bir sunucunun başka türlü özdeş bağlantıları ayırt etmesini mümkün kılar: hepsinin aynı hedef bağlantı noktası vardır, örneğin bağlantı noktası 80, aynı hedef IP'si (sunucunun IP'si) ve hepsinin geldiği kaynak IP'si aynı istemci, ancak farklı kaynak bağlantı noktalarına sahip olduklarından, sunucu bunları birbirinden ayırt edebilir. Sunucu yanıtları geri gönderdiğinde, isteğin geldiği bağlantı noktasına bunu yapar, böylece istemci aynı sunucudan aldığı farklı yanıtları da ayırt edebilir.


2
Bu yanlış. Bir soket bir bitiş noktası değildir. Bir soket iki uç nokta ile tanımlanır. Her uç nokta bir ağ adresi ve bir bağlantı noktası ile tanımlanır. Bağlantı noktalarının amacı, aynı ağ adresindeki birden çok uç noktayı ayırt etmektir, böylece birden çok eşzamanlı soket desteklenebilir.
Peter Wone

1
RFC793 (orijinal TCP spec) bir ağ adresi ve bir bağlantı noktasının bir soket olarak birleşimine işaret ettiğini fark ettim, bu yüzden bunu nereden bulduğunuzu görebiliyorum, ancak bir soketin mutlaka iki uç nokta tarafından tanımlanmış olması hala yanlış.
Peter Wone

2
Yansıtma üzerine literatür çelişkilidir ve özür dilerim. Her biri bir ağ adresi ve bir bağlantı noktası ile tanımlanan iki uç nokta (soket olarak da bilinir) arasında bir TCP bağlantısı kuruluncaya kadar çok net bir şekilde iletişim kurulamaz. Pes ediyorum.
Peter Wone

6

Bağlantı noktası en kolay kısımdı, sadece bir soket için benzersiz bir tanımlayıcıydı. Bir soket, süreçlerin bağlantı kurmak ve birbirleriyle iletişim kurmak için kullanabileceği bir şeydir. Tall Jeff mükemmel olmayan harika bir telefon benzetmesi vardı, bu yüzden düzeltmeye karar verdim:

  • ip ve port ~ telefon numarası
  • soket ~ telefon cihazı
  • bağlantı ~ telefon görüşmesi
  • bağlantı kurmak ~ bir numarayı aramak
  • süreçler, uzak uygulamalar ~ insanlar
  • mesajlar ~ konuşma

İyi açıklama (özellikle ağ terminolojisi temelinin bir parçası olan telefon anahtarlama geçmişini düşündüğünüzde ..)
o

Bir netstatsüre ekrana bakın . Bir dinleme soketinden kabul edilen tüm soketler aynı bağlantı noktasını paylaşır. Ergo bağlantı noktası bir soket için benzersiz bir tanımlayıcı değildir.
user207421

6

Bir uygulama, ağ üzerinden iletişim kuran süreçlerden oluşur (istemci-sunucu çifti). Bu işlemler, soket adı verilen bir yazılım arabirimi aracılığıyla ağa ve ağdan mesaj gönderir ve alır . "Bilgisayar Ağı: Yukarıdan Aşağıya Yaklaşım" kitabında sunulan benzetme dikkate alındığında. Diğer evle iletişim kurmak isteyen bir ev var. Burada, ev bir sürece benzer ve bir sokete kapıdır. Gönderme işlemi, kapının diğer tarafında verileri hedefe taşıyacak bir altyapı bulunduğunu varsayar. Mesaj diğer tarafa ulaştığında, alıcının kapısından (soket) eve (işlem) geçer. Aynı kitaptaki bu çizim size yardımcı olabilir:
resim açıklamasını buraya girin
Soketler, uygulamalarla mantıksal iletişim sağlayan taşıma katmanının bir parçasıdır. Bu, uygulamanın bakış açısından, aralarında çok sayıda yönlendirici ve / veya anahtar olmasına rağmen, her iki ana bilgisayarın da doğrudan birbirine bağlı olduğu anlamına gelir. Böylece bir soket bir bağlantının kendisi değildir, bağlantının bitiş noktasıdır. Aktarım katmanı protokolleri ara yönlendiricilerde değil, yalnızca ana bilgisayarlarda uygulanır.
Limanlarbir makineye dahili adresleme aracı sağlar. Birincil amaç, birden çok işlemin, diğer işlemlere (verileri) müdahale etmeden ağ üzerinden veri göndermesine ve almasına izin vermesidir. Tüm soketler bir port numarası ile birlikte verilir. Bir segment bir ana bilgisayara ulaştığında, taşıma katmanı segmentin hedef port numarasını inceler. Daha sonra segmenti ilgili sokete iletir. Bir taşıma katmanı segmentindeki verileri doğru sokete iletme işine çoğullama denir . Segmentin verileri daha sonra sokete bağlı işleme iletilir.


5

Soket, yazılımınızdaki bir yapıdır. Az çok bir dosya; okuma ve yazma gibi işlemleri vardır. Fiziksel bir şey değil; yazılımınızın fiziksel şeyleri ifade etmesinin bir yoludur.

Bağlantı noktası, aygıt benzeri bir şeydir. Her ana bilgisayarın bir veya daha fazla ağı vardır (bunlar fizikseldir); bir ana bilgisayarın her ağda bir adresi vardır. Her adres binlerce bağlantı noktasına sahip olabilir.

Sadece bir soket bir adreste bağlantı noktası kullanıyor olabilir. Soket bağlantı noktasını yaklaşık olarak dosya sistemi G / Ç için bir aygıt ayırmaya benzer. Bağlantı noktası tahsis edildikten sonra, bu bağlantı noktasına başka bir soket bağlanamaz. Soket kapalı olduğunda port serbest bırakılacaktır.

TCP / IP Terminolojisine bir göz atın .


3
Soketin bu açıklaması oldukça temelsizdir. Bir soket, bir ucun bir IP ADDR ve Port çiftini ifade ettiği bir çift tuple arasındaki bağlantıyla ilgilidir. Ek olarak birçok soket aynı porta bağlanabilir. Bir web sunucusunun 80 numaralı bağlantı noktasında birden çok bağlantı kurmasını nasıl düşünüyorsunuz? Bu kötü bir cevap
Tall Jeff

1
Afedersiniz. Bağlantı noktası 80'e birden fazla soket bağlı değil. Bir soket bağlı ve gerçek aktarımın gerçekleştiği ek soketleri ortaya çıkarıyor. Bkz. Opengroup.org/onlinepubs/009695399/functions/listen.html .
S.Lott

1
Aslında opengroup.org/onlinepubs/009695399/functions/connect.html adresindeki açıklama daha iyidir. Bir bağlantı tarafından döndürülen eş soketi 80 numaralı bağlantı noktasında DEĞİL.
S.Lott

1
Bu gönderi birçok açıdan yanlış ve çeşitli açılardan yanıltıcı.
Peter Wone

@Peter Wone: Hangi ayrıntılar? Hangi yönler? Hatalarımdan öğrenmeyi umuyorum.
S.Lott

5

dan Oracle Java Eğitimi :

Bir soket, ağ üzerinde çalışan iki program arasındaki iki yönlü iletişim bağlantısının bir uç noktasıdır. TCP katmanı, verilerin gönderilmek üzere yönlendirildiği uygulamayı tanımlayabilmesi için bir yuva bağlantı noktası numarasına bağlıdır.


Bu sadece bir öğretici ve kesinlikle normatif bir referans değil.
user207421

"Bir soket iki yönlü iletişim bağlantısının bir uç noktasıdır" Bu bir soket tanımı değil, bir java öğretici değil mi ??
prayagupd

@prayagupd Tabii ki bu bir tanım, ama bir öğretici değil, bir özellik değil.
user207421

4

Liman ve soket Banka Şubesi ile karşılaştırılabilir.

"Banka" nın bina numarası IP adresine benzer. Bir bankanın farklı bölümleri vardır:

  1. Tasarruf hesabı departmanı
  2. Bireysel kredi departmanı
  3. Konut kredisi departmanı
  4. Şikayet departmanı

Yani 1 (tasarruf hesabı departmanı), 2 (kişisel kredi departmanı), 3 (konut kredisi departmanı) ve 4 (şikayet departmanı) limanlardır.

Şimdi diyelim ki bir tasarruf hesabı açıyorsunuz, bankaya gidiyorsunuz (IP adresi), sonra "tasarruf hesabı departmanı" na (port numarası 1) gidiyorsunuz, sonra "tasarruf hesabı departmanı" altında çalışan çalışanlardan biriyle tanışıyorsunuz ". Hesap açmak için ona SAVINGACCOUNT_EMPLOYEE1 diyelim.

SAVINGACCOUNT_EMPLOYEE1, soket tanımlayıcınız olduğundan SAVINGACCOUNT_EMPLOYEE1 ile SAVINGACCOUNT_EMPLOYEEN arasında olabilir. Bunların hepsi soket tanımlayıcılarıdır.

Benzer şekilde, diğer departmanların altında çalışan bir istihdam olacaktır ve bunlar sokete benzerdir.


3

Soket bir veri G / Ç mekanizmasıdır. Bağlantı noktası, bir iletişim protokolünün sözleşmeli bir konseptidir . Bağlantı noktası olmadan bir soket bulunabilir. Belirli bir soket olmadan bir port bulunabilir (örneğin, aynı port üzerinde bazı protokoller için izin verilebilecek birden fazla soket etkinse).

Bir port, alıcının paketi hangi protokole yönlendireceğini belirlemek için kullanılır, ancak her zaman gerekli değildir ve alıcı soket seçimi başka yollarla yapılabilir - bir port tamamen protokol işleyicisi tarafından kullanılan bir araçtır. ağ alt sistemi. örneğin bir protokol bağlantı noktası kullanmıyorsa, paketler tüm dinleme soketlerine veya herhangi bir sokete gidebilir.


3

Tahmin ettiğim şey göreceli TCP / IP terminolojisi soruda ima edilmektedir. Layman'ın terimleriyle:

PORT, belirli bir evin belirli bir posta kodundaki telefon numarası gibidir. Kasabanın posta kodu, kasabanın IP adresi ve o kasabadaki tüm evler olarak düşünülebilir.

Öte yandan bir SOKET, birbirleriyle konuşan bir çift evin telefonları arasında yerleşik bir telefon görüşmesine benzer. Bu çağrılar aynı kasabadaki evler veya farklı kasabalardaki iki ev arasında yapılabilir. Birbiriyle konuşan telefon çifti arasındaki geçici yerleşik yol, SOKET.


2
Soket bir bitiş noktasıdır. Bir bağlantı kurulmadan önce (TCP) veya bir bağlantının (UDP) yokluğunda bulunur. Ergo bağlantı değil.
user207421

2

Geniş anlamda, Soket - tıpkı elektrik, kablo veya telefon soketiniz gibi bir soket. "Gerekli şeylerin" (güç, sinyal, bilgi) dışarı çıkıp gelebileceği bir nokta. "Gerekli şeylerin" kullanımı için gerekli olmayan birçok ayrıntılı şeyi gizler. Yazılım söz konusu olduğunda, iki varlık arasında bir iletişim mekanizması tanımlamak için genel bir yol sağlar (bu varlıklar herhangi bir şey olabilir - iki uygulama, iki fiziksel olarak ayrı cihaz, bir işletim sistemi içindeki Kullanıcı ve Çekirdek alanı, vb.)

Bir Bağlantı Noktası bir uç nokta ayırıcısıdır. Bir uç noktayı diğerinden ayırır. Ağ düzeyinde, bir uygulamayı diğerinden ayırır, böylece ağ yığını bilgileri uygun uygulamaya aktarabilir.


2

Bu soruya zaten teorik cevaplar verilmiştir. Soket ve Liman hakkındaki anlayışınızı netleştirecek bu soruya pratik bir örnek vermek istiyorum.

Burada buldum

Bu örnek, Wiley gibi bir web sitesine bağlanma süreci boyunca size yol gösterecektir. Web tarayıcınızı (Mozilla Firefox gibi) açar ve adres çubuğuna www.wiley.com yazarsınız. Web tarayıcınız bir Alan Adı Sistemi (DNS) sunucusu kullanarak IP adresini belirlemek için www.wiley.com adını arar. Bu örnek için adres 192.0.2.100'dür.

Firefox, 192.0.2.100 adresine ve uygulama katmanı web sunucusunun çalıştığı bağlantı noktasına bağlantı kurar. Firefox, hangi portun bekleneceğini biliyor çünkü iyi bilinen bir port. Bir web sunucusu için iyi bilinen bağlantı noktası 80 numaralı TCP bağlantı noktasıdır.

Firefox'un bağlanmaya çalıştığı hedef soket soket: bağlantı noktası olarak veya bu örnekte 192.0.2.100:80 olarak yazılmıştır. Bu bağlantının sunucu tarafıdır, ancak sunucunun Mozilla Firefox'ta görüntülemek istediğiniz web sayfasını nereye göndereceğini bilmesi gerekir, böylece bağlantının istemci tarafı için de bir soketiniz olur.

İstemci tarafı bağlantısı 192.168.1.25 gibi IP adresinizden ve rastgele seçilen bir dinamik bağlantı noktası numarasından oluşur. Firefox ile ilişkili soket 192.168.1.25:49175 gibi görünüyor. Web sunucuları 80 numaralı TCP bağlantı noktasında çalıştığından, bu soketlerin her ikisi de TCP soketleriyken, bir UDP bağlantı noktasında çalışan bir sunucuya bağlanıyorsanız, hem sunucu hem de istemci soketleri UDP yuvaları olacaktır.


Çok düşük kaliteli alıntı. Üçüncü paragraf 'soket' kelimesini 'IP adresi' anlamına geliyormuş gibi yanlış kullanır. Öyle değil.
user207421

2

Soket, veri I / O için çekirdek tarafından kullanıcı uygulamalarına sağlanan bir soyutlamadır. Bir soket türü, protokolü, kullanımı, IPC iletişimi vb. Tarafından tanımlanır. Bu nedenle, birisi bir TCP soketi oluşturuyorsa, sokete veri okumak ve ona basit yöntemler ve TCP dönüşümleri gibi daha alt düzey protokol kullanımı ile veri yazmak gibi manipülasyonlar yapabilir. paketleri daha düşük seviyeli ağ protokollerine iletmek, çekirdekteki belirli soket uygulamasıyla yapılır. Avantajı, kullanıcının protokole özgü nitigriteleri ele alma konusunda endişelenmesine gerek olmaması ve sadece normal bir tampon gibi sokete veri okuması ve yazmasıdır. Aynı durum IPC için de geçerlidir, kullanıcı sadece sokete veri okur ve yazar ve çekirdek, oluşturulan soket türüne bağlı olarak daha düşük seviyedeki tüm ayrıntıları işler.

IP ile birlikte port, sokete bir adres sağlamak gibidir, ancak gerekli değildir, ancak ağ iletişimine yardımcı olur.


2

Tek bir bağlantı noktasında, birden çok elektrik prizi gibi farklı harici IP'lere bağlı bir veya daha fazla soket bulunabilir.

  TCP    192.168.100.2:9001     155.94.246.179:39255   ESTABLISHED     1312
  TCP    192.168.100.2:9001     171.25.193.9:61832     ESTABLISHED     1312
  TCP    192.168.100.2:9001     178.62.199.226:37912   ESTABLISHED     1312
  TCP    192.168.100.2:9001     188.193.64.150:40900   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.23.194.149:43970   ESTABLISHED     1312
  TCP    192.168.100.2:9001     198.49.73.11:38842     ESTABLISHED     1312

2

Soket, uygulamanın arabirimi olarak kullanılan ağ uç noktasının SW soyutlamasıdır. Java, C #, nesne ile temsil edilir, Linux'ta, Unix bir dosyadır.

Bağlantı noktası, iletişim kurmak isteyip istemediğinizi belirttiğiniz bir soketin özelliğidir. Bir soketten paket almak için belirli bir yerel bağlantı noktasına ve NIC'ye (yerel IP adresi ile) veya tüm NIC'lere (bağlama çağrısında INADDR_ANY belirtilir) bağlamanız gerekir. Paket göndermek için uzak soketin bağlantı noktasını ve IP'sini belirtmeniz gerekir.


1

Bir soket temel olarak ağ iletişimi için en az bir IP adresi ve bir bağlantı noktasından oluşan bir uç noktadır. Java / C # 'da bir soket, iki yönlü bağlantının bir tarafının daha üst düzey bir uygulamasıdır.

Ayrıca, Java belgelerinde bir tanım .


Java Turorial'da demek istediniz.
user207421

1

Liman:

Bağlantı noktası, seri, paralel ve USB bağlantı noktaları gibi çevresel aygıtlar için fiziksel bir bağlantı noktasına başvurabilir. Bağlantı noktası terimi ayrıca bir hub, anahtar veya yönlendiricideki gibi bazı Ethernet bağlantı noktalarını ifade eder.

Priz:

Bir soket, iki ağ uygulaması arasındaki tek bir bağlantıyı temsil eder. Bu iki uygulama nominal olarak farklı bilgisayarlarda çalışır, ancak soketler tek bir bilgisayarda işlemlerarası iletişim için de kullanılabilir. Uygulamalar birbirleriyle iletişim kurmak için birden fazla yuva oluşturabilir. Soketler çift yönlüdür, yani bağlantının her iki tarafında veri gönderebilir ve alabilir.


Bir TCP veya UDP bağlantı noktası fiziksel veya Ethernet bağlantı noktalarını ifade etmez. Soruyu cevaplamadınız.
user207421

1

Bir bağlantı noktası IP ağ protokolü için TCP ve UDP aktarımlarında bir iletişim uç noktasını belirtir. Bir soket, bu protokollerin (soket API) uygulamalarında yaygın olarak kullanılan bir iletişim uç noktası için bir yazılım soyutlamasıdır. Alternatif bir uygulama XTI / TLI API'sıdır.

Ayrıca bakınız:

Stevens, WR 1998, UNIX Ağ Programlama: Ağ API'leri: Yuva ve XTI; Cilt 1, Prentice Salonu.
Stevens, WR, 1994, TCP / IP Resimli, Cilt 1: Protokoller, Addison-Wesley.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.