本文簡要的講了講TCP/IP的一點基礎,包括TCP/IP網絡模型;網絡分類及切割,以及服務和端口等基礎知識;需要聲明的是,我并不懂TCP/IP的原理,我只是寫一點比較表面的東西。

此文正在修正中,希望高手指點和補充。謝謝~


目錄


++++++++++++++++++++++++++++++++++++++++++++++++++++
正文
++++++++++++++++++++++++++++++++++++++++++++++++++++


1、TCP/IP 概述;

TCP/IP 實際上并不是一個協議,而是一組協議,它包括IP、TCP、UDP、ICMP、ARP等;


1.1 什么是IP、ARP、ICMP、UDP;

IP (Internet Protocol),網際協議;IP是TCP/IP 的最底層,高層協議都要轉化為IP包,IP包含了源地址和目的地址,路由決策也發生在IP層;

ARP (Address Resolution Protocol) ,地址解析協方,把IP地址轉換為硬件物理地址,比如我們所用的網卡的物理地址,類似aa:bb:cc:dd:ee:ff。

ARP Short for Address Resolution Protocol, a network layer protocol used to convert an IP address into a physical address (called a DLC address), such as an Ethernet address. A host wishing to obtain a physical address broadcasts an ARP request onto the TCP/IP network. The host on the network that has the IP address in the request then replies with its physical hardware address.

There is also Reverse ARP (RARP) which can be used by a host to discover its IP address. In this case, the host broadcasts its physical address and a RARP server replies with the host's IP address.

ICMP (Internet Control Message Protocol),網際報文協議;它包括了數據包的錯誤、控制等相關信息。比如ping 命令就是利用ICMP來測試一個網絡的連接情況的工具;

Short for Internet Control Message Protocol, an extension to the Internet Protocol (IP) defined by RFC 792. ICMP supports packets containing error, control, and informational messages. The PING command, for example, uses ICMP to test an Internet connection

TCP (Transmission Control Protocol),傳輸控制協議。TCP運行在IP之上,是基于數據流連接和面向的協議,應用程序把數據要經過TCP/IP的分割成若干包,這樣數據就以字節流發送和接收,到達目的地后,TCP/IP 再按順序進行組裝。TCP/IP 要保證機器與機器之間的連接的可靠性,還要有糾錯。TCP是否被選擇,取決于應用程序或服務;

TCP is one of the main protocols in TCP/IP networks. Whereas the IP protocol deals only with packets, TCP enables two hosts to establish a connection and exchange streams of data. TCP guarantees delivery of data and also guarantees that packets will be delivered in the same order in which they were sent.

UDP (User Datagram Protocol) ,用戶數據報協議 ,象TCP一樣運行在IP之上,是基于數據報或分組的協議,UDP/IP 可以直接發送和接收數據報文,而不必做驗證,這一點與TCP/IP 不同。TCP是否被選擇,取決于應用程序或服務;

Abbreviated UDP, a connectionless protocol that, like TCP, runs on top of IP networks. Unlike TCP/IP, UDP/IP provides very few error recovery services, offering instead a direct way to send and receive datagrams over an IP network. It's used primarily for broadcasting messages over a network.


1.2 TCP/IP 網絡模型;

TCP/IP 的網絡模型是如圖所示;


2、IP地址、網絡類型、網絡切割;

TCP/IP 網絡的每臺計算機都至少有一個(一個計算機有多個網卡是存在的)合法的IP地址,IP地址把此計算機和網絡的其它計算機區別開來。由于IP地址分為兩部份,一部份代表網絡,另一部份代表主機。如果想把一個網絡和另一個網絡區分開來,就涉及到網絡切割。


2.1 IP 地址概說;

IP地址是標識主機在網絡中的位置,象是一個門牌號一樣。所有IP都經過 Internet Assigned Numbers Authority (IANA)分配。IP地址是由四個字節組成,格式 為A:B:C:D,比如 192.168.1.1 。LinuxSir.Org 的IP是多少?ping LinuxSir.Org 就知道了。

IP都經過 Internet Assigned Numbers Authority (IANA)分配。一般的情況下,IANA只和各國政府機構、學會、ISP、或IDC公司交涉。咱們用的IP地址,都是IDC或ISP提供的。比如LinuxSir.Org 的地址是由網通提供的。我用的ADSL,是鐵通提供的。

IP 地址是由四個字節組成,格式 A.B.C.D,每個字節又是由8位二進制數字組成,也就是這樣的格式 xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx 。在A:B:C:D中,前1到3位,可以用來識別網絡,其余部份就用來表示網絡上的主機。

         A       .          B       .        C        .       D   
xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx

地址中哪幾位用來識別網絡,哪幾位用來識別主機,是通過網絡掩碼來實現的。網絡掩碼也是一個四字節的數,如果換算成二進制的數字,對應網絡部份為1,而主機部份為0。

比如掩碼為 255.255.255.0 的網絡,換算成二進制就是 11111111.11111111.11111111.11111111.00000000 。

      A .        B .  C  . D
  255  .      255 . 255 .     0 
11111111.11111111.11111111.00000000
|-----網絡部份----|主機部份|

這表示的意思是網絡中的所有主機的IP地址的前三位必須是相同的,也就是A.B.C是相同的,最后一位是主機位,主機位的不同,就把網絡中的計算機區分開來。比如 192.168.1.1 和192.168.1.2 是不同的主機。

在 255.255.255.0 這個網絡中,從理論上來說,應該有256臺主機,但事實上卻不是這樣。

網絡地址和廣播地址:

每個網絡都有一個網絡地址和廣播地址,網絡地址是把此網區別于彼網的標識,主機部份為0,(二進制),而廣播地址的主機部份全為1。

比如192.168.1.0/24的網絡。按理論來說,IP地址應該從192.168.1.0到192.168.1.255 ,網絡最多有主機數應該有256臺,但因為網絡地址占用了192.168.1.0,廣播地址占用了 192.168.1.255 ,所以在192.168.1.0/24的網絡中,最多只能容納254臺機器。

Address:   192.168.1.0           11000000.10101000.00000001 .00000000
Netmask:   255.255.255.0 = 24    11111111.11111111.11111111 .00000000
Wildcard:  0.0.0.255             00000000.00000000.00000000 .11111111
=>
Network:   192.168.1.0/24        11000000.10101000.00000001 .00000000 (Class C)
Broadcast: 192.168.1.255         11000000.10101000.00000001 .11111111
HostMin:   192.168.1.1           11000000.10101000.00000001 .00000001
HostMax:   192.168.1.254         11000000.10101000.00000001 .11111110
Hosts/Net: 254                   (Private Internet RFC 1918)


2.2 網絡分類;

IANA把網絡進行分類,分類如下:


2.21 A類網絡:

A類網絡部份為8位(二進制),主機部份為24位(二進制)。

         A       .           B     .             C    .     D
xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
|>網絡部份<|---->主機部份<--------------|

地址的第一個字節,范圍從1到127 ;比如 IP地址 126.1.12.0 就歸屬于A類網絡的地址。


2.22 B類網絡:

B類網絡部份為16位(二進制),主機部份為16位(二進制)。

         A       .         B        .        C        .   D    
xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
|---->網絡部份<-----|-----主機部份<-----|

地址的第一個字節,范圍是128-191 ;比如 IP地址 129.13.1.0 就歸屬于B類網絡。


2.23 C類網絡:

C類網絡部份為24位(二進制),主機部份為8位(二進制)。

         A       .         B        .        C        .   D    
xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
|----------網絡部份---------| -主機部份 -|

地址的第一個字節,范圍是192-223;比如 IP地址193.1.21.0 就歸屬于C類網絡。


為了簡單一點,我們用表格列出:

IP地址的第一個字節       歸屬網絡

1-127					 A類
128-191				 B類
192-223				 C類


2.24 保留地址;

為了保證一些網絡能有永遠不能接上Internet 上(或通過NAT才能接到Internet),這些地址用于私有網絡,比如我們所用的本地網地址 192.168.1.0/24網絡就是。下面的一些網絡地址是私有的,只能通過NAT轉換為公網地址才能訪問Internet 。

地址范圍  									   網絡類

10.0.0.0-10.255.255.255  	 			A類
172.16.0.0-172.31.255.255				B類
192.168.0.0-192.168.255.255 			C類
127.0.0.1-127.255.255							回環地址

其中回地址表示數據包的發送和接收都在同一臺主機,如果想讓一個程序只能在本機上運行,就用這個地址。回環地址一般是用127.0.0.1 。在Linux中,用ifconfig lo就能看到了。


2.3 網絡切割;

大型網絡可以劃分為幾個小的網絡,這些小的網絡被稱為子網。劃分大型網絡地址塊為一些小的子網,可以從主機部份進行切分,這樣就能形成一個一個的子網。切割網絡還要知道十進制到二進制的相互換算,這是比較麻煩的。用筆來算是有點難為人。不過我們可以用一個腳本工具來算。

網絡切割腳本下載 ,請點擊: 網絡切割計算器

下載后要解壓;

#tar zxvf ipcalclinuxsir.pl.tar.gz
# chmod 755 ipcalc.pl
# ./ipcalc.pl

可以指定單個IP和掩碼來判斷網絡,比如:

[root@localhost ~]# ./ipcalc.pl 192.168.1.4/255.255.255.0

Address:   192.168.1.4           11000000.10101000.00000001 .00000100
Netmask:   255.255.255.0 = 24    11111111.11111111.11111111 .00000000
Wildcard:  0.0.0.255             00000000.00000000.00000000 .11111111
=>
Network:   192.168.1.0/24        11000000.10101000.00000001 .00000000 (Class C)
Broadcast: 192.168.1.255         11000000.10101000.00000001 .11111111
HostMin:   192.168.1.1           11000000.10101000.00000001 .00000001
HostMax:   192.168.1.254         11000000.10101000.00000001 .11111110
Hosts/Net: 254                   (Private Internet RFC 1918)

值得注意的是:同一個IP地址,由于掩碼不同,此IP地址可能屬于不同的網絡。所以掩碼的設置對于主機來說十分重要。

IP地址:192.168.1.2 掩碼: 255.255.254.0,屬于192.168.0.0/23網絡;

Address:   192.168.1.2           11000000.10101000.0000000 1.00000010
Netmask:   255.255.254.0 = 23    11111111.11111111.1111111 0.00000000
Wildcard:  0.0.1.255             00000000.00000000.0000000 1.11111111
=>
Network:   192.168.0.0/23        11000000.10101000.0000000 0.00000000 (Class C)
Broadcast: 192.168.1.255         11000000.10101000.0000000 1.11111111
HostMin:   192.168.0.1           11000000.10101000.0000000 0.00000001
HostMax:   192.168.1.254         11000000.10101000.0000000 1.11111110
Hosts/Net: 510                   (Private Internet RFC 1918)

IP地址:192.168.1.2 掩碼: 255.255.255.0,屬于192.168.1.0/24網絡;

Address:   192.168.1.2           11000000.10101000.00000001 .00000010
Netmask:   255.255.255.0 = 24    11111111.11111111.11111111 .00000000
Wildcard:  0.0.0.255             00000000.00000000.00000000 .11111111
=>
Network:   192.168.1.0/24        11000000.10101000.00000001 .00000000 (Class C)
Broadcast: 192.168.1.255         11000000.10101000.00000001 .11111111
HostMin:   192.168.1.1           11000000.10101000.00000001 .00000001
HostMax:   192.168.1.254         11000000.10101000.00000001 .11111110
Hosts/Net: 254                   (Private Internet RFC 1918)


3、 路由和網關;

3.1 路由,此網和彼網溝通的紐帶;

此網和彼網溝通 是通過路由,比如 192.168.1.0/24網絡和192.168.2.0/24 相互溝通,就得通過路由。但同一網段的主機相互溝通不需要路由,比如 192.168.1.2和192.168.1.3之間的溝通就不需要路由。但如果192.168.1.2和192.168.1.3 能訪問Internet ,就得需要路由,還得有NAT,就是把192.168.1.2和192.168.1.3主機地址通過IP轉換(也被稱為IP偽裝)成為公網的IP地址,這樣本地網才能和公網溝通。

比如LinuxSir.Org 服務器托管在IDC機房中,機房要為我們提供IP地址、掩碼、網關。

在Linux 中,查看本地機的路由是通過route命令來實現的,比如:

[root@localhost ~]# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0

此主機的默認路由就是192.168.1.1 ,至于更多的配置路由的細節,我們將在以后的章節加以討論。

網關;


4 、服務和端口;

在一臺計算機運行的操作系統,如果這臺計算機是連接在網絡中的,它一定得有一個IP地址。在網絡上使用 ip 來標示一個點, 也可以理解為標示一臺主機。如果您的計算機分配了兩個ip 比如你啟用了兩塊網卡, 在網絡上就認為這是不同的兩個主機。在這臺計算機上可能運行著很多的服務。

端口則是用來標示特定主機的特定服務,比如linuxsir的 www 服務要用 ip:80 來標示。

比如 LinuxSir.Org 的服務器上有FTP、SSH、WWW、IRC等服務,這些服務都用的是一個IP地址。為了能把這些服務運行起來,我們指定了WWW服務器用的是80端口。FTP服務器用的是 21端口等。這塊好象不難理解。

查看Linux服務和端口的字典文件位于 /etc/services ,它 是一個字典文件, 并不用來分配端口。其內容有如下類似的:

ftp 21/tcp
ssh 22/tcp
telnet 23/tcp

有些服務一般是采用默認端口,比如 ftp服務器默認端口是21,ssh服務器端認端口是22,telnet默認端口是23 。當然您可以改變服務的默認端口,以增強系統的安全性;我們在以后的教程中,會涉及到此方面的內容。


5、套接字接口;

套接字接口是進程之間相互通信的網絡連接接口。


6、關于本文;

這一節主要講的是TCP/IP的基礎知識,我寫這些內容實在是眼高手低。在寫的過程中向Pandonny、etoy 、Linuxfish等弟兄請教,才勉強把初稿寫出來。至于是不是對的,我不敢說,還是請高手指點吧。有的地方的確需要補充,但又不知道如何下手。

本來五十米的競賽中,我最快能跑到6.7秒,但現在要求自己跑到6秒,實在是超出我的能力。所以這也是最痛苦的一篇文檔。再一次請教求高手指教。

如果說哪有現成的文檔,就近抄來,我看沒有必要了。現成的文檔是多,但做為這個系列文檔,我還是希望能出在LinuxSir.Org 上,用最簡單的話把比較深奧的理念條理化、清晰化。對于一般用戶來說,只要了解一點基礎就夠了,沒有必要知道TCP/IP的所有東西。

還是那句話,學為所用,用為所學。洋為中用,舊文今用,但得更造一下。

謝謝;


7、致謝;

本文得到了pandonny、etoy、Linuxfish 等三位弟兄的幫助,在此致謝;


8、參考文檔;


9、相關文檔;

《關于網絡概念和網絡分類》