@Copyright圖片版權歸筆者全部,轉載請告知.網絡
這篇文章能幫助你們快速回憶計算機網絡體系,固然短短的文章並不能深刻表述,文章並未涉及網絡層和數據鏈路層,重點敘述了傳輸層.可能有所不足或錯誤,也謝謝你們指出,共同進步數據結構
計算機網絡協議體系結構目前有兩種,一種是OSI/RM七層協議,另外一種則是TCP/IP協議體系,兩種體系結構對計算機網絡分別劃分了7和5個層次,OSI/RM是一種參考協議,當前用的主要仍是TCP/IP體系.
tcp
TCP/IP協議族按照層次由上到下,層層包裝。頂層是應用層,裏面有http,ftp,等等咱們熟悉的協議。第二層則是傳輸層,著名的TCP和UDP協議就在這個層次。第三層是網絡層,IP協議就在這裏,它負責對數據加上IP地址和其餘的數據以肯定傳輸的目標。第四層是叫數據鏈路層,這個層次爲待傳送的數據加入一個以太網協議頭,並進行CRC編碼,爲最後的數據傳輸作準備。再往下則是物理層了,負責網絡的傳輸,這個層次的定義包括網線的制式,網卡的定義等等,這不是咱們關注的部分,它幾乎和tcp/ip協議的編寫者沒有任何的關係。發送協議的主機從上自下將數據按照協議封裝,而接收數據的主機則按照協議從獲得的數據包解開,最後拿到須要的數據。這種結構很是有棧的味道,因此也把tcp/ip協議族稱爲tcp/ip協議棧。測試
這兩種傳輸層協議分別在不一樣的網絡環境與應用場合中有不一樣的用途。編碼
網絡服務通常都是經過知名端口號來識別的。知名的1~1023之間的端口號由Internet號碼分配機構(Internet Assigned Numbers Authority, IANA)來管理。如今IANA管理1~1023之間全部的端口號。
大多數TCP/IP實現給臨時端口分配1024~5000之間的端口號。大於5000的端口號是爲其餘服務(Internet上並不經常使用的服務)預留的。spa
應用程序 | FTP | TELNET | HTTP | HTTPS |
---|---|---|---|---|
熟知端口號 | 21 | 23 | 80 | 443 |
若是仔細檢查這些標準的簡單服務以及其餘標準的TCP/IP服務(如Telnet、FTP、SMTP等)的端口號時,咱們發現它們都是奇數。這是由於這些端口號都是從NCP端口號派生出來的(NCP,即網絡控制協議,是ARPANET的傳輸層協議,是TCP的前身)。NCP是單工的,不是全雙工的,所以每一個應用程序須要兩個鏈接,需預留一對奇數和偶數端口號。當TCP和UDP成爲標準的傳輸層協議時,每一個應用程序只須要一個端口號,所以就使用了NCP中的奇數。計算機網絡
先來一張親手繪製的美圖指針
先來一張三次握手圖code
1.客戶端說我要鏈接你,因而把請求鏈接的SYN字段置爲1,序列號爲n的清量請求數據段發送給接收方.
2.接收方收到後,發送了一個請求鏈接字段SYN和確認字段ACK置爲1,序號爲m,確認號爲n+1(表示我剛剛收到你的數據段序號爲n,下面我但願收到n+1的數據段)的數據段給發送方.
3,發起鏈接的一方收到確認信息後,對此確認信息進行確認,因而發送了序號爲n+1,確認號爲m+1的確認輕量級數據段進行確認.
4.接收方收到確認信息後,此端到端的通訊即建立成功.blog
四次揮手圖
1.客戶端發起關閉鏈接的請求,因而發送FIN字段置爲1,序號爲n的數據段.
2.服務端收到請求後,發送了ACK字段爲1,序號爲m的數據段,由於關閉客戶端發送數據的鏈接,因此服務端不須要再收到確認了,所以無需發送確認號.
3.當服務端認爲本身數據傳輸完成了,因而發起FIN字段爲1,序號爲1,確認號爲n+1的數據段,由於上一次客戶端發送的是序號n,因此這次請求但願收到n+1的數據段.客戶端收到關閉請求後,發送確認數據段.
1.以上 稱服務端和客戶端有些許絕對,只是方便描述,其實能夠看作發送端和接收端,即平級的.
2.關閉鏈接也可能發生數據段丟失,所以也會引入超時重傳機制.
SYN:TCP鏈接的第一個包,很是小的一種數據包。 TCP首部的數據格式,若是不計任選字段,它一般是20個字節。 每一個TCP段都包含源端和目的端的端口號,用於尋找發端和收端應用進程。這兩個值加上IP首部中的源端IP地址和目的端IP地址惟一肯定一個TCP鏈接。序號:用來標識從TCP發端向TCP收端發送的數據字節流,它表示在這個報文段中的的第一個數據字節。若是將字節流看做在兩個應用程序間的單向流動,則TCP用序號對每一個字節進行計數。序號是32 bit的無符號數。當創建一個新的鏈接時,SYN標誌變1。序號字段包含由這個主機選擇的該鏈接的初始序號ISN(Initial Sequence Number)。由於SYN標誌消耗了一個序號,該主機要發送數據的第一個字節序號爲這個ISN加1。確認序:號包含發送確認的一端所指望收到的下一個序號。確認序號應當是上次已成功收到數據字節序號加1。只有ACK標誌爲1時確認序號字段纔有效。發送ACK無需任何額外代價,由於32 bit的確認序號字段和ACK標誌同樣,老是TCP首部的一部分。所以,咱們看到一旦一個鏈接創建起來,這個字段老是被設置,ACK標誌也老是被設置爲1。TCP爲應用層提供全雙工服務。這意味數據能在兩個方向上獨立地進行傳輸。所以,鏈接的每一端必須保持每一個方向上的傳輸數據序號。在TCP首部中有6個code bits 中的多個可同時被設置爲1。含義以下:URG緊急指針(urgent pointer)有效. ACK確認序號有效。 PSH接收方應該儘快將這個報文段交給應用層。 RST重建鏈接。 SYN同步序號用來發起一個鏈接。 FIN發端完成發送任務。TCP的流量控制由鏈接的每一端經過聲明的窗口大小來提供。窗口大小爲字節數,窗口大小是一個16 bit字段,於是窗口大小最大爲65535bit數據即8KB。檢驗和覆蓋了整個的TCP報文段:包括了TCP首部和TCP數據。這是一個強制性的字段,必定是由發端計算和存儲,並由收端進行驗證。只有當URG標誌置1時緊急指針纔有效。緊急指針是一個正的偏移量,和序號字段中的值相加表示緊急數據最後一個字節的序號。TCP的緊急方式是發送端向另外一端發送緊急數據的一種方式。最多見的可選字段是最長報文大小,又稱爲MSS (Maximum Segment Size)。每一個鏈接方一般都在通訊的第一個報文段(爲創建鏈接而設置SYN標誌的那個段)中指明這個選項。它指明本端所能接收的最大長度的報文段。TCP報文段中的數據部分是可選的。在一個鏈接創建和一個鏈接終止時,雙方交換的報文段僅有TCP首部。若是一方沒有數據要發送,也使用沒有任何數據的首部來確認收到的數據。在處理超時的許多狀況中,也會發送不帶任何數據的報文段。