BAT、網易、蘑菇街面試題整理-6
TCP/IP
1. OSI與TCP/IP各層的結構與功能,都有哪些協議。
OSI七層與TCP/IP五層網路架構詳解
OSI和TCP/IP是很基礎但又非常重要的網路基礎知識,理解得透徹對運維工程師來說非常有幫助。今天偶又複習了一下:
(1)OSI七層模型
OSI中的層 功能 TCP/IP協議族
應用層 檔案傳輸,電子郵件,檔案服務,虛擬終端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
表示層 資料格式化,程式碼轉換,資料加密 沒有協議
會話層 解除或建立與別的接點的聯絡 沒有協議
傳輸層 提供端對端的介面 TCP,UDP
網路層 為資料包選擇路由 IP
資料鏈路層 傳輸有地址的幀以及錯誤檢測功能 SLIP,CSLIP,PPP,ARP,RARP,MTU
物理層 以二進位制資料形式在物理媒體上傳輸資料 ISO2110,IEEE802,IEEE802.2
(2)TCP/IP五層模型的協議
應用層
傳輸層
網路層
資料鏈路層
物理層
物理層:中繼器、集線器、還有我們通常說的雙絞線也工作在物理層
資料鏈路層:網橋(現已很少使用)、乙太網交換機(二層交換機)、網絡卡(其實網絡卡是一半工作在物理層、一半工作在資料鏈路層)
傳輸層:四層交換機、也有工作在四層的路由器
二、TCP/UDP協議
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協議屬於傳輸層協議。其中TCP提供IP環境下的資料可靠傳輸,它提供的服務包括資料流傳送、可靠性、有效流控、全雙工操作和多路複用。通過面向連線、端到端和可靠的資料包傳送。通俗說,它是事先為所傳送的資料開闢出連線好的通道,然後再進行資料傳送;而UDP則不為IP提供可靠性、 流控或差錯恢復功能。一般來說,TCP對應的是可靠性要求高的應用,而UDP對應的則是可靠性要求低、傳輸經濟的應用。TCP支援的應用協議主要 有:Telnet、FTP、SMTP等;UDP支援的應用層協議主要有:NFS(網路檔案系統)、SNMP(簡單網路管理協議)、DNS(主域名稱系 統)、TFTP(通用檔案傳輸協議)等.
TCP/IP協議與低層的資料鏈路層和物理層無關,這也是TCP/IP的重要特點
三、OSI的基本概念
OSI是Open System Interconnect的縮寫,意為開放式系統互聯。
OSI七層參考模型的各個層次的劃分遵循下列原則:
1、同一層中的各網路節點都有相同的層次結構,具有同樣的功能。
2、同一節點內相鄰層之間通過介面(可以是邏輯介面)進行通訊。
3、七層結構中的每一層使用下一層提供的服務,並且向其上層提供服務。
4、不同節點的同等層按照協議實現對等層之間的通訊。
第一層:物理層(PhysicalLayer),
規定通訊裝置的機械的、電氣的、功能的和過程的特性,用以建立、維護和拆除物理鏈路連線。具體地講,機械 特性規定了網路連線時所需接外掛的規格尺寸、引腳數量和排列情況等;電氣特性規定了在物理連線上傳輸bit流時線路上訊號電平的大小、阻抗匹配、傳輸速率 距離限制等;功能特性是指對各個訊號先分配確切的訊號含義,即定義了DTE和DCE之間各個線路的功能;規程特性定義了利用訊號線進行bit流傳輸的一組 操作規程,是指在物理連線的建立、維護、交換資訊是,DTE和DCE雙放在各電路上的動作系列。在這一層,資料的單位稱為位元(bit)。屬於物理層定義的典型規範代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等。
第二層:資料鏈路層(DataLinkLayer):
在物理層提供位元流服務的基礎上,建立相鄰結點之間的資料鏈路,通過差錯控制提供資料幀(Frame)在通道上無差錯的傳輸,並進行各電路上的動作系列。資料鏈路層在不可靠的物理介質上提供可靠的傳輸。該層的作用包括:實體地址定址、資料的成幀、流量控制、資料的檢錯、重發等。在這一層,資料的單位稱為幀(frame)。資料鏈路層協議的代表包括:SDLC、HDLC、PPP、STP、幀中繼等。
第三層是網路層
在 計算機網路中進行通訊的兩個計算機之間可能會經過很多個數據鏈路,也可能還要經過很多通訊子網。網路層的任務就是選擇合適的網間路由和交換結點, 確保資料及時傳送。網路層將資料鏈路層提供的幀組成資料包,包中封裝有網路層包頭,其中含有邏輯地址資訊- -源站點和目的站點地址的網路地址。如 果你在談論一個IP地址,那麼你是在處理第3層的問題,這是“資料包”問題,而不是第2層的“幀”。IP是第3層問題的一部分,此外還有一些路由協議和地 址解析協議(ARP)。有關路由的一切事情都在這第3層處理。地址解析和路由是3層的重要目的。網路層還可以實現擁塞控制、網際互連等功能。在這一層,資料的單位稱為資料包(packet)。網路層協議的代表包括:IP、IPX、RIP、OSPF等。
第 四層是處理資訊的傳輸層
第4層的資料單元也稱作資料包(packets)。但是,當你談論TCP等具體的協議時又有特殊的叫法,TCP的資料單元稱為段 (segments)而UDP協議的資料單元稱為“資料報(datagrams)”。這個層負責獲取全部資訊,因此,它必須跟蹤資料單元碎片、亂序到達的 資料包和其它在傳輸過程中可能發生的危險。第4層為上層提供端到端(終端使用者到終端使用者)的透明的、可靠的資料傳輸服務。所為透明的傳輸是指在通訊過程中 傳輸層對上層遮蔽了通訊傳輸系統的具體細節。傳輸層協議的代表包括:TCP、UDP、SPX等。
第五層是會話層
這一層也可以稱為會晤層或對話層,在會話層及以上的高層次中,資料傳送的單位不再另外命名,而是統稱為報文。會話層不參與具體的傳輸,它提供包括訪問驗證和會話管理在內的建立和維護應用之間通訊的機制。如伺服器驗證使用者登入便是由會話層完成的。
第六層是表示層
這一層主要解決擁護資訊的語法表示問題。它將欲交換的資料從適合於某一使用者的抽象語法,轉換為適合於OSI系統內部使用的傳送語法。即提供格式化的表示和轉換資料服務。資料的壓縮和解壓縮, 加密和解密等工作都由表示層負責。
第七層應用層
應用層為操作系統或網路應用程式提供訪問網路服務的介面。應用層協議的代表包括:Telnet、FTP、HTTP、SNMP等。
除了層的數量之外,開放式系統互聯(OSI)模型與TCP/IP協議有什麼區別?
開放式系統互聯模型是一個參考標準,解釋協議相互之間應該如何相互作用。TCP/IP協議是美國國防部發明的,是讓網際網路成為了目前這個樣子的標準之一。開放式系統互聯模型中沒有清楚地描繪TCP/IP協議,但是在解釋TCP/IP協議時很容易想到開放式系統互聯模型。兩者的主要區別如下:
TCP/IP協議中的應用層處理開放式系統互聯模型中的第五層、第六層和第七層的功能。
TCP/IP協議中的傳輸層並不能總是保證在傳輸層可靠地傳輸資料包,而開放式系統互聯模型可以做到。TCP/IP協議還提供一項名為UDP(使用者資料報協議)的選擇。UDP不能保證可靠的資料包傳輸。
TCP/UDP協議
TCP(Transmission Control Protocol)和UDP(User DatagramProtocol)協議屬於傳輸層協議。其中TCP提供IP環境下的資料可靠傳輸,它提供的服務包括資料流傳送、可靠性、有效流控、全雙工操作和多路複用。通過面向連線、端到端和可靠的資料包傳送。通俗說,它是事先為所傳送的資料開闢出連線好的通道,然後再進行資料傳送;而UDP則不為IP提供可靠性、流控或差錯恢復功能。一般來說,TCP對應的是可靠性要求高的應用,而UDP對應的則是可靠性要求低、傳輸經濟的應用。
TCP支援的應用協議主要有:Telnet、FTP、SMTP等;UDP支援的應用層協議主要有:NFS(網路檔案系統)、SNMP(簡單網路管理協議)、DNS(主域名稱系統)、TFTP(通用檔案傳輸協議)等。
TCP/IP協議與低層的資料鏈路層和物理層無關,這也是TCP/IP的重要特點。
OSI是Open System Interconnect的縮寫,意為開放式系統互聯。
2. TCP與UDP的區別。
TCP協議與UDP協議的區別首先咱們弄清楚,TCP協議和UCP協議與TCP/IP協議的聯絡,很多人犯糊塗了,一直都是說TCP/IP協議與UDP協議的區別,我覺得這是沒有從本質上弄清楚網路通訊!
TCP/IP協議是一個協議簇。裡面包括很多協議的。UDP只是其中的一個。之所以命名為TCP/IP協議,因為TCP,IP協議是兩個很重要的協議,就用他兩命名了。
TCP/IP協議集包括應用層,傳輸層,網路層,網路訪問層。其中應用層包括:超文字傳輸協議(HTTP):全球資訊網的基本協議.
檔案傳輸(TFTP簡單檔案傳輸協議): 遠端登入(Telnet),提供遠端訪問其它主機功能,它允許使用者登入
internet主機,並在這臺主機上執行命令. 網路管理(SNMP簡單網路管理協議),該協議提供了監控網路裝置的方法,以及配置管理,統計資訊收集,效能管理及安全管理等.
域名系統(DNS),該系統用於在internet中將域名及其公共廣播的網路節點轉換成IP地址. 其次網路層包括:
Internet協議(IP)
Internet控制資訊協議(ICMP) 地址解析協議(ARP) 反向地址解析協議(RARP) 最後說網路訪問層:網路訪問層又稱作主機到網路層(host-to-network).網路訪問層的功能包括IP地址與實體地址硬體的對映,以及將IP封裝成幀.基於不同硬體型別的網路介面,網路訪問層定義了和物理介質的連線.當然我這裡說得不夠完善,TCP/IP協議本來就是一門學問,每一個分支都是一個很複雜的流程,但我相信每位學習軟體開發的同學都有必要去仔細瞭解一番。下面我著重講解一下TCP協議和UDP協議的區別。
TCP(Transmission Control Protocol,傳輸控制協議)是面向連線的協議,也就是說,在收發資料前,必須和對方建立可靠的連線。一個TCP連線必須要經過三次“對話”才能建立起來,其中的過程非常複雜,只簡單的描述下這三次對話的簡單過程:主機A向主機B發出連線請求資料包:“我想給你發資料,可以嗎?”,這是第一次對話;主機B向主機A傳送同意連線和要求同步(同步就是兩臺主機一個在傳送,一個在接收,協調工作)的資料包:“可以,你什麼時候發?”,這是第二次對話;主機A再發出一個數據包確認主機B的要求同步:“我現在就發,你接著吧!”,這是第三次對話。三次“對話”的目的是使資料包的傳送和接收同步,經過三次“對話”之後,主機A才向主機B正式傳送資料。詳細點說就是:(文章部分轉載,主要是這個人講解得很到位,的確很容易使人理解!)
TCP三次握手過程
1 主機A通過向主機B傳送一個含有同步序列號的標誌位的資料段給主機B
,向主機B請求建立連線,通過這個資料段,
主機A告訴主機B兩件事:我想要和你通訊;你可以用哪個序列號作為起始資料段來回應我.
2 主機B收到主機A的請求後,用一個帶有確認應答(ACK)和同步序列號(SYN)標誌位的資料段響應主機A,也告訴主機A兩件事:
我已經收到你的請求了,你可以傳輸資料了;你要用哪佧序列號作為起始資料段來回應我
3 主機A收到這個資料段後,再發送一個確認應答,確認已收到主機B的資料段:"我已收到回覆,我現在要開始傳輸實際資料了這樣3次握手就完成了,主機A和主機B就可以傳輸資料了.
3次握手的特點沒有應用層的資料
SYN這個標誌位只有在TCP建產連線時才會被置1
握手完成後SYN標誌位被置0
TCP建立連線要進行3次握手,而斷開連線要進行4次
1 當主機A完成資料傳輸後,將控制位FIN置1,提出停止TCP連線的請求
2 主機B收到FIN後對其作出響應,確認這一方向上的TCP連線將關閉,將ACK置1
3 由B端再提出反方向的關閉請求,將FIN置1
4 主機A對主機B的請求進行確認,將ACK置1,雙方向的關閉結束.
由TCP的三次握手和四次斷開可以看出,TCP使用面向連線的通訊方式,大大提高了資料通訊的可靠性,使傳送資料端和接收端在資料正式傳輸前就有了互動,為資料正式傳輸打下了可靠的基礎名詞解釋ACK TCP報頭的控制位之一,對資料進行確認.確認由目的端發出,用它來告訴傳送端這個序列號之前的資料段都收到了.比如,確認號為X,則表示前X-1個數據段都收到了,只有當ACK=1時,確認號才有效,當ACK=0時,確認號無效,這時會要求重傳資料,保證資料的完整性.
SYN同步序列號,TCP建立連線時將這個位置1
FIN傳送端完成傳送任務位,當TCP完成資料傳輸需要斷開時,提出斷開連線的一方將這位置1
TCP的包頭結構:源埠 16位目標埠 16位序列號 32位迴應序號 32位
TCP頭長度 4位
reserved 6位控制程式碼 6位視窗大小 16位偏移量 16位校驗和 16位選項 32位(可選)
這樣我們得出了TCP包頭的最小長度,為20位元組。
UDP(User Data Protocol,使用者資料報協議)(1) UDP是一個非連線的協議,傳輸資料之前源端和終端不建立連線,當它想傳送時就簡單地去抓取來自應用程式的資料,並儘可能快地把它扔到網路上。在傳送端,UDP傳送資料的速度僅僅是受應用程式生成資料的速度、計算機的能力和傳輸頻寬的限制;在接收端,UDP把每個訊息段放在佇列中,應用程式每次從佇列中讀一個訊息段。(2)由於傳輸資料不建立連線,因此也就不需要維護連線狀態,包括收發狀態等,因此一臺服務機可同時向多個客戶機傳輸相同的訊息。(3) UDP資訊包的標題很短,只有8個位元組,相對於TCP的20個位元組資訊包的額外開銷很小。(4)吞吐量不受擁擠控制演算法的調節,只受應用軟體生成資料的速率、傳輸頻寬、源端和終端主機效能的限制。(5)UDP使用盡最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的連結狀態表(這裡面有許多引數)。(6)UDP是面向報文的。傳送方的UDP對應用程式交下來的報文,在新增首部後就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程式需要選擇合適的報文大小。我們經常使用“ping”命令來測試兩臺主機之間TCP/IP通訊是否正常,其實“ping”命令的原理就是向對方主機發送UDP資料包,然後對方主機確認收到資料包,如果資料包是否到達的訊息及時反饋回來,那麼網路就是通的。
UDP的包頭結構:源埠 16位目的埠 16位長度 16位校驗和 16位小結TCP與UDP的區別:
1.基於連線與無連線;
2.對系統資源的要求(TCP較多,UDP少);
3.UDP程式結構較簡單;
4.流模式與資料報模式;
5.TCP保證資料正確性,UDP可能丟包,TCP保證資料順序,UDP不保證。
3. TCP報文結構。
TCP(Transmission Control Protocol)傳輸控制協議是一種面向連線的、可靠的、基於位元組流的傳輸層協議
TCP報文格式:
源埠號(2位元組):
d5 df(54751)
目的埠號(2位元組):
22 b8(8888)
TCP報頭中的源埠號和目的埠號同IP資料報中的源IP與目的IP唯一確定一條TCP連線
序號(4位元組):
37 59 56 75
用來標識TCP發端向TCP收端傳送的資料位元組流
確認序號(4位元組):
由於該報文為SYN報文,ACK標誌為0,故沒有確認序號(ACK標誌為1時確認序號才有效)
一旦連線建立,該值將始終傳送(同ACK標誌)
首部長度(4位):報文頭長度(單位:位)/32
1000(轉化為10進製為8,8*32/8 = 32,該報文報頭長度為32個位元組)
存在該欄位是因為TCP報頭中任選欄位長度可變
報頭不包含任何任選欄位則長度為20位元組;4位所能表示的最大值為1111,轉化為10進製為15,15*32/8 = 60,故報頭最大長度為60位元組
標誌位(12位):
0000 00010010
Reserved:
000~ ~~~~~~~~
ECN(Explicit Congetsion Notification):
~~~0 ~~~~~~~~ = N /NS / Nonce Sum:有效排除潛在的ECN濫用,RFC 3540
~~~~ 0~~~~~~~ = C /CWR(Congestion Window Reduced):擁塞視窗減少標誌
~~~~ ~0~~~~~~ = E /ECE / ECN-Echo:ECE / ECN標誌
Control Bits:
~~~~ ~~0~~~~~ =U / Urgent:緊急指標有效性標誌
~~~~ ~~~1~~~~ =A / Acknowledgment:確認序號有效性標誌。一旦一個連線建立起來,該標誌總被置為1(除了SYN標誌為1的報文,其它所有報文的該標誌總為1)
~~~~ ~~~~0~~~ = P /Push:Push標誌(接收方應儘快將報文段提交至應用層)
~~~~ ~~~~~0~~ = R /Reset:重置連線標誌
~~~~ ~~~~~~1~ = S /Syn:同步序號標誌
~~~~ ~~~~~~~0 = F /Fin:傳輸資料結束標誌
視窗大小(2位元組):TCP流量控制通過連線的每一端宣告視窗大小進行控制(接收緩衝區大小)
20 00(00100000 00000000)= 8192
由於2位元組能夠表示的最大正整數為65535,故視窗最大值為65535
檢驗和(2位元組):檢驗和覆蓋整個TCP報文段;強制欄位,由傳送端計算儲存,由接收端進行驗證
2e 2f
緊急指標(2位元組):當Urgent標誌置1時,緊急指標才有效
00 00
任選欄位(0 - 40位元組):
每個選項格式如下:
選項型別 |
選項總長度 |
選項內容 |
說明如下:
說明 |
佔用位元組數 |
值 |
選項型別 |
1 |
0-255 |
選項總長度 |
1 |
length |
選項內容 |
length - 2 |
可選選項如下:
Kind |
Length |
Description |
References |
0 |
1 |
End of option list. |
RFC 793 |
1 |
1 |
No operation. |
RFC 793 |
2 |
4 |
MSS, Maximum Segment Size. |
RFC 793 |
3 |
3 |
WSOPT, Window scale factor. |
RFC 1323 |
4 |
2 |
SACK permitted. |
RFC 2018 |
5 |
Variable. |
SACK. |
RFC 2018, RFC 2883 |
6 |
6 |
Echo. (obsolete). |
RFC 1072 |
7 |
6 |
Echo reply. (obsolete). |
RFC 1072 |
8 |
10 |
TSOPT, Timestamp. |
RFC 1323 |
9 |
2 |
Partial Order Connection permitted. |
RFC 1693 |
10 |