網絡程序設計知識總結
網絡相關工具
在網絡相關的命令工具調研中我選取了
nslookup
作為案例。詳細可以參考我的博客
nslookup作用
nslookup,全稱是name server lookup,也就是域名查詢。nslookup是一個用於查詢Internet域名信息或者診斷DNS服務器問題的工具。
nslookup可以指定查詢的類型,能夠查詢到DNS記錄的生存時間,並且還能夠在命令中使用參數指定使用哪個DNS服務器進行解釋。
在已經安裝了TCP/IP協議的電腦上均可以使用這個命令。
總結起來,nslookup命令主要用於查詢DNS的記錄,查看域名解析是否正常,在網絡故障的時候用來診斷網絡問題。
nslookup的應用場景
一般來說,我們在一台主機上配置好DNS服務器,添加了相應的記錄之后,只要IP地址保持不變,一般情況下我們就不再需要去維護DNS的數據文件了。
不過在確認域名解釋正常之前我們最好是測試一下所有的配置是否正常。許多人會簡單地使用ping命令檢查一下就算了。不過Ping指令只是一個檢查網絡連通情況的命令,雖然在輸入的參數是域名的情況下會通過DNS進行查詢,但是它只能查詢A類型和CNAME類型的記錄,而且只會告訴你域名是否存在,其他的信息一概欠奉。
所以如果你需要對DNS的故障進行排錯就必須熟練另一個更強大的工具nslookup。
nslookup命令的使用
分為以下三個部分展開:
- 直接查詢
- 查詢其他類型的記錄
- 查詢更具體的信息
網絡編程
通過
socket
編程和java
提供的網絡接口API與Linux Socket API之間的關系,我們了解了網絡編程的相關知識。詳情
Socket原理
Socket實質上提供了進程通信的端點。進程通信之前,雙方首先必須各自創建一個端點,否則是沒有辦法建立聯系並相互通信的。正如打電話之前,雙方必須各自擁有一台電話機一樣。
套接字之間的連接過程可以分為三個步驟:
服務器監聽
,客戶端請求
,連接確認
。
服務器監聽
:建立服務器端套接字,並處於等待連接的狀態,不定位具體的客戶端套接字,而是實時監控網絡狀態。客戶端請求
:是指由客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。
為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求。連接確認
:是指當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求,它就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,
一旦客戶端確認了此描述,連接就建立好了。而服務器端套接字繼續處於監聽狀態,繼續接收其他客戶端套接字的連接請求。
下圖為基於TCP協議
Socket的通信模型。
服務器端流程
- 創建ServerSocket對象,綁定監聽端口。
- 通過accept()方法監聽客戶端請求。
- 連接建立后,在接收進程中通過輸入流讀取客戶端發送的請求信息。
- 在服務器發送進程中通過輸出流向客戶端發送響應信息。
- 關閉相應的資源和Socket。
客戶端流程
- 創建Socket對象,指明需要連接的服務器的地址和端口號。
- 連接建立后,通過輸出流向服務器發送請求信息。
- 通過輸入流獲取服務器響應的信息。
- 關閉相應資源。
調用棧分析
- 創建ServerSocket
- socket綁定
- socket監聽
- socket accept
MenuOS構建與系統調用追蹤分析
關於這一部分的內容比較多,詳細的追蹤過程和分析可以參考我的博客
構建調試Linux內核網絡代碼的環境MenuOS系統
socket與系統調用分析
測試命令
break __sys_socket
break __sys_bind
break __sys_listen
break __sys_connect
break __sys_accept4
break __sys_recvmsg
break __sys_sendmsg
break __sys_recvfrom
break __sys_sendto
break __sys_shutdown
追蹤結果
TCP協議與源代碼分析和理解
TCP源代碼結構分析
TCP三次握手源代碼分析
計算機網絡知識水平與網絡編程水平的測評試題
選擇題
(百度文庫,2018)1、下面哪一個的說法是正確的( B )
A、TCP是可靠的數據傳輸協議,而UDP是不可靠的,所以TCP總是優於UDP
B、點對點不需要ARP協議,以太網需要ARP協議
C、IP實體不僅要接收和發送IP數據報,還需要維護路由表
D、在任何情況下,TCP實體總是立即發送應用程序的輸出數據
解析:
A中顯然是錯的,UDP在即時通訊、以及正確率要求不高的場合比TCP要更加經濟和快捷;
C中前半句是正確的,而維護路由表不歸IP實體管;
D中,當應用程序的數據較少時,為了提高效率,TCP實體會緩存數據到一定數量再發送。
因此,就本題而言,B中點對點是直連、一般不經過路由器的路由和轉發,故不需要ARP協議,本題選B。
(408真題,2012)2、對地址轉換協議(ARP)描述正確的是( B )
A、ARP封裝在IP數據報的數據部分
B、ARP是采用廣播方式發送的
C、ARP是用於IP地址到域名的轉換
D、發送ARP包需要知道對方的MAC地址
解析:
通過ARP原理:
在任何時候,一台主機有IP數據報文發送給另一台主機,它都要知道接收方的邏輯(IP)地址。但是IP地址必須封裝成幀才能通過物理網絡。這就意味着發送方必須有接收方的物理(MAC)地址,因此需要完成邏輯地址到物理地址的映射。而ARP協議可以接收來自IP協議的邏輯地址,將其映射為相應的物理地址,然后把物理地址遞交給數據鏈路層。
我們可以了解到,ARP協議是用於IP地址與MAC地址之間的轉換,故C錯誤;而A中封裝再IP數據報的數據部分顯然是IP的上層TCP或是UDP的報文,故A錯誤;D中發送ARP請求報文時封裝到幀中填入的MAC為全1,即使用廣播方式發送給局域網內的所有主機,故D錯誤,B正確。
(百度文庫,2018)3、對於基帶CSMA/CD而言,為了確保發送站點在傳輸時能檢測到可能存在的沖突,數據幀的傳輸時延至少要等於信號傳播時延的( B )
A、1倍
B、2倍
C、3倍
D、4倍
解析:
在局域網的分析中,常把總線上的單程端到端傳播時延記為τ。
發送數據的站希望盡早知道是否發生了碰撞。那么,A發送數據后,最遲要經過多長時間才能知道自己發送的數據和其他站發送的數據有沒有發生碰撞?
從圖中不難看出,這個時間最多是兩倍的總線端到端的傳播時延2τ,或總線的端到端往返傳播時延。
由於局域網上任意兩個站之間的傳播時延有長有短,因此局域網必須按最壞情況設計,即取總線兩端的兩個站之間的傳播時延(這兩個站之間的距離最大)為端到端傳播時延。
故本題選B。
(408真題,2016)4、下列關於CSMA/CD協議的敘述中,錯誤的是( B )
A、邊發送數據幀,邊檢測是否發生沖突
B、適用於無線網絡,以實現無線鏈路共享
C、需要根據網絡跨距和數據傳輸速率限定最小幀長
D、當信號傳播延遲趨近0時,信道利用率趨近100%。
解析:
CSMA/CD(多點接入載波監聽/沖突檢測),其基本要點:
- 多點接入說明是總線型網絡,計算機以多點接入的方式連接在一根總線上,協議的實質是“載波監聽”和“碰撞檢測”。
- 載波監聽就是利用電子技術檢測總線上有沒有其他計算機也在發送。載波監聽實際上就是檢測信道。在發送前,每個站不停地檢測信道,是為了獲得發送權;在發送中檢測信道,是為了及時發現有沒有其他站的發送和本站發送的碰撞,這就是碰撞檢測。總之,載波監聽是全程都在進行的。
- 碰撞檢測就是邊發送邊監聽。就是網卡邊發送數據邊檢測新島上的信號電壓的變化情況,以便判斷自己在發送數據的時候其他站是否也在發送數據。當幾個站同時在總線上發送數據時,總線上的信號電壓變化幅度將會增大(互相疊加),當網卡檢測到的信號電壓超過一定的門限值時,說明總線上至少有兩個站同時在發送數據,表明產生了碰撞(沖突),所以也稱為沖突檢測。這時,由於接收的信號已經識別不出來,所以任何一個正在發送的站就會立即停止發送數據,然后等待一段隨機事件以后再次發送。
因此,選項中A、C和D顯然符合CSMA/CD的特點,而對於B選項,CSMA/CD適用的場景主要是以太網,在無線局域網中最常適用的是CSMA/CA協議,故選B。
(牛客網,2015)5、局域網體系結構中( B )被划分成MAC和LLC兩個子層。
A、物理層
B、數據鏈路層
C、網絡層
D、運輸層
解析:
MAC子層的主要功能包括數據幀的封裝/卸裝,幀的尋址和識別,幀的接收與發送,鏈路的管理,幀的差錯控制等。MAC子層的存在屏蔽了不同物理鏈路種類的差異性;
LLC子層負責向其上層提供服務;LLC 是在高級數據鏈路控制(HDLC:High-Level Data-Link Control)的基礎上發展起來的,並使用了 HDLC 規范子集。
因此,以上兩個子層均與數據鏈路層相關,本題選B。
(牛客網,2017)6、如果本地域名服務器無緩存,當采用遞歸方法解析另一網絡某主機域名時,用戶主機、本地域名服務器發送的域名請求消息數分別為( A )
A、一條、一條
B、一條、多條
C、多條、一條
D、多條、多條
解析:
在實際中,客戶機向本地域名服務器查詢是遞歸查詢,本地域名服務器向其他域名服務器是迭代查詢,但是這里題目要求就是遞歸查詢。所以不要錯選成B。
遞歸查詢是:客戶機發送一條查詢請求到本地域名服務器,發現緩存中沒有主機名和IP地址對的信息,那么本地域名服務器就往上繼續查詢,發送一個查詢報文,如果在某一級域名服務器找到了主機名和IP地址對信息,就直接返回。
如果找不到,那么這個域名服務器又會作為客戶機去請求上一級域名服務器,直至根域名服務器,根名稱服務器收到DNS請求后,把所查詢得到的所請求的DNS域名中發送給頂級域名服務器,讓頂級域名服務器去往下級域名服務器請求查找,如果找到了就原路返回。
某域名服務器-->...->頂級域名服務器-->根域名服務器-->下一級域名服務器-->...-->本地域名服務器-->客戶機。
所以在遞歸查詢中,主機發送的請求為1次,本地域名服務器發送的請求也為1次。
因此,本題選擇A。
7、在OSI參考模型中,自下而上第一個提供端到端服務的層次是( B )
A、數據鏈路層
B、傳輸層
C、會話層
D、應用層
解析:
OSI七層參考模型為:
題目要求是自下而上,因此本題選B。
填空題
(百度文庫,2018)1、將主機名轉換成 IP 地址,要使用: A 協議,將 IP 地址轉換成 MAC 地址,要使用: B 協議
答案: A:DNS;B:ARP
解析:
- 域名系統(服務)協議(DNS)是一種分布式網絡目錄服務,主要用於域名與 IP 地址的相互轉換,以及控制因特網的電子郵件的發送。
- 地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播到局域網絡上的所有主機,並接收返回消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中並保留一定時間,下次請求時直接查詢ARP緩存以節約資源。地址解析協議是建立在網絡中各個主機互相信任的基礎上的,局域網絡上的主機可以自主發送ARP應答消息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以向某一主機發送偽ARP應答報文,使其發送的信息無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。ARP命令可用於查詢本機ARP緩存中IP地址和MAC地址的對應關系、添加或刪除靜態對應關系等。
(牛客網,2017)**2、在OSI參考模型的物理層、數據鏈路層、網絡層傳送的數據單位分別為:A,B,C **
答案:A:比特; B:幀; C:分組
解析:
- 物理層是OSI參考模型的最低層,它利用傳輸介質為數據鏈路層提供物理連接。它主要關心的是通過物理鏈路從一個節點向另一個節點傳送比特流
- 數據鏈路層是為網絡層提供服務的,解決兩個相鄰結點之間的通信問題,傳送的協議數據單元稱為數據幀
- 網絡層是為傳輸層提供服務的,傳送的協議數據單元稱為數據包或分組。
(原創)3、在TCP中,連接的建立采用:A 的方法,連接的斷開采用:B 的方法。
答案: A:三次握手; B:四次揮手
解析:
三次握手:
第一次握手:建立連接時,客戶端發送syn包(syn=x)到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=x+1),同時自己也發送一個SYN包(syn=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=y+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
四次揮手:
- 1)客戶端進程發出連接釋放報文,並且停止發送數據。釋放數據報文首部,FIN=1,其序列號為seq=u(等於前面已經傳送過來的數據的最后一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。
- 2)服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
- 3)客戶端收到服務器的確認請求后,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最后的數據)。
- 4)服務器將最后的數據發送完畢后,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由於在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號為seq=w,此時,服務器就進入了LAST-ACK(最后確認)狀態,等待客戶端的確認。
- 5)客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2∗∗MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的TCB后,才進入CLOSED狀態。
- 6)服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB后,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。
判斷題
(原創) 1、檢查網絡連通性的應用程序是TRACERT。( F )
解析:
Ping屬於一個通信協議,是TCP/IP協議的一部分。利用“ping”命令可以檢查網絡是否連通,可以很好地幫助我們分析和判定網絡故障。應用格式:
Ping IP地址
。而TRACERT(跟蹤路由)是路由跟蹤實用程序,用於確定 IP數據包訪問目標所采取的路徑。Tracert 命令使用用 IP 生存時間 (TTL) 字段和 ICMP 錯誤消息來確定從一個主機到網絡上其他主機的路由。
故本題選擇錯誤。
(牛客網,2018)2、一座大樓內的一個計算機網絡系統,屬於 WAN。( F )
解析:
局域網(LAN):一般限定在較小的區域內(小於10km的范圍),通常采用有線的方法連接起來。
城域網(MAN):規模局限在一座城市的范圍內。
廣域網(WAN):網絡跨越國界、洲界,甚至遍及全球范圍。
個人區域網(PAN):一般指家庭一台或多台電腦所使用的網絡。
無線局域網(WLAN):是指通過無線設備建立的,給支持無線通信的設備使用的,比如無線網卡,或手機上的WIFI。
一座大樓不可能超過10km范圍,所以是LAN。
(牛客網,2016)3、 IP 協議提供的是服務類型是無連接的虛電路服務。( F )
解析:
IP由IP協議控制傳輸的協議單元稱為IP數據報。IP協議屏蔽下層各種物理網絡的差異,向上層(主要是TCP層或UDP層)提供統一的IP數據報。作為一種互聯網協議,運行於網絡層,屏蔽各個物理網絡的細節和差異,為其高層用戶提供如下3種服務:
- 不可靠的數據投遞服務。數據報的投遞沒有任何品質保證,數據報可能被正確投遞,也可能被丟棄;
- 面向無連接的傳輸服務。這種方式不管數據報的傳輸經過哪些結點,甚至可以不管數據報起始和終止的計算機。數據報的傳輸可能經過不同的傳輸路徑,而且這些數據報在傳輸過程中有可能丟失,也有可能正確傳輸到目的結點;
- 盡最大努力投遞服務。IP不會隨意丟包,除非系統的資源耗盡、接收出現錯誤、或者網路出現故障的情況下,才不得不丟棄報文。
故本題應該為無連接的數據報服務,而並非是虛電路服務。
(原創)4、負責電子郵件傳輸的應用層協議是SMTP ( T )
解析:
SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議。
因此,本題正確。
簡答題
(牛客網,2018)1、比較分析網絡互連設備中的網橋(Bridge)和路由器(Router)的異同點?
- 網橋工作在數據鏈路層,僅能連接兩個同類網絡,用於實現網絡間幀的轉發;
- 路由器工作在網絡層,可連接三個或三個以上同類網絡,用於實現多個網絡間分組的路由選擇及轉發功能。
- 相同點:兩者都是網間互連設備
- 不同點:工作層次不同,連接網絡數目不同,傳送單位不同。
解析:
網橋和路由器的工作層次不同,
但同樣都是網絡間互聯的設備。
因此,答案中只要層次、網絡互連等方面,言之有理的都算正確。
(原創)2、簡述OSI七層參考模型的功能。
- 應用層:OSI參考模型中最靠近用戶的一層,是為計算機用戶提供應用接口,也為用戶直接提供各種網絡服務。我們常見應用層的網絡服務協議有:HTTP,HTTPS,FTP,POP3、SMTP等。
- 表示層:表示層提供各種用於應用層數據的編碼和轉換功能,確保一個系統的應用層發送的數據能被另一個系統的應用層識別。數據壓縮和加密也是表示層可提供的轉換功能之一。
- 會話層:會話層就是負責建立、管理和終止表示層實體之間的通信會話。該層的通信由不同設備中的應用程序之間的服務請求和響應組成。
- 傳輸層:傳輸層建立了主機端到端的鏈接,傳輸層的作用是為上層協議提供端到端的可靠和透明的數據傳輸服務,包括處理差錯控制和流量控制等問題。
- 網絡層: 本層通過IP尋址來建立兩個節點之間的連接,為源端的運輸層送來的分組,選擇合適的路由和交換節點,正確無誤地按照地址傳送給目的端的運輸層。就是通常說的IP層。這一層就是我們經常說的IP協議層。IP協議是Internet的基礎。
- 數據鏈路層:將比特組合成字節,再將字節組合成幀,使用鏈路層地址 (以太網使用MAC地址)來訪問介質,並進行差錯檢測。
- 物理層:實際最終信號的傳輸是通過物理層實現的。通過物理介質傳輸比特流。規定了電平、速度和電纜針腳。
解析:
出題的意圖在於掌握網絡的基礎知識。
對於每一層的敘述只要切合題意,言之有理的都算正確。