計算機網絡知識總結

網絡協議(完成數據交換所定義的規則):
1)語法。數據與控制信息的格式
2)語義。需要發出何種信息和完成何種動作和響應
3)同步。時間實現順序的詳細說明

網絡的體系結構:
tcp/ip四層結構:網絡接口層,網際層,運輸層,應用層
osi的七層結構:物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層
五層協議:物理層,數據鏈路層,網絡層,傳輸層,應用層

五層協議的基本知識點:
物理層:傳輸單位是比特,這裏的單雙工(收音機),半雙工(對講機),全雙工(電話)應該知道,共享信道的方式有:頻分複用,時分複用,統計時分複用,波分複用,碼分複用(CDM)

數據鏈路層協議:CSMA/CD協議(廣播信道)和PPP協議(點對點信道), 傳輸單位是幀,三個基本問題:封裝成幀,透明傳輸,差錯檢測。

網絡層協議:IP,ICMP,IGMP,ARP,傳輸單位是ip數據報

傳輸層協議:TCP,UDP,SPX 傳輸單位是報文

應用層協議:TELENT,SMTP,POP,FTP,DNS,HTTP,RTP,TFTP 傳輸單位是報文。

數據鏈路層的三個主要問題:

封裝成幀:在一段數據的前後加上首部和尾部,進行幀定界。爲了提高傳輸效率,規定了幀的數據部分的最大上限(MTU最大傳送單元),幀的開始符SOH結束符EOT

透明傳輸:某一個實際存在的事物看起來好像不存在,透明傳輸問題是什麼呢,
是當我們在傳送文本文件(文本文件的字符都是鍵盤輸入)的幀時,不管從鍵盤輸入什麼文字都可以傳送,當然不可能出現幀的界定符,
但是當我們傳輸二進制文件的時候,如果某個字節的二進制代碼剛好和控制符的一樣,我們就會錯誤地找到幀的邊界,把剩下的丟棄。這時候出現錯誤
爲了解決透明傳輸問題,採用字節填充方法,在發送端的數據控制字符前插入ESC轉義字符。

差錯檢測:比特在傳輸的過程中可能會出現差錯,1變0,0變1,差錯檢測的方法是:循環冗餘檢驗(CRC)。但是這只是保證了無比特差錯的傳輸,還不是可靠的傳輸,因爲還可能出現幀丟失,幀重複,幀失序。

PPP點對點協議:就是用戶計算機和ISP進行通信時所使用的數據鏈路層協議。

PPP協議的三個組成部分:
1)將ip報封裝到串行鏈路
2)LCP,建立,配置,測試數據鏈路連接
3)NCP,每個協議支持不同的網絡協議

PPP協議的幀格式:幀開始符(7E)+地址字段+未定義+協議+ip數據報+FCS(冗餘碼)+幀結束符(7E)。

當PPP協議採用異步傳輸(逐個字符傳送)時
當信息字段中出現和幀開始或結束符一樣的比特組合時,這個時候採用字節填充,把信息字段中的0x7E變爲0x7D,0x5E,把0x7D變爲0x7D,0x5D

當PPP協議採用同步傳輸(一連串的比特連續傳送)時
採用零比特填充方法來實現傳輸,在發送端發現有5個連續的1即加入0,在接收端碰到5個連續的1刪除一個0即可,保證不會出現6個1,否則會被認爲是標誌字段F.

PPP協議的工作狀態:用戶接入ISP-路由器的調制解調器確認-建立物理連接—建立數據鏈路層的LCP連接。

適配器的作用是把幀發送到局域網,從局域網接收幀。

CSMA/CD協議(載波監聽多點接入、碰撞檢測協議)
1.許多計算機以多點接入的方式連接在一根總線上,適配器從網絡層接收一個獲得一個分組,
加上以太網的首部和尾部,組成以太網幀,放入適配器的緩存中,但在發送之前,必須先檢測信道。
2.若檢測到信道忙,則應不停地檢測,一直等待信道轉化爲空閒,
若檢測信道空閒,並在96比特時間內信道保持空閒,就發送這個幀.
3.在發送的過程中要不停地檢測信道,即網絡適配器要邊發送邊監聽,
在邊發送邊監聽的時候,可能會出現如下情況:
1)發送成功。在爭用期內一直未檢測到碰撞,這個幀肯定能夠發送成功。
2)發送失敗。在爭用期內檢測到碰撞,停止發送數據,並按規定發送人爲干擾信號,適配器接着執行指數退避算法,等待r倍512比特時間後,繼續監測信道,但若重傳16次不能成功,則停止重傳而向上報錯。
4.以太網每發送完一幀,一定要把已發送完的暫時保留一下,如果在爭用期之間檢測到了碰撞,還要再推遲一段時間後把這個暫時保留的幀重傳一下。
集線器:集線器工作在物理層,主要功能是對接收到的信號進行再放大,*以擴大網絡的傳輸距離,同時把所有節點集中在以它爲中心的節點上。在物理層擴展以太網,是多接口的轉發器,並不緩存幀。*
若一個網段的數據率是10Mb/s,另外兩個網段是100Mb/s,那麼三個網段合起來最大吞吐量即變成10Mb/s.

網橋:網橋工作在數據鏈路層,在數據鏈路層擴展以太網。依靠轉發表來轉發幀,沒有流量控制功能,適合用戶量不多,通信量不大的以太網。可以互聯不同MAC層,不同物理層,不同速率以太網。
若每個網段的數據率是10Mb/s,那麼三個網段合起來最大吞吐量即變成30Mb/s.

網絡層:

網絡層向上只提供簡單靈活的,無連接的,盡最大努力交付的數據報服務。網絡層不提供服務質量的承諾。

由於用戶的需求是多種多樣的,沒有一種單一的網絡能夠適應所有用戶的需求。因此需要將這些不同的網絡進行連接,因此我們就需要路由器。
由於物理層的集線器或轉發器和數據鏈路層的網橋只是對一個網絡進行了擴展,但還是同一個網絡,而網絡層的路由器則是將不同的網絡進行互聯。

當互聯網(多種異構網絡互連組成)中的源主機H1要給目的主機H2發送消息的時候,H1先查找自己的路由表,看目的主機是否在本網絡上,如果是則直接交付,如果不是則轉發給另一個路由器進行間接交付,直到找到目的主機所在路由器。

分類的IP地址:
IP地址就是給因特網上的每個主機的每一個接口分配一個全世界範圍是唯一的32位的標識符IP地址不僅指明一個主機,而且指明一個主機連接到的網絡。

IP地址的三個階段:
1.分類的IP地址
爲什麼要對IP地址進行劃分呢?
1)各種網絡的差異很大,有的網絡擁有的主機很多,有的則很少。
2)在分配IP地址的時候只分配網絡號,剩下的主機號由得到網絡號的單位自行分配,方便IP地址管理。
3)路由器只根據目的主機連接的網絡號來轉發分組,因此使得路由表中的項目數大幅度減少,因此這樣可以減少路由表所佔的存儲空間和查找路由表的時間。
A類IP地址:0開頭,網絡號:8位,範圍是:1-126 最大可指派的網絡數:2^8-2 最大可指派的主機數:2^24-2
B類IP地址:10開頭,網絡號:16位,範圍是:128.1-191.255 最大可指派的網絡數:2^16-1 最大可指派的主機數:2^16-2
C類IP地址:110開頭,網絡號:24位,範圍是:192.0.1-223.255.255 最大可指派的網絡數:2^24-1 最大可指派的主機數:2^8-2
D類IP地址:1110開頭,多播地址。範圍是:224.0.0.0-239.255.255.255
E類IP地址:1111開頭,保留爲今後使用。

IP地址是網絡層和以上各層使用的地址,是一種邏輯地址,而物理地址是物理層和數據鏈路層使用的地址。IP地址放在IP數據報的首部,硬件地址放在MAC幀的首部。

路由器:路由器工作在網絡層,用來連接局域網或廣域網,即不同網絡的互聯,它總是具有兩個或兩個以上的IP地址,即路由器的每個接口都有一個不同網絡號的IP地址。

這裏還有兩個問題沒有解決:
1)主機或路由器怎麼知道在MAC幀的首部添加什麼硬件地址?即如何根據IP地址得到物理地址?
ARP地址解析協議,將IP地址轉化爲物理地址。在主機的ARP高速緩存中應存放從IP地址到硬件地址的映射表,並且這個映射表經常動態更新。
(新增,超時,刪除)。每一個主機都設有一個ARP高速緩存。ARP是解決同一個局域網上的主機或路由器的IP地址和硬件地址的映射問題。
從IP地址到硬件地址的解析是自動進行的,主機的用戶對這種地址解析過程是不知道的。
也有可能查不到目的主機的IP地址的項目。可能是目的主機剛入網或源主機剛通電,其高速緩存還是空的,在這種情況下,源主機自動運行ARP,
按以下步驟找出目的主機的硬件地址。
ARP進程在本局域網上廣播發送一個ARP請求分組。請求分組的主要內容是:我的ip地址是,物理地址是,我想知道ip爲*的硬件地址。
在本局域網上的所有主機上運行的ARP進程都收到此ARP請求分組,當目的主機IP地址與ARP請求分組中要查找的IP地址一致,就收下這個ARP
請求分組,並向源主機發送ARP響應分組,並在這個響應分組中寫上自己的IP地址和硬件地址。由於其餘的所有主機的IP地址與ARP請求分組要查詢的IP地址
不一致,因此都不理睬該ARP請求分組。雖然ARP請求分組是廣播的,但是響應請求是單播。源主機在收到目的主機的響應分組後,就在其ARP高速緩存中寫入
目的主機IP地址到物理地址的映射。ARP的高速緩存十分有用,如果沒有,那任何一個主機只要進行一次通信,就必須在網絡上用廣播方式發送ARP請求分組,
這將使得通信量大大增加,因此使用ARP高速緩存時,可以減少通信量。ARP把保存在高速緩存中的每一個映射地址項目都設置生存時間,凡超過生存時間的項目就從
高速緩存中刪除,(當某一個主機的網絡適配器突然壞了,更換了之後,則該主機的硬件地址變了,在生存時間之後,就會刪除這個硬件地址在高速緩存中)

當主機A要向本局域網上的某個主機B發送IP數據報時,就先在其高速緩存查看有無有無主機B的IP地址,如有,就在ARP高速緩存中查出其對應的硬件地址,
再把這個硬件地址寫入MAC幀,然後通過局域網把該MAC幀發往此硬件地址。主機B在收到主機A的請求分組之後,B會在自己的高速緩存中記錄下
A的IP地址到硬件地址的映射,以便於B向A發送請求的時候,減少通信量。如果要找的目的主機和源主機不在同一個局域網內。則源主機無法解析出另一局域網上的目的主機的硬件地址。
那麼可能有人要提出疑問了,既然最終傳輸的幀是按照最終是按硬件地址到達目的主機的,那爲什麼不直接採用硬件地址進行通信?
由於全世界存在各種各樣的網路,他們使用不同的硬件地址,要使這些不同的網絡進行相互通信,就必須進行非常複雜的硬件地址轉換工作。因此由用戶主機來完成這項工作幾乎是不可能的,
但統一的IP地址解決了這個問題,連接到因特網的主機只需擁有統一的IP地址,他們之間的通信就像是連接在同一個網絡一樣方便。ARP的複雜過程都是由計算機軟件自動進行的,對用戶來說,這種調用是看不見的。

IP數據報的格式:IP數據報可以說明IP協議具有什麼功能。組成:IP數據報的首部(20字節)+數據部分。
首部組成:協議(IP協議的版本,IPv4)+首部長度(32位)+區分服務(一般不用)+總長度(MTU)+標識(保證分片後正確地重裝)
+標誌(MF,DF,當MF=0表示這是若干數據片中最後一個,當MF=1,表示後面還有分片,標誌字段中間的一位記爲DF,表示不能分片,DF=0表示可以分片)+片偏移(某片在原分組中的相對位置)
+生存時間(TTL,表示數據報在網絡中的壽命,防止無法交付的數據報無限制地在因特網中兜圈子,隨技術的進步,TTL表明數據報在因特網中至多可以經過多少路由器,單位爲跳數,經過的路由器的最大值是255,在數據報被轉發之前TTL就會減1)
+協議(指明數據部分使用的是何種協議,以便使目的主機的IP層知道應將數據部分上交給哪個處理過程)+首部檢驗和(只檢驗首部)+源地址(32位IP地址)+目的地址(32位IP地址)+可變部分(選項字段,用來排錯,測量,以及安全等措施)
2)IP層轉發分區流程?
每一條路由主要是這兩個信息:目的網絡地址和下一跳地址。因此我們可以根據目的網絡地址確定下一跳路由器,只有到達最後一個路由器時,嘗試向目的主機交付。
因特網所有的分組轉發都是基於目的主機所在的網絡,但也允許這樣的特例,就是針對特定的目的主機指定一個路由,這種路由叫特定主機路由。這種使得網絡管理人員 更方便地控制網絡和測試網絡。
在對網絡的連接或者路由表排錯時,指明到某一個主機的特殊路由就十分有用。路由器也可以採用默認路由,適合於一個網絡只有很少的對外連接的時候。但是IP數據報的首部並沒有指明下一跳路由器IP地址。
那怎麼找到下一跳路由器呢?路由器從路由表中得到下一跳的路由器的IP地址之後,將該IP地址送交數據鏈路層的網絡接口軟件,網絡接口軟件ARp將其轉化爲硬件地址,寫入MAC幀,併發送到下一跳路由器。
當發送一連串的數據報的時候,這些查找路由表,計算硬件地址,寫入MAC幀首部等過程,將不斷地重複進行,造成一定開銷。
分組轉發算法總結:
1)從IP數據報首部得到目的IP地址,得出目的網絡地址
2)若目的網絡地址與此路由器知己相連,則直接交付目的主機(目的主機IP地址轉化到物理地址,把數據報封裝成幀,發送此幀),不需要再經過其他路由器。
3)若路由表中有目的地址的特定主機路由。則發送數據報給路由表中指定的下一跳路由,否則,執行(4)
4)若路由表中有到達目的網絡的路由。則發送數據報給路由表中指定的下一跳路由,否則,執行(5)
5)若路由表中有一個默認路由。則發送數據報給路由表中指定的默認路由,否則,執行(6)
6)報告轉發分組出錯。
那麼路由表是如何建立和更新的呢?

2.子網的劃分

由於IP地址空間的利用率有時很低,給每一個物理網絡分配一個網絡號會使得路由表變大,兩級IP地址不靈活等因素,因此劃分子網。
子網劃分是從網絡的主機號借用若干位作爲子網號,主機號當然就減少了相應位數,於是兩級IP地址在本單位就變成三級IP地址.
IP地址::={<網絡號>,<子網號>,<主機號>};

那麼當一個數據報已經到了路由器,那麼是怎麼轉發到子網呢?因爲從IP數據報的首部無法判斷出是否進行了子網劃分,這時子網掩碼應運而生。
網絡號和子網號對應的子網掩碼爲1,主機號對應的子網掩碼爲0.
將子網掩碼和目的IP地址進行與運算即可得到所要找的子網的網絡地址。劃分爲多個子網的網絡,對外仍然表現一個網絡。
不管有沒有劃分子網,進行與運算之後,都可得到目的網絡地址。
那既然沒有劃分子網爲什麼還需要子網掩碼呢?便於查找路由表。
所有的網絡必須使用子網掩碼,同時在路由器的路由表中也必須有子網掩碼這一欄,如果一個網絡不劃分子網,那麼該網絡的子網掩碼使用默認子網掩碼。
A類地址的默認子網掩碼:255.0.0.0
B類地址的默認子網掩碼:255.255.0.0
C類地址的默認子網掩碼:255.255.255.0

子網掩碼是一個網絡或子網的重要屬性,路由器和相鄰路由器交換路由信息時,必須把自己所在的網絡的子網掩碼告訴相鄰路由器,路由表中不僅要給出目的網絡地址還要有子網掩碼。

已知子網掩碼和IP地址,求子網數和每個子網的主機數?通過IP地址可知屬於哪一類地址,再根據判斷子網號的位數,即就是除網絡號之外多餘的位爲1的有n位,則子網數爲2^n-2,位爲0的有m位,則子網的主機數爲2^m-2
即B類地址的某一個子網掩碼爲255.255.255.0.可知網絡號16位,子網號8位,主機號8位,即子網數2^8-2,子網主機數2^8-2

劃分子網增加了靈活性,但卻減少了能夠連接在網絡上的主機總數。
使用子網時分組轉發算法總結:,使用子網之後,路由表必須包含:目的網絡地址,子網掩碼,下一跳地址。

劃分子網的分組轉發算法總結:
1)從IP數據報首部得到目的IP地址
2)先判斷是否爲直接交付,對路由器直接相連的網絡逐個進行檢查,各網絡的子網掩碼和IP地址與運算,如果網絡地址相匹配,則直接交付目的主機(目的主機IP地址轉化到物理地址,把數據報封裝成幀,發送此幀),不需要再經過其他路由器。
3)若路由表中有目的地址的特定主機路由。則發送數據報給路由表中指定的下一跳路由,否則,執行(4)
4)對路由表中的每一行用其中的子網掩碼和IP地址進行與運算,若網絡地址匹配。則發送數據報給該行的指定的下一跳路由,否則,執行(5)
5)若路由表中有一個默認路由。則發送數據報給路由表中指定的默認路由,否則,執行(6)
6)報告轉發分組出錯。
3.構成超網(無分類編址CIDR)

爲了解決IP地址即將耗盡和因特網主幹路由表的項目數急劇增長。採用CIDR。
CIDR特點:
1)CIDR消除了傳統地址分類的A,B,C以及劃分子網的概念。它的記法是:IP地址::={<網絡前綴>,<主機號>};
還採用斜線記法,在IP地址後面加上斜線,然後寫上網絡前綴所佔的位數。
CIDR還可以將地址塊10.0.0.0/10記爲10/10.另一種簡化表示方法是網絡前綴的後面加一個表示主機號
2)CIDR把網絡前綴都相同的連續的IP地址組成一個CIDR地址塊,只要知道任意一個地址即可知道地址塊的最小地址和最大地址。以及地址塊中的地址數。
最小地址即就是將該IP地址的主機號全設爲0.最小地址即就是將該IP地址的主機號全設爲1.地址塊的個數爲2^主機數。
爲了方便進行路由選擇,CIDR採用32位的地址掩碼。地址掩碼爲1的對應的是網絡號,地址掩碼爲0對應的是主機號。
由於一個CIDR有很多的地址,所以在路由表中就利用CIDR地址塊來查找目的網絡,這種地址的聚合常稱爲路由聚合。路由聚合也稱爲構成超網。

路由聚合有利於減少路由器之間的路由選擇信息的交換,從而提高整個因特網的性能。

CIDR是將網絡前綴縮短,網絡前綴越短,其地址塊所包含的地址數就越多,而在三級結構的IP地址中,劃分子網是是網絡前綴變長。

最長前綴匹配:
當採用CIDR時,路由表中的信息就是網絡前綴和下一跳地址組成了。但是在查找路由表的時候,網絡前綴可能會得到多個匹配結果。那麼選擇哪一條路由呢?
正確的答案是:選擇網絡前綴最長的路由。網絡前綴越長,地址塊就越小,路由就越具體。最長前綴匹配又稱最佳匹配。
使用二叉線索樹查找路由表。爲提高二叉線索樹的查找速度,廣泛使用了各種壓縮技術。

4.網際控制報文協議ICMP
爲了更有效的轉發IP數據報和提高交付成功的機會,在網際層使用了網際控制報文協議ICMP。
ICMP允許主機或路由器報告差錯情況和提供有關異常情況的報告。
ICMP作爲IP數據報的數據加上IP數據報的首部,組成IP數據報發送出去。
ICMP分爲:ICMP差錯報告報文和ICMP詢問報文。
ICMP報文組成:類型+代碼+檢驗和
ICMP差錯報文有五種:
1)終點不可達
2)源點抑制
3)時間超過
4)參數問題
5)改變路由(重定向)
不應發送ICMP差錯報文的情況:
1)出錯後不再發送
2)對第一個分片的數據報片的所有後續數據報片都不發送ICMP差錯報告報文。
3)對具有多播地址的數據報都不發送ICMP差錯報文。
4)對具有特殊地址(127.0.0.1或0.0.0.0)的數據報不發送ICMP差錯報文。

ICMP請求報文有兩種:
1)回送請求和回答:主機或路由器向一個特定的目的主機發出的詢問,收到此報文的主機或者路由器必須給源主機或路由器回送回答報文
2)時間戳請求和回答:ICMP時間戳請求報文是請某個主機或路由器回答當前的日期和時間。

ICMP的應用舉例:
分組網間探測PING:是應用層直接使用網絡層的一個例子,沒有通過運輸層的TCP和UDP。使用了ICMP的請求與回送回答報文。用來測試兩個主機之間的連通性。
tracert命令:跟蹤一個分組從源點到終點的路徑。

路由器:路由器是一種具有多個輸入輸出端口的專用計算機,其任務是轉發分組。從某個輸入端口收到的分組,按照分組要去的地方,把該分組從路由器的某個合適輸出端口,轉發給下一跳路由器,下一跳路由器也按照這種方法處理分組,直到該分組到達終點爲止。
整個路由器的結構可分爲:路由選擇部分(根據路由選擇協議(RIP,OSPF)構造出路由表,更新和維護路由表)和分組轉發部分(根據轉發表對分組進行處理,從合適輸出端口轉發出去)。
若路由器的輸入或輸出隊列產生溢出的時候和設備或線路出現故障的時候可能會使分組丟失。

5.IP多播
在一對多的通信中,IP多播可大大節約網絡資源。
IP多播分爲兩種:在本局域網上進行硬件多播,另一種是在因特網的範圍進行多播。
多播只能用於目的地址不能用於源地址,多播數據報也是盡最大努力交付,不保證能夠交付多播組內的所有成員
多播地址和一般的IP數據報的區別就是它使用D類IP地址作爲目的地址,並且首部中的協議字段值是2,表明使用網際組管理協議(IGMP)。
在局域網上進行硬件多播:
由於多播地址與以太網硬件地址的映射關係不是唯一的,因此受到多播數據報的主機還要在IP層利用軟件進行過濾,把不是本機要接收的數據報丟棄。
IP多播需要的協議:IGMP協議(使得連接在本地局域網上的多播路由器知道本局域網上是否有主機參加或退出某個多播組)和多播路由選擇協議(找到以源主機爲根節點的多播轉發樹,動態適應多播組成員變化,使用最小代價傳送給所有的組成員)。
轉發多播數據報時使用了以下三種方法:1)洪泛與剪除2)隧道技術3)基於核心的發現技術

6.虛擬專用網VPN
當有的很大機構有許多部分分佈在相距很遠的地方,而且每一個地點都有自己的專用網,假定這些分佈在不同地點的需要經常通信,
爲了節約成本,這時可以利用公用的因特網作爲本機構各專用網之間的通信載體,採用隧道連接,這樣的專用網又稱爲虛擬專用網VPN。並且所有通過
因特網傳送的數據都必須加密。一個機構要構建自己的VPN,就必須爲它的每一個場所購買專門的硬件和軟件,並進行配置,使每一個場所的VPN系統都知道其他場所的地址。
內聯網VPN和外聯網VPN(有外部機構參與)都是基於TCP/IP協議,還有遠程接入VPN(視頻會議)

7.網絡地址轉換NAT
專用網內部的主機已經分配到本地IP地址,但現在又想和因特網上的主機通信,這時可採取網絡地址轉換。
需要在專用網連接到因特網的路由器上安裝NAT軟件,裝有NAT軟件的路由器叫做NAT路由器,它至少有一個外部全球IP地址。
這樣所有使用本地的主機在和外部通信時,都要在NAT路由器上將本地地址轉化爲全球IP地址,才能和因特網連接。
當NAT路由器具有N個全球IP地址時,專用網內最多可以同時有N個主機接入到因特網。專用網內較多數量的主機可以輪流使用NAT路由器有限數量的全球IP地址
爲了更加有效地利用NAT路由器上的全球IP地址,現在常用的NAT轉換表吧運輸層的端口也利用上,這樣就可以使多個擁有本地地址的主機,共用一個NAT路由器上的全球IP地址,
因而可以同時和因特網上的不同主機進行通信。

運輸層:
端到端的通信是應用進程之間的通信。運輸層有一個很重要的功能就是複用和分用。
複用:在發送方不同的應用進程都可以使用同一個運輸層協議傳送數據,前提是加上適當的首部。
分用:接收方的運輸層在剝去報文的首部後能將這些數據正確交付目的應用進程。
網絡層是爲主機之間提供邏輯通信,運輸層提供的是應用進程之間的邏輯通信。
在網絡層,IP數據報首部中的檢驗和只檢查首部是否出現差錯而不檢查數據部分。但是運輸層還要對收到的報文進行差錯檢測。
當運輸層採用面向連接的TCP協議時,儘管下面的網絡是不可靠的,但這種邏輯通信的銑刀相當於一條全雙工的可靠信道。但當運輸層採用無連接的UDP協議時,依舊是不可靠信道。
運輸層的兩個主要協議:
1)用戶數據報協議(UDP)
傳送數據之前不需建立連接,收到之後不用確認的不可靠交付,即就是無連接的,盡最大努力交付,面向報文的,沒有擁塞控制的,支持一對一,一對多,多對多的交互通信,首部開銷小隻有8個字節。
對於有一些使用UDP的實時應用,需要對UDP的不可靠傳輸進行改進,以減少數據的丟失。如採用糾錯或者重傳已丟失的報文。
UDP的首部格式:源端口+目的端口+長度+檢驗和(把首部和數據部分一起檢驗)。
當IP層->運輸層傳送數據報時,運輸層根據首部中的目的端口,將UDP數據報通過相應的端口上交最後的終點-應用進程。
如果端口號不正確,就丟棄該報文,並由網際控制報文協議ICMP發送端口不可達差錯報文給發送方。
UDP的發送報文長度是應用進程給出的。
2)傳輸控制協議(TCP)
面向連接的,可靠的,全雙工的,面向字節流的運輸服務。支持一對一,每一條TCP連接只能有兩個端點,TCP並不關心應用進程一次將多長的報文發送給TCP緩存中,而是根據對方給出的窗口值和當前的網絡擁塞程度來決定報文段應該包含多少字節,若TCP緩存太長,則劃分短點,若太短,則可等待累積足夠多再發送。
同一個IP地址有多個不同的TCP連接,而同一個端口也可以出現在多個不同的TCP連接中。

端口號可以用來標識主機上的某一個應用進程。這種在協議棧層間的抽象的協議端口是軟件端口。
硬件端口是不同的硬件設備進行交互的接口,而軟件端口是各種協議進程和運輸實體進行層間交互的一種地址。
1)服務器使用的端口號
熟知端口號或系統端口號:0-1023 登記端口號:1024-49151
常用的熟知的端口號: FTP-21,TELENT-23,SMTP-25,DNS-53,TFTP-69,HTTP-80,SNMP-161,SNMP(trap)-162.
2)客戶端使用的端口號
49152-65535.這類端口僅在客戶進程運行時才動態選擇,因此又叫做短暫端口號。通信結束後,使用過的端口號就不存在。

可靠傳輸的工作原理:

1)停止等待協議(在不可靠的網絡上實現可靠的通信)
每發送完一個分組就停止發送,等待對方的確認,在收到確認後再發送下一個分組。
這裏有三種情況:
a**)無差錯情況**。發送方發完後暫停發送,收到確認後再發送。
b)有差錯情況。可能是收到有差錯的分組或傳輸過程中丟失。超時重傳。發送完之後暫時保留已發送分組副本,分組和確認分組進行編號。重傳時間比分組傳輸平均時間更長些。
c)確認丟失和確認遲到。丟棄重複的分組,向發送方恢復確認。
如果不斷重傳分組並且總是收不到確認,說明通信吸納路太差,不能進行通信。
爲了提高傳輸效率,發送方可以不使用低效的停止等待協議,而是採用流水線傳輸。即發送方連續發送多個分組,不必發完一個分組就停下來等待對方的確認。當使用流水線傳輸時,即可使用連續ARQ協議和滑動窗口協議。
2)連續ARQ協議
接收方採用累積確認的方式。對按序到達的最後一個分組發送確認。表示到這個分組爲止的所有分組都已經正確收到了。
滑動窗口的分組發送是按照序號從小到大。
TCP報文首部格式:
源端口+目的端口+序號(報文段序號)+確認號+數據偏移(TCP首部長度)+保留+緊急URG(URG=1有效,表示有緊急數據)+確認ACK(ACK=1有效)+推送PSH(使其儘快交付接收應用進程)+復位RST(RST=1表示TCP連接出現嚴重差錯)
+同步SYN(建立連接時同步序號)+終止FIN(FIN=1釋放鏈接)+窗口(接收窗口)+檢驗和+緊急指針(URG=1有效,表名緊急數據大小)+選項
TCP可靠傳輸的實現:
1.以字節爲單位的滑動窗口
發送窗口=已發送未收到確認+允許發送但尚未發送
發送窗口通常是不斷向前移動,但也有可能不動:1)未收到新的確認2)收到確認但是對方通知的接收窗口變小
接收方只能對按序收到的數據的最高序號給予確認。
當發送窗口已經發送完,但是還沒有再收到確認,這時可用窗口爲0,必須停止發送。
TCP存在發送緩存和接收緩存。
發送緩存用來存放:1)發送方準備發送的數據 2)已經發送尚未收到確認的數據
接收緩存用來存放:1)按序到達,但尚未被應用程序讀取的數據 2)未按序到達的數據
要注意的幾點:
a)發送窗口並不總是和接受窗口一樣大
b)對於不按序到達的數據,通常臨時存放在接收窗口,等收到所缺的字節流後,再交付上層應用進程。
c)TCP要求接收方必須有累積確認的功能,減少傳輸開銷。
2.超時重傳的時間的選擇
TCP發送方在規定的時間內沒收到確認就要重傳已發送的報文段。雖然重傳概念是簡單的,但是重傳時間的選擇是較爲複雜的事。
TCP採用了一種自適應算法,記錄報文的發送時間和收到確認的時間。時間之差就是報文段的往返時間RTT。TCP保留了RTT的加權平均往返時間RTTs.
當進行重傳之後,怎麼判斷是對先發送的報文段的確認還是對後來重傳的報文段的確認呢?
正確的方法是:報文段每重傳一次,就把超時重傳時間RTO增大一些,取新的重傳時間爲2倍的舊的重傳時間。當不再發生報文段的重傳時,才計算RTO。
3.選擇確認SACK
只傳送缺少的數據而不重傳已經正確到達接收方的數據。使得TCP首部選項加上允許SACK選項,指明字節塊邊界信息。
TCP的流量控制(發送方的發送速率不要太快,要讓接收方來得及接收)
1)利用滑動窗口實現
發送窗口不超過接收方給出的接收窗口的數值。
設置持續計時器,只要一方收到對方的零窗口通知就啓動持續計時器。若設置計時器的時間到期,就發送零窗口探測報文,在確認該報文時給出窗口值,若窗口值仍爲0,則重新設置計時器。
2)傳輸效率
如何控制TCP發送報文段的時機?
a)Nagle算法。當發送應用進程將發送數據逐個字節送到TCP緩存中,發送方先把第一個數據字節發出,把後面到達的數據字節緩存起來。當收到第一個確認的時候,再把發送緩存中的所有數據段組裝成一個報文發送出去。
當到達的數據已經達到發送窗口大小的一般或已經達到報文段的最大長度時,就立即發送一個報文段。這樣有利於提高網絡吞吐量。
b)糊塗窗口綜合症
當接收緩存已有足夠的空間容納一個最長的報文或者等到接收緩存有一半空閒的空間。滿足其一,接收方就發出確認報文,並向發送方通知當前窗口大小。發送方將數據累積成足夠大報文或達到對方接收緩存一般大小。
上述兩種方法可配合使用,使得發送方不發送很小的報文段的同時,接收方也不要在緩存剛有了一點小的空間就急忙把這個很小的窗口大小信息通知給發送方。
3)擁塞控制(對網絡中某一資源的需求超過當前可用資源數目)
幾種擁塞控制方法:
1)慢開始和擁塞避免
當主機開始發送數據的時候,如果發送大量字節到網絡會引起擁塞,即要從小到大逐漸增大發送窗口,每收到一個對新的報文段的確認之後,
將擁塞窗口增加至多一個MMS的值,用這樣的方法增大發送方的擁塞窗口。每經過一個傳輸輪次,擁塞窗口加倍。爲了防止擁塞窗口增長過大引起網絡擁塞,
還需要設置一個慢開始門限,擁塞避免的思路是讓擁塞窗口緩慢的增長,每經過一個RRT,就把對方的擁塞窗口加1.而不是加倍。
無論是在慢開始階段階段還是擁塞避免階段,只要發送方判斷網絡出現擁塞(沒按時收到確認),就要把慢開始門限(ssthresh)設置爲出現擁塞時發送窗口值的一半。
然後把擁塞窗口cwnd擁塞窗口置爲1,執行慢開始算法。
這裏寫圖片描述
2)快重傳和快恢復
快重傳要求接收方每收到一個失序的報文段後就立即發出重複確認,而不要等待自己發送數據時才進行捎帶確認。使得發送方及早知道有報文段未達到。
當發送方一連收到三個重複確認就應該立即重傳對方尚未收到的報文段,而不必繼續等待設置的計時器到期,由於發送方能儘早重傳未被確認的報文段,因此可提高網絡吞吐量。
當發送方一連收到三個重複確認就執行乘法減小,將cwnd的值設置爲慢開始門限減半後的數值,然後開始執行擁塞避免。
發送方的窗口值取接收窗口和擁塞窗口的最小值。
這裏寫圖片描述
3)隨機早期檢測(網絡層)
由於路由器的隊列是先進先出,由於隊列是有限的,當隊列已滿時,以後再到達的分組將被丟棄。即尾部丟棄策略。路由器的尾部丟棄往往會導致一連串分組的丟失,這就使發送方出現超時重傳,
使TCP進入擁塞控制的慢開始狀態,更爲嚴重的是,有時會影響很多TCP連接,使得他們在同一時間都進入慢開始狀態。爲了避免發生全局同步現象,可以在路由器採用隨機早期檢測RED措施。
使得路由器維持兩個參數,最小門限和最大門限,當平均隊列長度小於最小門限,則放入隊列排隊。若平均隊列長度大於最大門限,則丟棄。
如果平均隊列長度在兩者之間,則按照某一概率p將新到達的分組丟棄。一般情況下,最大門限等於最小門限值的2倍。

TCP的三次握手四次揮手:
爲什麼客戶端還要再發送一次確認呢?爲了防止已經失效的連接請求報文突然又重傳送到了服務器端,因此產生了錯誤。
三次握手:
這裏寫圖片描述
四次揮手:
這裏寫圖片描述
當被動關閉的一方收到連接釋放請求發出確認之後,這時的TCP處於半關閉狀態。若此時該端向主動關閉的一方發送數據,仍要進行接收。

當主動關閉的一方,在收到對方的連接釋放請求報文的時候,必須對此發出確認,然後進入TIME_WAIT狀態,這時TCP連接還未釋放掉,必須等待2MSL,主動關閉的一方纔進入closed狀態。

爲什麼要發送完確認之後要等待2MSL?
1)保證主動關閉一方發送的最後一個ACK報文段能夠到達被動關閉一方
2)防止已經失效的連接請求報文段出現在本鏈接中。等待時間2MSL,可使本次連接中產生的所有報文段從網絡中消失。

TCP還設有一個保活計時器,假設客戶端已經和服務器端建立了TCP連接,但後來客戶端的主機突然出現故障,顯然服務器不能白白等下去。
因此,服務器端每收到一次客戶端的數據,重新設置保活計時器,時間設置通常是兩小時。若兩小時沒收到客戶端的數據,服務器端就發送探測報文。
每75分鐘發送一次,若一連發送10個報文段後仍無客戶端的響應,則服務器端認爲客戶端出現故障,關閉這個連接。

應用層:

1.HTTP和HTTPS區別
1)http協議運行在TCP之上。所有傳輸的內容都是明文,客戶端和服務器端都無法驗證對方的身份。
https運行在SSL/TLS之上,SSL/TLS運行在TCP之上。所有傳輸的內容都經過加密,加密採用對稱加密,但對稱加密的密鑰用服務器方的證書進行了非對稱加密。此外客戶端可以驗證服務器端的身份,如果配置了客戶端驗證,服務器方也可以驗證客戶端的身份。
2)http的端口號是80,https的端口號是443.
3)https是安全的http.
4)採用https 的server 必須從CA 申請一個用於證明服務器用途類型的證書. 該證書只有用於對應的server 的時候,
客戶度纔信任次主機. 有些要求有客戶端證書,其實就類似表示個人信息的時候,除了用戶名/密碼, 還有一個CA 認證過的身份.
應爲個人證書一般來說上別人無法模擬的,所有這樣能夠更深的確認自己的身份

2.用戶輸入網址按下回車會發生什麼?
當我們按下回車鍵之後,DNS開始域名解析。應用進程調用解析程序,併成爲DNS的一個客戶,把待解析的域名放在DNS請求報文中。
以UDP的用戶數據報方式發送給本地域名服務器,使用UDP是爲了減少開銷,當本地域名服務器在查找域名之後,把對應的IP地址放在
回答報文中返回。若本地域名服務器不能回答請求,則此域名服務器就暫時成爲DNS的另一個客戶,並向其他域名服務器發出查詢請求,
這種過程直至找到能夠回答該請求的域名服務器爲止。在將域名解析爲IP地址之後,該進程建立TCP連接,將IP數據報發送到網絡層,
然後查找相應路由表,根據ARP協議將物理地址封裝在幀中,並將該幀發送給相應服務器,若中途報文丟失出現差錯等,會回送ICMP差錯報文,
至此,完成三次握手,建立連接。瀏覽器發送獲取資源的方法,服務器給予響應報文,並將要獲取的文件回送給本地主機。
然後通過四次揮手,雙方斷開TCP連接。得到文件後的本地主機,通過瀏覽器去解析這個文件,在瀏覽器上呈現出來。
推薦鏈接:http://www.nowcoder.com/discuss/2025

3.HTTP常見狀態碼?(推薦鏈接:http://www.cnblogs.com/loveyakamoz/archive/2011/09/03/2165266.html)
這裏寫圖片描述
1**
100初始的請求已經接受,客戶應當繼續發送請求的其餘部分
101服務器將遵從客戶的請求轉換到另外一種協議
2**
200請求成功。一般用於GET與POST請求
3**
301永久移動。請求的資源已被永久的移動到新URI,返回信息會包括新的URI,瀏覽器會自動定向到新URI。今後任何新的請求都應使用新的URI代替
302臨時移動。與301類似。但資源只是臨時被移動。客戶端應繼續使用原有URI.
304客戶端有緩衝的文檔併發出了一個條件性的請求(一般是提供If-Modified-Since頭表示客戶只想比指定日期更新的文檔)。服務器告訴客戶,原來緩衝的文檔還可以繼續使用。
305客戶請求的文檔應該通過Location頭所指明的代理服務器提取
4**
403資源不可用。
404服務器無法根據客戶端的請求找到資源.
5**
500服務器內部錯誤,無法完成請求
503服務器由於維護或者負載過重未能應答。

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