網絡編程之TCP/IP基礎
一、ISO/OSI參考模型
1、 OSI(open system interconnection)開放系統互聯模型是由ISO(InternationalOrganization for Standardization)國際標准化組織定義的網絡分層模型,共七層。
2、
q 物理層(PhysicalLayer):物理層定義了所有電子及物理設備的規范,為上層的傳輸提供了一個物理介質,本層中數據傳輸的單位為比特(bit)。屬於本層定義的規范有EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等,實際使用中的設備如網卡等屬於本層。
q 數據鏈路層(DataLink Layer):對物理層收到的比特流進行數據成幀。提供可靠的數據傳輸服務,實現無差錯數據傳輸。在數據鏈路層中數據的單位為幀(frame)。屬於本層定義的規范有SDLC、HDLC、PPP、STP、幀中繼等,實際使用中的設備如switch交換機屬於本層。
q 網絡層(NetworkLayer):網絡層負責將各個子網之間的數據進行路由選擇,分組與重組。本層中數據傳輸的單位為數據包(packet)。屬於本層定義的規范有IP、IPX、RIP、OSPF、ICMP、IGMP等。實際使用中的設備如路由器屬於本層。
q 傳輸層(TransportLayer):提供可靠的數據傳輸服務,它檢測路由器丟棄的包,然後產生一個重傳請求,能夠將亂序收到的數據包重新排序。
q 會話層(SessionLayer):管理主機之間會話過程,包括會話建立、終止和會話過程中的管理。
q 表示層(PresentationLayer):表示層對網絡傳輸的數據進行變換,使得多個主機之間傳送的信息能夠互相理解,包括數據的壓縮、加密、格式轉換等。
q 應用層(ApplicationLayer):應用層與應用程序界面溝通,以達至展示給用戶的目的。在此常見的協定有: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等
二、TCP/IP四層模型
對等通信
封裝
分用
端口
q 眾所周知端口(WellKnown Ports):從0到1023,這些端口由IANA分配和控制它們緊密綁定於一些服務。通常這些端口的通訊明確表明了某種服務的協議。例如:21端口為ftp服務端口。
q 注冊端口(RegisteredPorts):從1024到49151。它些端口不受IANA控制,但由IANA登記並提供使用情況清單。它們松散地綁定於一些服務。也就是說有許多服務綁定於這些端口,這些端口同樣用於許多其它目的。例如:1433 Microsoft SQL服務端口
q 動態或私有端口(Dynamicor Private Ports):從49152到65535。IANA不管這些端口。實際上,機器通常從1024起分配動態端口。但也有例外:SUN的RPC端口從32768開始。
02TCP/IP基礎(二)
一、MTU
以太網和IEEE 802.3對數據幀的長度都有限制,其最大值分別是1500和1492字節,將這個限制稱作最大傳輸單元(MTU,Maximum Transmission Unit)
如果IP層有一個數據報要傳,而且數據的長度比鏈路層的MTU還大,那麼IP層就要進行分片(Fragmentation),把數據報分成若干片,這樣每一片都小於MTU。
當網絡上的兩台主機互相進行通信時,兩台主機之間要經過多個網絡,每個網絡的鏈路層可能有不同的MTU,其中兩台通信主機路徑中的最小MTU被稱作路徑MTU。
二、以太網幀格式
三、ICMP
四、ARP
五、數據在網絡中傳輸過程
步驟a:應用程序ping會判斷發送的是主機名還是IP地址,調用函數gethostbyname()解析主機機B,將主機名轉換成一個32位的IP地址。這個過程叫做DNS域名解析
步驟b:ping程序向目的IP地址發送一個ICMP的ECHO包
步驟c:將目標主機的IP地址轉換為48位硬件地址,在局域網內發送ARP請求廣播,查找主機B的硬件地址。
步驟d:主機B的ARP協議層接收到主機A的ARP請求後,將本機的硬件地址填充到應答包,發送ARP應答到主機A。
步驟e:發送ICMP數據包到主機B
步驟f:主機B接收到主機A的ICMP包,發送響應包。
步驟g:主機A接收到主機B的ICMP包響應包。
六、RARP
03TCP/IP基礎(三)
一、IP數據報格式
1. 版本
a) IP協議版本號,長度為4位,IPv4此字段值為4,IPv6此字段值為6
2. 首部長度
a) 以32位的字為單位,該字段長度為4位,最大值為15,所以首部長度最大為60個字節
3. 服務類型(TOS)
a) 長度為8位。此字段包含3位的優先權(現已忽略),4位的服務類型子字段和1位的保留位(必須置0)。4位的服務類型分別為最小延遲(D)、最大吞吐量(T)、最高可靠性(R)、最小費用(F)。
4.
5. 總長度
a) 該字段長度為16位,以字節為單位,該字段長度包含IP的頭部和數據部分。IP數據報最大可達65535個字節。
6. 標識
a) 16位標識,用來標識一個IP包,每發送一個此值會加1
7. 標志與片偏移
a) 3位標志其中第一位不使用, 每二位DF(Don’tFragment),該位如果為1,如果傳輸的數據報超過最大傳輸單元,該數據報會被丟棄,並發送一個ICMP差錯報文。第三位MF(More Fragment)表示是否有更多的片,該位為1,說明後續有分片。最後一片MF為0。
b) IP分片後每一個分組都具有自己的首部,但是片偏移值不同,通過片偏移值接收端可以重新組裝IP包。
8. TTL
a) TTL(Time To Live)表示數據報最多可經過的路由器的數量。數據報每經過一個路由器,TTL減1,減為0時丟棄,並發送ICMP報文通知源主機。TTL可以避免數據報在路由器之間不斷循環。
9. 協議類型
a) 表示IP層上承載的是哪個高級協議。在封裝與分用的過程中,協議棧知道該交給哪個層的協議處理。1 ICMP 2 IGMP 6 TCP 17 UDP
10. 頭部校驗和
a) 保證數據報頭部的數據完整性,但校驗不包括數據部分。這樣做的目的有二:一是所有將數據封裝在IP數據包中的高層協議均含有覆蓋整個數據的校驗和,因此IP數據報沒有必要再對其所承載的數據部分進行校驗。二是每經過一個路由器,IP數據報的頭部要發生改變,而數據部分不變,這樣只對發生改變的頭部進行校驗,顯然不會浪費太多的時間。為了減少計算時間,一般不用CRC校驗碼,而是采用更簡單的網際校驗和。
11. TTL
a) TTL(Time To Live)表示數據報最多可經過的路由器的數量。數據報每經過一個路由器,TTL減1,減為0時丟棄,並發送ICMP報文通知源主機。TTL可以避免數據報在路由器之間不斷循環。
12. 協議類型
a) 表示IP層上承載的是哪個高級協議。在封裝與分用的過程中,協議棧知道該交給哪個層的協議處理。1 ICMP 2 IGMP 6 TCP 17 UDP
13. 頭部校驗和
a) 保證數據報頭部的數據完整性,但校驗不包括數據部分。這樣做的目的有二:一是所有將數據封裝在IP數據包中的高層協議均含有覆蓋整個數據的校驗和,因此IP數據報沒有必要再對其所承載的數據部分進行校驗。二是每經過一個路由器,IP數據報的頭部要發生改變,而數據部分不變,這樣只對發生改變的頭部進行校驗,顯然不會浪費太多的時間。為了減少計算時間,一般不用CRC校驗碼,而是采用更簡單的網際校驗和。
14. 源IP地址
a) 發送數據的主機IP地址
15. 目的IP地址
a) 接收數據的主機IP地址
16. 選項與填充(選項為4字節整數倍,否則用0填充)
a) 安全和處理限制
b) 路徑記錄:記錄所經歷路由器的IP地址
c) 時間戳:記錄所經歷路由器的IP地址和時間
d) 寬松源站路由:指定數據報文必須經歷的IP地址,可以經過沒有指定的IP地址。
e) 嚴格的源站路由:指定數據報文必須經歷的IP地址,不能經過沒有指定的IP地址。
二、網際校驗和
網際校驗和,英文全稱(Internet Checksum)
發送方對要發送的數據劃分為許多16位字序列(如果數據的字節數為奇數,則在末尾補一字節0湊成偶數。)對這些序列反碼求和,便得到校驗和。
如果數據在傳輸過程中沒有發生任何差錯,那麼接收方計算校驗和的結果應該為全1。如果結果不是全1(即校驗和錯誤)。
三、路由
04TCP/IP基礎(四)
一、TCP的特點
基本於字節流
面向連接
可靠傳輸
緩沖傳輸
全雙工
流量控制
二、TCP報文段格式
1. 源端口號與目的端口號
a) 源端口號和目的端口號,加上IP首部的源IP地址和目的IP地址唯一確定一個TCP連接。
2. 序號
a) 序號表示在這個報文段中的第一個數據字節序號。
3. 確認號
a) 僅當ACK標志為1時有效。確認號表示期望收到的下一個字節的序號。
4. 頭部長度
a) 4位,TCP頭部最多60個字節
5. 保留位
a) 6位,必須為0
6. 6個標志位
a) URG-緊急指針有效
b) ACK-確認序號有效
c) PSH-接收方應盡快將這個報文段交給應用層
d) RST-連接重置
e) SYN-同步序號用來發起一個連接
f) FIN-表示將要終止一個連接
7. 窗口大小
8. 通過窗口大小來達到流量控制。
9. 校驗和
10. 對tcp頭與數據進行校驗
11. 緊急指針
a) 是一個正的偏移量,與序號字段中的值相加表示緊急數據最後一個字節的序號。TCP的緊急方式是發送端向另一端發送緊急數據的一種方式。
12. 選項與填充(選項為4字節整數倍,否則用0填充)
a) 最常見的可選字段是最長報文大小MSS(Maximum Segment Size),每個連接方通常都在通信的第一個報文段中指明這個選項。它指明本端所能接收的最大長度的報文段。該選項如果不設置,默認為536(20+20+536=576字節的IP數據報)
三、連接建立三次握手
四、連接終止四次握手
五、TCP如何保證可靠性
應用數據被分割成TCP認為最適合發送的數據塊,稱為段傳遞給IP層。
當TCP發出一個段後,它啟動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
當TCP收到發自TCP連接另一端的數據,它將發送一個確認。這個確認不是立即發送,通常將推遲幾分之一秒。
TCP將保持它首部和數據的校驗和。這是一個端到端的校驗和,目的是檢測數據在傳輸過程中的任何變化。如果收到段的校驗和有差錯,TCP將丟棄這個報文段並且不確認(導致對方超時重傳)
TCP承載於IP數據報來傳輸,而IP數據報的到達可能會失序,因此TCP報文段的到達也可能會失序。TCP將對收到的數據進行重新排序。
IP數據報會發生重復,TCP的接收端必須丟棄重復的數據。
TCP還能提供流量控制。TCP連接的每一方都有一定大小的緩沖空間。
05TCP/IP基礎(五)
一、滑動窗口協議
通告接收窗口(rwnd):預防應用程序發送的數據超過對方的緩沖區。接收方使用的流量控制
擁塞窗口(cwnd):預防應用程序發送的數據超過網絡所能承受的能力。發送方使用的流量控制
發送窗口取兩者較小值
慢啟動閥值(ssthresh:slow start threshold)
慢啟動階段:cwnd從1開始按指數增長直到ssthresh
擁塞避免階段:cwnd按線性增長,直到擁塞,將cwnd=1,ssthresh減半。