1、三次握手

那么三次握手到底是怎么實現(xiàn)的呢,首先我們要了解一個概念TCP報文中的TCP標(biāo)志位。tcp標(biāo)志位,有6種標(biāo)示:
SYN(synchronous同步) ACK(acknowledgement 確認(rèn)) PSH(push傳送) FIN(finish結(jié)束) RST(reset重置) URG(urgent緊急)
還有報文中的2個重要字段Sequence number(序列號) Acknowledge number(確認(rèn)號)
Sequence number是數(shù)據(jù)包本身的序列號;Acknowledge number是期望對方繼續(xù)發(fā)送的那個確認(rèn)數(shù)據(jù)包的序列號(sequence number+1)。
第一次握手:
client向server發(fā)送一個請求數(shù)據(jù)包,SYN=1,sequence number=J(隨機產(chǎn)生的數(shù)字序列),此時client進(jìn)入SYN_SEND發(fā)送狀態(tài)
第二次握手:
server接收到client發(fā)送的數(shù)據(jù)包,根據(jù)SYN=1確認(rèn)client想建立連接,故向client發(fā)送一個確認(rèn)數(shù)據(jù)包,SYN=1,ACK=1(表示acknowledge number有效),acknowledge number=J+1(表示確認(rèn)),sequence number=K,此時server進(jìn)入SYN_RCVD接收狀態(tài)
第三次握手:
client接收到server發(fā)送的數(shù)據(jù)包,根據(jù)ACK=1和acknowledge number=J+1得知server同意建立連接。向server發(fā)送確認(rèn)數(shù)據(jù)包,ACK=1,acknowledge number = K+1,server接收到數(shù)據(jù)包后,確認(rèn)ACK=1,acknowledge number=K+1,確認(rèn)建立連接,然后TCP連接完成,進(jìn)入ESTABLISHED狀態(tài)
SYN攻擊:
在三次握手過程中,Server發(fā)送SYN-ACK之后,收到Client的ACK之前的TCP連接稱為半連接(half-open connect),此時Server處于SYN_RCVD狀態(tài),當(dāng)收到ACK后,Server轉(zhuǎn)入ESTABLISHED狀態(tài)。SYN攻擊就是Client在短時間內(nèi)偽造大量不存在的IP地址,并向Server不斷地發(fā)送SYN包,Server回復(fù)確認(rèn)包,并等待Client的確認(rèn),由于源地址是不存在的,因此,Server需要不斷重發(fā)直至超時,這些偽造的SYN包將長時間占用未連接隊列,導(dǎo)致正常的SYN請求因為隊列滿而被丟棄,從而引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓。SYN攻擊是一種典型的DDOS攻擊,檢測SYN攻擊的方式非常簡單,即當(dāng)Server上有大量半連接狀態(tài)且源IP地址是隨機的,則可以斷定遭到SYN攻擊了,使用如下命令可以讓之現(xiàn)行:
'#netstat -nap | grep SYN_RECV
2、四次揮手

由于TCP連接是全雙工的,因此,每個方向都必須要單獨進(jìn)行關(guān)閉,這一原則是當(dāng)一方完成數(shù)據(jù)發(fā)送任務(wù)后,發(fā)送一個FIN來終止這一方向的連接,收到一個FIN只是意味著這一方向上沒有數(shù)據(jù)流動了,即不會再收到數(shù)據(jù)了,但是在這個TCP連接上仍然能夠發(fā)送數(shù)據(jù),直到這一方向也發(fā)送了FIN。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動關(guān)閉,而另一方則執(zhí)行被動關(guān)閉,上圖描述的即是如此。
(1)第一次揮手:Client發(fā)送一個FIN=1,fin=J,用來關(guān)閉Client到Server的數(shù)據(jù)傳送,Client進(jìn)入FIN_WAIT_1狀態(tài)。
(2)第二次揮手:Server收到FIN后,發(fā)送一個ACK=J+1給Client,確認(rèn)序號為收到序號+1(與SYN相同,一個FIN占用一個序號),Server進(jìn)入CLOSE_WAIT狀態(tài)。
(3)第三次揮手:Server發(fā)送一個FIN=1,fin=K,用來關(guān)閉Server到Client的數(shù)據(jù)傳送,Server進(jìn)入LAST_ACK狀態(tài)。
(4)第四次揮手:Client收到FIN后,Client進(jìn)入TIME_WAIT狀態(tài),接著發(fā)送一個ACK=K+1給Server,確認(rèn)序號為收到序號+1,Server進(jìn)入CLOSED狀態(tài),client進(jìn)入TIME_WAIT狀態(tài),完成四次揮手。

3、為什么連接需要三次,斷開需要四次
答:因為當(dāng)Server端收到Client端的SYN連接請求報文后,可以直接發(fā)送SYN+ACK報文。其中ACK報文是用來應(yīng)答的,SYN報文是用來同步的。但是關(guān)閉連接時,當(dāng)Server端收到FIN報文時,很可能并不會立即關(guān)閉SOCKET,所以只能先回復(fù)一個ACK報文,告訴Client端,"你發(fā)的FIN報文我收到了"。只有等到我Server端所有的報文都發(fā)送完了,我才能發(fā)送FIN報文,因此不能一起發(fā)送。故需要四步握手。
4、**TCP的三次握手過程?為什么會采用三次握手,若采用二次握手可以嗎? **
答:建立連接的過程是利用客戶服務(wù)器模式,假設(shè)主機A為客戶端,主機B為服務(wù)器端。
(1)TCP的三次握手過程:主機A向B發(fā)送連接請求;主機B對收到的主機A的報文段進(jìn)行確認(rèn);主機A再次對主機B的確認(rèn)進(jìn)行確認(rèn)。
(2)采用三次握手是為了防止失效的連接請求報文段突然又傳送到主機B,因而產(chǎn)生錯誤。失效的連接請求報文段是指:主機A發(fā)出的連接請求沒有收到主機B的確認(rèn),于是經(jīng)過一段時間后,主機A又重新向主機B發(fā)送連接請求,且建立成功,順序完成數(shù)據(jù)傳輸。考慮這樣一種特殊情況,主機A第一次發(fā)送的連接請求并沒有丟失,而是因為網(wǎng)絡(luò)節(jié)點導(dǎo)致延遲達(dá)到主機B,主機B以為是主機A又發(fā)起的新連接,于是主機B同意連接,并向主機A發(fā)回確認(rèn),但是此時主機A根本不會理會,主機B就一直在等待主機A發(fā)送數(shù)據(jù),導(dǎo)致主機B的資源浪費。
(3)采用兩次握手不行,原因就是上面說的實效的連接請求的特殊情況。
5、為什么TIME_WAIT狀態(tài)需要經(jīng)過2MSL(最大報文段生存時間)才能返回到CLOSE狀態(tài)?
最后一個ACK有可能丟失,TIME_WAIT狀態(tài)就是用來重發(fā)可能丟失的ACK報文。
6、協(xié)議
**OSI,TCP/IP,五層協(xié)議的體系結(jié)構(gòu),以及各層協(xié)議**
**OSI分層(7層)**:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會話層、表示層、應(yīng)用層。
**TCP/IP分層(4層)**:網(wǎng)絡(luò)接口層、 網(wǎng)際層、運輸層、 應(yīng)用層。
**五層協(xié)議(5層)**:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、運輸層、 應(yīng)用層。
OSI七層協(xié)議
物理層:通過媒介傳輸比特,確定機械及電氣規(guī)范(比特Bit)
數(shù)據(jù)鏈路層:將比特組裝成幀和點到點的傳遞(幀F(xiàn)rame)
網(wǎng)絡(luò)層:負(fù)責(zé)數(shù)據(jù)包從源到宿的傳遞和網(wǎng)際互連(包PackeT)
傳輸層:提供端到端的可靠報文傳遞和錯誤恢復(fù)(段Segment)
會話層:建立、管理和終止會話(會話協(xié)議數(shù)據(jù)單元SPDU)
表示層:對數(shù)據(jù)進(jìn)行翻譯、加密和壓縮(表示協(xié)議數(shù)據(jù)單元PPDU)
應(yīng)用層:允許訪問OSI環(huán)境的手段(應(yīng)用協(xié)議數(shù)據(jù)單元APDU)
****每一層的協(xié)議如下:
物理層:RJ45、CLOCK、IEEE802.3 (中繼器,集線器,網(wǎng)關(guān))
數(shù)據(jù)鏈路:PPP、FR、HDLC、VLAN、MAC (網(wǎng)橋,交換機)
網(wǎng)絡(luò)層:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
傳輸層:TCP、UDP、SPX
會話層:NFS、SQL、NETBIOS、RPC
表示層:JPEG、MPEG、ASII
應(yīng)用層:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
各種協(xié)議
** ICMP協(xié)議: **因特網(wǎng)控制報文協(xié)議。它是TCP/IP協(xié)議族的一個子協(xié)議,用于在IP主機、路由器之間傳遞控制消息。
** TFTP協(xié)議: **是TCP/IP協(xié)議族中的一個用來在客戶機與服務(wù)器之間進(jìn)行簡單文件傳輸?shù)膮f(xié)議,提供不復(fù)雜、開銷不大的文件傳輸服務(wù)。
** HTTP協(xié)議: **超文本傳輸協(xié)議,是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。
** DHCP協(xié)議: **動態(tài)主機配置協(xié)議,是一種讓系統(tǒng)得以連接到網(wǎng)絡(luò)上,并獲取所需要的配置參數(shù)手段。
NAT協(xié)議:網(wǎng)絡(luò)地址轉(zhuǎn)換屬接入廣域網(wǎng)(WAN)技術(shù),是一種將私有(保留)地址轉(zhuǎn)化為合法IP地址的轉(zhuǎn)換技術(shù),
DHCP協(xié)議:一個局域網(wǎng)的網(wǎng)絡(luò)協(xié)議,使用UDP協(xié)議工作,用途:給內(nèi)部網(wǎng)絡(luò)或網(wǎng)絡(luò)服務(wù)供應(yīng)商自動分配IP地址,給用戶或者內(nèi)部網(wǎng)絡(luò)管理員作為對所有計算機作中央管理的手段。
TCP與UDP的區(qū)別
TCP傳輸控制協(xié)議提供面向連接的、可靠的數(shù)據(jù)流傳輸,而UDP用戶數(shù)據(jù)報協(xié)議提供的是非面向連接的、不可靠的數(shù)據(jù)流傳輸。
TCP傳輸單位稱為TCP報文段,UDP傳輸單位稱為用戶數(shù)據(jù)報。
TCP注重數(shù)據(jù)安全性,UDP數(shù)據(jù)傳輸快,因為不需要連接等待,少了許多操作,但是其安全性卻一般。
TCP對應(yīng)的協(xié)議和UDP對應(yīng)的協(xié)議
TCP對應(yīng)的協(xié)議:
(1) FTP:定義了文件傳輸協(xié)議,使用21端口。
(2) Telnet:一種用于遠(yuǎn)程登陸的端口,使用23端口,用戶可以以自己的身份遠(yuǎn)程連接到計算機上,可提供基于DOS模式下的通信服務(wù)。
(3) SMTP:郵件傳送協(xié)議,用于發(fā)送郵件。服務(wù)器開放的是25號端口。
(4) POP3:它是和SMTP對應(yīng),POP3用于接收郵件。POP3協(xié)議所用的是110端口。
(5)HTTP:是從Web服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。
UDP對應(yīng)的協(xié)議:
(1) DNS:用于域名解析服務(wù),將域名地址轉(zhuǎn)換為IP地址。DNS用的是53號端口。
(2) SNMP:簡單網(wǎng)絡(luò)管理協(xié)議,使用161號端口,是用來管理網(wǎng)絡(luò)設(shè)備的。由于網(wǎng)絡(luò)設(shè)備很多,無連接的服務(wù)就體現(xiàn)出其優(yōu)勢。
(3)** TFTP(Trival File Tran敏感詞er Protocal),簡單文件傳輸協(xié)議,該協(xié)議在熟知端口69**上使用UDP服務(wù)。
7、ARP是地址解析協(xié)議,簡單語言解釋一下工作原理。 **
1:首先,每個主機都會在自己的ARP緩沖區(qū)中建立一個ARP列表,以表示IP地址和MAC地址之間的對應(yīng)關(guān)系。
2:當(dāng)源主機要發(fā)送數(shù)據(jù)時,首先檢查ARP列表中是否有對應(yīng)IP地址的目的主機的MAC地址,如果有,則直接發(fā)送數(shù)據(jù),如果沒有,就向本網(wǎng)段的所有主機發(fā)送ARP數(shù)據(jù)包,該數(shù)據(jù)包包括的內(nèi)容有:源主機** ** IP地址,源主機MAC地址,目的主機的IP ** 地址。
3:當(dāng)本網(wǎng)絡(luò)的所有主機收到該ARP數(shù)據(jù)包時,首先檢查數(shù)據(jù)包中的IP地址是否是自己的IP地址,如果不是,則忽略該數(shù)據(jù)包,如果是,則首先從數(shù)據(jù)包中取出源主機的IP和MAC地址寫入到ARP列表中,如果已經(jīng)存在,則覆蓋,然后將自己的MAC地址寫入ARP響應(yīng)包中,告訴源主機自己是它想要找的MAC地址。
4:源主機收到ARP響應(yīng)包后。將目的主機的IP和MAC地址寫入ARP列表,并利用此信息發(fā)送數(shù)據(jù)。如果源主機一直沒有收到ARP響應(yīng)數(shù)據(jù)包,表示ARP查詢失敗。
廣播發(fā)送ARP請求,單播發(fā)送ARP響應(yīng)。
描述:RARP
RARP是逆地址解析協(xié)議,作用是完成硬件地址到IP地址的映射,主要用于無盤工作站,因為給無盤工作站配置的IP地址不能保存。工作流程:在網(wǎng)絡(luò)中配置一臺RARP服務(wù)器,里面保存著IP地址和MAC地址的映射關(guān)系,當(dāng)無盤工作站啟動后,就封裝一個RARP數(shù)據(jù)包,里面有其MAC地址,然后廣播到網(wǎng)絡(luò)上去,當(dāng)服務(wù)器收到請求包后,就查找對應(yīng)的MAC地址的IP地址裝入響應(yīng)報文中發(fā)回給請求者。因為需要廣播請求報文,因此RARP只能用于具有廣播能力的網(wǎng)絡(luò)。
8、IP地址
IP地址的分類
A類地址:以0開頭, 第一個字節(jié)范圍:0~127(1.0.0.0 - 126.255.255.255);
B類地址:以10開頭, 第一個字節(jié)范圍:128~191(128.0.0.0 - 191.255.255.255);
C類地址:以110開頭, 第一個字節(jié)范圍:192~223(192.0.0.0 - 223.255.255.255);
IP地址與子網(wǎng)掩碼相與得到主機號
特殊的網(wǎng)址
每一個字節(jié)都為0的地址(“0.0.0.0”)對應(yīng)于當(dāng)前[主機]
IP地址中的每一個字節(jié)都為1的IP地址(“255.255.255.255”)是當(dāng)前子網(wǎng)的[廣播地址]
IP地址中凡是以“1110”開頭的[E類IP地址]都保留用于將來和實驗使用。
IP地址中不能以十進(jìn)制“127”作為開頭,該類地址中數(shù)字127.0.0.1到127.255.255.255用于回路測試,如:[127.0.0.1]可以代表本機IP地址,用“http://127.0.0.1”就可以測試本機中配置的Web服務(wù)器。
網(wǎng)絡(luò)ID的第一個8位組也不能全置為“0”,全“0”表示本地網(wǎng)絡(luò)。
9、在瀏覽器中輸入www.baidu.com后執(zhí)行的全部過程
1)客戶端瀏覽器通過DNS解析到www.baidu.com的IP地址220.181.27.48,通過這個IP地址找到客戶端到服務(wù)器的路徑。客戶端瀏覽器發(fā)起一個HTTP會話到220.161.27.48,然后通過TCP進(jìn)行封裝數(shù)據(jù)包,輸入到網(wǎng)絡(luò)層。
2)在客戶端的傳輸層,把HTTP會話請求分成報文段,添加源和目的端口,如服務(wù)器使用80端口監(jiān)聽客戶端的請求,客戶端由系統(tǒng)隨機選擇一個端口如5000,與服務(wù)器進(jìn)行交換,服務(wù)器把相應(yīng)的請求返回給客戶端的5000端口。然后使用IP層的IP地址查找目的端。
3)客戶端的網(wǎng)絡(luò)層不用關(guān)系應(yīng)用層或者傳輸層的東西,主要做的是通過查找路由表確定如何到達(dá)服務(wù)器,期間可能經(jīng)過多個路由器,這些都是由路由器來完成的工作,我不作過多的描述,無非就是通過查找路由表決定通過那個路徑到達(dá)服務(wù)器。
4)客戶端的鏈路層,包通過鏈路層發(fā)送到路由器,通過鄰居協(xié)議查找給定IP地址的MAC地址,然后發(fā)送ARP請求查找目的地址,如果得到回應(yīng)后就可以使用ARP的請求應(yīng)答交換的IP數(shù)據(jù)包現(xiàn)在就可以傳輸了,然后發(fā)送IP數(shù)據(jù)包到達(dá)服務(wù)器的地址。
10、DNS域名系統(tǒng),簡單描述其工作原理。 **
當(dāng)DNS客戶機需要在程序中使用名稱時,它會查詢DNS服務(wù)器來解析該名稱??蛻魴C發(fā)送的每條查詢信息包括三條信息:包括:指定的DNS域名,指定的查詢類型,DNS域名的指定類別?;赨DP服務(wù),端口53. 該應(yīng)用一般不直接為用戶使用,而是為其他應(yīng)用服務(wù),如HTTP,SMTP等在其中需要完成主機名到IP地址的轉(zhuǎn)換。
11、面向連接和非面向連接的服務(wù)的特點是什么?**
面向連接的服務(wù),通信雙方在進(jìn)行通信之前,要先在雙方建立起一個完整的可以彼此溝通的通道,在通信過程中,整個連接的情況一直可以被實時地監(jiān)控和管理。
非面向連接的服務(wù),不需要預(yù)先建立一個聯(lián)絡(luò)兩個通信節(jié)點的連接,需要通信的時候,發(fā)送節(jié)點就可以往網(wǎng)絡(luò)上發(fā)送信息,讓信息自主地在網(wǎng)絡(luò)上去傳,一般在傳輸?shù)倪^程中不再加以監(jiān)控。
12、交換機與路由器有什么區(qū)別?
①工作所處的OSI層次不一樣,交換機工作在OSI第二層數(shù)據(jù)鏈路層,路由器工作在OSI第三層網(wǎng)絡(luò)層
②尋址方式不同:交換機根據(jù)MAC地址尋址,路由器根據(jù)IP地址尋址
③轉(zhuǎn)發(fā)速不同:交換機的轉(zhuǎn)發(fā)速度快,路由器轉(zhuǎn)發(fā)速度相對較慢。
13、網(wǎng)橋的作用?
網(wǎng)橋是一個局域網(wǎng)與另一個局域網(wǎng)之間建立連接的橋梁
14、在瀏覽器中輸入網(wǎng)址后執(zhí)行的全部過程
1.查找域名對應(yīng)的IP地址。這一步會依次查找瀏覽器緩存,系統(tǒng)緩存,路由器緩存,ISPNDS緩存,根域名服務(wù)器。
2.向IP對應(yīng)的服務(wù)器發(fā)送請求。
3.服務(wù)器響應(yīng)請求,發(fā)回網(wǎng)頁內(nèi)容。
4.瀏覽器解析網(wǎng)頁內(nèi)容。
由于網(wǎng)頁可能有重定向,或者嵌入了圖片,AJAX,其它子網(wǎng)頁等等,這4個步驟可能反復(fù)進(jìn)行多次才能將最終頁面展示給用戶。
本文參考http://uule.iteye.com/blog/2213562
https://www.nowcoder.com/discuss/1937
https://www.nowcoder.com/discuss/1937