Computer Neworking: A Top-Down Approach

來源:互聯網
上載者:User

標籤:att   --   好處   速度   app   端到端   error   exchange   引用   

[TOC]

這本書是電腦網路最好的入門書籍,與傳統的電腦網路書籍不同,它採用了自頂而下的方式去講解。感謝兩位十分出色的Jim Kurose和Keith Ross, 他們生動的敘述方式使我覺得電腦網路如此有趣。單單引用文獻就有33頁,我十分佩服這麼嚴謹又有耐心的人。

Keep those cards and letters coming! --諺語

Chapter 1: Computer Networks and the Internet

電腦網路的概覽,描繪了這本書藍圖。borad picture,to see the forest through the trees. 這是一個引入性章節,覆蓋了大量的基礎知識和電腦網路的很多方便,但是也沒有失去重點。introductory chapter,without losing sight of the big picture.

1. What is the Internet?1.1 A Nuts-and-Bolts Description 基本特徵描述

定義:

The Internet is a computer network that interconnects hundreds of millions of computing devices throughout the world.
簡而言之,裝置互聯。

諸如筆記本,智能手機,遊戲控制台,網路攝影機,環境感應器等,這些非傳統的裝置就像被電腦網路鉤住(hooked up)了一樣。在網際網路的術語(jargon)中,這些裝置被稱為 hosts(主機) 或 end systems(終端)。終端訪問網際網路通過Internet Service Providers(ISPs), 還有本地的ISPs,例如中國電信。

packets = header bytes + data bytes
所以為什麼網路位元組序是大端序? 因為要先傳輸位元組頭。

1.2 A Service Description

the Internet as an infrastructure that provides service to applications.

協議的定義:

A protocol defines the format and the order of messages exchanged between two or more communicating entities,as well as the actions taken on the transmision and/or receipt of a message or other event.

精通電腦網路的本質:

Mastering the field of computer networking is equirvalent to understading what, why, and how of networking protocols.

2. The Network Edge

end systems -- at edge of the Internet
為什麼end systems 也被稱為 hosts?

Because they host(that is, run) application programs such as a Web browser program, and e-mail client program, or an e-mail server program.
這本書中,host = end system.
Hosts are somnetimes further divided into the two categories: clients and servers.

注意,不要以為伺服器就不是終端或者主機了,雖然它們提供了服務(搜尋引擎,郵箱等),但是對網際網路而言,它們和別的終端沒有區別,都是運行了應用而已。servers 伺服器端常有很大的資料中心(data centers),Google有30-50個資料中心,提供了成百上千的服務。

家用網路接入:

DSL方式
為什麼通常上行速率和下行速率通常不同?

Because the downstream and upstrean transmission rates are diffent,the access is said to be asymmetric.
DSL有DSL modern,外面和電話掛在同一個分離器上。

Cable Internet access 方式
Cable電纜常用於電視公司搭建的網際網路訪問方式。最常見的是同軸電纜(coaxial caBLE)+ 光纖混用方式,一個同軸電纜下掛多個使用者,同軸電纜線接在光纖節點上,此外都是光纖傳輸。
它同樣需要特殊一個的modems,稱為cable modems。它一個重要而典型的特徵就是它是共用的廣播媒介。發送或者接受的包會被上傳或者下載到同一channel的每個使用者上。

FTTH (fiber to the home)光纖到戶
每個使用者都有一個ONT(optical network terminator 光網路終端),多個使用者(通常不到100個)都通過光纖串連到同一個上分光器(Optical splitter),光分器通過光纖串連到OLT(光線路終端機),光線路終端機再串連到電信公司的CO(central office)

商業網路接入:

LAN = local area network,
一個基礎路由器+ 乙太網路交換器,所有裝置都直連到乙太網路交換器上。

物理介質

具體的每種介質不需要深究,要始終記住:每種介質限定了它自身的網路傳輸承載能力,傳輸速度和傳輸距離。

3. The Network Core

有兩種基本的方式通過網路鏈路和交換器去移動資料:包轉寄和電路交換。

3.1 Packet Switching
  • Store-and-Forward Transmission 儲存轉寄傳輸
  • Queuing Delays and Packet Loss
  • Forwatding Tables and Routing Protocols
3.2 Circuit Switching

採用連線導向的方式,在雙方通訊之前,需要為通訊雙方分配一條具有固定頻寬的通訊電路,在通訊雙發在通訊的過程中一直佔用所分配的資源,直到通訊結束。
電路交換的網路中,資源需要一個佔用一個路徑,包括路徑上的buffer,link 傳輸比率,在兩個終端之間需要保留會話的期間。傳統的電話網路就是基於電路交換的網路。不要想當然的以為網路就只是英特網,電話網路也是一種網路。

優點:可以為使用者保證會話的穩定性,即時性強,時延小,交換裝置成本低。
缺點:頻寬利用率低,一旦電路串連建立,不管通訊與否都將佔用通訊。

一個鏈路中電路交換的實現有兩種方式:
FDM 頻分複用和 TDM 時分複用

4.Delay,Loss,and Throughput in Packet-Switched Networks
  • nodal processing delay 節點的處理時延 $$<10^-6$$
  • queuing delay delay 排隊時延 $$10^-6 - 10^-3$$
  • transmission delay 發送時延 $$10^-6 - 10^-3$$
  • propagation delay 傳播時延 $$d/s$$ s = speed,小於光速,約為光速的2/3

發送時延是從節點到傳輸介質的延遲,發送時延=資料/頻寬。和裝置的船宿速度有關。

傳輸時延和包的大小沒關係,取決於距離和傳輸速率。傳播時延=發送距離/傳播速率 因為在某種介質中傳輸的速率固定的。

End-to-End Delay 端到端的延遲

dend-end = N(dproc + dtrans + dprop)
其中dtrans = L/R = packet size/Rates

Chapter 2 : Application Layer 應用程式層

本章主要是講應用程式層協議,懶得寫了,費事,妨礙看書的速度。挑自己認為重要的寫寫。

1.進程間交流(p88)

作業系統中,應用程式的本質是進程,不同的進程之前免不了要進行交流。本質上,英特網用戶端和伺服器的交流通過進程實現。這裡我門只關注網路上運行在不同的兩個主機之間的進程交流。

一個類比:
有個房子,房子有個門。我們訪問這個房子,總是通過門去訪問。
Process就像是房子,Socket就像是門。

Socket描述了應用程式層和傳輸層之間的介面,它是由網路應用建立的。當來自傳輸層的資料報交付給上層的應用程式層時,它總想交給特定的應用,因此就有了Socket。應用程式層開發這隻關心應用程式層這邊的Socket,而不關心傳輸層那邊的。最多隻是選擇傳輸層的協議,或者設定一些傳輸層參數,比如最大的Buffer和報文段的大小。

更精妙的比喻:

  • 想著這裡有個大水壩,一邊是傳輸層,一邊是應用程式層。水壩上有很多孔洞,用於放水。每個應用會獨佔一個孔洞,用於發送和等待接受水,而另一邊是傳輸層。
  • 又像是古代的皇帝在翻牌子。
如何識別收發的進程:
  1. 主機的地址 --> IP地址
  2. 收發進程的識別符號 --> 連接埠號碼
2.安全的傳輸層協議(p94)

傳輸層最出名的兩個協議就是TCP和UDP,但是它們兩都是不加密的。如果應用程式發送了一個純文字密碼,而這個包被別人捕獲到了,那麼就可能就存在安全問題了。

所以就想辦法加強一下TCP協議,就有了Secure Sockerts Layrer(SSL), SSL不是第三個傳輸層協議,處於TCP和UDP的同層次,而是TCO和UDP協議的加強,負責加密,資料整合,端點認證。

這種加強由應用程式層實現,特別的,如果一個應用程式想要使用SSL服務,那麼它需要包含SSL的代碼(高度最佳化的類和庫)。SSL有自己的socket API,假設應用程式層使用了純文字密碼,那麼SSL會對它進行加密,接受房的SSL對它進行解密。

使用WireShark 研究HTTP協議

3.Web Caching(p110)

Web Caching = Proxy server

  1. can substantially reduce the response time
  2. reduce Web traffic in the Internet as a whole
4.Distributed Hash Tables(DHTs)

simple databash in a P2P network,key -- value.

  • key: content names(e.g. names of movies, albums, and software)
  • value: IP address
5.Socket Programming: Creating Network Applications

寫了一個UDP的簡單C/S應用,放在了部落格園。
http://www.cnblogs.com/crb912/p/9060670.html

++書中一個很重要的地方(p163),就是UDP和TCP的通訊端編程時,有所不同++:
就是UDP是不需連線的,每次讀寫socket時,都需要加入主機的地址,接受資料也得到是兩個參數(data, addr)。而TCP的socket則不需要這麼做,因為它是連線導向的,在讀寫基於這個串連的socket時,只需要直接的讀寫資料。而不需要關注去加入和接受這個目標主機地址。因為TCP的協議已經幫你建立好專用的串連了。

6.Sockt Programming AssignmentAssignment 1: Web Server
  1. 接受的用戶端的串連
  2. 接受這次串連的HTTP request
  3. 解析這個請求的檔案
  4. 從伺服器的檔案系統中擷取這個檔案
  5. 建立一個HTTP response訊息,包含這個請求的檔案
  6. 發送這個回應檔,如果伺服器的檔案系統中不存這個檔案,則返回404 Not Found

這個作業我沒有自己動手,73826062 這篇文章很好的協助了我。感覺如果我自己去寫,我可能寫不出來,因為我沒理解HTTP應答,甚至沒想到把html檔案寫入這個TCP串連中。

Assignment 2: UDP Pinger

實驗內容:基於UDP實驗一個Ping工具.

題目的連結:https://wenku.baidu.com/view/ed19e6cce2bd960591c677d2.html
我寫的答案放在部落格園上: https://www.cnblogs.com/crb912/p/9082379.html

Assignment 3: Mail Client

這個實驗沒什麼興趣,就跳過吧

Assignment 4: Multi-Threaded Web Proxy

這個實驗要求實現一個Web Proxy(網頁代理),一個瀏覽器向代理請求網頁, 然後Web Proxyorigin server請求網頁,請求的結果返回給Web Proxy,最終返回給瀏覽器。
痛點在於:資料的流動和多線程 https://www.cs.rochester.edu/~kshen/csc257-fall2009/assignments/assignment1.html

Chapter 3: Transport LayerMultiplexing and Demultiplexing

定義:

Each trasport-layer segment has a set of fields in the segment for this purpose. At eceiving end, the transport layer examines these indentify the receiving socket and then directs the segment to that socket. This job of delivering the data in a tranport-layer segment to the corrent socket is called dumultiplexing.分用
The job of gathering data chunks at the source host from different sockets, encapsulating each data chunk with header information (that will later be used in demultiplexing.) to create segments, and passing the segmengts to the network layer is called multiplexing. 複用

總結一下:
在接收端,傳輸層把接受到的segment,傳輸給相應的socket,這個稱為分用。
在發送端,來自上層的不同socket,需要被封裝成segment,然後把Segment傳遞給下面的網路層,這個過程稱為複用。

關於實現:
傳輸層要想實現分用,就必須有兩個條件成立:

  1. the sockets must have unique identifiers. 標識符唯一
  2. 每個segment必須有特殊的欄位指示,用於告訴傳遞給哪個socket.

bind()方法可以綁定通訊端到特定的連接埠,這對伺服器端很有好處,但對用戶端意義不大。

UDP socket 被一個2元組標識: 目標IP,目標port
TCP socket被一個4元組標識:源IP,源port,目標IP, 目標port。

socket是網路上兩台不同的電腦之間進程通訊的手段,對於同一台主機,它可以有大量的進程,每個進程都可以有自己的連接埠,並且關聯唯一的一個連接埠。記住: Socket = 網路進程通訊

如果兩個UDP segment 具有相同的目標IP和port,不同的源IP和port。然後這兩個segmet會進入同一個UPD socket進入同一個目標process.

安全

由於連接埠暴露,容易收到攻擊。著名的SQL 2000 Slammer worm蠕蟲就是如此。因為每個socket都有自己的buffer,當被攻擊時,buffer overflow。

Building a Reliable Data Transefer Protocol

這個小節十分重要,講述了如何去建立一個可靠的資料轉送協議。這是一個邏輯上的設計,作者嚴謹的考慮了三種情況。

  • 在可靠的Channel上的傳輸: rdt1.0
  • 在存在Bit Errors的Channel上傳輸:rdt2.0
  • 在存在bit Errors的Lossy Channel上傳輸: rdt3.0

在第三種方案中,已經考慮差錯校正,Timer, Sequence number,ACK , 丟包重傳等。這個設計就是傳輸層協議的關鍵與核心。

Pipelined Reliable Data Transfer Protocols

rdt3.0是一個功能上正確的協議,但是沒人會為它的效能感到高興,尤其是在如今這樣的高速網路。rdt3.0最大的問題就是:stop-and-wait,它是一個停止-等待協議,這導致它的效能十分糟糕。

因此如何去實現一個流水線的可靠傳輸協議呢?這是本節的重要思想。因此設計出了:

  • Go-Back-N(GBN)協議,它相對於stop-and-wait已經有很大的改善了,提高了通道的利用率,但是缺陷仍然存在:單個的包錯誤會導致大量包的重傳。
  • Selective Repeat(SR)協議 它只會重傳丟失的包。

講述了這兩個設計模式之後,就引入了TCP串連,TCP是這個設計模式實現的典範。TCP串連不存在於一個TDM和FDM的電路交換網路,也不在虛電路上,只運行在兩個end system之中。Cerf和Kahn出版了關於TCP/IP的論文,他們因此在2004被授予了ACM‘s Turing Award。TCP提供雙工的服務,full-duplex service。

應用程式層的SSH協議和Telnet協議,下一層使用的就是TCP,但是Telnet在傳輸層使用了純文字密碼。

安全

由於TCP串連需要‘three-way-handshake‘,SYN是建立所需要的,因此有SYN flood attack 防範的辦法非常簡單:就是SYN cookies。當傳輸層收到一個segment時,對它執行hash函數,得到一個特徵值。接著下面的步驟進行,如果發現ACK無效,那麼這可能就是一個有害的包。後面的每個包都會被執行Hash操作,比對。如果無效就被丟棄。

Principle of Congestion Control

擁塞控制的原則,廣義上,擁塞控制需要從兩處實現:

  • End-to-end congestions control
  • Network-assisted congestion control
    然後在下一節引入的TCP的擁塞控制:加法增加,乘法減少
總結

我們在這個章節開始處學習了傳輸層協議可以提供給網路應用的服務。從某個極端上講,傳輸層可以非常簡單的提供給應用程式層一個無修飾(no-frill)的服務。UDP就是無修飾的服務的典型例子。從另一個極端,傳出層也可以給應用程式層提供一個帶有大量保證的服務,諸如可靠傳輸,延遲保證,頻寬保證,TCP就是這樣的例子。否則,傳輸層只能依賴下一層的網路層為它提供這些保證。而網路層沒有做這些,因此這些被傳輸層實現了。

ACK應答的方式保證了資料的可靠傳輸,timer限制了在規定時間應答,重轉是保證的關鍵,seq方便了確定重傳的segment。TCP遠遠比我們想象中的要複雜,大量的TCP補丁,修正,各種版本的TCP實現。尤其的TCP的擁塞控制已經演化了很多年,並且仍然在持續演化。傳輸層也出現了其他的協議:

  • DCCP 類UDP的,但是應用程式層可以選擇是可靠的還是半可靠的。
  • SCTP 可靠的服務。允許應用程式層的‘Streams‘
  • TFRC TCP-Friendly Rate Congtrol protocol

只有時間才能檢驗這些傳輸層協議是否會在未來廣泛部署!儘管這些協議是TCP和UDP的加強版,但是從這些年的表現而言,TCP和UDP表現的已經足夠"good enough",人們是否會拋棄"better"而選擇“good better",這取決於複雜的:技術、社會和商業考慮的混合。

Chapter 4 Network Layer 網路層

Computer Neworking: A Top-Down Approach

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.