Bir ağ üzerinde yer alan iki bilgisayar birbirleri arasında bilgi transferi yapacağı zaman aralarında bir TCP bağlantısı kurmaları gerekmektedir. Bu TCP bağlantısı, iki taraftan birisinin TCP bağlantı isteğini yapmasıyla başlar.
TCP bağlantılarında, karşılıklı gönderilen paketlerin hedefe ulaşıp, ulaşmadığını garanti etmek amacıyla sıra ve onay numaraları (sequence number & acknowledgment number) kullanılır.
TCP bağlantısını başlatan taraf, göndereceği TCP segmentinin başlığının (header) içerisindeki SYN bitinin değerini "1" yapar ve TCP bağlantısı için bir başlangıç sıra numarası (ISN = Initial Sequence Number) üretir. Bu sıra numarası , her işletim sisteminde farklı algoritmalarla, rastgele olacak şekilde üretilen bir sayıdır. Sıra ve onay numaralarının her birinin uzunluğu 32 bittir.
Yazımızda önce TCP 3 aşamalı el skışıma (TCP 3 way handshaking) aşamasından bahsedeceğiz:
Senaryomuzda A bilgisayarı, B sunucusuna bir HTTP isteği yapacaktır. Bilindiği gibi HTTP istekleri normalde TCP 80 numaralı portu kullanır. Bunun için A bilgisayarının, B sunucusuna 80 numaralı port üzerinden bir TCP bağlantısı başlatması gereklidir.
A bilgisayarı TCP başlığı içindeki SYN bayrağının değerini "1" yapar ve rastgele bir başlangıç sıra numarası (ISN = Initial Sequence Number) üretir. Yukarıda da belirtmiş olduğumuz gibi, ISN her işletim sisteminde farklı bir algoritmayla üretilmektedir. A bilgisayarı TCP bağlantısını başlattığı için ve B sunucusundan henüz herhangi bir cevap da almamış olduğu için göndereceği segmentin onay numarasının (acknowledgment number) değeri "0"dır (sıfır).

B sunucusu aldığı bu TCP segmentine, kendi ISN'sini (Initial Sequence Number) içeren bir başka TCP segmentiyle cevap verir. B sunucusunun gönderdiği bu TCP segmentinin başlığındaki SYN ve ACK bayraklarının değeri "1" olarak belirlenmiştir. Ayrıca bu segment, içerisinde A bilgisayarından almış olduğu paketin onay numarası da içermektedir.

Bunda sonraki aşamada A bilgisayarı, bağlantının kurulması için B sunucusuna son olarak bir segment daha gönderir. Bu segmentin başlığı içindeki ACK bayrağının değeri "1" olarak belirlenir. Ayrıca A bilgisayarı, B sunucusunun göndermiş olduğu segmenti aldığını da bir onay numarası (acknowledgment number) göndererek bildirir. Bu onay numarasının değeri almış olduğu TCP segmentinin içerisinde yer alan B sunucusuna ait olan sıra numarasının (sequence number) "bir" fazlasıdır.

Böylece A bilgisayarı ve B sunucusu arasında TCP bağlantısı kurulmuş olur. Bundan sonra her iki uç arasında veri akışı başlayacaktır. Bundan sonra veri akışının devam etmesi için ilk TCP segmentini A bilgisayarı gönderecektir. Bu ilk segmentin sıra numarası 42276644579 ve onay numarası da 3363649304 olacaktır.

Bundan sonra gelecek olan üç segment aşağıdaki gibi olacaktır:



Veri alışverişi, sıra ve onay numaraları bu şekilde artarak bağlantı bitene kadar devam eder.
ÖNEMLİ NOT: Bu örnekte dikkat edilirse sıra ve onay numaralarının birer birer arttığı görülür. Fakat gerçek hayattaki bir TCP bağlantısında bu numaralar birer birer artmazlar. Bu numaralar, segmentin içerdiği verinin büyüklüğüne bağlı olarak bir artış gösterirler. Bununla ilgili örneği de bir sonraki yazımızda anlatmayı planlıyoruz.