程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> TCP/IP學習筆記(1)

TCP/IP學習筆記(1)

編輯:關於VC++

一、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、搜索路由表,尋找能與目的網絡號相匹配的表目,如果找到,則將數據報發給該表目指定的下一站路由器或直接連接的網絡接口。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved