天天看點

TCP分析

TCP:傳輸控制協定

=====================

盡管TCP和UDP都使用相同的網絡層(IP),TCP卻向應用層提供與UDP完全不同的服務。TCP提供一種面向連接配接的、可靠的位元組流服務。面向連接配接意味着兩個使用TCP的應用(通常是一個客戶和一個伺服器)在彼此交換資料之前必須先建立一個TCP連接配接。

TCP通過下列方式來提供可靠性:

1. 應用資料被分割成TCP認為最适合發送的資料塊。

2. 當TCP發出一個段後,它啟動一個定時器,等待目的端确認收到這個封包段。如果不能及時收到一個确認,将重發這個封包段。

3. 當TCP收到發自TCP連接配接另一端的資料,它将發送一個确認。這個确認不是立即發送,通常将推遲幾分之一秒.

4. TCP将保持它首部和資料的檢驗和。

5. 既然TCP封包段作為I P資料報來傳輸,而I P資料報的到達可能會失序,是以TCP封包段的到達也可能會失序。如果必要, TCP将對收到的資料進行重新排序,将收到的資料以正确的順序交給應用層。

6. 既然I P資料報會發生重複, TCP的接收端必須丢棄重複的資料。

7. TCP還能提供流量控制。TCP連接配接的每一方都有固定大小的緩沖空間。

TCP首部(通常20個位元組)

-----------------------------------

2位元組源端口号--2位元組目的端口号--4位元組位序号--4位元組确認序号--4位首部長度--6位保留--URG--ACK--PSH--RST--SYN--FIN--2位元組視窗大小--2位元組檢驗和--2位元組緊急指針--

TCP連接配接的建立與終止

------------------------------

TCP是一個面向連接配接的協定。無論哪一方向另一方發送資料之前,都必須先在雙方之間建立一條連接配接。

為了建立一條TCP連接配接:

1. 請求端發送一個SYNC段指明客戶打算連接配接的伺服器的端口,以及初始序号(ISN)。這個SYN段為封包段1。

2. 伺服器發回包含伺服器的初始序号的SYN封包段(封包段2)作為應答。同時,将确認序号設定為客戶的ISN加1以對客戶的SYN封包段進行确認。一個SYN将占用一個序号。

3. 客戶必須将确認序号設定為伺服器的ISN加1以對伺服器的SYN封包段進行确認(封包段3)。

三個封包段完成連接配接的建立,這個過程稱為三次握手(three-way handshake)。

a) Client --> Server

 Source                Destination           Protocol                                        Info

10.0.0.3              203.208.37.104        TCP      49968 > http [SYN] Seq=0 Win=8192 [TCP CHECKSUM INCORRECT] Len=0 MSS=1460 WS=2

Transmission Control Protocol, Src Port: 49968 (49968), Dst Port: http (80), Seq: 0, Len: 0

    Source port: 49968 (49968)

    Destination port: http (80)

    Sequence number: 0    (relative sequence number)

    Header length: 32 bytes

    Flags: 0x02 (SYN)

        0... .... = Congestion Window Reduced (CWR): Not set

        .0.. .... = ECN-Echo: Not set

        ..0. .... = Urgent: Not set

        ...0 .... = Acknowledgment: Not set

        .... 0... = Push: Not set

        .... .0.. = Reset: Not set

        .... ..1. = Syn: Set

        .... ...0 = Fin: Not set

    Window size: 8192

    Checksum: 0xfb61 [incorrect, should be 0x345d (maybe caused by "TCP checksum offload"?)]

        [Good Checksum: False]

        [Bad Checksum: True]

    Options: (12 bytes)

        Maximum segment size: 1460 bytes

        NOP

        Window scale: 2 (multiply by 4)

        SACK permitted

b) Server --> Client

Source                       Destination     Protocol                     Info

203.208.37.104        10.0.0.3              TCP      http > 49968 [SYN, ACK] Seq=0 Ack=1 Win=8190 Len=0 MSS=1452

Transmission Control Protocol, Src Port: http (80), Dst Port: 49968 (49968), Seq: 0, Ack: 1, Len: 0

    Source port: http (80)

    Destination port: 49968 (49968)

    Acknowledgement number: 1    (relative ack number)

    Header length: 24 bytes

    Flags: 0x12 (SYN, ACK)

        ...1 .... = Acknowledgment: Set

    Window size: 8190

    Checksum: 0x6c42 [correct]

        [Good Checksum: True]

        [Bad Checksum: False]

    Options: (4 bytes)

        Maximum segment size: 1452 bytes

    [SEQ/ACK analysis]

        [This is an ACK to the segment in frame: 4]

        [The RTT to ACK the segment was: 3.026885000 seconds]

上一篇: 電路分析
下一篇: 時序分析