TCP 協(xié)議
概述
傳輸控制協(xié)議 為了在不可靠的互聯(lián)網(wǎng)上提供可靠的端到端字節(jié)流而專門設(shè)計的一個傳輸協(xié)議
設(shè)計目標
為了能動態(tài)適應互聯(lián)網(wǎng)絡不同部分有著截然不同的 拓撲結(jié)構(gòu) 貸款 延遲 數(shù)據(jù)包大小 和其他參數(shù) 的特性
TCP服務模型
TCP 服務由發(fā)送端和接受端創(chuàng)建的一種稱為 套接字(socket) 的端點來獲得
每個套接字都有一個套接字編號
為了獲得TCP連接 必須顯式的在一臺機器的套接字和另一臺機器套接字之間建立一個連接
套接字(socket)
每個套接字都有一個套接字編號(地址) 該編號由主機的IP地址以及一個本地主機的16位數(shù)值組成 這個16位數(shù)值稱為端口 端口是TCP的TSAP名字
所有的TCP連接都是全雙工(可以同時在兩個方向上傳輸數(shù)據(jù)) 點對點(每個連接恰好由兩個端點)的
一個TCP連接是一個字節(jié)流 而不是消息流 端到端之間不保留消息邊界 接受端無法獲知發(fā)送端所發(fā)送的數(shù)據(jù)塊大小
TCP 可以立即發(fā)送數(shù)據(jù) 也可以緩沖數(shù)據(jù)之后再次發(fā)送 (為了收集更多數(shù)據(jù)一次發(fā)送出去)
TCP數(shù)據(jù)的交換
TCP連接上的每個字節(jié)都有一個獨有的32位序號
發(fā)送端和接受端的TCP實體以段的形式交換數(shù)據(jù)
TCP段由一個固定的20字節(jié)的頭(加上可選部分)以及隨后0個或者多個數(shù)據(jù)字節(jié)構(gòu)成
TCP軟件決定了段的大小 它可以將多次寫操作中的數(shù)據(jù)積累起來 放在一個段中發(fā)送 也可以將一次寫操作中的數(shù)據(jù)分割到多個段中發(fā)送
TCP實體使用的基本協(xié)議
具有動態(tài)窗口大小的滑動窗口協(xié)議 當發(fā)送端傳送一段時 它會啟動一個計時器 當該段到達接受方時 接受端的TCP實體會返回一個攜帶確認號和剩余窗口大小的段(如果由數(shù)據(jù)要發(fā)送 則包含數(shù)據(jù) 否則不包含)并且確認號的值等于接收段期望接收的下一個序號 如果發(fā)送端的計時器在確認端到達之前超時 則發(fā)送端再次發(fā)送原來的段