校招知識點總結篇之計算機網路
1.計算機網路組成、分類
物理組成:硬體——主機(host、終端裝置)、處理機(前端FEP、通訊CCP-網絡卡)、連線裝置(路由器、交換機)、通訊線路(有線、無線);軟體——協議(語義、語法、時序)、應用;
功能組成:功能——資源子網、通訊子網;工作方式——邊緣、核心部分;
分類:通訊距離-廣域網、區域網、都會網路;資訊交換技術-電路、報文、分組(時延、丟包、吞吐量);網路拓撲-星型、樹形、環形、匯流排型;通訊介質-雙絞線、同軸電纜網、光纖、衛星;傳輸寬頻-基帶、寬頻;使用範圍-公用、專用;速率-高速、中速、低速;通行傳播方式-廣播、點播;
2.計算機網路四層/七層ISO/OSI模型
物理層
資料鏈路層:移動幀在相鄰網路元素之間,SDLC、STP、乙太網、wifi、PPP
網路層:通過路由器將資料報的分組從一臺主機移動到另一臺主機,IP、RIP(內部閘道器,選路資訊協議,15跳)、OSPF(開放最短路徑優先)、ICMP(Internet控制資訊協議,它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。五種差錯報文-源抑制、超時、目的不可達、重定向、要求分段,4種資訊報文-迴應請求、迴應應答、地址遮蔽碼請求、地址遮蔽碼應答)、ARP(IP地址轉為MAC實體地址)、RARP(實體地址轉為IP地址,廣泛用於獲取無盤工作站的IP地址)、AKP、UUCP、BGP(邊界閘道器協議)
傳輸層:提供端到端之間的服務,報文段,TCP(可靠、面向連線(流量控制和擁塞控制)、全雙工)、UDP(不可靠的、無連線的)、SPX(序列包交換)
會話層:單工、半雙工、全雙工、SMTP、DNS、NFS、RPC
表示層:SNMP、TELNET、
應用層:網路應用程式及其協議存留的地方,報文,協議有FTP、HTTP、DNS、SMTP、TFTP(簡單檔案傳輸的協議,提供不復雜、開銷不大的檔案傳輸服務)、WAIS;
套接字:應用程式和網路之間的應用程式程式設計介面;
HTTP:持久和非持久連線;cookie(站點跟蹤使用者);
HTTP報文格式:請求報文——請求行(方法欄位-get/post使用者提交表單/head/put/delete、URL欄位、HTTP協議版本欄位)、首部行、空格、實體主體;
響應報文——狀態行(2請求成功/3重指定/4客戶端錯誤/5伺服器不支援該版本)、6個首部、實體主體
FTP:使用兩個並行的TCP連線,控制連線、資料連線;
郵件訪問協議:SMTP(傳送郵件)、POP3(接受郵件)、IMAP;
DNS:
四層模型:應用層、傳輸層、網際層、網路介面層
硬體地址(實體地址,MAC地址)是資料鏈路層和物理層使用的地址,IP地址是網路層和以上各層使用的。
NAT協議:網路地址轉換屬接入廣域網(WAN)技術,是一種將私有(保留)地址轉化為合法IP地址的轉換技術。
DHCP協議:動態主機配置協議,是一種讓系統得以連線到網路上,並獲取所需要的配置引數手段,使用UDP協議工作。具體用途:給內部網路或網路服務供應商自動分配IP地址,給使用者或者內部網路管理員作為對所有計算機作中央管理的手段。
3.計算機網路互連裝置
中繼器:物理層,連線兩個邏輯上是同一個網路;
集線器:用來集中所有區域網內網路裝置(電腦和其他集線器等),並且將網路頻寬平均分給各個網路裝置(共享寬頻),是中繼器的一種,能夠提供更多埠服務;改進方式加入交換技術;
網橋:鏈路層;工作原理:根據路徑錶轉發或過濾資訊包,如下圖所示,同一網段中通訊的幀,如H1、H2和H3、H4,會被丟棄,不會被網橋轉發到另一網段中去如H1、H3,若此幀未出現差錯,且目的站地址屬於另一個網段,通過查詢站表將收到的幀往對應的埠轉發出去。分類:透明網橋、源站選路網橋
交換機:資料鏈路層,第二層分組交換機,獨佔寬頻,相對較高的分組過濾和轉發速率;
路由器:網路層,第三層分組交換機,連線不同型別的網路,依靠路由表和其他路由器為每個資訊包選擇最佳路徑,具有廣播包抑制和子網隔離功能;
(路由器、交換機、網橋的區別?)
閘道器:傳輸層及其以上,連線兩個完全不同結構的網路,常見閘道器-電子郵件閘道器、IBM主機閘道器、因特網閘道器、區域網網
4.TCP協議三次握手建立連線、四次揮手斷開連線?為什麼要三次握手,而不是兩次或者四次?
Tcp報文格式如下:Seq序列號、Ack=Seq+1確認序號
三次握手如下圖:建立Tcp連線時,客戶端和服務端需總共傳送3個包確認連線的建立;具體過程如下:
第一次握手:Client將標誌位SYN置為1,隨機產生一個序列號seq=J,將該資料包傳送給server,並立即進入SYN_SENT狀態;
第二次握手:server收到資料包後由標誌位SYN置為1知道Client請求建立連線,將標誌位SYN和ACK都置為1,ack=J+1,並隨機產生一個序列號seq=k,將該資料包發給Client以確認請求連線,server進入SYN_RCVD狀態;
第三次握手:Client收到確認後,檢查ack是否為J+1,ACK是否1,正確則將ACK置為1,ack=k+1, 並將該資料包傳送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連線建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸資料了;
理由:防止已過期的連線請求,再次傳到被連線主機,導致server資源浪費;
安全隱患:SYN攻擊,拒絕服務攻擊——傳送大量無效的SYN請求包,偽造的SYN包將產時間佔用未連線佇列,導致正常的SYN請求因為佇列滿而被丟棄,從而引起網路堵塞甚至系統癱瘓(SYN包容量限制);
IP欺騙——偽造序列號;
解決方法:SYN cookies,不快取請求資訊,回髮狀態編碼給Client(開銷、需要足夠bits)
Tcp連線為什麼可靠:三次握手的最主要目的是保證連線是雙工的,可靠更多的是通過重傳機制來保證的,TCP連線的每一端必須有兩個視窗,一個接收視窗和一個傳送視窗,TCP的可靠傳輸機制用位元組的序號控制,所有的確認都是基於序號;
(傳送過的資料未收到確認之前必須保留,以便超時重傳時使用。傳送視窗沒收到確認不動,和收到新的確認後前移。傳送快取用來暫時存放:傳送應用程式傳送給傳送方 TCP 準備傳送的資料;TCP 已傳送出但尚未收到確認的資料。接收快取用來暫時存放:按序到達的、但尚未被接收應用程式讀取的資料;不按序到達的資料。)
Tcp長短連線:tcp短連線——client向server發起連線,server接到請求,雙方建立連線,client向server傳送訊息,server迴應client,一次讀寫完成雙方都可以發起close請求;tcp短連線優缺點:短連線對於伺服器來說較為簡單,存在的連線都是有用的連線,不需要額外的控制,但如果客戶端連線頻繁,會在tcp的建立和關閉上浪費時間。
tcp長連線:client向server發起連線,server接到請求,雙方建立連線,client向server傳送訊息,server迴應client,一次讀寫完成,連線不關閉,後續讀寫操作,長時間操作之後client發起關閉請求。tcp長連線優缺點:長連線可以省去較多的tcp建立/關閉的操作,減少浪費,節省時間,對於頻繁請求資源的客戶,較適用於長連線;client和server如果長時間不關閉的話,會存在一個問題,隨著客戶的越來越多,server早晚會有扛不住的一天,這時需要採取一些策略,如關閉一些長時間不讀寫操作的連線,這樣可以避免一些惡意連線導致server端服務受損,如果條件再允許,就可以以客戶端為顆粒度,限制每個客戶端的最大連線數。
各種狀態含義:closed——初識狀態;listen——表示伺服器端的某個SOCKET處於監聽狀態,可以接受連線;SYN_SENT:表示客戶端已傳送SYN報文;SYN_RCVD:表示接收到了SYN報文,中間狀態;ESTABLISHED:連線已經建立;FIN_WAIT_1/ FIN_WAIT_2:表示等待對方的FIN報文,FIN_WAIT_1主動關閉連線,FIN_WAIT_2表示半連線,也即有一方要求關閉連線;CLOSING:表示你傳送FIN報文後,並沒有收到對方的ACK報文,卻也收到了對方的FIN報文;TIME_WAIT:表示在等待關閉;LAST_ACK: 它是被動關閉一方在傳送FIN報文後,最後等待對方的ACK報文,收到ACK報文後,即可以進入到CLOSED狀態。
四次揮手如下圖:
第一次揮手:Client傳送一個FIN,用來關閉Client到Server的資料傳送,Client進入FIN_WAIT_1狀態;
第二次揮手:Server收到FIN後,傳送一個ACK給Client,確認序號為收到序號+1(與SYN相同,一個FIN佔用一個序號),Server進入CLOSE_WAIT狀態;
第三次揮手:Server傳送一個FIN,用來關閉Server到Client的資料傳送,Server進入LAST_ACK狀態;
第四次揮手:Client收到FIN後,Client進入TIME_WAIT狀態,接著傳送一個ACK給Server,確認序號為收到序號+1,Server進入CLOSED狀態,完成四次揮手;
客戶端收到服務端確認包後等待2*ml時間後會直接關閉連線。若沒有收到則不會關閉連線
為什麼建立連線是三次握手,而關閉連線卻是四次揮手呢?
這是因為服務端在LISTEN狀態下,收到建立連線請求的SYN報文後,把ACK和SYN放在一個報文裡傳送給客戶端。而關閉連線時,當收到對方的FIN報文時,僅僅表示對方不再發送資料了但是還能接收資料,己方也未必全部資料都發送給對方了,所以己方可以立即close,也可以傳送一些資料給對方後,再發送FIN報文給對方來表示同意現在關閉連線,因此,己方ACK和FIN一般都會分開發送。
5.DNS域名解析伺服器定址過程
DNS伺服器將域名解析為IP地址,例如要查詢www.baidu.com的IP地址,解析過程如下:
- 在瀏覽器中輸入www.baidu.com域名,作業系統會先檢查自己本地的hosts檔案是否有這個網址對映關係,如果有,就先呼叫這個IP地址對映,完成域名解析。
- 如果hosts裡沒有這個域名的對映,則查詢本地DNS解析器快取,是否有這個網址對映關係,有則直接返回完成域名解析。
- 如果hosts和DNS解析器快取都沒有網址對映關係(上述兩個),請求本地域名伺服器(DNS)來解析這個域名,伺服器收到查詢,如果查詢域名包含在本地配置區域資源中,則將解析結果返回給客戶機,完成解析過程;
- 要查詢的域名,不由本地DNS伺服器區域解析,但該伺服器已快取了此網址對映關係,則呼叫這個IP地址對映,完成域名解析;
- 前面失效,則根據本地DNS伺服器的設定(是否設定轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發根DNS,根DNS伺服器收到請求後會判斷這個域名是誰來授權管理,並會返回一個負責該頂級域名伺服器的一個IP。本地DNS伺服器收到IP資訊後,將會聯絡負責域名的這臺伺服器,若伺服器收到請求後自己無法解析,它就會找下一級DNS伺服器地址給本地DNS伺服器,重複上面的動作,進行查詢,直至找到主機。
- 若用轉發模式,此DNS伺服器就會把請求轉發至上一級DNS伺服器,由上一級伺服器進行解析,上一級伺服器如果不能解析,或找根DNS或把轉請求轉至上上級,以此迴圈。
- 最後都是把結果返回給本地DNS伺服器,由此DNS伺服器再返回給客戶機。
6.計算機網路傳輸裝置
有線:同軸電纜、雙絞線(STP遮蔽雙絞線、UTP非遮蔽雙絞線)、光纜;
7.IP地址
組成:主機號0、網路號1
分類;A類:一個位元組(8位)做網路號27-2(全0和1),範圍1-126 ;B類:兩個位元組網路號214-2,範圍128.1-191.245;C類:191.0.1.0-223.255.254.0;D類:多播地址;
判斷兩個IP地址是否屬於一個子網?IP地址與子網掩碼與(相同為1,不同為0)運算,結果相同屬於同一子網,反之則不屬於;
已知IP地址172.168.160.25,求子網掩碼和最大主機數;
8.網路安全
安全控制技術:防火牆技術、加密技術(對稱加密——加密和解密使用同一金鑰,AES,DES,RC4,BlowFish、非對稱——在加密和解密時使用不同的金鑰,分別稱為公鑰或私鑰,非對稱加密的加密方法有RSA, DSA,Diffie-Hellman、數字簽名)、使用者識別、訪問控制(許可權、訪問控制策略、口令 )、網路反病毒、安全漏洞掃描、入侵檢測
防火牆技術:建立在內外網路邊界上的過濾封鎖機制;包過濾(資料包頭各項資訊,TCP和IP層)、應用代理閘道器、狀態檢測技術(狀態連線表,跟蹤每個會話狀態);
常見的網路威脅/攻擊型別:
惡意軟體(自我複製、病毒、蠕蟲、特洛伊木馬)、僵屍網路
SQL注入攻擊:攻擊者把SQL命令插入到web表單的域或頁面請求的查詢字串中,欺騙伺服器執行惡意的SQL命令。
拒絕服務(DoS)攻擊:弱點攻擊(易受攻擊的應用程式或者報文),頻寬洪泛(向目標主機發送大量分組),連線洪泛(目標主機中建立大量半開、全開的TCP連線)
分組嗅探器(sniffer):記錄每個流經的分組拷貝的被動接收機;
IP欺騙:將具有虛假源地址的分組注入因特網事務能力,解決:端點鑑別;
中間人攻擊:
9.TCP流量控制和擁塞控制
擁塞控制:防止過多資料注入到網路中使網路中的路由器或者鏈路過載,是一個全域性過程;
擁塞控制的方法:慢開始——剛開始傳送報文段時,把擁塞視窗cwnd設定為一個最大報文段MSS的數值,而在每收到一個對新的報文段的確認後,把擁塞視窗增加多一個MSS的數值,用逐步增大傳送方的擁塞視窗的方法,使分組注入到網路的速率更合理。為了防止擁塞視窗cwnd增長過大引起網路擁塞,還需要設定一個慢開始門限ssthresh狀態變數,如下:
當cwnd>ssthresh時,停止使用慢開始演算法而改用擁塞避免演算法;
當cwnd=ssthresh時,既可以使用慢開始演算法,又可以使用擁塞避免演算法;
傳送方判斷網路出現擁塞,就要把慢開始門限ssthresh設定為出現擁塞時的傳送方視窗值的一半,然後把擁塞視窗重新設定為1,執行慢開始演算法
擁塞控制——每經過一個往返時間RTT就把傳送方的擁塞視窗cwnd加1,擁塞視窗按線性緩慢增長;
快重傳——快重傳演算法首先要求接收方每收到一個失序的報文段後就立即發出重複確認(為的是使傳送方及早知道有報文段沒有到達對方)而不要等待自己傳送資料時才進行捎帶確認。快重傳演算法規定:傳送方只要一連收到三個重複確認就應當立即重傳對方尚未收到的報文段;
快恢復——兩個要點:1.當傳送方連續收到三個重複確認時,就執行乘法減小演算法,把慢開始門限ssthresh減半,這是為了預防網路發生擁塞,接下去不執行慢開始演算法;2.由於傳送方現在認為網路很可能沒有發生擁塞,如果發生了嚴重的擁塞,就不會一連好幾個報文段連續到達接收方,就不會導致接收方傳送重複確認,因此與慢開始不同之處是不執行慢開始演算法,而是把cwnd值設定為慢開始門限ssthresh減半後的數值,然後開始執行擁塞避免演算法(加法增大)。如下圖所示:快重複和快恢復的示意圖:
流量控制:點對點通訊量的控制,端到端的控制,抑制傳送端傳送資料的速率,以便接收端來得及接收;
流量控制方法:對於成塊資料流,TCP利用滑動窗體機制來實現流量的控制,對於互動資料流,TCP利用捎帶ACK和Nagle演算法來實現流量的控制。
如上圖所示A向B傳送資料,B告訴A接受視窗rwnd=400,每個報文段長為100位元組,初始值seq=1, ACK確認欄位有效,ack確認欄位的值。接收方主機B進行了三次流量控制,第一次把視窗設定為300 ,第二次100 ,最後一次為 0,即不允許傳送方再發送資料的狀態。但是當某個ACK報文丟失了,就會出現A等待B確認,並且B等待A傳送資料的死鎖狀態。為了解決這種問題,TCP引入了持續計時器(Persistence timer),當A收到rwnd=0時,就啟用該計時器,時間到了則傳送一個1位元組的探測報文,詢問B是很忙還是上個ACK丟失了,然後B迴應自身的接收視窗大小,返回仍為0(A重設持續計時器繼續等待)或者會重發rwnd=x。
10.MVC模型結構
MVC框架:JSP + servlet + javabean的模式;
11.TCP套接字程式設計與通訊
12.幾種命令
Ping:用來發送ping命令的,通常檢視線路是否通暢;工作於應用層,直接使用網路層的ICMP協議;
Ipconfig: 可以獲得本機的IP地址
Tracert:是路由跟蹤實用程式,用於確定 IP 資料包訪問目標所採取的路徑;
Winipcfg: 是用於顯示使用者所在主機內部IP協議的配置資訊;
13.其他
負載均衡:當一臺伺服器無法支援大量的使用者訪問時,將使用者分攤到兩個或多個伺服器上的方法叫負載均衡;負載均衡的方法,如:Nginx負載均衡、LVS-NAT、LVS-DR等。
Nginx:Nginx是一款面向效能設計的HTTP伺服器,相較於Apache、lighttpd具有佔有記憶體少,穩定性高等優勢。Nginx有4種類型的模組:core、handlers、filters(負責執行一系列過濾操作的模組)、load-balancers(負責負載均衡的模組)。
瀏覽器渲染
1) 瀏覽器根據頁面內容,生成DOM Tree。根據CSS內容,生成CSS Rule Tree(規則樹)。呼叫JS執行引擎執行JS程式碼。
2) 根據DOM Tree和CSS Rule Tree生成Render Tree(呈現樹)
3) 根據Render Tree渲染網頁;
14.長連線與短連結的區別
長連線:指建立SOCKET連線後不管是否使用都保持連線,但安全性較差,連線->傳輸資料->保持連線 -> 傳輸資料-> ………..->直到一方關閉連線,多是客戶端關閉連線;例如:HTTP1.1增加了持久連線支援(貌似最新的HTTP1.1可以顯示的指定 keep-alive),但還是無狀態或者不可以信任的、資料庫的連線用長連線、smtp,pop3,telnet、網路遊戲應用。多用於操作頻繁,點對點的通訊,而且連線數不能太多情況
短連線:指SOCKET連線後,傳送接收完資料後馬上斷開連線,連線——傳輸資料——關閉連線,例如:HTTP(1.0)是無狀態的的短連結,WEB網站的http服務一般都用短連結;
HTTP協議的長連線和短連線,實質上是TCP協議的長連線和短連線;
15.http協議(方法、區別、組成、狀態碼)
http協議的特點:簡單快速(直接輸入URL,訪問資源)、靈活(HTTP允許傳輸任意型別的資料物件,正在傳輸的型別由Content-Type加以標記)、無連線(每次連線只能處理一個請求,伺服器處理完客戶的請求,並收到客戶應答後,斷開連線,該傳輸方式可節省時間)、無狀態(協議對於事務處理沒有記憶功能);
http報文組成:
http方法:POST——傳輸實體內容資源,GET——獲取資源,PUT——更新資源,HEAD——獲得報文首部,DELET——刪除檔案;
- 注:get和post區別:
GET在瀏覽器回退時是無害的,而POST會再次提交請求;
GET產生的URL地址可以被Bookmark,而POST不可以;
GET請求會被瀏覽器主動cache,而POST不會,除非手動設定;
GET請求引數會被完整保留在瀏覽器歷史記錄裡,而POST中的引數不會被保留;
GET請求在URL中傳送的引數是有長度限制的(2kb不同瀏覽器會有所不同),而POST沒有;
對引數的資料型別,GET只接受ASCII字元,而POST沒有限;
GET比POST更不安全,因為引數直接暴露在URL上,所以不能用來傳遞敏感資訊;
GET引數通過URL傳遞,POST放在Request body(請求主體);
GET請求只能進行url編碼 -- encodeURIComponent(),而POST支援多種編碼方式;
POST資料的格式與查詢字串格式相同,如果需要將頁面中表單的資料進行序列化,然後再通過 XHR 傳送到伺服器,可以使用 serialize()函式來建立這個字串,也就是表單序列化;
http狀態碼:1xx——指示資訊,請求正在處理中;2xx——請求成接受正常(200 ok,206 部分內容響應);3xx——重定向,需要進行附加操作才算完成請求(301 永久重定向,302臨時重定向,304 快取);4xx——客戶端錯誤(400 客戶端語法錯誤,401請求授權失敗,403請求不允許 Forbidden資源禁止被訪問,404沒有發現檔案、查詢或者URL);5xx——服務端錯誤(500服務端不可預計的錯誤,501伺服器端在執行請求時發生了錯誤,此時伺服器並沒有正常工作503伺服器不能處理客戶端的請求、臨時過載和當機504伺服器沒連上505伺服器不支援或拒絕支請求頭中指定的HTTP版本);