近期把計算機(jī)網(wǎng)絡(luò)的主要章節(jié)看了一下,整理出的知識點(diǎn)主要是TCP/IP四層模型每一層的具體細(xì)節(jié)等。
應(yīng)用層,運(yùn)輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層等進(jìn)行詳解

- 應(yīng)用層:通過應(yīng)用程序間的交互來完成特定網(wǎng)絡(luò)應(yīng)用。應(yīng)用層的協(xié)議定義是應(yīng)用層序之間通信和交互的規(guī)則。
- 傳輸層:負(fù)責(zé)兩臺主機(jī)的進(jìn)程之間通信提供通用的數(shù)據(jù)傳輸服務(wù)。(報文段(TCP)/用戶數(shù)據(jù)報(UDP))
- 網(wǎng)絡(luò)層:負(fù)責(zé)為分組交換網(wǎng)上的不同主機(jī)提供通信服務(wù)。分組也叫IP數(shù)據(jù)報。
- 數(shù)據(jù)鏈路層:兩臺主機(jī)之間的數(shù)據(jù)在鏈路上進(jìn)行傳輸,就需要專門的鏈路層協(xié)議。在兩個相鄰節(jié)點(diǎn)之間傳送數(shù)據(jù)時,數(shù)據(jù)鏈路將網(wǎng)絡(luò)層交下來的IP數(shù)據(jù)報(簡稱為數(shù)據(jù)報,分組或包)封裝成幀。每一幀包括數(shù)據(jù)和必要的控制信息(同步信息,地址信息,差錯控制)
- 物理層:物理層傳輸?shù)臄?shù)據(jù)單位是比特。
一、物理層
在各種計算機(jī)的傳輸媒體上傳輸數(shù)據(jù)比特流。
二、數(shù)據(jù)鏈路層
1、點(diǎn)對點(diǎn)信道的數(shù)據(jù)鏈路
點(diǎn)對點(diǎn)信道的數(shù)據(jù)鏈路層的協(xié)議數(shù)據(jù)單元 — 幀。
數(shù)據(jù)鏈路層把網(wǎng)絡(luò)層交下來的 IP 數(shù)據(jù)報構(gòu)成幀發(fā)送到鏈路上,以及把接收到的幀中的數(shù)據(jù)取出并交給網(wǎng)絡(luò)層。
點(diǎn)對點(diǎn)信道的數(shù)據(jù)鏈路進(jìn)行通信時主要步驟:
- 結(jié)點(diǎn)A的數(shù)據(jù)鏈路層把網(wǎng)絡(luò)層交下來的 IP 數(shù)據(jù)報添加首部和尾部封裝成幀。
- 結(jié)點(diǎn)A把封裝好的幀發(fā)給結(jié)點(diǎn)B的數(shù)據(jù)鏈路層
- 若結(jié)點(diǎn)B數(shù)據(jù)鏈路層收到的幀無差錯,則從收到的幀中取出 IP 數(shù)據(jù)報交給上面的網(wǎng)絡(luò)層,否則丟棄幀。
數(shù)據(jù)鏈路層協(xié)議的三個基本問題
封裝成幀:在一段數(shù)據(jù)的前后添加首部和尾部,這樣就構(gòu)成了一個幀,接收端收到物理層上交的比特流后,就根據(jù)首部和尾部的標(biāo)記,從收到的比特流中識別幀的開始和結(jié)束。首部和尾部的作用就是進(jìn)行幀定界。并且首部和尾部還會包含一些重要的控制信息。
-
透明傳輸:表示無論什么樣的比特組合的數(shù)據(jù),都能按照原樣沒有差錯的通過這個數(shù)據(jù)鏈路層。
幀的開始和結(jié)束標(biāo)記使用專門指明的控制字符,任何 8 比特的組合一定不允許作為幀定界控制字符。
為解決透明傳輸問題,必須設(shè)法使數(shù)據(jù)中可能出現(xiàn)的控制字符【SOH】【EOT】在接收端不被解釋為控制字符,具體辦法(字節(jié)/符填充法):發(fā)送端的數(shù)據(jù)鏈路層在數(shù)據(jù)中出現(xiàn)控制字符【SOH】【EOT】的前面插入轉(zhuǎn)義字符【ESC】,而在接收端的數(shù)據(jù)鏈路層把數(shù)據(jù)送往網(wǎng)絡(luò)層之前刪除插入的轉(zhuǎn)義字符。
差錯檢測:比特差錯是比特在數(shù)據(jù)傳輸過程中常見的差錯,只是傳輸差錯中的一種。具體解決辦法(循環(huán)冗余檢查CRC):每組 k 個比特,待傳送的數(shù)據(jù)是 M,CRC 運(yùn)算就是在數(shù)據(jù) M 后面添加供差錯檢測用的 n 位冗余碼。構(gòu)成新的比特 (k+n)位,在所要發(fā)送的數(shù)據(jù)上添加 n 位冗余碼,雖增大了傳輸開銷,卻可以進(jìn)行差錯檢測。
2、廣播信息的數(shù)據(jù)鏈路層
局域網(wǎng)最主要的特點(diǎn):網(wǎng)絡(luò)為一個單位所擁有,且地理范圍和站點(diǎn)數(shù)目均有限。
局域網(wǎng)的優(yōu)點(diǎn)
- 具有廣播功能,從一個站點(diǎn)可很方便的訪問全網(wǎng),局域網(wǎng)上的主機(jī)可以共享連接在局域網(wǎng)上的各種硬件和軟件資源。
- 便于系統(tǒng)的擴(kuò)展和逐漸演變,各設(shè)備的位置可靈活調(diào)整和改變。
- 提高系統(tǒng)的可靠性,可用性,生存性。
局域網(wǎng)可按照網(wǎng)絡(luò)拓?fù)溥M(jìn)行分類:星形網(wǎng),環(huán)形網(wǎng),總線網(wǎng)。
三、網(wǎng)絡(luò)層
網(wǎng)絡(luò)層提供的兩種服務(wù)
-
虛電路服務(wù)(適用于電話業(yè)務(wù)等非智能,無差錯處理能力的傳輸)
- 兩臺計算機(jī)進(jìn)行通信,首先建立連接(在分組交換中是建立的需電路)
- 為雙方預(yù)留通信所需的一切網(wǎng)絡(luò)資源
- 雙方沿著已建立的虛擬電路發(fā)送分組(這樣分組首部不需要添加完整的目的主機(jī)地址,只需要填寫虛擬電路的編號,而減少分組的開銷。)
虛電路服務(wù)使用 可靠傳輸?shù)木W(wǎng)絡(luò)協(xié)議,可以使得所發(fā)送的分組無差錯的按序列到達(dá)終點(diǎn),當(dāng)然也不丟失,不重復(fù)。 通信結(jié)束時釋放建立的連接。
-
數(shù)據(jù)報服務(wù)(適用于計算機(jī)網(wǎng)絡(luò)的端系統(tǒng)等智能的計算機(jī))
網(wǎng)絡(luò)層向上只提供簡單靈活的,無連接的,盡最大努力交付的數(shù)據(jù)報服務(wù)。
網(wǎng)絡(luò)層發(fā)送分組時不需要建立連接,每一個分組(IP 數(shù)據(jù)報)獨(dú)立發(fā)送,其前后的分組無關(guān)(不編號),網(wǎng)絡(luò)層不提供任何服務(wù)質(zhì)量的承諾,鎖傳輸?shù)姆纸M可能出錯,丟失,重復(fù)和失序(不按序列到達(dá)終點(diǎn)),也不保證分組交付的時限。
好處:
網(wǎng)絡(luò)造價大大降低,運(yùn)行方式靈活,能適應(yīng)多種應(yīng)用。
| 對比的方面 | 虛電路服務(wù) | 數(shù)據(jù)報服務(wù) |
|---|---|---|
| 思路 | 可靠通信應(yīng)當(dāng)由網(wǎng)絡(luò)來保證 | 可靠通信應(yīng)當(dāng)由用戶主機(jī)來保證 |
| 連接的建立 | 必須有 | 不需要 |
| 終點(diǎn)地址 | 僅在連接建立階段使用,每個分組使用短的虛電路號 | 每個分組都有終點(diǎn)的完整地址 |
| 分組的轉(zhuǎn)發(fā) | 屬于同一條虛電路的分組均按照同一路由進(jìn)行轉(zhuǎn)發(fā) | 每個分組獨(dú)立選擇路由進(jìn)行轉(zhuǎn)發(fā) |
| 當(dāng)結(jié)點(diǎn)出故障時 | 所有通過出故障的結(jié)點(diǎn)的虛電路均不能工作 | 出故障的結(jié)點(diǎn)可能丟失分組,一些路由器可能發(fā)生變化 |
| 分組的順序 | 總是按照順序到達(dá)終點(diǎn) | 到達(dá)終點(diǎn)的時間不按照發(fā)送順序 |
| 端到端的差錯處理和流量控制 | 可以由網(wǎng)絡(luò)負(fù)責(zé),也可以由用戶主機(jī)負(fù)責(zé) | 由用戶主機(jī)負(fù)責(zé) |
IP
IP 協(xié)議配套使用的還有三個協(xié)議
-
地址解析協(xié)議ARP(Address Resolution Protocol)
當(dāng)主機(jī)A向本局域網(wǎng)上某臺主機(jī)B發(fā)送 IP 數(shù)據(jù)報時,先在其ARP高速緩存中查找是否存在主機(jī)B的IP地址,如有,則在ARP高速緩存中查出對應(yīng)的硬件地址,再把這個硬件地址寫入MAC幀,然后通過局域網(wǎng)把該MAC幀發(fā)往此硬件地址。ARP高速緩存里存放著IP地址到硬件地址的映射表,這個表會經(jīng)常動態(tài)更新(添加或刪除)
網(wǎng)際控制報文協(xié)議ICMP(Internet Control Message Protocol)
網(wǎng)際組管理協(xié)議IGMP(Internet Group Management Protocol)
IP地址的編址方法共3個階段。
- 分類的IP地址
- 劃分子網(wǎng)
- 構(gòu)成超網(wǎng)
分類的IP地址

兩級的 IP 地址可記為: IP 地址 ::= {<網(wǎng)絡(luò)號>,<主機(jī)號>}
IP 地址分為 5 類。
-
A 類,B 類,C 類為單播地址(一對一通信),
網(wǎng)絡(luò)號字段分別為 1個,2個,3個字節(jié)長,在網(wǎng)絡(luò)號字段最前面有1~3位類別位,數(shù)值分別規(guī)定為 0,10,110。
主機(jī)號字段分別為 3個,2個,1個字節(jié)長
D 類地址(前4位是1110)用于多播(一對多通信)。
E 類地址(前4位是1111)保留為今后使用。
IP 地址都是32位的二進(jìn)制碼,為提高可讀性,將32位Ip地址每8位進(jìn)行分段,中間用點(diǎn)隔開,并用點(diǎn)分十進(jìn)制記法進(jìn)行表示(如:128.11.3.31,表示B類地址)。
IP 地址具有的重要特點(diǎn)
- 每個 Ip 地址由網(wǎng)絡(luò)號和主機(jī)號組成。
- IP 地址管理機(jī)構(gòu)在分配 IP 地址時只分配網(wǎng)絡(luò)號,剩下的主機(jī)號由得到網(wǎng)絡(luò)號的單位自行分配。方便IP地址的管理。
- 路由器僅根據(jù)目的主機(jī)所連接的網(wǎng)絡(luò)號來轉(zhuǎn)發(fā)分組而不考慮主機(jī)號,使得路由器數(shù)目減少,從而減少路由表存儲空間和查找路由表的時間。
- Ip 地址是標(biāo)記一臺主機(jī)(或路由器)和一條鏈路的接口。
- 網(wǎng)絡(luò)是指具有相同網(wǎng)絡(luò)號的主機(jī)集合。
劃分子網(wǎng)
-
從兩級IP地址升級到三級Ip地址
原因:
- 每個Ip地址利用率很低(1、一個B類地址本可以連接的主機(jī)數(shù)超過6萬,某些單位申請到B類地址,但是連接的主機(jī)不多,造成浪費(fèi)。2、給每個物理網(wǎng)絡(luò)分配一個網(wǎng)絡(luò)號會使路由表變得太大而使網(wǎng)絡(luò)性能變差)
- 兩級IP不夠靈活。(若一個單位在新地方申請了新的網(wǎng)絡(luò),在沒有申請到一個新的IP地址之前是不可使用的,希望有一種方法能使單位能靈活增加的網(wǎng)絡(luò),而不用向互聯(lián)網(wǎng)管理機(jī)構(gòu)去申請新的網(wǎng)絡(luò)號,兩級IP無法辦到)
劃分子網(wǎng)基本思路
劃分子網(wǎng)屬于單位內(nèi)部的事情,本單位以外仍是一個網(wǎng)絡(luò)。
-
劃分子網(wǎng)是從網(wǎng)絡(luò)的主機(jī)號借用若干位作為子網(wǎng)。
IP 地址 ::= {<網(wǎng)絡(luò)號>,<子網(wǎng)號>,<主機(jī)號>}
從其他網(wǎng)絡(luò)發(fā)送給單位的某主機(jī)的IP數(shù)據(jù)報,仍然是根據(jù)IP數(shù)據(jù)報的目的網(wǎng)絡(luò)號找到連接在本單位網(wǎng)絡(luò)上的路由器,但此路由器在收到IP數(shù)據(jù)報以后,再按照目的網(wǎng)絡(luò)號和子網(wǎng)號找到目的子網(wǎng),把IP數(shù)據(jù)報交給目的主機(jī)。
-
子網(wǎng)掩碼
為使路由器(目的網(wǎng)絡(luò)地址,子網(wǎng)掩碼,下一跳地址)R能很方便的從數(shù)據(jù)報的目的IP地址提取出所要找的子網(wǎng)的網(wǎng)絡(luò)地址,路由器R就要使用三級IP地址的子網(wǎng)掩碼,子網(wǎng)掩碼也是32位,有一串24位1和8位0組成,子網(wǎng)掩碼中的1對應(yīng)于IP地址原來二級地址的16位網(wǎng)絡(luò)號新增加的8位子網(wǎng)號,而子網(wǎng)掩碼中的8個0對應(yīng)二級地址中的主機(jī)號。
子網(wǎng)的網(wǎng)絡(luò)地址:三級地址的子網(wǎng)掩碼和數(shù)據(jù)報的IP地址逐位相【與】運(yùn)算可得。
子網(wǎng)掩碼好處:不管網(wǎng)絡(luò)有沒有劃分子網(wǎng),只要把子網(wǎng)掩碼和IP地址逐位相【與】就可以算出子網(wǎng)地址,便于查找路由表。
現(xiàn)在互聯(lián)網(wǎng)規(guī)定:所有網(wǎng)絡(luò)必須使用子網(wǎng)掩碼,同時在路由器的路由表中也必須有子網(wǎng)掩碼這一欄,如果不劃分子網(wǎng)掩碼,就使用默認(rèn)的子網(wǎng)掩碼。
- A類地址默認(rèn)子網(wǎng)掩碼:255.0.0.0
- B類地址默認(rèn)子網(wǎng)掩碼:255.255.0.0
- C類地址默認(rèn)子網(wǎng)掩碼:255.255.255.0
劃分子網(wǎng)增加了網(wǎng)絡(luò)靈活性,減少了能來連接到網(wǎng)絡(luò)的主機(jī)數(shù)。
-
無分類編址CIDR(構(gòu)造超網(wǎng))
原因:
- B類地址在1992年已分配近一半,眼看很快就會分配完畢。
- 互聯(lián)網(wǎng)主干網(wǎng)上的路由表中的項(xiàng)目急劇增長(從幾千增長到幾萬個)
- 整個Ipv4地址空間最終將全部耗盡。(2011年2月3日,IANA宣布Ipv4地址已經(jīng)耗盡)
特點(diǎn):
-
CIDR消除了傳統(tǒng)A類,B類和C類地址以及劃分的子網(wǎng)概念。
IP 地址 ::= {<網(wǎng)絡(luò)前綴>,<主機(jī)號>}
CIDR還使用 / 來標(biāo)記,即 斜線記法/CIDR記法 — 在IP地址后面加 / ,然后寫上網(wǎng)絡(luò)前綴所占的位數(shù)。
-
CIDR把網(wǎng)絡(luò)前綴都相同的連續(xù)IP地址組成一個CIDR地址塊。
? 前20位是網(wǎng)絡(luò)前綴 后12位是主機(jī)號
128.14.35.7/20 = 10000000 00001110 00100011 00000111
四、運(yùn)輸層
運(yùn)輸層向它的上層應(yīng)用層提供通信服務(wù)。
從 網(wǎng)絡(luò)層(IP 層)來說,通信的兩端是兩臺主機(jī),IP 數(shù)據(jù)報的首部明確標(biāo)志了兩臺主機(jī)的 IP 地址,而真正進(jìn)行通信的實(shí)體是主機(jī)中的進(jìn)程,兩臺主機(jī)之間的通信實(shí)質(zhì)上是主機(jī)中的進(jìn)程間的通信。IP 協(xié)議雖然能把分組送到目的主機(jī),但是這個分組還停留在網(wǎng)絡(luò)層,并沒有交付到主機(jī)中的應(yīng)用進(jìn)程。從運(yùn)輸層角度來看,通信的真正端點(diǎn)并不是主機(jī)而是主機(jī)中的進(jìn)程,也就是說端到端的通信是應(yīng)用進(jìn)程間的通信。
運(yùn)輸層的一個很重要的功能:復(fù)用和分用
- 復(fù)用:發(fā)送方不同的應(yīng)用進(jìn)程都可以使用同一個運(yùn)輸層協(xié)議傳送數(shù)據(jù)(需加上適當(dāng)?shù)氖撞浚?/li>
- 分用:接收方的運(yùn)輸層在剝?nèi)笪氖撞亢竽軌虬堰@些數(shù)據(jù)正確交付到目的應(yīng)用進(jìn)程。
網(wǎng)絡(luò)層和運(yùn)輸層有明顯的區(qū)別:
網(wǎng)絡(luò)層為主機(jī)之間提供邏輯通信。
運(yùn)輸層為主機(jī)中的應(yīng)用進(jìn)程提供端到端的邏輯通信。
運(yùn)輸層的端口
-
服務(wù)器使用的端口號分為兩種
-
熟知端口(系統(tǒng)端口):數(shù)值為0~1023
應(yīng)用程序 FTP TELNET SMTP DNS TFTP HTTP SNMP SNMP(trap) HTTPS 熟知端口 21 23 25 53 69 80 161 162 443 登記端口:數(shù)值為1024~49151,這類端口為沒有熟知端口的應(yīng)用程序使用,這類端口必須在IANA按照規(guī)定手續(xù)登記,以防重復(fù)。
-
客戶端使用的端口號:數(shù)值為49152~65535,這類端口僅在客戶進(jìn)程運(yùn)行時才動態(tài)選擇,因此也叫短暫端口號。
運(yùn)輸層的兩種傳輸協(xié)議
傳輸控制協(xié)議 TCP(Transmission Control Protocol)— 面向連接
- TCP 是面向連接的運(yùn)輸層協(xié)議。
- 每一條TCP連接只能有兩個端點(diǎn),每一條TCP連接只能是點(diǎn)對點(diǎn)的(一對一)
- TCP 提供可靠的交付服務(wù)。通過TCP連接傳輸數(shù)據(jù),無差錯,不丟失,不重復(fù)。
- TCP 提供全雙工通信。TCP 允許通信雙方的應(yīng)用程序在任何時候都能發(fā)送數(shù)據(jù)。TCP連接兩端都設(shè)有發(fā)送緩存和接收緩存,用來臨時存放雙向通信的數(shù)據(jù)。在發(fā)送時,應(yīng)用程序在把數(shù)據(jù)傳遞給TCP的緩存后,就可以做自己的事情,而TCP在合適的時候把數(shù)據(jù)發(fā)送出去。在接收時,TCP把收到的數(shù)據(jù)放入緩存,上層應(yīng)用進(jìn)程在合適的時候讀取緩存中的數(shù)據(jù)。
- 面向字節(jié)流。
TCP的連接
每條TCP有兩個端點(diǎn),那么TCP的端點(diǎn)叫套接字(Socket)或插口。
每條TCP連接唯一的被通信兩端的兩個端點(diǎn)(套接字)所確定。
套接字 socket = (IP地址:端口號)
TCP連接 ::= {socket1,socket2} = {(IP1:port1), (IP2:port2)}
可靠傳輸原理
一、停止等待協(xié)議
無差錯情況:A發(fā)送分組M1,發(fā)送完暫停發(fā)送,等待B的確認(rèn),B收到了M1就向A發(fā)送確認(rèn),A收到M1的確認(rèn)后,再發(fā)送下一個分組M2.
-
出現(xiàn)差錯:出現(xiàn)差錯使用超時重傳機(jī)制。
超時重傳:A發(fā)送M1以后暫停發(fā)送,等待B的確認(rèn),此時出現(xiàn)差錯,B丟棄M1,什么也不做,A在等待一段時間之后還未收到確認(rèn),則認(rèn)為發(fā)送的M1已經(jīng)丟失,將剛發(fā)送的M1再次發(fā)送。
實(shí)現(xiàn)超時重傳:在發(fā)送完一個分組時設(shè)置一個超時計時器,如果在超時計時器之前收到了對方的確認(rèn),就撤銷已設(shè)置的超時計時器。否則重傳發(fā)送的分組。
注意:
- A發(fā)送完一個分組后,必須暫時保留已發(fā)送的分組副本(在超時重傳時使用),只有在收到確認(rèn)后才能清除暫時保留的副本分組。
- 分組和確認(rèn)分組都必須進(jìn)行編號,這樣才能明確是哪一個發(fā)送出去的分組收到了確認(rèn),哪一個沒有收到確認(rèn)。
- 超時計時器設(shè)置的重傳時間應(yīng)當(dāng)比數(shù)據(jù)在分組傳輸?shù)钠骄禃r間要長。
-
確認(rèn)丟失和確認(rèn)遲到
若B所發(fā)送的對M1的確認(rèn)丟失了,那么A進(jìn)行重傳之后,B又收到了重傳的M1。- 丟棄這個重復(fù)的M1,不向上層交付。
- 向A發(fā)送確認(rèn)。不能因?yàn)橐呀?jīng)發(fā)過就不發(fā),A超時重發(fā)就表明A并未收到確認(rèn)。
通過確認(rèn)和重試機(jī)制,就可以在不可靠的穿傳輸網(wǎng)絡(luò)上實(shí)現(xiàn)可靠的通信。
上述這種傳輸協(xié)議稱為【自動重傳請求ARQ(Automic Repeat Request)】
-
信道利用率
停止等待協(xié)議的優(yōu)點(diǎn)是簡單,但缺點(diǎn)是信道利用率太低。
停止等待協(xié)議的信道利用率 U = Td/(Td + RTT + Ta)
Td:A發(fā)送分組需要的時間 Ta:B發(fā)送確認(rèn)分組時間 RTT:往返時間
停止等待協(xié)議中往返時間RTT遠(yuǎn)大于Td和Ta,因此利用率極低。
考慮采用流水線傳輸來提高信道利用率。流水線傳輸就是發(fā)送方可連續(xù)發(fā)送多個分組不必每發(fā)送一個分組就等到確認(rèn)。當(dāng)使用流水線傳輸時,就是連續(xù)的ARQ和滑動窗口協(xié)議。
二、連續(xù)ARO協(xié)議
滑動窗口協(xié)議比較復(fù)雜,是TCP協(xié)議的精髓所在。發(fā)送方維持發(fā)送窗口,它的意義在于:位于發(fā)送窗口的5個分組都可以連續(xù)發(fā)送而不用等待對方確認(rèn),這樣信道利用率就提高了。對方每收到一個確認(rèn),發(fā)送窗口就向前滑動一個分組。
接受方采用累積確認(rèn)方式,不必對收到的分組逐個發(fā)送確認(rèn),而是在收到幾個分組后,對按序列到達(dá)的最后一個分組發(fā)送確認(rèn),這就表示:到這個分組位置的所有分組都已經(jīng)正確收到。
TCP報文首部格式
-
首部字段
- 源端口和目的端口:2字節(jié),分別寫入源端口號和目的端口號
- 序號:4字節(jié),TCP連接中傳送的字節(jié)流中的每一個字節(jié)都按順序編號。
- 確認(rèn)號:4字節(jié),是期望收到對方下一個報文段的第一個數(shù)據(jù)字節(jié)的序號。如確認(rèn)號 = N,表明序號 N-1 為止所有數(shù)據(jù)都已經(jīng)正確收到。
- 數(shù)據(jù)偏移:4位,指出TCP報文段的數(shù)據(jù)起始處距離TCP報文段的起始處有多遠(yuǎn)。這個字段實(shí)際是指出TCP報文段首部長度。
- 保留:6位,保留為今后使用,目前置為0。
- 緊急URG:當(dāng)URG=1時,表明緊急指針字段有效。
- 確認(rèn)ACK:當(dāng)ACK=1時確認(rèn)號字段才有效。ACK=0時,確認(rèn)號無效。
- 推送PSH:當(dāng)兩個應(yīng)用進(jìn)程進(jìn)行交互式的通信時,有時在一端的應(yīng)用程序希望在鍵入一個命令后立即就能夠收到對方的相應(yīng)。這時TCP就可以使用推送操作。
- 復(fù)位RST:當(dāng)RST=1時,表明TCP連接中出現(xiàn)嚴(yán)重差錯,必須釋放連接。
- 同步SYN:在連接建立時用來同步序號。當(dāng)SYN=1而ACK=0時,表明這是一個連接請求報文段。對方同意連接,則應(yīng)在響應(yīng)報文段中使SYN=1和ACK=1。
- 終止FIN:釋放連接。當(dāng)FIN=1時,表示此報文段已經(jīng)發(fā)送完畢,并要求釋放運(yùn)輸連接。
- 窗口:指發(fā)送本報文段的一方的接收窗口,窗口字段明確指出了現(xiàn)在允許對方發(fā)送的數(shù)據(jù)量,窗口值經(jīng)常在動態(tài)變化。
- 檢驗(yàn)和:2字節(jié),檢驗(yàn)的范圍包括首部和數(shù)據(jù)兩部分。
- 緊急指針:2字節(jié),緊急指針僅在URG=1時有意義,指出本報文段中的緊急數(shù)據(jù)的字節(jié)數(shù)。
- 選項(xiàng):長度可變,最長可達(dá)40字節(jié),當(dāng)沒使用選項(xiàng)時,TCP首部長度是20字節(jié)。
-
數(shù)據(jù)字段
IP 數(shù)據(jù)報的數(shù)據(jù)部分
TCP流量控制
利用滑動窗口實(shí)現(xiàn)流量控制。發(fā)送方的發(fā)送窗口不能超過接收方給出的接收窗口的數(shù)值。
用戶數(shù)據(jù)報協(xié)議 UDP(User Datagram Protocol)— 無連接
- DUP是面向無連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接(當(dāng)然發(fā)送結(jié)束也不需要釋放),因此減少了開銷和發(fā)送數(shù)據(jù)之前的時延。
- UDP使用盡最大努力交付,即不保證可靠交付,因此主機(jī)不需要維持復(fù)雜的連接狀態(tài)表。
- UDP是面向報文的。發(fā)送方的UDP對應(yīng)用程序交下來的報文,在添加首部后就向下交付 IP 層。UDP 對應(yīng)用層交付下來的報文既不合并也不拆分,而是保留這些報文邊界。即UDP將報文原樣發(fā)送,因此需要考慮報文的大小,報文太長,IP 層傳輸可能要進(jìn)行分片,會降低IP 層效率,報文太短,UDP 把它交給 IP 層后,會使 IP 數(shù)據(jù)報的首部的相對長度太大,也會降低 IP 層的效率。
- UDP 沒有擁塞控制。因此網(wǎng)絡(luò)上出現(xiàn)擁塞不會使源主機(jī)的發(fā)送頻率速率降低。某些實(shí)時應(yīng)用(IP 電話,實(shí)時視頻會議)要求源主機(jī)以恒定的速率發(fā)送數(shù)據(jù),并且允許在網(wǎng)絡(luò)發(fā)生擁塞的時丟失一些數(shù)據(jù),但不允許數(shù)據(jù)有太大的時延。
- UDP 支持一對一,一對多,多對一和多對多交互通信。
- UDP首部開銷小,只有8個字節(jié),比TCP的20個字節(jié)首部要短。
UDP 首部格式
- 首部字段
- 源端口:源端口號,在需要對方回信時選用,不需要時可以用0。
- 目的端口:目的端口號,這在終點(diǎn)交付報文時必須使用。
- 長度:UDP用戶數(shù)據(jù)報的長度,其最小值是8(僅有首部)。
- 檢驗(yàn)和:檢測UDP用戶數(shù)據(jù)報在傳輸中是否有差錯,有錯就丟棄。
- 數(shù)據(jù)字段:IP 數(shù)據(jù)報的數(shù)據(jù)部分
五、應(yīng)用層
域名系統(tǒng)DNS
域名系統(tǒng)DNS能夠把互聯(lián)網(wǎng)上的主機(jī)名字轉(zhuǎn)換成IP地址。
域名到IP地址的解析是由分布在互聯(lián)網(wǎng)上的許多域名服務(wù)器程序共同完成,域名服務(wù)器程序在專設(shè)的節(jié)點(diǎn)上運(yùn)行,人們常把運(yùn)行域名服務(wù)器上次的機(jī)器稱為域名服務(wù)器。
域名到IP地址解析過程要點(diǎn):
當(dāng)某個應(yīng)用程序需要把主機(jī)名解析為IP地址時,該應(yīng)用進(jìn)程就調(diào)用解析程序,并稱為DNS的一個客戶,把待解析的域名放在DNS請求報文中,以UDP用戶數(shù)據(jù)報方式發(fā)給本地域名服務(wù)器(使用UDP是為了減少開銷),本地域名服務(wù)器在查找到域名后,把對應(yīng)的IP地址放在回答報文中返回,應(yīng)用進(jìn)程獲取到目的主機(jī)的IP地址后即可進(jìn)行通信。
域名結(jié)構(gòu)
三級域名 . 二級域名 . 頂級域名
頂級域名
-
國家頂級域名
cn:中國 us:美國 uk:英國
-
通用頂級域名
com:公司企業(yè) net:網(wǎng)絡(luò)服務(wù)機(jī)構(gòu) org:非營利性組織 int:國際組織
edu:美國專用教育機(jī)構(gòu) gov:美國政府部門 mil:美國軍事部門
-
基礎(chǔ)結(jié)構(gòu)域名
這種定義域名只有一個 — arpa。用于反向域名解析,又稱為反向域名。
域名樹可以清晰的表示互聯(lián)網(wǎng)的域名系統(tǒng)。
域名服務(wù)器
域名服務(wù)器的實(shí)際管轄范圍是區(qū),區(qū)可能小于或等于域,但一定不大于域。
域名服務(wù)器被劃分為4種不同類型
- 根域名服務(wù)器
- 頂級域名服務(wù)器
- 權(quán)限域名服務(wù)器
- 本地域名服務(wù)器
超文本傳輸協(xié)議 HTTP
HTTP協(xié)議定義了瀏覽器怎樣向萬維網(wǎng)服務(wù)器請求萬維網(wǎng)文檔以及服務(wù)器怎樣把文檔傳送給瀏覽器。從層次角度來看,HTTP是面向事務(wù)的應(yīng)用層協(xié)議。它是萬維網(wǎng)上能夠可靠交換文件(文本,聲音,圖像等各種多媒體文件)的重要基礎(chǔ)。
HTTP報文結(jié)構(gòu)

由于HTTP是面向文本的,因此在報文中的每一個字段都是一些ASCII碼串。因而各個字段的長度是不確定的。
HTTP請求報文
-
請求行:請求方法,URL,HTTP版本,字段由空格分開,最后有回車換行
方法 意義 OPTIONS 請求一些選項(xiàng)信息 GET 請求讀取由URL所標(biāo)志的信息 HEAD 請求讀取由URL所標(biāo)志的信息的首部 POST 給服務(wù)器添加信息 PUT 在指明的URL下存儲一個文檔 DELETE 刪除指定的URL所標(biāo)志的資源 TRANCE 用來進(jìn)行環(huán)回測試的請求報文 CONNECT 用于代理服務(wù)器 請求行格式
GET http://www.xyz.edu.cn/dir/index.html HTTP/1.1 首部行:用來說明瀏覽器、服務(wù)器或報文主體的一些信息。首部可以有好幾行,也可以不是呀。每個首部行中都有首部字段名和值,每行結(jié)束地方都要有回車換行,還有一行空格用于區(qū)分請求實(shí)體和首部行。
-
請求實(shí)體:在請求行中一般不用這個字段
完整的HTTP請求報文 GET /dir/index/html HTTP/1.1 請求航使用了相對URL(首部行給出了主機(jī)域名,這里可以省略) Host:www.xyz.edu.cn 慈航是首部行的開始,這行給出主機(jī)的域名 Connection:close 告訴服務(wù)器發(fā)送完請求的文檔后就可釋放連接(不使用持續(xù)連接) User-Agent:Mozilla/5.0 表名用戶代理是使用火狐瀏覽器 Firefox Accept-Language:cn 表示用戶希望優(yōu)先得到中文版本的文檔 請求報文的最后還要一個空行
HTTP響應(yīng)報文
-
狀態(tài)行:HTTP版本,狀態(tài)碼,狀態(tài)碼描述信息,字段中有空格,結(jié)束有回車換行
狀態(tài)碼 描述 1xx 指示信息 — 表示請求已接收,繼續(xù)處理 2xx 成功 — 表示請求已被接收,理解,接受 3xx 重定向 — 要完成請求必須進(jìn)行進(jìn)一步的操作 4xx 客戶端錯誤 — 請求有語法錯誤或請求無法實(shí)現(xiàn) 5xx 服務(wù)端錯誤 — 服務(wù)器未能實(shí)現(xiàn)合法的請求 HTTP/1.1 202 Accepted 接受 HTTP/1.1 400 Bad Request 錯誤請求 HTTP/1.1 404 Not Found 找不到 //若請求網(wǎng)頁轉(zhuǎn)移到新地址,狀態(tài)行和首部行為 HTTP/1.1 301 Moved Permsnently 永久地轉(zhuǎn)移了 Location: http://www.xyz.edu.cn/ee.index.html 新的URL 首部行
響應(yīng)實(shí)體
在服務(wù)器上存放用戶信息
由于HTTP是無狀態(tài)的,而當(dāng)同一個用戶想要保存其用戶信息,就需要服務(wù)器記住該用戶的信息,可以在HTTP中使用Cookie。Cookie表示在HTTP服務(wù)器和客戶之間傳遞的狀態(tài)信息。
Cookie是這樣工作的。當(dāng)用戶A瀏覽某個使用Cookie的網(wǎng)站時,該網(wǎng)站的服務(wù)器就為A產(chǎn)生一個唯一的識別碼,并以此作為索引在服務(wù)器的后端數(shù)據(jù)庫中產(chǎn)生一個項(xiàng)目,接著在給A的HTTP響應(yīng)報文中添加一個叫做Set-Cookie的首部行,這里的首部字段名就是 ‘Set-Cookie’,而后面的值就是賦予該用戶的識別碼。
Set-Cookie:44598a438y43b375
當(dāng)A收到這個響應(yīng)時,其瀏覽器就在它管理的特定Cookie文件中添加一行,其中包括這個服務(wù)器的主機(jī)名和Set-Cookie后面給出的識別碼。當(dāng)A繼續(xù)瀏覽這個網(wǎng)站時,每發(fā)送一個HTTP請求報文,其瀏覽器就會從其Cookie文件中取出這個網(wǎng)站的識別碼,并放到HTTP請求報文的Cookie首部航。
Cookie:44598a438y43b375
于是,這個網(wǎng)站就能跟蹤用戶 44598a438y43b375 在該網(wǎng)站的活動。需要注意,服務(wù)器并不需要知道這個用戶的真實(shí)姓名以及其他信息,但服務(wù)器能知道用戶44598a438y43b375在什么時候訪問了哪些頁面,以及訪問這些頁面的順序。如果A是在網(wǎng)上購物,那么這個服務(wù)器可以為A維護(hù)一個所購物品的列表,使A結(jié)束這次購物時可以一起付賬。
- Cookie可以收集用戶在互聯(lián)網(wǎng)上的行為。如果A在幾天后再次訪問這個網(wǎng)站,那么瀏覽器就會在其HTTP請求報文中繼續(xù)用首部Cookie:44598a438y43b375,而這個網(wǎng)站服務(wù)器根據(jù)A的過去訪問記錄可以給A推薦商品。
- Cookie可以記錄用戶的基本信息。如果A在該網(wǎng)站上登記過和使用過信用卡消費(fèi),這個網(wǎng)站就已經(jīng)保存了A的姓名,電子郵件,信用卡號碼等信息,當(dāng)A繼續(xù)購物時,只要還使用同一臺電腦,由于瀏覽器產(chǎn)生的HTTP請求報文中都攜帶了同樣的Cookie首部行,服務(wù)器就可利用Cookie來驗(yàn)證出這是A,此后A在這個網(wǎng)站購物就不需要鍵入姓名,信用卡等信息。
- Cookie只是文本文件,并不是計算機(jī)可執(zhí)行文件,因此不可能攜帶和傳播計算機(jī)病毒,也不可能來獲取用戶計算機(jī)的硬盤中的信息。
- 可以設(shè)置是否使用Cookie,用于保護(hù)用戶隱私。關(guān)于用戶隱私保護(hù)問題,網(wǎng)站上保存的Cookie文件可以在瀏覽器中設(shè)置是否關(guān)閉。還有很多第三方明確聲明會保護(hù)用戶隱私,不會把用戶的識別碼或個人信息轉(zhuǎn)移或出售給其他廠商。