<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [TOC] ## TCP/IP協議族結構 TCP/IP協議族是一個四層協議系統,自底而上分別是數據鏈路層、網絡層、傳輸層和應用層。上層協議使用下層協議提供的服務。 ![wq8MJe.png](https://s1.ax1x.com/2020/09/21/wq8MJe.png) ### 數據鏈路層 數據鏈路層實現了網卡接口的網絡驅動程序,以處理數據在物理媒介上的傳輸。不同的物理網絡有不同的電氣特性,網絡驅動隱藏了這些細節。網絡驅動為上層協議提供了統一的接口。 ` ` >數據鏈路層常用協議:ARP(address resolve protocol 地址解析協議)和RARP(Reverse address resolve protocol逆地址解析協議)。他們實現了IP地址和機器物理地址(MAC,以太網)之間的轉換。 網絡層使用IP地址尋址一臺機器,數據鏈路層使用物理地址尋址一臺機器。網絡層通過ARP協議把目標機器的IP地址轉化成物理地址,才能使用數據鏈路層提供的服務。 ### 網絡層 網絡層實現數據包的選路和轉發。WAN(Wide Area Network,廣域網)通常使用分級的路由器來連接分散的主機或LAN(Local Area Network,局域網)。通信的兩臺主機通常是通過多個節點(路由器)連接的。 >網絡層的任務就是選擇中間節點,以確定兩臺主機之間的通信路徑。網絡層對上層隱藏了網絡拓撲的細節,使得在傳輸層和應用層看來,通信的雙方是直接相連的。 網絡層的核心是**IP協議**(Internet Protocol,因特網協議)。IP協議使用逐跳的方式確定通信路徑。 網絡層另一個重要的協議是**ICMP**(Internet Control Message Protocol,因特網控制報文協議),它是IP協議的重要補充,主要用來網絡檢測。 ![](https://s1.ax1x.com/2020/09/21/wqtBNV.png) ### 傳輸層 傳輸層為兩臺主機上的應用層序提供端到端的通信。與網絡層的逐跳通信不同,傳輸層只關心通信的起始端和目的端,而不在乎數據包的中轉過程。 ![](https://s1.ax1x.com/2020/09/21/wqNkbn.png) 垂直實線箭頭表示TCP/IP協議族各層之間的實體通信(數據包確實沿著這條路線傳遞的),而水平虛線表示邏輯通信線路。 傳輸層主要協議有三個:TCP、UDP、SCTP協議 1. TCP TCP協議(Transmission Control Protocol,傳輸控制協議),為應用層可靠、面向連接和基于流的服務。具有超時重傳、數據確認等特性來保證數據包被正確的發送至目的端。 2. UDP UDP協議(User Datagram Protocol,用戶數據報協議)則與TCP完全相反,它為應用層提供不可靠、無連接和基于數據報的服務 3. SCTP SCP協議(Stream Control Transmission Protocol,流控制傳輸協議)是一種相對比較新的傳輸層協議,它是為了在因特網上傳輸電話信號而設計的。 ### 應用層 應用層負責應用程序的邏輯。數據鏈路層、網絡層和傳輸層負責網絡通信細節,這部分必須即穩定又高效,因此都在內核空間中實現。 應用層的協議有很多: * ping,利用ICMP報文檢測網絡連接 * telnet是一種遠程登錄協議 * OSPF(Open Short Path First,開放最短路徑優先)是一種動態路由更新協議,用于路由器之間的通信。告知對方各自的路由信息 * DNS(Domain Name Service, 域名服務)提供機器域名到IP地址的轉換。 ## 封裝 通過封裝,上層協議可以使用下層協議提供的服務。應用程序在發送到物理網絡上之前,將沿著協議棧從上往下依次傳遞。每層協議都在上層數據的基礎上加上自己的頭部信息(有時還包括尾部信息),以實現該層的功能,這個過程叫封裝。 ![](https://s1.ax1x.com/2020/09/21/wqUaF0.png) TCP報文封裝過程: ![](https://img.kancloud.cn/ec/a4/eca4980e9bf976854932be0d847c93ef_1770x774.png) 經過數據鏈路層封裝的數據稱為幀(frame)。傳輸媒介不同,幀的類型也不同。比如以太網上傳輸的是以太網幀(ethernet frame),而令牌環網絡上傳輸的則是令牌環幀(token ring frame)。 ![](https://s1.ax1x.com/2020/09/21/wqURFx.png) ## 分用 當幀到達目的主機時,將沿著協議棧自底向上依次傳遞。各層協議依次處理幀中本層負責的頭部數據,以獲取所需信息,并最終將處理后的幀交給目標應用程序。這個過程叫做分用。 ` ` 分用是依靠頭部信息中的類型字段實現的,標準文檔RFC1700定義了所有標識上層協議的類型字段以及每個上層協議對應的數值。 ![](https://s1.ax1x.com/2020/09/21/wqamX4.png) ## arp協議工作原理 ARP協議能實現任意網絡層地址到任意物理地址的轉換。 工作原理是: 主機自己所在的網絡廣播一個ARP請求,該請求包含目標機器的網絡地址。此網絡上的其他機器都收到這個請求,但只有被請求的目標機器回應一個ARP應答,其中包含自己的物理地址。 ### 以太網ARP請求/應答報文詳解 ![](https://s1.ax1x.com/2020/09/22/wXeDFH.png) 硬件類型字段定義物理地址的類型,它的值為1表示MAC地址 協議類型字段表示要映射的協議地址類型,它的值為0x800,表示IP地址 硬件地址長度字段和協議地址長度,其單位是字節。對mac地址來說,其長度是6,對IP地址(IPV4)來說,其長度是4。 操作字段指出4鐘操作類型;ARP請求(值為1)、ARP應答(值為2)、RARP請求(值為3)和RARP應答(值為4) >ARP請求/應答報文的長度是28字節。加上以太網幀頭部和尾部的18字節,則一個攜帶APR請求/應答報文的以太網幀長度為46字節,此時ARP請求/應答報文將增加一些填充字節,以滿足這個要求。 ### ARP高速緩存的查看和修改 通常,ARP維護一個高速緩存,在linux上使用arp指令來查看和修改arp緩存 ``` arp -a ``` ![wXKu9J.png](https://s1.ax1x.com/2020/09/22/wXKu9J.png) ### 使用tcpdump觀察arp通信 為了清楚的了解arp的運作過程,在機器a(192.168.0.3)上執行telnet 命令登錄機器b(192.168.0.3)的echo服務。并用tcpdump抓取這個過程中這兩臺測試機器之間交換的以太網幀。 ``` $ sudo arp -d 192.168.0.3 // 清楚ARP緩存中機器b的對應項。 $ sudo tcpdump -i eth0 -ent '(dst 192.168.0.3 and src 192.168.0.4) or (dst 192.168.0.4 and src 192.168.0.3)‘ //如無特殊聲明,抓包都要在機器a上執行 $ telnet 192.168.0.3 echo // 開啟另一個終端執行telnet 命令 // 輸入Ctrl + ]并回車 telnet> quit(回車) Connection closed ``` ## dns工作原理 DNS是一套分布式的域名服務系統,每個DNS服務器上存放著大量的機器名和IP地址的映射,并且是動態更新的。眾多客戶端都通過DNS協議來想DNS服務器查詢目標主機的IP地址 ![](https://s1.ax1x.com/2020/09/22/wXlABt.png) * 16位標識字段用于標記一對DNS查詢和應答,以此區分一個DNS應答是對應哪一個DNS的查詢回應 * 16位標志字段用于協商具體的通信方式和反饋通信狀態,DNS報文頭部的16位標志字段的細節如圖所示 ![](https://s1.ax1x.com/2020/09/22/wXlc4O.png) * QR, 查詢/應答標志,0表示查詢,1表示應答 * opcode,定義查詢和應答的類型,0表示標準查詢,1表示反向查詢(由IP地址獲得主機域名),2表示請求服務狀態 * AA,授權應答標志,僅由應答報文使用,1表示域名服務器是授權服務器。 * TC,截斷標志,僅當DNS報文使用UDP服務時使用。因為UDP數據報有長度限制,所以過長的DNS報文將被截斷,1表示DNS報文超過521字節,并被截斷。 * RD,遞歸查詢標志。1表示執行遞歸查詢,即如果目標DNS服務器無法解析某個主機名,則它將向其他DNS服務器繼續查詢。如此遞歸,知道返回結果。 * RA, 允許遞歸標志。僅由應答報文使用。1表示DNS服務器支持遞歸查詢 * zero,這3位未用,必須都設置為0 * rcode,4位返回碼,表示應答的狀態,常用值0(無錯誤)和3(域名不存在) ### linux上訪問DNS服務 要訪問DNS服務,必須先知道DNS服務器的IP地址。linux上使用`/etc/resolv.conf`文件來存放DNS服務的IP地址 ``` nameserver 219.239.26.42 nameserver 124.207.160.106 ``` 常用客戶端程序`host`命令查詢`www.baidu.com`的IP地址 ``` $ host -t A www.baidu.com www.baidu.com is an alias for www.a.shifen.com. www.a.shifen.com has address 36.152.44.96 www.a.shifen.com has address 36.152.44.95 ``` ### 使用tcpdump觀察DNS通信全過程 ``` $ sudo tcpdump -i eth0 -nt -s 500 port domain $ host -t A www.baidu.com ``` 使用port domain 來過濾數據包。表示只抓取domain(域名)服務的數據包。 ## socket和tcp/ip協議族的關系 使得應用程序能夠調用系統內核中的數據鏈路層、網絡層、傳輸層的這些協議提供的服務的API共有兩套:socket和XTI。XTI基本不再用。 由socket定義的這一組API提供如下兩點功能: 1. 將應用程序數據從用戶緩沖區中復制到TCP/UDP內核發送緩沖區,交給內核來發送數據,或者是從內核TCP/UDP接收緩沖區中復制數據到用戶緩沖區,以讀取數據。 2. 二是應用程序可以通過他們來修改內核中各層協議的某些頭部信息或其他數據結構,從而精細的控制底層通信的行為。比如可以通過setsockopt函數來設置IP數據報在網絡上的存活時間。socket是一套通用的網絡編程接口,它不但可以訪問內核中TCP/IP協議棧,而且可以訪問其他網絡協議棧(比如X.25棧、UNIX本地域協議棧等)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看