網絡編程學習筆記

1. :

    T C P / I P協議族分、網絡層、運輸層,每一各有不同的任。T C P / I P中,網絡層和運輸層的區是最的:網絡層 I P)提供點到點的服而運輸層 T C PU D P)提供端到端的服。這三層通常是在操作系統內核中實現。因此用戶一般不涉及。編程時,編程界面有兩種形式:一、是由內核心直接提供的系統調用;二、使用以庫函數方式提供的各種函數。前者爲核內實現,後者爲核外實現。用戶服務要通過核外的應用程序才能實現,所以要使用套接字(socket)來實現。

 

2. 數據鏈路層協議列舉:

PPP:點對點協議

 

3. IP地址的計算

    16位是網絡號, 即:

10** ****

A

110* ****

B

1110 ****

C

1111 0***

D

1111 1***

E

    特殊的IP地址:

127.*.*.1

環回地址

192*.*.*

局域地址

*.*.*.0

不能作爲目標地址

*.*.*.255

不能作爲源地址,廣播地址

 

4. 子網掩碼:

    除了I P地址以外,主機還需要知道有多少比特用於子網號及多少比特用於主機號。這是在引導過程中通過子網掩碼來確定的。這個掩碼是一個32 bit的值,其中值爲1的比特留給網絡號和子網號,爲0的比特留給主機號。

   

5.網絡協議簡介:

  IP 網間協議(Internet Protocol) 負責主機間數據的路由和網絡上數據的存儲。同時爲ICMPTCPUDP提供分組發送服務。用戶進程通常不需要涉及這一層。

  ARP 地址解析協議(Address Resolution Protocol)

   此協議將網絡地址映射到硬件地址。

  RARP 反向地址解析協議(Reverse Address Resolution Protocol)

   此協議將硬件地址映射到網絡地址

  ICMP 網間報文控制協議(Internet Control Message Protocol)

   此協議處理信關和主機的差錯和傳送控制。

  TCP 傳送控制協議(Transmission Control Protocol)

   這是一種提供給用戶進程的可靠的全雙工字節流面向連接的協議。它要爲用戶進程提供虛電路服務,併爲數據可靠傳輸建立檢查。(注:大多數網絡用戶程序使用TCP

  UDP 用戶數據報協議(User Datagram Protocol)

   這是提供給用戶進程的無連接協議,用於傳送數據而不執行正確性檢查。

  FTP 文件傳輸協議(File Transfer Protocol)

   允許用戶以文件操作的方式(文件的增、刪、改、查、傳送等)與另一主機相互通信。

  SMTP 簡單郵件傳送協議(Simple Mail Transfer Protocol)

   SMTP協議爲系統之間傳送電子郵件。

  TELNET:終端協議(Telnet Terminal Procotol)

   允許用戶以虛終端方式訪問遠程主機

  HTTP 超文本傳輸協議(Hypertext Transfer Procotol)  

  TFTP: 簡單文件傳輸協議(Trivial File Transfer Protocol)

 

6. 網間進程通信:

    進程通信的概念最初來源於單機系統。由於每個進程都在自己的地址範圍內運行,爲保證兩個相互通信的進程之間既互不干擾又協調一致工作,操作系統爲進程通信提供了相應設施,如UNIX BSD中的管道(pipe)、命名管道(named pipe)和軟中斷信號(signal),UNIX system V的消息(message)、共享存儲區(shared memory)和信號量(semaphore)等,但都僅限於用在本機進程之間通信。網間進程通信要解決的是不同主機進程間的相互通信問題(可把同機進程通信看作是其中的特例)。爲此,首先要解決的是網間進程標識問題。這時不能在用進程號(process ID)唯一標識,需要通過(協議,本地地址,本地端口號)來表示其唯一性。

    其次,操作系統支持的網絡協議衆多,不同協議的工作方式不同,地址格式也不同。因此,網間進程通信還要解決多重協議的識別問題。爲了解決上述問題,TCP/IP協議引入了下列幾個概念。

    端口:網絡中可以被命名和尋址的通信端口,是操作系統可分配的一種資源。按照OSI七層協議的描述,傳輸層與網絡層在功能上的最大區別是傳輸層提供進程通信能力。從這個意義上講,網絡通信的最終地址就不僅僅是主機地址了,還包括可以描述進程的某種標識符。爲此,TCP/IP協議提出了協議端口(protocol port,簡稱端口)的概念,用於標識通信的進程。

    端口是一種抽象的軟件結構(包括一些數據結構和I/O緩衝區)。應用程序(即進程)通過系統調用與某端口建立連接(binding)後,傳輸層傳給該端口的數據都被相應進程所接收,相應進程發給傳輸層的數據都通過該端口輸出。在TCP/IP協議的實現中,端口操作類似於一般的I/O操作,進程獲取一個端口,相當於獲取本地唯一的I/O文件,可以用一般的讀寫原語訪問之。

    類似於文件描述符,每個端口都擁有一個叫端口號(port number)的整數型標識符,用於區別不同端口。由於TCP/IP傳輸層的兩個協議TCPUDP是完全獨立的兩個軟件模塊,因此各自的端口號也相互獨立,如TCP有一個255號端口,UDP也可以有一個255號端口,二者並不衝突。

    端口號的分配是一個重要問題。有兩種基本分配方式:第一種叫全局分配,這是一種集中控制方式,由一個公認的中央機構根據用戶需要進行統一分配,並將結果公佈於衆。第二種是本地分配,又稱動態連接,即進程需要訪問傳輸層服務時,向本地操作系統提出申請,操作系統返回一個本地唯一的端口號,進程再通過合適的系統調用將自己與該端口號聯繫起來(綁紮)。TCP/IP端口號的分配中綜合了上述兩種方式。TCP/IP將端口號分爲兩部分,少量的作爲保留端口,以全局方式分配給服務進程。因此,每一個標準服務器都擁有一個全局公認的端口(即周知口,well-known port),即使在不同機器上,其端口號也相同。剩餘的爲自由端口,以本地方式進行分配。TCPUDP均規定,小於256的端口號才能作保留端口。

    地址:網絡通信中通信的兩個進程分別在不同的機器上。在互連網絡中,兩臺機器可能位於不同的網絡,這些網絡通過網絡互連設備(網關,網橋,路由器等)連接。因此需要三級尋址:

l         某一主機可與多個網絡相連,必須指定特定網絡地址;

l         網絡上每一臺主機應有其唯一的地址;

l         每一主機上的每一進程應有在該主機上的唯一標識符。

    通常主機地址由網絡ID和主機ID組成,在TCP/IP協議中用32位整數值表示;TCPUDP均使用16位端口號標識用戶進程。

    網絡字節順序:不同的計算機存放多字節值的順序不同,有的機器在起始地址存放低位字節(低價先存),有的存高位字節(高價先存)。爲保證數據的正確性,在網絡協議中須指定網絡字節順序。TCP/IP協議使用16位整數和32位整數的高價先存格式,它們均含在協議頭文件中。

    連接:兩個進程間的通信鏈路稱爲連接。連接在內部表現爲一些緩衝區和一組協議機制,在外部表現出比無連接高的可靠性。

    半相關:網絡中用一個三元組可以在全局唯一標誌一個進程:(協議,本地地址,本地端口號)

    全相關:一個完整的網間進程通信需要由兩個進程組成,並且只能使用同一種高層協議。也就是說,不可能通信的一端用TCP協議,而另一端用UDP協議。因此一個完整的網間通信需要一個五元組來標識:(協議,本地地址,本地端口號,遠地地址,遠地端口號)

 

7. 客戶機/服務器模式

  在TCP/IP網絡中兩個進程間的相互作用的主機模式是客戶機/服務器模式(Client/Server model)。該模式的建立基於以下兩點:1、非對等作用;2、通信完全是異步的。客戶機/服務器模式在操作過程中採取的是主動請示方式:

  首先服務器方要先啓動,並根據請示提供相應服務:(過程如下)

  1、打開一通信通道並告知本地主機,它願意在某一個公認地址上接收客戶請求。

  2、等待客戶請求到達該端口。

  3、接收到重複服務請求,處理該請求併發送應答信號。

  4、返回第二步,等待另一客戶請求

  5、關閉服務器。

 

  客戶方:

  1、打開一通信通道,並連接到服務器所在主機的特定端口。

  2、向服務器發送服務請求報文,等待並接收應答;繼續提出請求……

  3、請求結束後關閉通信通道並終止。

面向接的套接字的系統調

 

協議的套接字調

 

 

8. 服務器模型

    循環服務器UDP UDP服務器每次從套接字上讀取一個客戶端的請求,處理, 然後將結果返回給客戶機。沒有一個客戶端可以老是佔住服務端,對於每一個客戶機的請求總是能夠滿足. 

    循環服務器TCP TCP服務器接受一個客戶端的連接,然後處理,完成了這個客戶的所有請求後,斷開連接. 只要客戶不斷開連接服務就被一直佔用,很少使用。

 

併發服務器TCP: 併發服務器的思想是每一個客戶機的請求並不由服務器直接處理,而是服務器創建一個 子進程來處理。它可以解決器客戶機獨佔服務器的情況,不過創建子進程是一種非常消耗資源的操作.

    併發服務器多路複用I/Oselect 

int select(int nfds,fd_set *readfds,fd_set *writefds,

                fd_set *except fds,struct timeval *timeout)

 void FD_SET(int fd,fd_set *fdset)

 void FD_CLR(int fd,fd_set *fdset)

 void FD_ZERO(fd_set *fdset)

 int FD_ISSET(int fd,fd_set *fdset)

    一般的來說當我們讀寫文件時,進程有可能在讀寫出阻塞,直到一定的條件滿足。比如我們從一個套接字讀數據時,可能緩衝區裏面沒有數據可讀(通信的對方還沒有發送數據過來),這個時候我們的讀調用就會等待(阻塞),直到有數據可讀。如果我們不希望阻塞,我們的一個選擇是用select系統調用。只要我們設置好select的各個參數,那麼當文件可以讀寫的時候select"通知"我們說可以讀寫了.

l         readfds所有要讀的文件文件描述符的集合

l         writefds所有要的寫文件文件描述符的集合

l         exceptfds其他的服要向我們通知的文件描述符

l         timeout超時設置

l         nfds所有我們監控的文件描述符中最大的那一個加1

    在我們調用select時進程會一直阻塞直到以下的一種情況發生. 1)有文件可以讀;2)有文件可以寫;3)超時所設置的時間到。爲了設置文件描述符我們要使用幾個宏.

l         FD_SETfd加入到fdset 

l         FD_CLRfdfdset裏面清除

l         FD_ZEROfdset中清除所有的文件描述符

l         FD_ISSET判斷fd是否在fdset集合中

使用select的一個例子:

int use_select(int *readfd,int n)

{

        fd_set my_readfd;

        int maxfd;

        int i;

       

        maxfd=readfd[0];       

        for(i=1;i<n;i++)

        {

            if(readfd[i]>maxfd) maxfd=readfd[i];

        }       

       

        while(1)

        {

            /* 將所有的文件描述符加入 */

            FD_ZERO(&my_readfd);           

            for(i=0;i<n;i++)

            FD_SET(readfd[i],*my_readfd);

           

            /* 進程阻塞 */

            select(maxfd+1,& my_readfd,NULL,NULL,NULL);

           

            /* 有東西可以讀了 */

            for(i=0;i<n;i++)

            {

                if(FD_ISSET(readfd[i],&my_readfd))

                {

                        /* 原來是我可以讀了 */

                        we_read(readfd[i]);

                }

            }

        }

}

 

使用select後我們的服務器程序就變成了.

while(1)

{

        設置監聽讀寫文件描述符(FD_*);

       

        調用select;

       

        如果是傾聽套接字就緒,說明一個新的連接請求建立

        {

            建立連接(accept);

            加入到監聽文件描述符中去;

        }

        否則說明是一個已經連接過的描述符

        {

            進行操作(read或者write);

        }

}

多路複用I/O可以解決資源限制的問題.着模型實際上是將UDP循環模型用在了TCP上面. 這也就帶來了一些問題.如由於服務器依次處理客戶的請求,所以可能會導致有的客戶會等待很久.

併發服務器UDP: 人們把併發的概念用於UDP就得到了併發UDP服務器模型. 併發UDP服務器模型和併發的TCP服務器模型一樣:創建一個子進程來處理的客戶請求。.

 

9. ISOOpen System Interconnect)七層模型

    1)應用層:與其他計算機進行通訊的一個應用,它是對應應用程序的通信服務的。例如,一個沒有通信功能的字處理程序就不能執行通信的代碼,從事字處理工作的程序員也不關心OSI的第7層。但是,如果添加了一個傳輸文件的選項,那麼字處理器的程序員就需要實現OSI的第7層。示例:telnetHTTP,FTP,WWW,NFS,SMTP等。

    2)表示層:這一層的主要功能是定義數據格式及加密。例如,FTP允許你選擇以二進制或ASII格式傳輸。如果選擇二進制,那麼發送方和接收方不改變文件的內容。如果選擇ASII格式,發送方將把文本從發送方的字符集轉換成標準的ASII後發送數據。在接收方將標準的ASII轉換成接收方計算機的字符集。示例:加密,ASII等。

    3)會話層:他定義瞭如何開始、控制和結束一個會話,包括對多個雙向小時的控制和管理,以便在只完成連續消息的一部分時可以通知應用,從而使表示層看到的數據是連續的,在某些情況下,如果表示層收到了所有的數據,則用數據代表表示層。示例:RPCSQL等。

    4)傳輸層:這層的功能包括是否選擇差錯恢復協議還是無差錯恢復協議,及在同一主機上對不同應用的數據流的輸入進行復用,還包括對收到的順序不對的數據包的重新排序功能。示例:TCPUDPSPX

    5)網絡層:這層對端到端的包傳輸進行定義,他定義了能夠標識所有結點的邏輯地址,還定義了路由實現的方式和學習的方式。爲了適應最大傳輸單元長度小於包長度的傳輸介質,網絡層還定義瞭如何將一個包分解成更小的包的分段方法。示例:IP,IPX等。

    6)數據鏈路層:他定義了在單個鏈路上如何傳輸數據。這些協議與被討論的歌種介質有關。示例:ATMFDDI等。

    7)物理層:OSI的物理層規範是有關傳輸介質的特性標準,這些規範通常也參考了其他組織制定的標準。連接頭、針、針的使用、電流、電流、編碼及光調製等都屬於各種物理層規範中的內容。物理層常用多個規範完成對所有細節的定義。示例:Rj45802.3等。

 

    網絡七層結構優點:它體現了層次間的無關性:高層系統只需要瞭解較低一層系統的功能和接口,可以更好的關注本層系統的設計與實現,這樣極大的簡化了系統的複雜性。可擴展性:針對同樣的功能,我可以在保證提供相同接口的情況下,提供不同的實現方式來滿足各種需求。其實在我們平時在設計系統考慮好了結構層次,不但能簡化複雜性,減小風險,還能開發和測試上節省項目管理成本。軟件開發有一個這樣的原則,系統設計的越好,項目管理成本越低的越好,產品質量越好,開發也會相對輕鬆。

 

    網絡協議:主要由語義、語法、時序三部分來定義數據傳輸的順序、數據的格式及內容等方面有一個約定或規則,從而保證網絡中的計算機與終端間要想正確的傳送信息和數據。

 

    協議棧:在網絡中,爲了完成通信,必須使用多層上的多種協議。這些協議按照層次順序組合在一起,構成了協議棧(Protocol Stack),也稱爲協議族(Protocol Suite)

 

 

 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章