一、TCP/IP結構:
TCP/IP是一個四層協議,結構如下:
1、應用層:各種應用程序和協議,如Http、FTP等。
2、傳輸層:TCP和UDP
TCP提供一種可靠的運輸層服務,但UDP是不可靠的,不能保證數據報到正確到達目的地。
3、網絡層:IP、IGMP、ICMP
IP提供的是一種不可靠的服務,也就是盡可能塊地把分組從源節點送到目的節點,但並
不提供任何可靠性保證。ICMP是IP的附屬協議,主要用來交換錯誤報文,IGMP是組管理協議,用來將UDP數據報多播到多個主機。
4、鏈路層:設備驅動程序和網卡等
二、IP地址和子網掩碼
要學習TCP/IP協議,首先要提到的是IP地址。每台主機的IP地址是一個32位的二進制數。每個IP地址被分割位兩部分:前綴和後綴。前綴用來確定計算機從屬的物理網絡,後綴用來確定網絡上單獨的計算機。互聯網上每一個物理網絡都有一個唯一的值作為網絡號,該網絡號必須全球一致。
1、IP地址分類:
IP地址分位五類:A類、B類、C類、D類、E類,其中A類、B類和C類為基本類,D類用於多播,E類屬於保留類,現在不用。它們的格式如下(其中*代表網絡號):
A類:0******* XXXXXXXX XXXXXXXX XXXXXXXX
B類:10****** ******** XXXXXXXX XXXXXXXX
C類:110***** ******** ******** XXXXXXXX
D類:1110**** XXXXXXXX XXXXXXXX XXXXXXXX
E類:1111**** XXXXXXXX XXXXXXXX XXXXXXXX
這樣,A類地址的范圍為:0.0.0.0-127.255.255.255
B類地址的范圍為:128.0.0.0-191.255.255.255
C類地址的范圍為:192.0.0.0-223.255.255.255
D類地址的范圍為:224.0.0.0-239.255.255.255
E類地址的范圍為:240.0.0.0-247.255.255.266
◆ 幾個特殊IP地址
網絡地址:IP地址中主機地址全為0的地址,如128.211.0.0。
廣播地址:IP地址中主機地址全為1的地址,如128.211.255.255。
環回地址:127.0.0.1,主要用於測試。
2、子網掩碼:
現在的主機都要求支持子網掩碼,不再把IP地址看成為由單純的一個網絡號和一個主機號組成,而是把主機號再分成一個子網號和一個主機號。例如一個B類地址(140.252),在剩下的16位中,8位用於子網號,8位用於主機號,這樣就允許254個子網,每個子網就可以有254台主機。為了確定多少位用於子網號,多少位用於主機號,這就要用到子網掩碼了。其中值為1的位留給網絡號和子網號,為0的位留給主機號。
三、數據包的封裝和分用
1、封裝:
應用程序→TCP/UDP→IP→以太網
2、分用:
以太網←IP←TCP/UDP←應用程序
以太網
首部
(14)
IP首部
(20)
TCP首
部(20)
應用數據 以太網
尾部(4)
四、IP首部:
IP協議是TCP/IP協議族中最核心的協議,所有的TCP、UDP、ICMP和IGMP數據都以IP數據報格式傳輸。IP傳輸的兩個特點:不可靠和無連接。IP協議並不保證數據報能成功地到達目的地,也不維護後續數據報的狀態信息。必須由上層協議處理。
4位
版本
4位首
部長度
8位服務類型 16位總長度(字節數) 16位標識 3位
標志
13位片偏移 8位TTL 8位協議 16位首部檢驗和 32位源IP地址 32位目的IP地址IP首部定義:
typedef struct ip_hdr
{
unsigned char ip_verlen; // 4-bit 版本號
// 4-bit 首部長度 (in 32-bit words)
unsigned char ip_tos; // IP 服務類型
unsigned short ip_totallength; // 總長度(字節數)
//第一個32位
unsigned short ip_id; // 標識
unsigned short ip_offset; //3位標志,13位分片偏移,
#define IP_DF 0x4000 //0x4000 don''t fragment flag
#define IP_MF 0x2000 //0x2000 more fragment flag
#define IP_OFFMASK 0x1fff //0x1fff mask for fragmenting bits
//第二個32位
unsigned char ip_ttl; // 生存時間
unsigned char ip_protocol; // 上層協議
unsigned short ip_checksum; // 首部檢驗和
//第三個32位
unsigned int ip_srcaddr; // 源IP地址
//第四個32位
unsigned int ip_destaddr; // 目的IP地址
//第五個32位
} ip,IPV4_HDR, *PIPV4_HDR, FAR * LPIPV4_HDR;
說明:ip_verlen前4位目前為4,表示為IPv4,後4位為5,表示首部長度為5X4=20個字節。
ip_tos為服務類型(type of service),aaabbbbc,aaa為優先權子字段,現在已被忽略,bbbb為TOS子字段,代表:最小時延、最大吞吐量、最高可靠性和最小費用,c未使用必須為0。如果bbbb均為0,則表示為一般服務。目前大多數TCP/IP實現都不支持TOS特性。
ip_totallength為IP數據報的總長度,以字節為單位,因此理論最大值為65535,但實際是不可能的。
ip_id為唯一標識主機發送的每一個數據報,通常每發一份它的值就會加1。
ip_off前3位標志abc,a為保留,必須為0,b為不分片標志,c為更多分片標志。
ip_off後13位為分片位置,以8字節為單位計算。因此,除最後一個分片外,其他每個分片都希望是一個8字節倍數的數據,從而使後面的分片從8字節邊界開始。
ip_ttl為IP報的生存周期,每經過一個路由器就減1,如果該字段為0,則該數據報被丟棄。
ip_protocol:1=ICMP,2=IGMP,3=TCP,17=UDP
ip_checksum為數據報的首部檢驗和。計算方法如下:
USHORT checksum(ip *ip, int size)
{
unsigned long cksum=0;
while (size > 1)
{
cksum += * ((USHORT*)ip )++;
size -= sizeof(USHORT);
}
if (size)
{
cksum +=(USHORT) *(UCHAR*)ip;
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16);
return (USHORT)(~cksum);
}
ICMP、IGMP、TCP和UDP協議也采用相同的檢驗和算法。
五、端口號:TCP/UDP都使用一個16bit地端口號來表示不同地程序。
1、知名端口:一般介於1~255之間,例如:FTP的TCP端口號是21。
2、臨時端口,由於客戶端對端口號一般並不關心,只需保證唯一就可以了,所以系統一般分配臨時端口號。
六、鏈路層:(以以太網為例,地址為48bit)
1、鏈路層的功能:
◆ 為IP模塊發送和接收IP數據報
◆ 為ARP模塊發送ARP請求和接收ARP應答
◆ 為RARP模塊發送RARP請求和接收RARP應答
2、以太網的封裝,以太網IP數據報的封裝在RFC 894中定義的:
目的地址
(6)
源地址
(6)
類型
(2)
數據(46-1500),包括IP、ARP、RARP CRC
(4)
對於ARP和RARP請求/應答數據報大小只有28字節,為了達到46字節的最小長度,必須在後面添加18字節的填充字節。
七、環回地址:
一般把127.0.0.1分配給這個接口,並命名為localhost,一個發給環回接口的IP數據報不能在任何網絡上出現。
1、傳給環回地址的任何數據均作為IP輸入。
2、傳給廣播地址和多播地址的數據報復制一份傳給環回接口,然後送到以太網上。
3、任何傳給該主機IP地址的數據均送到環回接口。
八、最大傳輸單元MTU:
以太網對數據幀的長度都有限制,其最大值為1500。鏈路層的這個特性叫做最大傳輸單元MTU。如果一個IP數據報比MTU大,那IP層就必須進行分片,把數據報分為若干片。如果兩台主機間的通信要通過多個網絡時,那麼每個網絡的鏈路層可能有不同的MTU。重要的不是兩台主機所在網絡的MTU,重要的是兩台主機路徑中的最小MTU,它被成為路徑MTU。
九、IP路由選擇
如果目的主機與源主機直接相連或都在一個共享網絡上,那麼IP數據報就直接送到目的主機上。否則主機就會把數據報發送到一個默認的路由器上,由該路由器來轉發該數據報。IP層在內存中有一個路由表,當收到一份數據報並進行發送時,它都要對該表搜索一次。當數據報來自某個網絡接口時,IP首先檢查目的IP地址是否為本機的IP地址之一或者IP廣播地址。如果是這樣,數據報就被送到由IP首部協議字段所指定的協議模塊進行處理,否則如果IP層被設置為路由器的功能,那麼就對數據報進行轉發,否則丟棄數據報。
我們來看看路由表是什麼:
C:\WINNT\system32>route PRINT
==========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x1000003 ...00 08 02 ca 2d 11 ...... Intel 8255x-based Integrated Fast Ethernet
==========================================================================
Active Routes:
Network Destination Netmask Gateway Interface Metric
目的地 掩碼 網關 主機
0.0.0.0 0.0.0.0 192.1.8.26 192.1.8.84 1
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
192.1.8.0 255.255.255.0 192.1.8.84 192.1.8.84 1
192.1.8.84 255.255.255.255 127.0.0.1 127.0.0.1 1
192.1.8.255 255.255.255.255 192.1.8.84 192.1.8.84 1
224.0.0.0 224.0.0.0 192.1.8.84 192.1.8.84 1
255.255.255.255 255.255.255.255 192.1.8.84 192.1.8.84 1
Default Gateway: 192.1.8.26
==================================================================
IP路由的主要功能:
1、搜索路由表,尋找與目的IP地址完全匹配的表目,如果找到,則將數據報發給該表目指定的下一站路由器或直接連接的網絡接口。
2、搜索路由表,尋找能與目的網絡號相匹配的表目,如果找到,則將數據報發給該表目指定的下一站路由器或直接連接的網絡接口。