9.8. Portlar

Bir IP adresi, bir paketin hangi host için olduğunu söyler. Modern bir host aynı anda birçok program çalıştırır – bir web tarayıcısı, bir sohbet istemcisi, bir görüntülü arama, bir yedekleme görevi – ve bunların her biri paralel olarak paket gönderip alır. IP katmanının bunları birbirinden ayırt etmenin bir yolu yoktur; gelen her paketi yalnızca “host’a” teslim eder. Bir şeyin hangi paketin hangi programa ait olduğuna karar vermesi gerekir.

Port numarası bunun yanıtıdır. Taşıma katmanındaki her paket, IP başlığının ötesinde iki ek alan taşır: bir kaynak port ve bir hedef port. Her biri 16 bitlik bir tam sayıdır, dolayısıyla host başına 65535 olası port numarası vardır. IP adresiyle birleştiğinde, port bir host içindeki belirli bir uç noktayı tanımlar – belirli bir programın belirli bir konuşmasını.

Sağda, üst kısmında IP adresi etiketlenmiş tek bir host kutusu. Host içindeki üç program "HTTP server", "video call", "chat client" olarak etiketlenmiş, her biri sırasıyla 80, 5004 ve 4321 olarak etiketlenmiş farklı bir port numarasına bağlı. Ağdan host'a üç ok varır, her biri bir hedef portla etiketlenmiştir; her ok eşleşen programa iner.

Birçok program tek bir IP adresini paylaşır; hedef port, gelen her paketi doğru olana yönlendirir.

9.8.1. İyi bilinen portlar

İlk 1024 port numarası, standart hizmetler için gelenek olarak ayrılmıştır. Okuyucunun karşılaşacağı birkaçı:

  • 22 – SSH (Secure Shell protokolü, şifreli uzaktan oturum açma için kullanılır).

  • 53 – DNS, Domain Name System (Adlar ve DNS sayfasında ele alınmıştır).

  • 80 – HTTP, Hypertext Transfer Protocol – web’in şifrelenmemiş protokolü.

  • 123 – NTP, Network Time Protocol (cihazların saatlerini bir zaman sunucusundan nasıl ayarladığı).

  • 443 – HTTPS, TLS üzerinden taşınan HTTP (Transport Layer Security, internet protokolleri için standart şifreleme sarmalayıcısı) – tarayıcıda kilit simgesi gösteren her web sayfasının arkasındaki protokol.

Bir tarayıcının http://example.com adresine port belirtmeden bağlanabilmesini mümkün kılan şey bu gelenektir – HTTP için iyi bilinen port olduğundan 80 olduğunu varsayar. Bir web sunucusuna bağlanan bir kamera da aynısını yapar.

1024’ün üzerinde, port numaraları kısıtlamasızdır ve herhangi bir program birini talep edebilir. Veritabanı sunucuları (PostgreSQL için 5432, MySQL için 3306), uygulama sunucuları ve özel protokoller, hepsi daha yüksek aralıkta bir yerlerde bulunur.

9.8.2. Geçici portlar

Sunucular bilinen bir portu dinler. İstemciler kendi uçlarında farklı bir port kullanır; bu port giden her bağlantı için yeniden seçilir.

Kamera 443 portundaki bir web sunucusuna bağlandığında, konuşma şunlar arasındadır:

camera IP : <some-port>     <-->     server IP : 443

<some-port> bir geçici port‘tur – MicroPython yüksek bir aralıktan kullanılmayan bir numara seçer, bağlantı süresince kullanır ve sonradan serbest bırakır. Betiğin hangi numaranın seçildiğini önemsemesi gerekmez; bunu soket katmanı halleder.

9.8.3. Dinleme ile konuşma

Bir portun oynadığı rol, konuşmanın hangi tarafında olduğuna bağlıdır. İki ayrı durum:

  • Bir dinleyen port, istenmeyen bağlantıları almak isteyen bir programa aittir. Program MicroPython’a “80 portunda bana adreslenmiş gelen herhangi bir paket benimdir” der ve bekler. Sunucular bunu yapar.

  • Bir bağlı port, bir konuşma başlatmak isteyen bir programa aittir. Program bir geçici port seçer (veya MicroPython’dan seçmesini ister), kaynak port olarak bunu ve hedef olarak sunucunun iyi bilinen portunu taşıyan bir paket gönderir ve konuşmanın geri kalanı için aynı port çiftini kullanır.

Tek bir program her ikisini de aynı anda yapabilir, her rol için farklı portları tutar. Bir kamera, bir yapılandırma kullanıcı arabiriminden gelen HTTP bağlantıları için 8000 portunu dinleyebilir ve aynı zamanda 443 portunda uzak bir sunucuya giden bir HTTPS bağlantısını tutabilir. İki rol birbirine müdahale etmez – her konuşma tam (src IP, src port, dst IP, dst port) dörtlüsüyle tanımlanır ve hiçbir iki konuşma aynı dörtlüyü paylaşmaz.

9.8.4. Portların açtığı kapılar

Portlar yerine oturduğunda, taşıma katmanı sonunda programdan programa teslim sorununu çözebilir. Bir paket artık yalnızca doğru host‘a (IP adresi) değil, aynı zamanda o host içindeki doğru sokete (port numarası) yönlendirilebilecek kadar bilgi taşır.

Sonraki iki sayfa, taşıma katmanının bu adreslemenin üzerinde sunduğu iki türü kapsar: UDP (User Datagram Protocol – her paket bağımsız, garanti yok) ve TCP (Transmission Control Protocol – bağlı, güvenilir, sıralı bir akış).