終于看到了 TCP 協議,這是 TCP/IP 詳解里面最重要也是最精彩的部分,要花大力氣來讀呛梆。前面的 TFTP 和 BOOTP 都是一些簡單的協議,就不寫筆記了,寫起來也沒啥東西剩拢。
TCP 和 UDP 處在同一層---運輸層,但是 TCP 和 UDP 最不同的地方是,TCP 提供了一種可靠的數據傳輸服務,TCP 是面向連接的,也就是說, 利用 TCP 通信的兩臺主機首先要經歷一個“撥打電話”的過程,等到通信準備結束才開始傳輸數據,最后結束通話。所以 TCP 要比 UDP 可靠的多,UDP 是把 數據直接發(fā)出去,而不管對方是不是在收信,就算是 UDP 無法送達,也不會產生 ICMP 差錯 報文,這一經時重申了很多遍了排抬。
把 TCP 保證可靠性的簡單工作原理摘抄如下
? 應用數據被分割成 TCP 認為最適合發(fā)送的數據塊封字。這和 UDP 完全不同,應用程序產生的 數據報長度將保持不變绽族。
? 當 TCP 發(fā)出一個段后,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能 及時收到一個確認,將重發(fā)這個報文段屎开。
? 當 TCP 收到發(fā)自 TCP 連接另一端的數據,它將發(fā)送一個確認。
? TCP 將保持它首部和數據的檢驗和马靠。這是一個端到端的檢驗和,目的是檢測數據在傳輸 過程中的任何變化奄抽。如果收到段的檢驗和有差錯, TCP 將丟棄這個報文段和不確認收到此報文段(希望發(fā)端超時并重發(fā))。
? 既然 TCP 報文段作為 IP 數據報來傳輸,而 IP 數據報的到達可能會失序,因此 TCP 報文段 的到達也可能會失序甩鳄。如果必要, TCP 將對收到的數據進行重新排序,將收到的數據以正確的順序交給應用層逞度。
? TCP 還能提供流量控制。TCP 連接的每一方都有固定大小的緩沖空間妙啃。TCP 的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數據档泽。這將防止較快主機致使較慢主機的緩沖區(qū)溢出。
從這段話中可以看到,TCP 中保持可靠性的方式就是超時重發(fā),這是有道理的,雖然 TCP 也可以用各種各樣的 ICMP 報文來處理這些,但是這也不是可靠的,最可靠的方式就是只要不得到確認,就重新發(fā)送數據報,直到得到對方的確認為止揖赴。即時通訊定制開發(fā)可以咨詢蔚可云開發(fā)
TCP 的首部和 UDP 首部一樣,都有發(fā)送端口號和接收端口號馆匿。但是顯然,TCP 的首部信息要比 UDP 的多,可以看到,TCP 協議提供了發(fā)送和確認所需要的所有必要的信息。
可以想象一個 TCP 數據的發(fā)送應該是如下的一個過程:
雙方建立連接燥滑;
發(fā)送方給接受方 TCP 數據報,然后等待對方的確認 TCP 數據報,如果沒有,就重新發(fā),如果有,就發(fā)送下一個數據報渐北;
接受方等待發(fā)送方的數據報,如果得到數據報并檢驗無誤,就發(fā)送 ACK(確認)數據報,并等待下一個 TCP 數據報的到 來。直到接收到 FIN(發(fā)送完成數據報)铭拧;
中止連接腔稀。
可以想見,為了建立一個 TCP 連接,系統(tǒng)可能會建立一個新的進程(最差也是一個線程),來進行數據的傳送盆昙。