天天看點

C/C++程式設計筆記:計算機網絡基礎知識總結!超全面的基礎總結

C/C++程式設計筆記:計算機網絡基礎知識總結!超全面的基礎總結

        計算機網絡學習的核心内容就是網絡協定的學習。網絡協定是為計算機網絡中進行資料交換而建立的規則、标準或者說是約定的集合。因為不同使用者的資料終端可能采取的字元集是不同的,兩者需要進行通信,必須要在一定的标準上進行。一個很形象地比喻就是我們的語言,我們大天朝地廣人多,地方性語言也非常豐富,而且方言之間差距巨大。A地區的方言可能B地區的人根本無法接受,是以我們要為全國人名進行溝通建立一個語言标準,這就是我們的國語的作用。同樣,放眼全球,我們與外國友人溝通的标準語言是英語,是以我們才要苦逼的學習英語。

  計算機網絡協定同我們的語言一樣,多種多樣。而ARPA公司與1977年到1979年推出了一種名為ARPANET的網絡協定受到了廣泛的熱捧,其中最主要的原因就是它推出了人盡皆知的TCP/IP标準網絡協定。目前TCP/IP協定已經成為Internet中的“通用語言”,下圖為不同計算機群之間利用TCP/IP進行通信的示意圖。

C/C++程式設計筆記:計算機網絡基礎知識總結!超全面的基礎總結

1. 網絡層次劃分

  為了使不同計算機廠家生産的計算機能夠互相通信,以便在更大的範圍内建立計算機網絡,國際标準化組織(ISO)在1978年提出了“開放系統互聯參考模型”,即著名的OSI/RM模型(Open System Interconnection/Reference Model)。它将計算機網絡體系結構的通信協定劃分為七層,自下而上依次為:實體層(Physics Layer)、資料鍊路層(Data Link Layer)、網絡層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表示層(Presentation Layer)、應用層(Application Layer)。其中第四層完成資料傳送服務,上面三層面向使用者。

  除了标準的OSI七層模型以外,常見的網絡層次劃分還有TCP/IP四層協定以及TCP/IP五層協定,它們之間的對應關系如下圖所示:

C/C++程式設計筆記:計算機網絡基礎知識總結!超全面的基礎總結

2. OSI七層網絡模型

  TCP/IP協定毫無疑問是網際網路的基礎協定,沒有它就根本不可能上網,任何和網際網路有關的操作都離不開TCP/IP協定。不管是OSI七層模型還是TCP/IP的四層、五層模型,每一層中都要自己的專屬協定,完成自己相應的工作以及與上下層級之間進行溝通。由于OSI七層模型為網絡的标準層次劃分,是以我們以OSI七層模型為例從下向上進行一一介紹。

C/C++程式設計筆記:計算機網絡基礎知識總結!超全面的基礎總結

1)實體層(Physical Layer)

激活、維持、關閉通信端點之間的機械特性、電氣特性、功能特性以及過程特性。該層為上層協定提供了一個傳輸資料的可靠的實體媒體。簡單的說,實體層確定原始的資料可在各種實體媒體上傳輸。實體層記住兩個重要的裝置名稱,中繼器(Repeater,也叫放大器)和集線器。

2)資料鍊路層(Data Link Layer)

  資料鍊路層在實體層提供的服務的基礎上向網絡層提供服務,其最基本的服務是将源自網絡層來的資料可靠地傳輸到相鄰節點的目标機網絡層。為達到這一目的,資料鍊路必須具備一系列相應的功能,主要有:如何将資料組合成資料塊,在資料鍊路層中稱這種資料塊為幀(frame),幀是資料鍊路層的傳送機關;如何控制幀在實體信道上的傳輸,包括如何處理傳輸差錯,如何調節發送速率以使與接收方相比對;以及在兩個網絡實體之間提供資料鍊路通路的建立、維持和釋放的管理。資料鍊路層在不可靠的實體媒體上提供可靠的傳輸。該層的作用包括:實體位址尋址、資料的成幀、流量控制、資料的檢錯、重發等。

  有關資料鍊路層的重要知識點:

1> 資料鍊路層為網絡層提供可靠的資料傳輸;

  2> 基本資料機關為幀;

  3> 主要的協定:以太網協定;

  4> 兩個重要裝置名稱:網橋和交換機。

3)網絡層(Network Layer)

  網絡層的目的是實作兩個端系統之間的資料透明傳送,具體功能包括尋址和路由選擇、連接配接的建立、保持和終止等。它提供的服務使傳輸層不需要了解網絡中的資料傳輸和交換技術。如果您想用盡量少的詞來記住網絡層,那就是“路徑選擇、路由及邏輯尋址”。

  網絡層中涉及衆多的協定,其中包括最重要的協定,也是TCP/IP的核心協定——IP協定。IP協定非常簡單,僅僅提供不可靠、無連接配接的傳送服務。IP協定的主要功能有:無連接配接資料報傳輸、資料報路由選擇和差錯控制。與IP協定配套使用實作其功能的還有位址解析協定ARP、逆位址解析協定RARP、網際網路封包協定ICMP、網際網路組管理協定IGMP。具體的協定我們會在接下來的部分進行總結,有關網絡層的重點為:

  1> 網絡層負責對子網間的資料包進行路由選擇。此外,網絡層還可以實作擁塞控制、網際互連等功能;

  2> 基本資料機關為IP資料報;

  3> 包含的主要協定:

  IP協定(Internet Protocol,網際網路互聯協定);

  ICMP協定(Internet Control Message Protocol,網際網路控制封包協定);

  ARP協定(Address Resolution Protocol,位址解析協定);

  RARP協定(Reverse Address Resolution Protocol,逆位址解析協定)。

  4> 重要的裝置:路由器。

4)傳輸層(Transport Layer)

  第一個端到端,即主機到主機的層次。傳輸層負責将上層資料分段并提供端到端的、可靠的或不可靠的傳輸。此外,傳輸層還要處理端到端的差錯控制和流量控制問題。

  傳輸層的任務是根據通信子網的特性,最佳的利用網絡資源,為兩個端系統的會話層之間,提供建立、維護和取消傳輸連接配接的功能,負責端到端的可靠資料傳輸。在這一層,資訊傳送的協定資料單元稱為段或封包。

  網絡層隻是根據網絡位址将源結點發出的資料包傳送到目的結點,而傳輸層則負責将資料可靠地傳送到相應的端口。

  有關網絡層的重點:

  1> 傳輸層負責将上層資料分段并提供端到端的、可靠的或不可靠的傳輸以及端到端的差錯控制和流量控制問題;

  2> 包含的主要協定:TCP協定(Transmission Control Protocol,傳輸控制協定)、UDP協定(User Datagram Protocol,使用者資料報協定);

  3> 重要裝置:網關。

5)會話層

  會話層管理主機之間的會話程序,即負責建立、管理、終止程序之間的會話。會話層還利用在資料中插入校驗點來實作資料的同步。

6)表示層

  表示層對上層資料或資訊進行變換以保證一個主機應用層資訊可以被另一個主機的應用程式了解。表示層的資料轉換包括資料的加密、壓縮、格式轉換等。

7)應用層

  為作業系統或網絡應用程式提供通路網絡服務的接口。

  會話層、表示層和應用層重點:

1> 資料傳輸基本機關為封包;

  2> 包含的主要協定:FTP(檔案傳送協定)、Telnet(遠端登入協定)、DNS(域名解析協定)、SMTP(郵件傳送協定),POP3協定(郵局協定),HTTP協定(Hyper Text Transfer Protocol)。

3. IP位址

1)網絡位址

  IP位址由網絡号(包括子網号)和主機号組成,網絡位址的主機号為全0,網絡位址代表着整個網絡。

2)廣播位址

  廣播位址通常稱為直接廣播位址,是為了區分受限廣播位址。

  廣播位址與網絡位址的主機号正好相反,廣播位址中,主機号為全1。當向某個網絡的廣播位址發送消息時,該網絡内的所有主機都能收到該廣播消息。

3)多點傳播位址

  D類位址就是多點傳播位址。

  先回憶下A,B,C,D類位址吧:

A類位址以0開頭,第一個位元組作為網絡号,位址範圍為:0.0.0.0~127.255.255.255;(modified @2016.05.31)

  B類位址以10開頭,前兩個位元組作為網絡号,位址範圍是:128.0.0.0~191.255.255.255;

  C類位址以110開頭,前三個位元組作為網絡号,位址範圍是:192.0.0.0~223.255.255.255。

  D類位址以1110開頭,位址範圍是224.0.0.0~239.255.255.255,D類位址作為多點傳播位址(一對多的通信);

  E類位址以1111開頭,位址範圍是240.0.0.0~255.255.255.255,E類位址為保留位址,供以後使用。

  注:隻有A,B,C有網絡号和主機号之分,D類位址和E類位址沒有劃分網絡号和主機号。

4)255.255.255.255

  該IP位址指的是受限的廣播位址。受限廣播位址與一般廣播位址(直接廣播位址)的差別在于,受限廣播位址隻能用于本地網絡,路由器不會轉發以受限廣播位址為目的位址的分組;一般廣播位址既可在本地廣播,也可跨網段廣播。例如:主機192.168.1.1/30上的直接廣播資料包後,另外一個網段192.168.1.5/30也能收到該資料報;若發送受限廣播資料報,則不能收到。

  注:一般的廣播位址(直接廣播位址)能夠通過某些路由器(當然不是所有的路由器),而受限的廣播位址不能通過路由器。

5)0.0.0.0

  常用于尋找自己的IP位址,例如在我們的RARP,BOOTP和DHCP協定中,若某個未知IP位址的無盤機想要知道自己的IP位址,它就以255.255.255.255為目的位址,向本地範圍(具體而言是被各個路由器屏蔽的範圍内)的伺服器發送IP請求分組。

6)回環位址

  127.0.0.0/8被用作回環位址,回環位址表示本機的位址,常用于對本機的測試,用的最多的是127.0.0.1。

7)A、B、C類私有位址

  私有位址(private address)也叫專用位址,它們不會在全球使用,隻具有本地意義。

  A類私有位址:10.0.0.0/8,範圍是:10.0.0.0~10.255.255.255

  B類私有位址:172.16.0.0/12,範圍是:172.16.0.0~172.31.255.255

  C類私有位址:192.168.0.0/16,範圍是:192.168.0.0~192.168.255.255

4. 子網路遮罩及網絡劃分

  随着互連網應用的不斷擴大,原先的IPv4的弊端也逐漸暴露出來,即網絡号占位太多,而主機号位太少,是以其能提供的主機位址也越來越稀缺,目前除了使用NAT在企業内部利用保留位址自行配置設定以外,通常都對一個高類别的IP位址進行再劃分,以形成多個子網,提供給不同規模的使用者群使用。

  這裡主要是為了在網絡分段情況下有效地利用IP位址,通過對主機号的高位部分取作為子網号,從通常的網絡位界限中擴充或壓縮子網路遮罩,用來建立某類位址的更多子網。但建立更多的子網時,在每個子網上的可用主機位址數目會比原先減少。

什麼是子網路遮罩?

  子網路遮罩是标志兩個IP位址是否同屬于一個子網的,也是32位二進制位址,其每一個為1代表該位是網絡位,為0代表主機位。它和IP位址一樣也是使用點式十進制來表示的。如果兩個IP位址在子網路遮罩的按位與的計算下所得結果相同,即表明它們共屬于同一子網中。

在計算子網路遮罩時,我們要注意IP位址中的保留位址,即“ 0”位址和廣播位址,它們是指主機位址或網絡位址全為“ 0”或“ 1”時的IP位址,它們代表着本網絡位址和廣播位址,一般是不能被計算在内的。

子網路遮罩的計算:

  對于無須再劃分成子網的IP位址來說,其子網路遮罩非常簡單,即按照其定義即可寫出:如某B類IP位址為 10.12.3.0,無須再分割子網,則該IP位址的子網路遮罩255.255.0.0。如果它是一個C類位址,則其子網路遮罩為 255.255.255.0。其它類推,不再詳述。下面我們關鍵要介紹的是一個IP位址,還需要将其高位主機位再作為劃分出的子網網絡号,剩下的是每個子網的主機号,這時該如何進行每個子網的掩碼計算。

  下面總結一下有關子網路遮罩和網絡劃分常見的面試考題:

1)利用子網數來計算

  在求子網路遮罩之前必須先搞清楚要劃分的子網數目,以及每個子網内的所需主機數目。

  (1) 将子網數目轉化為二進制來表示;

  如欲将B類IP位址168.195.0.0劃分成27個子網:27=11011;

  (2) 取得該二進制的位數,為N;

  該二進制為五位數,N = 5

  (3) 取得該IP位址的類子網路遮罩,将其主機位址部分的的前N位置1即得出該IP位址劃分子網的子網路遮罩。

  将B類位址的子網路遮罩255.255.0.0的主機位址前5位置 1,得到 255.255.248.0

2)利用主機數來計算

  如欲将B類IP位址168.195.0.0劃分成若幹子網,每個子網内有主機700台:

  (1) 将主機數目轉化為二進制來表示;

  700=1010111100;

  (2) 如果主機數小于或等于254(注意去掉保留的兩個IP位址),則取得該主機的二進制位數,為N,這裡肯定 N<8。如果大于254,則 N>8,這就是說主機位址将占據不止8位;

  該二進制為十位數,N=10;

  (3) 使用255.255.255.255來将該類IP位址的主機位址位數全部置1,然後從後向前的将N位全部置為 0,即為子網路遮罩值。

  将該B類位址的子網路遮罩255.255.0.0的主機位址全部置1,得到255.255.255.255,然後再從後向前将後 10位置0,即為:11111111.11111111.11111100.00000000,即255.255.252.0。這就是該欲劃分成主機為700台的B類IP位址 168.195.0.0的子網路遮罩。

3)還有一種題型,要你根據每個網絡的主機數量進行子網位址的規劃和計算子網路遮罩。這也可按上述原則進行計算。

  比如一個子網有10台主機,那麼對于這個子網需要的IP位址是:

  10+1+1+1=13

注意:加的第一個1是指這個網絡連接配接時所需的網關位址,接着的兩個1分别是指網絡位址和廣播位址。

  因為13小于16(16等于2的4次方),是以主機位為4位。而256-16=240,是以該子網路遮罩為255.255.255.240。

  如果一個子網有14台主機,不少人常犯的錯誤是:依然配置設定具有16個位址空間的子網,而忘記了給網關配置設定位址。這樣就錯誤了,因為14+1+1+1=17,17大于16,是以我們隻能配置設定具有32個位址(32等于2的5次方)空間的子網。這時子網路遮罩為:255.255.255.224。

5. ARP/RARP協定

位址解析協定,即ARP(Address Resolution Protocol),是根據IP位址擷取實體位址的一個TCP/IP協定。主機發送資訊時将包含目标IP位址的ARP請求廣播到網絡上的所有主機,并接收傳回消息,以此确定目标的實體位址;收到傳回消息後将該IP位址和實體位址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節約資源。位址解析協定是建立在網絡中各個主機互相信任的基礎上的,網絡上的主機可以自主發送ARP應答消息,其他主機收到應答封包時不會檢測該封包的真實性就會将其記入本機ARP緩存;由此攻擊者就可以向某一主機發送僞ARP應答封包,使其發送的資訊無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。ARP指令可用于查詢本機ARP緩存中IP位址和MAC位址的對應關系、添加或删除靜态對應關系等。

  ARP工作流程舉例:

  主機A的IP位址為192.168.1.1,MAC位址為0A-11-22-33-44-01;

  主機B的IP位址為192.168.1.2,MAC位址為0A-11-22-33-44-02;

  當主機A要與主機B通信時,位址解析協定可以将主機B的IP位址(192.168.1.2)解析成主機B的MAC位址,以下為工作流程:

  (1)根據主機A上的路由表内容,IP确定用于通路主機B的轉發IP位址是192.168.1.2。然後A主機在自己的本地ARP緩存中檢查主機B的比對MAC位址。

  (2)如果主機A在ARP緩存中沒有找到映射,它将詢問192.168.1.2的硬體位址,進而将ARP請求幀廣播到本地網絡上的所有主機。源主機A的IP位址和MAC位址都包括在ARP請求中。本地網絡上的每台主機都接收到ARP請求并且檢查是否與自己的IP位址比對。如果主機發現請求的IP位址與自己的IP位址不比對,它将丢棄ARP請求。

  (3)主機B确定ARP請求中的IP位址與自己的IP位址比對,則将主機A的IP位址和MAC位址映射添加到本地ARP緩存中。

  (4)主機B将包含其MAC位址的ARP回複消息直接發送回主機A。

  (5)當主機A收到從主機B發來的ARP回複消息時,會用主機B的IP和MAC位址映射更新ARP緩存。本機緩存是有生存期的,生存期結束後,将再次重複上面的過程。主機B的MAC位址一旦确定,主機A就能向主機B發送IP通信了。

逆位址解析協定,即RARP,功能和ARP協定相對,其将區域網路中某個主機的實體位址轉換為IP位址,比如區域網路中有一台主機隻知道實體位址而不知道IP位址,那麼可以通過RARP協定發出征求自身IP位址的廣播請求,然後由RARP伺服器負責回答。

  RARP協定工作流程:

  (1)給主機發送一個本地的RARP廣播,在此廣播包中,聲明自己的MAC位址并且請求任何收到此請求的RARP伺服器配置設定一個IP位址;

  (2)本地網段上的RARP伺服器收到此請求後,檢查其RARP清單,查找該MAC位址對應的IP位址;

  (3)如果存在,RARP伺服器就給源主機發送一個響應資料包并将此IP位址提供給對方主機使用;

  (4)如果不存在,RARP伺服器對此不做任何的響應;

  (5)源主機收到從RARP伺服器的響應資訊,就利用得到的IP位址進行通訊;如果一直沒有收到RARP伺服器的響應資訊,表示初始化失敗。

6. 路由選擇協定

  常見的路由選擇協定有:RIP協定、OSPF協定。

  RIP協定:底層是貝爾曼福特算法,它選擇路由的度量标準(metric)是跳數,最大跳數是15跳,如果大于15跳,它就會丢棄資料包。

OSPF協定:Open Shortest Path First開放式最短路徑優先,底層是迪傑斯特拉算法,是鍊路狀态路由選擇協定,它選擇路由的度量标準是帶寬,延遲。

7. TCP/IP協定

TCP/IP協定是Internet最基本的協定、Internet國際網際網路絡的基礎,由網絡層的IP協定和傳輸層的TCP協定組成。通俗而言:TCP負責發現傳輸的問題,一有問題就發出信号,要求重新傳輸,直到所有資料安全正确地傳輸到目的地。而IP是給網際網路的每一台聯網裝置規定一個位址。

  IP層接收由更低層(網絡接口層例如以太網裝置驅動程式)發來的資料包,并把該資料包發送到更高層---TCP或UDP層;相反,IP層也把從TCP或UDP層接收來的資料包傳送到更低層。IP資料包是不可靠的,因為IP并沒有做任何事情來确認資料包是否按順序發送的或者有沒有被破壞,IP資料包中含有發送它的主機的位址(源位址)和接收它的主機的位址(目的位址)。

TCP是面向連接配接的通信協定,通過三次握手建立連接配接,通訊完成時要拆除連接配接,由于TCP是面向連接配接的是以隻能用于端到端的通訊。TCP提供的是一種可靠的資料流服務,采用“帶重傳的肯定确認”技術來實作傳輸的可靠性。TCP還采用一種稱為“滑動視窗”的方式進行流量控制,所謂視窗實際表示接收能力,用以限制發送方的發送速度。

TCP封包首部格式:

C/C++程式設計筆記:計算機網絡基礎知識總結!超全面的基礎總結

TCP協定的三次握手和四次揮手:

C/C++程式設計筆記:計算機網絡基礎知識總結!超全面的基礎總結

  注:seq:"sequance"序列号;ack:"acknowledge"确認号;SYN:"synchronize"請求同步标志;;ACK:"acknowledge"确認标志";FIN:"Finally"結束标志。

TCP連接配接建立過程:首先Client端發送連接配接請求封包,Server段接受連接配接後回複ACK封包,并為這次連接配接配置設定資源。Client端接收到ACK封包後也向Server段發生ACK封包,并配置設定資源,這樣TCP連接配接就建立了。

TCP連接配接斷開過程:假設Client端發起中斷連接配接請求,也就是發送FIN封包。Server端接到FIN封包後,意思是說"我Client端沒有資料要發給你了",但是如果你還有資料沒有發送完成,則不必急着關閉Socket,可以繼續發送資料。是以你先發送ACK,"告訴Client端,你的請求我收到了,但是我還沒準備好,請繼續你等我的消息"。這個時候Client端就進入FIN_WAIT狀态,繼續等待Server端的FIN封包。當Server端确定資料已發送完成,則向Client端發送FIN封包,"告訴Client端,好了,我這邊資料發完了,準備好關閉連接配接了"。Client端收到FIN封包後,"就知道可以關閉連接配接了,但是他還是不相信網絡,怕Server端不知道要關閉,是以發送ACK後進入TIME_WAIT狀态,如果Server端沒有收到ACK則可以重傳。“,Server端收到ACK後,"就知道可以斷開連接配接了"。Client端等待了2MSL後依然沒有收到回複,則證明Server端已正常關閉,那好,我Client端也可以關閉連接配接了。Ok,TCP連接配接就這樣關閉了!

為什麼要三次揮手?

  在隻有兩次“握手”的情形下,假設Client想跟Server建立連接配接,但是卻因為中途連接配接請求的資料報丢失了,故Client端不得不重新發送一遍;這個時候Server端僅收到一個連接配接請求,是以可以正常的建立連接配接。但是,有時候Client端重新發送請求不是因為資料報丢失了,而是有可能資料傳輸過程因為網絡并發量很大在某結點被阻塞了,這種情形下Server端将先後收到2次請求,并持續等待兩個Client請求向他發送資料...問題就在這裡,Cient端實際上隻有一次請求,而Server端卻有2個響應,極端的情況可能由于Client端多次重新發送請求資料而導緻Server端最後建立了N多個響應在等待,因而造成極大的資源浪費!是以,“三次握手”很有必要!

為什麼要四次揮手?

  試想一下,假如現在你是用戶端你想斷開跟Server的所有連接配接該怎麼做?第一步,你自己先停止向Server端發送資料,并等待Server的回複。但事情還沒有完,雖然你自身不往Server發送資料了,但是因為你們之前已經建立好平等的連接配接了,是以此時他也有主動權向你發送資料;故Server端還得終止主動向你發送資料,并等待你的确認。其實,說白了就是保證雙方的一個合約的完整執行!

  使用TCP的協定:FTP(檔案傳輸協定)、Telnet(遠端登入協定)、SMTP(簡單郵件傳輸協定)、POP3(和SMTP相對,用于接收郵件)、HTTP協定等。

8. UDP協定 

UDP使用者資料報協定,是面向無連接配接的通訊協定,UDP資料包括目的端口号和源端口号資訊,由于通訊不需要連接配接,是以可以實作廣播發送。UDP通訊時不需要接收方确認,屬于不可靠的傳輸,可能會出現丢包現象,實際應用中要求程式員程式設計驗證。

  UDP與TCP位于同一層,但它不管資料包的順序、錯誤或重發。是以,UDP不被應用于那些使用虛電路的面向連接配接的服務,UDP主要用于那些面向查詢---應答的服務,例如NFS。相對于FTP或Telnet,這些服務需要交換的資訊量較小。

每個UDP封包分UDP報頭和UDP資料區兩部分。報頭由四個16位長(2位元組)字段組成,分别說明該封包的源端口、目的端口、封包長度以及校驗值。UDP報頭由4個域組成,其中每個域各占用2個位元組,具體如下:

  (1)源端口号;

  (2)目标端口号;

  (3)資料報長度;

  (4)校驗值。

  使用UDP協定包括:TFTP(簡單檔案傳輸協定)、SNMP(簡單網絡管理協定)、DNS(域名解析協定)、NFS、BOOTP。

  TCP 與 UDP 的差別:TCP是面向連接配接的,可靠的位元組流服務;UDP是面向無連接配接的,不可靠的資料報服務。

9. DNS協定

DNS是域名系統(DomainNameSystem)的縮寫,該系統用于命名組織到域層次結構中的計算機和網絡服務,可以簡單地了解為将URL轉換為IP位址。域名是由圓點分開一串單詞或縮寫組成的,每一個域名都對應一個惟一的IP位址,在Internet上域名與IP位址之間是一一對應的,DNS就是進行域名解析的伺服器。DNS命名用于Internet等TCP/IP網絡中,通過使用者友好的名稱查找計算機和服務。

10. NAT協定

  NAT網絡位址轉換(Network Address Translation)屬接入廣域網(WAN)技術,是一種将私有(保留)位址轉化為合法IP位址的轉換技術,它被廣泛應用于各種類型Internet接入方式和各種類型的網絡中。原因很簡單,NAT不僅完美地解決了lP位址不足的問題,而且還能夠有效地避免來自網絡外部的攻擊,隐藏并保護網絡内部的計算機。

11. DHCP協定

  DHCP動态主機設定協定(Dynamic Host Configuration Protocol)是一個區域網路的網絡協定,使用UDP協定工作,主要有兩個用途:給内部網絡或網絡服務供應商自動配置設定IP位址,給使用者或者内部網絡管理者作為對所有計算機作中央管理的手段。

12. HTTP協定

  超文本傳輸協定(HTTP,HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網絡協定。所有的WWW檔案都必須遵守這個标準。

  HTTP 協定包括哪些請求?

  GET:請求讀取由URL所标志的資訊。

  POST:給伺服器添加資訊(如注釋)。

  PUT:在給定的URL下存儲一個文檔。

  DELETE:删除給定的URL所标志的資源。

  HTTP 中, POST 與 GET 的差別

  1)Get是從伺服器上擷取資料,Post是向伺服器傳送資料。

  2)Get是把參數資料隊列加到送出表單的Action屬性所指向的URL中,值和表單内各個字段一一對應,在URL中可以看到。

  3)Get傳送的資料量小,不能大于2KB;Post傳送的資料量較大,一般被預設為不受限制。

  4)根據HTTP規範,GET用于資訊擷取,而且應該是安全的和幂等的。

I. 所謂安全的意味着該操作用于擷取資訊而非修改資訊。換句話說,GET請求一般不應産生副作用。就是說,它僅僅是擷取資源資訊,就像資料庫查詢一樣,不會修改,增加資料,不會影響資源的狀态。

II.幂等的意味着對同一URL的多個請求應該傳回同樣的結果。

13. 一個舉例

  在浏覽器中輸入 www.baidu.com 後執行的全部過程

  現在假設如果我們在用戶端(用戶端)浏覽器中輸入http://www.baidu.com,而baidu.com為要通路的伺服器(伺服器),下面詳細分析用戶端為了通路伺服器而執行的一系列關于協定的操作:

  1)用戶端浏覽器通過DNS解析到www.baidu.com的IP位址220.181.27.48,通過這個IP位址找到用戶端到伺服器的路徑。用戶端浏覽器發起一個HTTP會話到220.161.27.48,然後通過TCP進行封裝資料包,輸入到網絡層。

  2)在用戶端的傳輸層,把HTTP會話請求分成封包段,添加源和目的端口,如伺服器使用80端口監聽用戶端的請求,用戶端由系統随機選擇一個端口如5000,與伺服器進行交換,伺服器把相應的請求傳回給用戶端的5000端口。然後使用IP層的IP位址查找目的端。

  3)用戶端的網絡層不用關系應用層或者傳輸層的東西,主要做的是通過查找路由表确定如何到達伺服器,期間可能經過多個路由器,這些都是由路由器來完成的工作,不作過多的描述,無非就是通過查找路由表決定通過那個路徑到達伺服器。

  4)用戶端的鍊路層,包通過鍊路層發送到路由器,通過鄰居協定查找給定IP位址的MAC位址,然後發送ARP請求查找目的位址,如果得到回應後就可以使用ARP的請求應答交換的IP資料包現在就可以傳輸了,然後發送IP資料包到達伺服器的位址。

        文章就到這裡了,希望對大家有幫助!

自學C/C++程式設計難度很大,如果你想更快提升自己的程式設計能力和編寫項目的水準,歡迎一起共同成長!

C語言C++程式設計學習交流圈子,【點選進入】微信公衆号:C語言程式設計學習基地

有一些源碼和資料分享,歡迎轉行也學習程式設計的夥伴,和大家一起交流成長會比自己琢磨更快哦!

繼續閱讀