User Datagram Protocol (UDP)

İpek TÜRKER (ipek.turker@students.comu.edu.tr)
Çanakkale Onsekiz Mart Üniversitesi,
Bilgisayar Mühendisliği Bölümü


05/05/2003      Bu belgede, UDP paketinin yapısı, özellikleri ve UDP iletişiminin nitelikleri açıklanmıştır.


İçindekiler


1. Giriş
    1.1. Internet Başlık Modeli
2. UDP ile TCP 'nin Farkları
    2.1. Segment ile Datagram arasındaki farklar
3. UDP Paket Formatı
    3.1. Örnek UDP paketi
4. UDP IP - User Datagram IP Pseudoheader
   
4.1. Yalancı başlığın içeriği

5. Portlar
    5.1. Kullanıcı Arayüzü
    5.2. IP Arayüzü
    5.3. Protokol Uygulaması
    5.4. Protokol Numarası
    5.5. Port numaralarıyla Demultiplexing
6. Hata Kontrolü (UDP Checksum Calculation)

    6.1. Örnek kod

7. IPv4 UDP Network Kodu
    7.1. Kod sunumu

8. Datagram Soketler ile Stream Soketler Arasındaki Farklar

9. RFC' ler için Internet Bilgileri

10. Bazı Kısaltmalar

11. Kaynaklar
12. Yasal Açıklamalar


1. Giriş


1.1. Internet Başlık Modeli

Gönderici:                               
User Data                               
Application                               
Transport - TCP                               
Routing - IP              Fiziksel              Alıcı:
Link - Ethernet                              Link - Ethernet
                                Routing - IP
                                Transport - TCP
                                Application
                                User Data

Şekil 1. Internet başlık modeli

UDP, TCP / IP protokol grubunun iki aktarım katmanı protokolünden birisidir.

Gelişmiş bilgisayar ağlarında paket anahtarlamalı bilgisayar iletişiminde bir datagram modu oluşturabilmek için UDP protokolü yazılmıştır. Bu protokol minimum protokol mekanizmasıyla bir uygulama programından diğerine mesaj göndermek için bir prosedür içerir. Bu protokol 'transaction' yönlendirmelidir. Paketin teslim garantisini isteyen uygulamalar TCP protokolünü kullanır.

 

Şekil 2. OSI Başvuru Modelinde UDP' nin yeri

UDP'yi kullanan genel protokoller DNS, TFTP, ARP, RARP ve  SNMP protokolleridir. Uygulama programcıları birçok zaman UDP' yi TCP' ye tercih eder.Çünkü ağ üzerinde fazla bant genişliği kaplamaz.

UDP güvenilir olmayan bir aktarım protokolüdür. UDP protokolü ağ üzerinden paketi gönderir ve gidip gitmediğini takip etmez ve paketin yerine ulaşıp ulaşmayacağına onay verme yetkisi yoktur.

UDP protokolü basit bir protokol olduğu için hızlı iletişim kurmamız gereken yerlerde kullanmamız yararımıza olacaktır. Buradaki basitlikten kasıt TCP protokolü gibi verinin gönderilmesi gibi kontrolleri içermediği içindir. UDP protokolünü kullanan programlara örnek olarak 161 no' lu portu kullanan SNMP servisini verebiliriz.

UDP datagramların belirli sıralara konmasının gerekli olmadığı uygulamalarda kullanılmak üzere dizayn edilmiştir. TCP’de olduğu gibi UDP’ de de bir başlık vardır. Ağ yazılımı bu UDP başlığını iletilecek bilginin başına koyar. Ardından UDP bu bilgiyi IP katmanına yollar. IP katmanı kendi başlık bilgisini ve protokol numarasını yerleştirir (bu sefer protokol numarası alanına UDP’ ye ait değer yazılır). Fakat UDP, TCP’nin yaptıklarının hepsini yapmaz. Bilgi burada datagramlara bölünmez ve yollanan paketlerin kaydı tutulmaz. UDP’ nin tek sağladığı port numarasıdır. Böylece pek çok program UDP’ yi kullanabilir. Daha az bilgi içerdiği için doğal olarak UDP başlığı TCP başlığına göre daha kısadır. Başlık, kaynak ve varış port numaraları ile kontrol toplamını içeren tüm bilgidir.

 

TCP / IP Protokol Grubu

IP Adresleme

Ağ Arayüz Katmanı

İnternet Katmanı

Aktarım Katmanı

Uygulama Katmanı

Alt Ağlar

Ethernet

IP

UDP

FTP

Yayın

Token-Ring

ICMP

TCP

TELNET

Çokluyayın

FDDI

ARP

SMTP

ATM

RARP

DNS

SNMP

Şekil 3. TCP/IP Protokol grubu


2. UDP ile TCP 'nin farkları


UDP; gönderilen paketin yerine ulaşıp ulaşmadığını kontrol etmediğinden güvenilir olmayan bir protokoldür. "User Datagram Protocol" un TCP'den farkı sorgulama ve sınama amaçlı, küçük boyutlu verinin aktarılması için olmasıdır; veri küçük boyutlu olduğu için parçalanmaya gerek duyulmaz. UDP protokolü ağ üzerinde fazla bant genişliği kaplamaz. UDP başlığı TCP başlığına göre daha kısadır.

 

Şekil 4. TCP ile UDP' nin katmanlarda gösterimi

2.1. Segment ile Datagram arasındaki farklar:

Aktarım katmanında UDP‘nin oluşturduğu veri bütününe “datagram”, TCP’nin oluşturduğu veri bütününe “segment” adı verilir. İkisi arasındaki temel fark, segmenti oluşturan veri grubunun başında sıra numarası bulunmasıdır.

Her bir datagram veya segment IP tarafından kendi başlığı eklenerek IP paketi haline getirilir ve herbir IP paketi birbirinden bağımsız olarak hedef hosta gönderilir.

 

Servis TCP UDP
Bağlantı kurulumu Zaman alır ancak TCP bunu güvenli şekilde yapar. Bağlantıya gerek yoktur.
Teslim garantisiGönderildiğini onaylar. UDP onay mesajı göndermeden,alıcı paketin alındığına dair sinyal göndermez.Kaybolan paketler tekrar iletilmez.
Paket ardışıklığı (paketlerin doğru sırası hakkında bilgi)Ardışık numaralanmış paketlerUDP ardışıklık numarası vermez. Paketlerin sürekli ulaştığı veya kaybolduğu düşünülür.
Akış kontrolüAlıcı göndericiye yavaşlaması için sinyal gönderebilir. Paket akış kontrolü için TCP' de kullanılan onay UDP' de geri dönmez.
Tıkanıklık kontolü Network cihazları TCP onayları sayesinde göndericilerin tavrını kontrol edebilir.Onay olmadan network tıkanıklık sinyali gönderemez.

Şekil 5. TCP ile UDP' nin farkları

UDP'nin bu kadar tez avantajına rağmen neden daha çok kullanıldığı bu şemalardan açıkça görülmektedir. TCP bir veriyi karşıya 6x32+Veri boyu kadar bir paket olarak gitmektedir. Yani her paket fazladan 192 bit başlık (header) bilgisi taşımaktadır. Oysa UDP paketleri 64 bitlik başlık (header) bilgisine sahiptir.

UDP kullanmanın en önemli nedeni az protokol yüküdür. Video sunucu gibi realtime veri akışı gerektiren bir uygulama için TCP fazla yük getirir ve görüntü realtime oynamaz. Bu nedenle multicast uygulamalarında Datagram soketler kullanılır. Ayrıca video ve ses görüntülerinde genelde az bir veri kaybı sesi veya görüntüyü bozmaz. Bu nedenle sıkı paket kontrolüne gerek yoktur. Eğer iyi bir fiziksel bağlantınız varsa hata oranı düşük olacaktır ve bu nedenle TCP'nin yaptığı hatalı paket kontrol işlemleri fazladan yük olacaktır.


3. UDP paket formatı


 

Kaynak Port

Hedef Port

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

Uzunluk

Hata Kontrolü

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

Veri

Şekil 6. UDP paket formatı

/* Network' te byte olarak sıralanmış veri  */
/* İşaretliyse tamamlayıcısı kullanılır.. */

struct MeasurementStruct_v1 {
    unsigned short validity_code; /* 0 = geçersiz 1 = geçersiz */
    signed short h_pos; /* tanımlanmış bir birimde (microns, f.ex.) */
    signed short v_pos;
    signed short h_pos_sigma; /* tanımlanmış bir birimde (microns, f.ex.) */
    signed short v_pos_sigma;
};

struct PacketStruct_v1 {
    char version[4]; /* "v1\0\0" (basitçe ekin değiştirilmesi) */
    char bpm_id[20]; /* "name\0" */
    struct timeval timing; /* long seconds, long useconds, <0,0>eğer erişilemiyorsa */
    unsigned short seq_nr; /* 0, 1, 2, ..., 65535, 0, 1, ... (kayıp paketleri tarama) */
    unsigned short nr_of_values; /* nr of H/V takip eden değerler(6, şu an) */

    struct MeasurementStruct_v1 values[6];
};

 

Alan

Uzunluk Açıklama
Source Port 16 bit Opsiyonel bir alandır. Gönderilen işlemin portunu gösterir. Eğer gönderen host bir kaynak numarasına sahip değilse bu alan “0” ile doludur.
Destination Port 16 bit  Hedef host içerisinde, işlemlere uygun ayrımları yapmak için kullanılır. hedef port internet adresleri parçalarının genel durumunu içerir.
Length 16 bit  UDP veri ve UDP başlığının bayt cinsinden toplam uzunluğudur.minimum 8 bayttır.
Checksum 16 bit Checksum IP ve UDP başlığı ve verinin  bilgisini içeren yalancı başlıgın toplamı olan birbirinin tamamlayıcısı 16 bitten oluşur. Opsiyonel bir alandır. Hata kontrol mekanizması sağlar. Eğer hata kontrolü yapılmayacaksa bu alan “0” ile doludur.
Data Değişken Opsiyonel

Şekil 7. UDP paketi bileşenlerinin açıklamaları

3.1. Örnek UDP paketi:

04 89 00 35 00 2C AB B4 00 01 01 00 00 01 00 00 00 00 00 00 04 70 6F 70 64 02 69 78 06 6E
65 74 63 6F 6D 03 63 6F 6D 00 00 01 00 01

UDP Header 04 89 00 35 00 2C AB B4
Data 00 01 01 00 00 01 00 00 00 00 00 00 04 70 6F 70 64 02 69 78 06 6E 65
74 63 6F 6D 03 63 6F 6D 00 00 01 00 01

Source Port 04 89
Destination Port 00 35
Length 00 2C
Checksum AB B4
Data DNS Message

 Başlık blokları iletimden önce veriye eklenir.Paket alındığında başlıklar işlenir ve paketten çıkarılır.Bu işlemler yığıt modelini tanımlar.Internet protokolleri yedi katmanlı ISO OSI modelinde yığıta benzer tanımlanır.


4. UDP IP - User Datagram IP Pseudoheader


"User datagram" ları "IP processing" işleminden geçmek için IP yalancı başlığının önüne yapıştırılır. Bu işlem, "IP processing" koduna kaynak ve hedef adres, servis tipi ve UDP paket uzunluğunu sağlar.

UDP hata kontrolünün hesaplanması için, UDP başlığına bir "yalancı başlık (pseudo header)" eklenir.
4.1. Yalancı başlığın içeriği:
Alan Uzunluk Açıklama
Source Address 32 bit Göndericinin standart IP adresi
Destination Address 32 bit Alıcının standart IP adresi
Protocol Code 16 bit UDP' nin oluşturduğu datagramı gösteren standart IP kodu.UDP için değer 17' dir.Yani bu alan heksadesimal kodda 0x0011' dir.
UDP Length 16 bit Başlığı içeren byte sayısı.

Şekil 8. Yalancı başlığın içeriği

IP sadece kendi başlığı üzerinde hata kontrol işlemi yapar. UDP verisi üzerinde hata kontrolü yapmaz. UDP ‘deki hata kontrolü sadece hatasız taşımanın bir ölçüsüdür. Yeniden gönderim veya güvenilirlik sağlamaz.

Yalancı başlık kaynak adres,hedef adres, protokol ve UDP uzunluğunu içeren kavramsal bir önektir.

UDP , IPv4 başlığında taşındığında,yalancı başlık aşağıdaki gibidir.

 

00

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

Source IPv4 address

Destination IPv4 address

0

Protocol

Total length

Şekil 9. Örnek UDP yalancı başlığı [1]

IPv6 başlığıyla iletildiğinde hata kontrolü(checksum) opsiyonel değildir. Bu durumda yalancı başlık aşağıdaki gibidir.:

00

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

Source IPv6 address :::

Destination IPv6 address :::

Upper layer packet length

0

Next header

Şekil 10. Örnek UDP yalancı başlığı [2]

UDP paketleri internet üzerinde IP paketleri içinde taşınır:

 

   

UDP Başlığı

UDP Verisi

       
 

IP başlığı

IP verisi

 
     

Ethernet başlığı

Ethernet Verisi

CRC

Şekil 11. UDP paketinin IP içindeki yeri


5. Portlar


Bazı UDP Port numaraları ve karşılıkları aşağıdaki tabloda verilmiştir:

Port Numarası

Tanımı

5

Remote Job Entry (Uzaktan İş girişi)

7

Eko

9

Discard

11

Aktif Kullanıcı

13

Saat

15

Who is up or NETSTAT

17

Günün alıntısı (Quote of the Day)

19

Karakter Üreteci

37

Zaman

39

Resource Location Protocol

42

Host İsim servisi

43

Who is

53

DNS (Domain Name System)

67

Bootstrap Protokol Server’ı

68

Bootstrap Protokol İstemcisi

69

Trivial File Transfer

79

Finger

111

Sun Microsystem RPC

123

Network Time Protocol

161

SNMP Message

162

SNMP Trap

Şekil 12. UDP port numaraları ve karşılıkları

5.1. Kullanıcı Arayüzü: Alıcı port yaratımı, alıcı portlar üzerinde veri oktetlerini çağıran işlemler, kaynak port ve adres işareti, veriyi, hedef  ve kaynak port ve adresi açıkça belirten datagramın gönderilmesi işlemini yapar.

 Kullanıcı arabirimi şunları yapmalıdır.

  • Yeni alıcı port yaratılması
  • Alıcı porttan veri oktetlerini, kaynak ve hedef adres işaretlerini çağıran alma işlemi
  • Veriyi, kaynak ve port ve adresleri içeren datagram gönderilmesi işlemi

5.2. IP Arayüzü: UDP modülü kaynak ve hedef internet adreslerine ve ve internet başlığındaki protokol alanına karar verebilmelidir.UDP/IP arayüzü  tüm internet başlığındaki alıcı  işleminin cevabını içeren bütün internet datagramlarını çağırır.

Bir arayüz gönderilecek IP başlığı ile tamamlanmış tam bir internet datagramından UDP'nin geçmesini sağlar.

5.3. Protokol Uygulaması:Bu protokolün başlıca kullanımları;

  • Domain Name Service
  • Trivial File Transfer
  • Simple Network Management Protocol' dür.

5.4. Protokol Numarası:IP'nin içinde kullndığı protokol numarası 17' dir.(21 oktal)

5.5. Port numaralarıyla Demultiplexing:

IP, internet üzerinde iki host arasında haberleşmeye izin veren yol belirleme fonksiyonlarını destekler ve paket dağıtımı yapar. IP, UDP port numaraları aracılığıyla pek çok datagram paketi arasında ayrıştırma yapabilecek mekanizmaları içerir. Bu yolla bir çok uygulamanın alıcı host üzerinde aynı anda çalışmasına ve ağ üzerinden haberleşmesine olanak tanır.

Port numaraları standart olarak belirlenmiş numaralar olup haberleşme sırasında atanan numaralar değillerdir.


6. Hata Kontrolü (UDP Checksum Calculation)


Hata kontrolü, yalancı başlığın, UDP başlığının ve verinin bütün oktetleri üzerinde hesaplanır. Eğer veri okteti tek sayıysa, verinin sonuna 0 eklenir.
Yalancı başlık ve hata sınama bitleri, paket ile birlikte iletilmez.

6.1. Örnek kod:
	u16 buff[]: UDP başlığı ve verideki oktetleri içeren dizi.
	u16 len_udp: UDP başlığı ve verinin (oktet) uzunluğu
	BOOL padding: Veri çift sayılı oktetlerden oluşuyorsa1, tek sayılı oktetlerden oluşuyorsa 0' dır.
	u16 src_addr[4] ve u16 dest_addr[4]: IP kaynak ve hedef adres oktetleri 

/**************************************************************************
Function: udp_sum_calc()
Description: UDP hata kontolü hesaplanması
***************************************************************************
*/
typedef usingend short u16;
typedef unsigned long u32;
u16 short udp_sum_calc(u16 len_udp, u16 src_addr[],u16 dest_addr[], BOOL padding, u16 buff[])
{
u16 prot_udp=17;
u16 padd=0;
u16 word16;
u32 sum;	
	// Verinin tek veya çift olduğunun bulunması.
	// Eğer tek ise, paketin sonuna 0 biti eklenir.
	if (padding&1==1){
		padd=1;
		buff[len_udp]=0;
	}
	//sum değişkenine ilk değer verilmesi
	sum=0;
	//16 bitlik kelimeleri 8 bitlik iki bitişik kelimeye ayırıp 
	// 16 bitlik kelimelerin toplamını bulmak
	for (i=0;i<len_udp+padd;i=i+2){
		word16 =((buff[i]<<8)&0xFF00)+(buff[i+1]&0xFF);
		sum = sum + (unsigned long)word16;
	}	
	// IP kaynak ve hedef adresini içeren UDP başlığının eklenmesi
	for (i=0;i<4;i=i+2){
		word16 =((src_addr[i]<<8)&0xFF00)+(src_addr[i+1]&0xFF);
		sum=sum+word16;	
	}
	for (i=0;i<4;i=i+2){
		word16 =((dest_addr[i]<<8)&0xFF00)+(dest_addr[i+1]&0xFF);
		sum=sum+word16; 	
	}
	// Protokol numaraları ve UDP paketinin uzunluğu
	sum = sum + prot_udp + len_udp;
	// 32 bitlik hesaplanmış toplamın sadece son 16 bitini saklayıp
	//taşıyıcıların eklenmesi
    	while (sum>>16)
		sum = (sum & 0xFFFF)+(sum >> 16);
	// Sum değişkeninin tamamlanması
	sum = ~sum;
return ((u16) sum);
}

7. IPv4 UDP Network Kodu


Aşağıdaki kod, IPv4 UDP network uygulaması için bir örnek teşkil eder.

Ana Fonksiyonlar

Aşağıdaki kodda çağrılan ana fonksiyonlar şunlardır:

  • udp_connect
  • udp_disconnect
  • udp_recvmsg
  • udp_v4_get_port

udp_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len)

Bu fonksiyon,UDP soketi için doğru bağlantı bilgilerini yükler.UDP, bağlantısız bir protokol olduğundan, uzak bilgisayarla bilgi alışverişi yapmaz.(Yönlendirme,adres ve port numarası hariç. Bu veriler soket yapısında saklanır. )

7.1. Kod sunumu: Bu kodda UDP için yalnız INET domain desteği vardır.

	if (usin->sin_family != AF_INET) 
	  	return -EAFNOSUPPORT;

Network yönlendirme tablosundan alınan, hedef host için paket göndermede kullanılan yönlendirmenin tanımlanması. Bu bilgi soketin yaşam süresini göstermek için kullanılır.

	err = ip_route_connect(&rt, usin->sin_addr.s_addr, sk->saddr,
			       RT_CONN_FLAGS(sk), sk->bound_dev_if);
	if (err)
		return err;

Eğer kullanıcı, sokette kullnılacak kaynak adresi belirtmediyse, kaynak adresi yönlendirme ön bellek girişinden al, hedef adres ve portu belirle.

  	if(!sk->saddr)
	  	sk->saddr = rt->rt_src;		/* Kaynak adresi güncelle */
	if(!sk->rcv_saddr)
		sk->rcv_saddr = rt->rt_src;
	sk->daddr = rt->rt_dst;
	sk->dport = usin->sin_port;

Soket durumunu TCP_ESTABLISHED(normalde TCP kullanılmaz,fakat bu bölümde anlamlı bir değer bulunamadığından "connected" belirteci kullanılır.)Daha sonra, paket ID'sini şu anki saat değerine eşitler.(jiffies)

	sk->state = TCP_ESTABLISHED;
	sk->protinfo.af_inet.id = jiffies;
En son,yönlendirme ön bellek girişinden soket hedefini belirler.
	sk_dst_set(sk, &rt->u.dst);

udp_disconnect(struct sock *sk, int flags)

Bu fonksiyon, UDP "connection" da soketi parçalar. Basit bir fonksiyondur. İlk önce soketin durumu TCP_CLOSE durumuna getirilir, Hedef adres ve port numarası 0 yapılır.

	sk->state = TCP_CLOSE;
	sk->daddr = 0;
	sk->dport = 0;
	sk->bound_dev_if = 0;

Soket kilitli olmamak şartıyla, geçerli adres ve port bilgilerinin silinmesi

	if (!(sk->userlocks&SOCK_BINDADDR_LOCK)) {
		sk->rcv_saddr = 0;
		sk->saddr = 0;
	}
	if (!(sk->userlocks&SOCK_BINDPORT_LOCK)) {
		sk->prot->unhash(sk);
		sk->sport = 0;
	}

Son olarak, soketin hedef ön belleğinin silinmesi

	sk_dst_reset(sk);

udp_recvmsg(struct sock *sk, struct msghdr *msg, int len, int noblock, int flags, int *addr_len)

İlk önce soketten mesajı al

	skb = skb_recv_datagram(sk, flags, noblock, &err);
	if (!skb)
		goto out;

Eğer paket kopyalama sırasında kısalmışsa, geçerli bayrağı yapıştır.

  	copied = skb->len - sizeof(struct udphdr);
	if (copied > len) {
		copied = len;
		msg->msg_flags |= MSG_TRUNC;
	}

Hata kontrolünden emin olun.

	if (skb->ip_summed==CHECKSUM_UNNECESSARY) {
		err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov,
					      copied);
	} else if (msg->msg_flags&MSG_TRUNC) {
		if (__udp_checksum_complete(skb))
			goto csum_copy_err;
		err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov,
					      copied);
	} else {
		err = skb_copy_and_csum_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov);
		if (err == -EINVAL)
			goto csum_copy_err;
	}
	if (err)
		goto out_free;

Soketin içine paketin timestamp, kaynak adres ve port bilgilerinin yerleştirilmesi

	sock_recv_timestamp(msg, sk, skb);
	/* Adres kopyala. */
	if (sin)
	{
		sin->sin_family = AF_INET;
		sin->sin_port = skb->h.uh->source;
		sin->sin_addr.s_addr = skb->nh.iph->saddr;
		memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
  	}
	if (sk->protinfo.af_inet.cmsg_flags)
		ip_cmsg_recv(msg, skb);
	err = copied;
out_free:
  	skb_free_datagram(sk, skb);
out:
  	return err;

Eğer pakette hata varsa, hata bilgilerini güncelle ve datagramı kuyruktan çıkar.

csum_copy_err:
	UDP_INC_STATS_BH(UdpInErrors);
	/*Kuyruğu temizle. */
	if (flags&MSG_PEEK) {
		int clear = 0;
		spin_lock_irq(&sk->receive_queue.lock);
		if (skb == skb_peek(&sk->receive_queue)) {
			__skb_unlink(skb, &sk->receive_queue);
			clear = 1;
		}
		spin_unlock_irq(&sk->receive_queue.lock);
		if (clear)
			kfree_skb(skb);
	}
	skb_free_datagram(sk, skb);
	return -EAGAIN;	
udp_v4_get_port(struct sock *sk, unsigned short snum)

Bu fonksiyon soket için, kaynak port belirler. Eğer port numarası olarak 0 verilmişse, 1024-4999 sayıları arasından uygun bir port belirlenir. Aksi takdirde kullanıcı programı tarafından sorulan port alınmaya çalışılır.

	write_lock_bh(&udp_hash_lock);
	if (snum == 0) {
		int best_size_so_far, best, result, i;
		if (udp_port_rover > sysctl_local_port_range[1] ||
		    udp_port_rover < sysctl_local_port_range[0])
			udp_port_rover = sysctl_local_port_range[0];
		best_size_so_far = 32767;
		best = result = udp_port_rover;
		for (i = 0; i < UDP_HTABLE_SIZE; i++, result++) {
			struct sock *sk;
			int size;
			sk = udp_hash[result & (UDP_HTABLE_SIZE - 1)];
			if (!sk) {
				if (result > sysctl_local_port_range[1])
					result = sysctl_local_port_range[0] +
						((result - sysctl_local_port_range[0]) &
						 (UDP_HTABLE_SIZE - 1));
				goto gotit;
			}
			size = 0;
			do {
				if (++size >= best_size_so_far)
					goto next;
			} while ((sk = sk->next) != NULL);
			best_size_so_far = size;
			best = result;
		next:;
		}
		result = best;
		for(i = 0; i < (1 << 16) / UDP_HTABLE_SIZE; i++, result += UDP_HTABLE_SIZE) {
			if (result > sysctl_local_port_range[1])
				result = sysctl_local_port_range[0]
					+ ((result - sysctl_local_port_range[0]) &
					   (UDP_HTABLE_SIZE - 1));
			if (!udp_lport_inuse(result))
				break;
		}
		if (i >= (1 << 16) / UDP_HTABLE_SIZE)
			goto fail;
gotit:
		udp_port_rover = snum = result;
	} else {
		struct sock *sk2;
		for (sk2 = udp_hash[snum & (UDP_HTABLE_SIZE - 1)];
		     sk2 != NULL;
		     sk2 = sk2->next) {
			if (sk2->num == snum &&
			    sk2 != sk &&
			    sk2->bound_dev_if == sk->bound_dev_if &&
			    (!sk2->rcv_saddr ||
			     !sk->rcv_saddr ||
			     sk2->rcv_saddr == sk->rcv_saddr) &&
			    (!sk2->reuse || !sk->reuse))
				goto fail;
		}
	}
	sk->num = snum;
	if (sk->pprev == NULL) {
		struct sock **skp = &udp_hash[snum & (UDP_HTABLE_SIZE - 1)];
		if ((sk->next = *skp) != NULL)
			(*skp)->pprev = &sk->next;
		*skp = sk;
		sk->pprev = skp;
		sock_prot_inc_use(sk->prot);
		sock_hold(sk);
	}
	write_unlock_bh(&udp_hash_lock);
	return 0;
fail:
	write_unlock_bh(&udp_hash_lock);
	return 1;


8. Datagram Soketler ile Stream Soketler Arasındaki Farklar


Stream soketler, TCP/IP protokolunun taşıma katmanında bulunan TCP'yi (Transmission Control Protocol) kullanır. Datagram soketler ise yine aynı katmandaki UDP'yi (User Datagram Protoxol) kullanır. TCP/IP protokolünün OSI Referans Modeli ile karşılaştırmalı katman yapısı:

Bu iki türün özellikleri ve aralarındaki temel farkları şöyle sıralayabiliriz:

1. Stream soketler verileri sıralı gönderir, datagram soketleri sıralı göndermeyebilir. (TCP protokolu, paketleri sıralı göndermeyi garanti eder. UDP garanti etmez. TCP paketlerin başlık bilgisinde sıra numarası vardır, UDP'de yoktur. TCP, her zaman sıradaki paketi ister. Örneğin 4 numaralı paket yerine 5 numaralı paket eline ulaşırsa karşı tarafa bunu bildirir ve 4'ü ister. 4'ü alınca da 5'ten önceye koyar.)

2. Stream soketler güvenlidir, Datagram soketler güvensizdir. (TCP protokolu güvenliği garanti eder, UDP garanti etmez. Çünkü TCP acknowledgement ile denetim yapar. Yani bir paketi gönderdiği zaman, karşı taraf paketi aldığını haber vermeden o paketi göndermiş saymaz kendini ve tekrar gönderir. ayrıca paketin doğru gidip gitmediğini anlamak için başlık bilgisinde checksum -kontrol bilgisi- tutar. UDP'de checksum tutar ancak checksum yanlışsa aynı paketi tekrar istemez.)

3. Stream soketler, işlem bitene kadar kesintisiz bir bağlantı kurar. Datagram soketler ise bağlantı kurmaz. Sadece veri göndereceği zaman bağlantı kurar ve işi bitince bağlantıyı koparır.

UDP her ne kadar kendisi paket güvenliğini denetlemese de bunu yazılımcı yapabilir. Örneğin TCP bir paketi gönderdiğinde karşı tarafın onu aldığını anlamak için acknowledgement bekler. UDP bunu yapmaz. Fakat bunu soket yazılımcısı yapabilir. Yazılımcı, gönderilen her pakete bir cevap bekleyerek bunu sağlar.


9. RFC' ler için Internet Bilgileri


 

RFC Description
1983Internet Users' Glossary

Index

RFC Searchable Index
Intro Introduction to the Internet Protocols
Cisco Cisco on Internet Protocols
CERN History of Internet Protocols
2151 A Primer On Internet and TCP/IP Tools and Utilities
802.3 Charles Spurgeon's Ethernet Site
802.3 The IEEE Working Group on Ethernet
IEEE Purchase a copy of the IEEE 802.3 Standard here (expensive!)
919
922
950
IP Internet Protocol
791 IPv4 - Internet Protocol version 4
2407 IPSec Internet Protocol Security
1883IPv6 - Internet Protocol version 6
1042Sending IP datagrams over IEEE 802 networks
894Sending IP datagrams over Ethernet networks
1112 IPv4 Multicasting
1108IP Security Option
793TCP - Transport Control Protocol
768UDP - User Datagram Protocol
1459
2810
2811
2812
2813
IRCP - Internet Relay Chat Protocol
854
855
Telnet Telnet Protocol
959 FTP - File Transfer Protocol
1350 TFTP Trivial File Transfer Protocol
2347
2348
2349
TFTP - Trivial File Transfer Protocol (Draft Standard)
821 SMTP - Simple Mail Transfer Protocol
1777 LDAP - Lightweight Directory Access Protocol
1348
1637
1706
DNS - Domain Name Server
1035 DNS - Domain Name Server
2131 DHCP - Dynamic Host Configuration Protocol
1902
1903
1904
1905
1906
1907
1908
SNMPv2c Simple Network Management Protocol version 2c
1157
1156
SNMP - Simple Network Management Protocol
792 ICMP Internet Control Message Protocol
2236 IGMP Internet Group Management Protocol
1826 AH - Authentication Header
826 ARP Addess Resolution Protocol
ARP ARP - Address Resolution Protocol (not RFC)
903 RARP Reverse Addess Resolution Protocol
RARP RARP - Reverse Address Resolution Protocol (not RFC)
1721
1721
1721
RIP Routing Resolution Protocol version 2
2516 PPPoE Point-to-Point Protocol Ethernet
1548 PPP - Point-to-Point Protocol
1548 PPTP - Point-to-Point Tunneling Protocol
2637 Point-to-Point Tunneling Protocol (Informational)
1331 Sending various types of datagrams over point-to-point links
1305 NTP - Network Time Protocol
2030 SNTP Simple Network Time Protocol
1361
1769
SNTP - Simple Network Time Protocol
1889 RTP - Real Time Protocol - Interactive video & audio over Internet
1889 RTCP - Real Time Control Protocol - Interactive video & audio over Internet
2326 RTSP - Real Time Streaming Protocol
2959 Real-Time Transport Protocol Management Information Base (Proposed Standard)
2960 Stream Control Transmission Protocol (Proposed Standard)
1819 Internet Stream Protocol Version 2 (ST2 - experimental)
RSVP RSVP - Resource Reservation Protocol (not RFC)
1094 NFS - Network File System
1014 XDR - External Data Refresentation for NFS
1436
2068
HTTP - Hypertext Transfer Protocol (web browsing)
2616 HTTP - Hypertext Transfer Protocol
2660 HTTPS - Hypertext Transfer Protocol Secure
1808 URL - Universal Resource Locator
1737 URI - Universal Resource Identifier
1282 Rlogin - Remote Login
1288 Finger - Simple protocol to transfer data
1282 WHOIS - Lookup of registered DNS domains
2402 IP Authentication Header (Proposed Standard)
1827 ESP - Encapsulation Security Protocol
2668 MAUs - Definitions of Managed Objects for IEEE 802.3 Medium Attachment Units (Proposed Standard)
2977 Mobile IP Authentication, Authorization, and Accounting Requirements (Informational)
3012 Mobile IPv4 Challenge/Response Extensions (Proposed Standard)
3115 Mobile IP Vendor/Organization-Specific Extensions (Proposed Standard)
3002 Overview of 2000 IAB Wireless Internetworking Workshop (Informational)
3010 NFS version 4 Protocol (Proposed Standard)
3016 RTP Payload Format for MPEG-4 Audio/Visual Streams (Proposed Standard)
2728 Transmission of IP Over the Vertical Blanking Interval of a TV Signal (Proposed Standard)
3003 The audio/mpeg Media Type (Proposed Standard)
1614 Network Access to Multimedia Information
IPoS IPoS - Internet Protocols over Satellite

Şekil 13. RFC numaralarına göre açıklamalar


10. Bazı Kısaltmalar


UDP User Datagram Protocol

TCP Transmission Control Protocol

IP Internet Protocol

RFC Request for Comment

OSI Open System Interconnection

WAN Wide Area Network

DNS Domain Name Server

CRC Cyclic Redundancy Control


11. Kaynaklar


  1. Rıfat Çölkesen, Bülent Örencik - Bilgisayar Haberleşmesi ve Ağ Teknolojileri

  2. http://www.firewall.cx/

  3. http://www.networksorcery.com/

  4. http://www.netfor2.com/

  5. http://www.compnetworking.about.com/


12. Yasal Açıklamalar


Telif Hakları

Bu belgenin, Linux'da CD Yazımı, 0.1 sürümünün telif hakkı © 2003 İpek TÜRKER 'e aittir. Bu belgeyi, Free Software Foundation tarafından yayınlanmış bulunan GNU Özgür Belgeleme Lisansının 1.1 ya da daha sonraki sürümünün koşullarına bağlı kalarak kopyalayabilir, dağıtabilir ve/veya değiştirebilirsiniz. Bu Lisansın bir kopyasını http://www.gnu.org/copyleft/fdl.html adresinde bulabilirsiniz.

Feragatname

Bu belgedeki bilgilerin kullanımından doğacak sorumluluklar, ve olası zararlardan belge yazarı sorumlu tutulamaz. Bu belgedeki bilgileri uygulama sorumluluğu uygulayana aittir.

Tüm telif hakları aksi özellikle belirtilmediği sürece sahibine aittir. Belge içinde geçen herhangi bir terim bir ticarî isim ya da kuruma itibar kazandırma olarak algılanmamalıdır. Bir ürün ya da markanın kullanılmış olması ona onay verildiği anlamında görülmemelidir.