Bu 2 paket aynı tcp soketine mi ait?
Diyelim ki iki paketimiz var A
ve B
.
A
: Kaynak-IP S1
, hedef-IP D1
, kaynak-bağlantı noktası SP1
, hedef-bağlantı noktasına sahiptirDP1
B
: Kaynak-IP S2
, hedef-IP D1
, kaynak-bağlantı noktası SP2
, hedef-bağlantı noktasına sahiptirDP1
Her ikisi de TCP'dir. Bu paketlerin ikisi de şimdi aynı sokete mi sahip olacak?
UDP hakkında Soketinin hedef IP ve hedef bağlantı noktası numarasından oluştuğunu okudum. Soo, eğer bu UDP ile yapılsaydı, her iki paket de aynı soket tarafından alınırdı.
Ama bu örnek TCP içindir ve burada TCP için de aynı soketten geçip geçmeyeceğinden emin değilim?
Yanıtlar
İlk olarak, TCP tekli paketleri önemsemez. Bunlar, daha önce herhangi bir bağlantı kurulumu olmayan veri paketleriyse, basitçe düşeceklerinden, soket dahil değildir. Bu yüzden bunun kurulan bağlantılar veya bağlantı kurmak için ilk paketlerle ilgili olduğunu varsayıyorum. Bir TCP bağlantısı en az 4 demetiyle tanımlanır (src-ip, src-port, dst-ip, dst-port). Bu 4 demet her iki durumda da açıkça farklı olduğu için farklı soketlere ihtiyaç duyulacaktır.
UDP hakkında Soketinin hedef IP ve hedef bağlantı noktası numarasından oluştuğunu okudum.
Bu yalnızca bağlantısız UDP soketleri için geçerlidir . İle bağlı UDP soketleri tekrar 4-lü alakalıdır.
UDP hakkında Okudum ...
TCP ve UDP arasındaki temel fark, TCP'nin bağlantı yönelimli olmasıdır, UDP ise tek paketleri iletmek için kullanılır.
Bir UDP soketi, bilgisayardaki belirli bir (hedef) bağlantı noktasına gelen tüm UDP paketlerini işlemektedir.
Bir TCP soketi, belirli bir TCP bağlantısına ait tüm paketleri işlemektedir.
Bu paketlerin ikisi de şimdi aynı sokete mi sahip olacak?
Düşündüğünüzden daha karmaşık:
Tanımladığınız durum genellikle "sunucu tarafında" ( accept()
web sunucusu gibi, gelen bağlantıları işlemek için API kullanan bilgisayarda ) gerçekleşir.
Diyelim ki iki bilgisayar (web tarayıcıları çalıştıran) aynı web sunucusuna bağlanmak istiyor. Her iki bilgisayar da aynı "kaynak TCP bağlantı noktasını" seçti. Bu durumda, iki bilgisayarın web sunucusuna gönderdiği paketler koşulunuzu karşılar: İki bilgisayar tarafından gönderilen paketlerde yalnızca kaynak IP adresi farklıdır, ancak hedef IP adresi, hedef bağlantı noktası ve kaynak bağlantı noktası aynıdır.
Bununla birlikte, "sunucu tarafında" tek bir TCP bağlantısını idare etmek için iki soket vardır :
- Gelen TCP bağlantılarını kullanan
listen()
veaccept()
bekleyen bir soket . - Gelen her TCP bağlantısı için, tarafından döndürülen bir soket
accept()
.
Bir TCP paketi, bir TCP bağlantısının ilk paketi olduğunda, paket, listen()
hedef bağlantı noktasında bir işlem gerçekleştiren TCP soketi tarafından "işlenir" .
Bu soket, kaynak IP adresini veya kaynak TCP portunu önemsemez - tıpkı UDP soketleri gibi. Yuva, belirli bir hedef IP adresine ve belirli bir hedef bağlantı noktasına sahip tüm ilk TCP bağlantı paketlerini işlemektedir.
Bu ilk paket alındığında, ikinci soket (TCP bağlantısını idare eden) oluşturulur ve access()
API tarafından geri döndürülür .
Bu soket belirli bir bağlantıyı (ve dolayısıyla TCP bağlantısının diğer tüm paketlerini) idare eder.
Örnekte, aynı sunucuya aynı "kaynak TCP bağlantı noktasını" kullanarak bağlanan iki bilgisayarla iki farklı bağlantımız olduğundan, iki farklı soket yalnızca hedef TCP bağlantı noktasında farklılık gösteren paketleri işleyecektir.