做者: remcarpediem
聯繫方式:segmentfault,csdn,簡書git
本文轉載請註明做者、文章來源,連接,版權歸做者全部。github
前段時間提交了本科畢業論文,這段時間特別空閒,因而但願研究一些基礎性的技術,好比網絡和編譯原理。因而就找來《TCP/IP協議詳解》來看,並作一些筆記,記錄一下感悟或在重點。
爲了節約你的時間,本文主要內容爲:segmentfault
TCP/IP協議族安全
TCP和UDP的區別網絡
TCP提供可靠性的方式數據結構
TCP首部格式網絡傳輸協議
TCP/IP協議是一組網絡傳輸協議的集合,按照網絡模型的不一樣層次,使用不一樣的傳輸協議進行分工合做。TCP/IP的網絡參考模型一共有四層,自上而下分別爲應用層,傳輸層,網絡層和數據鏈路層。spa
鏈路層,有時候也稱爲數據鏈路層或網絡接口層,一般包括操做系統中的設備驅動程序和計算機中對應的網絡接口卡。它們一塊兒處理與電纜(或者其餘任何傳輸媒介)的物理接口細節。操作系統
網絡層,有時也稱爲互聯網層,處理分組在網絡中的活動,例如分組的選路。在TCP/IP協議族中,網絡層協議包括IP協議,ICMP協議,以及IGMP協議。.net
傳輸層主要爲兩臺主機上的應用程序提供端到端的通訊,在TCP/IP協議族中,有兩個互不相同的傳輸協議:TCP(傳輸控制協議)和UDP(用戶數據報協議)。TCP相對安全穩定,可是UDP速度更快。
應用層負責處理特定的應用程序細節。幾乎各類不一樣的TCP/IP實現都會提供下面這些通用的應用程序:
Telnet遠程登錄
FTP文件傳輸協議
SMTP簡單郵件傳輸協議
SNMP 簡單網絡管理協議
TCP和UDP都是傳輸層的協議,可是兩者卻有着不少的不一樣。TCP提供一種面向鏈接的,可靠的字節流服務。而UDP是一個簡單的面向數據報文的傳輸層協議:進程中的每一個輸出操做都正好產生一個UDP數據報文,而且組裝成一份待發送的IP數據報,而TCP協議中,應用程序產生的全體數據與真正發送的單個IP數據報可能沒有什麼聯繫。UDP也不提供可靠性保證。
TCP和UDP的主要區別如圖所示。
&ems;與UDP不一樣的是,TCP提供各類方式來保證數據傳輸的正確性:
應用數據被分割成TCP認爲最合適發送的數據快。這和UDP徹底不一樣,應用程序產生的數據報長度不變。
TCP發送一個報文段以後,它啓動一個定時器,等待目的端確認收到這個報文段。若是不能及時收到一個確認,將從新發送這個報文。
當TCP收到發自TCP鏈接另外一端的數據,它將發送一個確認。
TCP將保持它首部和數據的檢驗和。這是一個端到端的檢驗和,目的是檢測數據在傳輸過程當中的任何變化。若是收到端的檢驗和有差異,TCP將丟棄這個報文段。
TCP會對收到的數據金喜重排,將收到的數據以正確的順序交給應用層。
TCP的接受端會放棄重複的數據
TCP提供流量控制。TCP接受的每一方都有固定大小的緩衝空間。TCP的接受端只容許另外一端發送接收端緩衝區所能容納的數據。
TCP數據被封裝在一個IP數據報中,以下圖所示。
下圖顯示TCP首部的數據結構。若是不計任何可選字段的話,它一般是20個字節。
每一個TCP端都包含源端和目的端的端口號,用於尋找發送端和接受端應用進程。這兩個值加上IP首部的源端IP地址和目的端IP地址惟一肯定一個TCP鏈接。
序號用來標識TCP發端向TCP收端發送的數據字節流,它表示在這個報文段中的第一個字節數據。若是將字節流看做在兩個應用程序之間的單向流動,則TCP用序號來對每一個字節進行計數。序號是32位的無符號數。
確認序號包含發送確認的一端所指望收到的下一個序號。所以,確認序號應當是上次已經成功收到的數據字節序號+1。只有ACK標誌爲1時確認序號字段纔有效。
首部長度給出TCP首部的字節數目。須要這個值是由於任選字段的長度是可變的。
TCP首部中有6個標誌位。
URG:緊急指針有效標誌位,當它被置爲1時,緊急指針纔有效。
ACK:確認序號有效,當它被置爲1時,確認序號纔有效。
PSH:接受方應該儘快將這個報文交給應用層。
RST:重建鏈接。
SYN:同步序號用來發起一個新鏈接。
FIN:發端完成發送任務。
窗口大小來進行TCP的流量控制。窗口大小爲字節數,起始於確認序號字段指明的值,這個值是接受端指望接受的字節。
檢驗和覆蓋了整個的TCP報文段:TCP首部和TCP數據。這是一個強制性的字段,必定由發端進行計算和存儲,並由收端進行檢驗。
緊急指針是一個正的偏移量,和序號字段中的值相加表示緊急數據最後一個字節的序號。TCP的緊急方式是發送端向另外一端發送緊急數據的一種方式。
本片文章幾乎就是一個讀書筆記摘要。每一個章節都如此,既無養分也很浪費時間,但願本身之後能夠多作一些總結和實質性的文章吧。但願之後能夠找到一個好的方式來寫讀書筆記。