Lab2: HTTP

Wireshark Lab: TCP and
UDP
Supplement to Computer Networking: A Top-Down
Approach, 6th ed., J.F. Kurose and K.W. Ross
“Tell me and I forget. Show me and I remember. Involve me and I
understand.” Chinese proverb
© 2005-21012, J.F Kurose and K.W. Ross, All Rights Reserved
Bu laboratuvarda TCP ve UDP protokollerini detaylı olarak inceleyeceğiz. Ayrıca
PC’nizden uzaktaki bir sunucuya 150KB büyüklüğündeki bir dosya transfer anında
gönderilen ve alınan TCP segmentlerinin izini (trace) inceleyeceğiz. Güvenilir data
transferi sağlamak için TCP’nin dizi ve doğrulama numaraları (sequence and
acknowledgement numbers) üzerinde çalışacağız. Kısaca TCP bağlantı kurulumuna
bakacağız ve bilgisayarınız ile sunucu arasındaki TCP bağlantısının performansını (birim
zamanda transfer edilen data miktarını/çıktıyı ve data paketinin gönderilip ona onay
mesajının gelmesi sürecinde geçen zamanı [throughput and round-trip time])
araştıracağız.
1. Bilgisayarınızdan uzak bir sunucuya birçok data bloğunun transferi
(bulk transfer) esnasında TCP paketlerinin yakalanması
TCP’yi incelemeye başlamadan önce, PC’nizden uzaktaki bir sunucuya bir dosyanın TCP
transferinin izini (trace) elde etmek için Wireshark programını kullanmaya ihtiyacımız
olacaktır. Bunun için bilgisayarınızda tutulan bir dosyanın (Alice Harikalar Diyarında’nın
ASCII tekstini içeren) ismini girmenizi isteyen bir web sayfasına erişim sağlamanız,
daha sonra bu dosyayı http POST metodu kullanarak bir web sunucuya transfer iletmeniz
gerekmektedir. GET metodundan ziyade POST metodu kullanıyoruz, çünkü büyük
miktarda bir veriyi bilgisayarınızdan başka bir bilgisayar/sunucuya transfer etmek
istiyoruz. Bilgisayarınızdan gönderilen ve alınan TCP segment’lerinin izini elde etmek
için tabi ki Wireshark programının bu süre zarfında çalışıyor vaziyette olması lazım.
Aşağıdakileri sırası ile gerçekleyiniz:
 Web
browser’ı
çalıştırıp
http://gaia.cs.umass.edu/wireshark-labs/alice.txt
sayfasına giriniz ve Alice Harikalar Diyarında’nın ASCII kopyasını alıp
bilgisayarınızda bir yere kaydediniz.
 Sonra
http://gaia.cs.umass.edu/wireshark-labs/TCP-wireshark-file1.html
sayfasına giriniz.
 Aşağıdaki gibi bir ekranla karşılaşacaksınız:




Daha önce kaydetmiş olduğunuz Alice Harikalar Diyarında’nın tekst dosyasının
(alice.txt) yolunu “browse” butonunu kullanarak gösteriniz. Hemen “Upload
alice.txt file” butonuna basmayınız.
Şimdi Wireshark’ı başlatıp paket yakalama işine başlayın (Capture->Start). Sonra
“Wireshark Packet Capture Options” penceresinden OK ye basınız. (burada
herhangi bir seçeneği seçmeye gerek yok)
Tekrar tarayıcıya dönerek “Upload alice.txt file” butonuna basarak alice.txt
dosyasının “gaia.cs.umass.edu” sunucusuna yüklenmesini sağlayınız. Dosya
yüklendikten sonra tarayıcı pencerenizde tebrikler mesajı göreceksiniz.
Wireshark paket yakalamayı durdurun. Wireshark ekranınız aşağıdaki gibi
görünecektir.
2. Yakalanan ize (trace’e) ilk bakış
Detaylı olarak TCP bağlantısının davranışını incelemeden önce izi üst seviye bir
inceleyelim.
 Öncelikle yakalanan paketleri “tcp” yazarak filtreleyelim. (küçük harflerle ve
tırnak işareti olmaksızın)
Görmeniz gereken şey bilgisayarınızla “gaia.cs.umass.edu” sunucusu arasındaki TCP ve
HTTP mesajlar topluluğu. Ilk olarak SYN mesajı içeren üç-yollu bir el sıkışma (kontrol
mesajlarının değişimi) göreceksiniz. HTTP POST mesajı göreceksiniz. Sonra
kullandığınız Wireshark versiyonuna bağlı olarak bilgisayarınızdan “gaia.cs.umass.edu”
sunucusuna gönderilen “HTTP Continuation” mesajlarını göreceksiniz. “HTTP
Continuation” mesajları, bir HTTP mesajını taşımak için birden fazla TCP segmentinin
kullanıldığını gösteriyor. (Daha önce HTTP Wireshark labında yapılanları hatırlayın.)
Wireshark’ın sonraki versiyonlarında Wireshark ekranının Info sütununda “[TCP
segment of a reassembled PDU PDU-Protocol Data Unit-]” göreceksiniz. Bu, üst
katmandaki bir protokole (örneğin burada HTTP) ait mesajların datasını içeren TCP
segmentini gösterir. “gaia.cs.umass.edu” sunucundan bilgisayarınıza dönen TCP ACK
segment’lerini de göreceksiniz.
Aşağıdaki soruları cevaplayınız. Soruları cevaplandırırken trace içindeki paketlerin ekran
görüntülerini de ekleyiniz.
1. gaia.cs.umass.edu sunucuna data transfer etmek için kullanılan istemcinin IP
adresi ve TCP port numarası nedir?
2. gaia.cs.umass.edu sunucunun IP adresi ve TCP port numarası nedir?
Bu laboratuvarda HTTP’den ziyade TCP ile ilgilenileceğinden yakalanan HTTP
paketlerini göstermemek için Analyze->Enabled Protocols menüsünden HTTP
kutusundaki check işaretini kaldırıp OK’ye basalım. Şimdi Wireshark penceresi aşağıdaki
gibi olacaktır:
Şimdi bilgisayarınızla gaia.cs.umass.edu
segment’lerini inceleyelim.
sunucusu
arasında
gönderilen
TCP
3. TCP Temelleri
TCP segment’leri ile ilgili aşağıdaki soruları cevaplandırınız:
3. Bilgisayarınızla gaia.cs.umass.edu sunucusu arasında TCP bağlantısını başlatmak
için kullanılan TCP SYN segment’inin dizi numarası nedir? Bir TCP segment’i
içindeki hangi şey bu segmentin SYN segment’i olduğuna işaret eder?
4. SYN segment’ine gaia.cs.umass.edu sunucusunun göndermiş olduğu SYNACK
segment’inin dizi numarası nedir? SYNACK segment’i içindeki
Acknowledgement alanındaki değer nedir? Bir TCP segment’i içindeki hangi şey
bu segmentin SYNACK segment’i olduğuna işaret eder?
5. HTTP POST komutunu içeren TCP segment’inin dizi numarası nedir? Bunu
bulabilmek için Wireshark penceresinin en altındaki paket içerik alanına
bakılması gerekir. (HTTP ile ilgili sorulduğu için tekrar Analyze->Enabled
Protocols menüsünden HTTP kutusu aktif hale getirilmeli)
6. TCP bağlantısındaki HTTP POST komutunu içeren TCP segment’i ilk segment
olarak düşünün. TCP bağlantısındaki ilk altı segment’in (HTTP POST’u içeren
segment de dahil) dizi numaraları nedir? Her segment ne zaman gönderildi? Her
segment’e ACK ne zaman geldi? Her segmentin gönderilmesi ve ACK gelmesi
arasındaki zaman farkını (RTT) hesaplayın. Her ACK’tan sonra EstimatedRTT
değeri nedir? Aşağıdaki gibi bir tablo oluşturun.
Gönderilme
zamanı
ACK alınma
zamanı
RTT (saniye)
Segment 1
Segment 2
Segment 3
Segment 4
Segment 5
Segment 6
Daha sonra her ACK’tan sonra EstimatedRTT’yi hesaplayın. İlk segment
için EstimatedRTT değeri ölçülen RTT değerine eşittir. Diğerleri için
aşağıdaki denklemi kullanarakhesaplayınız.
EstimatedRTT = α * EstimatedRTT + (1 - α) SampleRTT
(α için tavsiye edilen aralık 0.8-0.9)
7. İlk altı TCP segment’ninuzunluğune kadardır?
8. Tüm trace dosyası için düşünüldüğünde alıcıda ilan edilen minimum buffer
büyüklüğü (alıcı pencere büyüklüğü) nedir?
9. Bir ACK’te alıcı tipik olarak ne kadar data onaylar? (Ardışıl iki ACK’ın
onaylanmış sıra numaraları arasındaki fark iki ACK arasındaki sunucudan alınan
datayı gösterir) Aşağıdaki tabloyu ilk 5 ACK için doldurunuz. Alıcının aldığı
diğer her segment’i de onayladığı bazı durumları (ACK numarası vererek) belirler
misiniz? (Bunu cevaplarken MSS-maximum segment size’ı düşünün. Diğer
segmenti de onaylıyor ise onaylanmış data 2 katına çıkmış demektir. )
Onaylanmış sıra numarası
Onaylanmış data
ACK 1
ACK 2
ACK 3
ACK 4
ACK 5
ACK 5
….
10. TCP bağlantısı için birim zamanda transfer edilen data miktarını (throughput)
belirleyiniz? Nasıl hesapladığınızı açıklayınız.
Wireshark Lab: UDP (User Datagram Protocol)
Bu kısımda UDP taşıma protokolüne hızlı bir göz atacağız. Bu bölüme kadar artık bir
Wireshark uzmanı oldunuz. Yapılacak olanlar önceki laboratuvarlarda olduğu gibi
adımlar detaylı verilmeyecek.
UDP Temelleri
Wireshark’ta paket yakalamayı başlatın sonra bilgisayarınızda birkaç UDP paketi
göndermeye almaya sebep olacak bir şeyler yapın. Örneğin bazı sitelere tarayıcınız
yardımı ile girmeniz yeterli; çünkü UDP, DNS (domain name server) tarafından
tarayıcıya yazdığınız adreslerin bulunduğu makinelerin IP adreslerini bulmak için
kullanılır.
Paket yakalamayı durdurduktan sonra bilgisayarınızdan gönderilen veya alınan UDP
paketlerini incelemek için “udp” yazarak filtreleme yapın. UDP paketlerinden birini
seçerek içeriğini detaylı olarak inceleyin.
Aşağıdaki soruları cevaplayınız:
1. UDP paketlerinden birini seçin. UDP başlığı (header) içinde ne kadar alan
olduğunu adları ile beraber söyleyin.
2. Her bir UDP başlık alanının uzunluğunu (bytes) bulunuz.
3. UDP başlığındaki uzunluk alanı neyin uzunluğunu gösteriyor? Cevabınızı
kanıtlayınız.
4. UDP payload’unda (taşıma kapasitesi) maksimum ne kadar byte veri olabilir?
İkinci soru ile bunu ilişkilendiriniz.
5. Mümkün olabilecek en büyük port numarası nedir?
6. İki tane UDP paketi belirleyin. Biri bilgisayarınızın gönderdiği, diğeri ilk pakete
cevap olan. Bu iki UDP paketi arasındaki ilişkiyi inceleyin.
7. (Ekstra Puan) Boyutu küçük bir UDP paketi belirleyip elinizle bu paketin
check’um'ını hesaplayın. Programda görülen değerle karşılaştırın.