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ş
| 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 garantisi | Gö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ış paketler | UDP 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.
"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.
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ı;
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.
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 kodda çağrılan ana fonksiyonlar şunlardır:
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);
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);
İ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.
| RFC | Description |
| 1983 | Internet 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 |
| 1883 | IPv6 - Internet Protocol version 6 |
| 1042 | Sending IP datagrams over IEEE 802 networks |
| 894 | Sending IP datagrams over Ethernet networks |
| 1112 | IPv4 Multicasting |
| 1108 | IP Security Option |
| 793 | TCP - Transport Control Protocol |
| 768 | UDP - 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
Rıfat Çölkesen, Bülent Örencik - Bilgisayar Haberleşmesi ve Ağ Teknolojileri
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.