TCP/IP
計算機與網絡設備之間如果要相互通信, 雙方就必須基於相同的規則(例如由哪一方先發起通信, 使用哪種語言進行通信, 怎樣發送與接收數據,怎樣結束通信等,不同的硬件,操作系統之間如何通信),這種規則稱為協議 (protocol)。而 TCP/IP 是互聯網相關各類協議族的總稱。
TCP/IP協議族按層次分別為:應用層,傳輸層,網絡層,數據鏈路層,物理層。
傳輸層
該層為兩台主機上的應用程序提供端到端的通信。傳輸層有兩個傳輸協議:TCP (傳輸控制協議) 和 UDP (用戶數據報協議)。
傳輸控制協議 TCP(Transmission Control Protocol)
- 是一種面向連接的、可靠的、全雙工的、基於字節流的傳輸層通信協議。
用戶數據報協議 UDP(User Datagram Protocol)
- UDP 在傳送數據之前不需要先建立連接,遠程主機在收到 UDP 報文后,不需要給出任何確認。
- 雖然 UDP 不提供可靠交付,但在某些情況下 UDP 確是一種最有效的工作方式(一般用於即時通信),比如: QQ 語音、 QQ 視頻 、直播等等
TCP 報文段首部格式

- 源端口和目的端口:各占 2 個字節,分別是源端口和目的端口。IP 地址 + 端口號就可以確定一個地址。
-
序號/序列號(Sequense Number,seq):在一個 TCP 連接中傳送的字節流中的每一個字節都按順序編號。該字段表示本報文段所發送的數據的第一個字節的序號。初始序號稱為 Init Sequense Number, ISN。
例如,一報文段的序號是 101,共有 100 字節的數據。這就表明:本報文段數據的第一個字節的序號是 101,最后一個字節的序號是 200。顯然,下一個報文段的數據序號應當從 201 開始,即下一個報文段的序號字段值應為 201。
- 確認號 ack:期望收到對方下一個報文段的第一個數據字節的序號。若確認號為 N,則表明:到序號 N-1 為止的所有數據都已正確收到。
保留位右邊是 6 個控制位, 用來說明該報文段性質。
- 緊急位 URG:當 URG = 1 時,表明此報文段中有緊急數據,是高優先級的數據,應盡快發送,不用在緩存中排隊。
- 確認 ACK:僅當 ACK = 1 時確認號字段才有效,當 ACK = 0 時確認號無效。TCP 規定,在連接建立后所有傳送的報文段都必須把 ACK 置為 1。
- 推送 PSH:當兩個應用進程進行交互式的通信時,有時在一端的應用進程希望在鍵入一個命令后立即就能收到對方的響應。在這種情況下,TCP 就可以使用推送(push)操作。這時,發送方 TCP 把 PSH 置為 1,並立即創建一個報文段發送出去。接收方 TCP 收到 PSH = 1 的報文段,就盡快地交付接收應用進程。而不用等到整個緩存都填滿了后再向上交付。
- 復位 RST:當 RST = 1 時,表明 TCP 連接中出現了嚴重錯誤(如由於主機崩潰或其他原因),必須釋放連接,重新建立傳輸連接。
-
同步 SYN:SYN = 1 表示這是一個連接請求或連接接受報文。
當 SYN = 1 而 ACK = 0 時,表明這是一個連接請求報文段。對方若同意建立連接,則應在響應的報文段中使 SYN = 1 且 ACK = 1。
- 終止 FIN:當 FIN = 1時,表明此報文段的發送發的數據已發送完畢,並要求釋放運輸連接。
