1、簡述osi七層模型和TCP/IP五層模型
OSI七層模型

TCP/IP五層模型

2、總結(jié)描述TCP三次握手四次揮手
-
三次握手
三次握手(Three-way Handshake)其實(shí)就是指建立一個(gè)TCP連接時(shí),需要客戶端和服務(wù)器總共發(fā)送3個(gè)包。進(jìn)行三次握手的主要作用就是為了確認(rèn)雙方的接收能力和發(fā)送能力是否正常、指定自己的初始化序列號為后面的可靠性傳送做準(zhǔn)備。實(shí)質(zhì)上其實(shí)就是連接服務(wù)器指定端口,建立TCP連接,并同步連接雙方的序列號和確認(rèn)號,交換TCP窗口大小信息。剛開始客戶端處于 Closed 的狀態(tài),服務(wù)端處于 Listen 狀態(tài)。
三次握手
進(jìn)行三次握手:
第一次握手:客戶端給服務(wù)端發(fā)一個(gè) SYN 報(bào)文,并指明客戶端的初始化序列號 ISN。此時(shí)客戶端處于 SYN_SENT 狀態(tài)。首部的同步位SYN=1,初始序號seq=x,SYN=1的報(bào)文段不能攜帶數(shù)據(jù),但要消耗掉一個(gè)序號。
第二次握手:服務(wù)器收到客戶端的 SYN 報(bào)文之后,會以自己的 SYN 報(bào)文作為應(yīng)答,并且也是指定了自己的初始化序列號 ISN(s)。同時(shí)會把客戶端的 ISN + 1 作為ACK 的值,表示自己已經(jīng)收到了客戶端的 SYN,此時(shí)服務(wù)器處于 SYN_RCVD 的狀態(tài)。在確認(rèn)報(bào)文段中SYN=1,ACK=1,確認(rèn)號ack=x+1,初始序號seq=y。
第三次握手:客戶端收到 SYN 報(bào)文之后,會發(fā)送一個(gè) ACK 報(bào)文,當(dāng)然,也是一樣把服務(wù)器的 ISN + 1 作為 ACK 的值,表示已經(jīng)收到了服務(wù)端的 SYN 報(bào)文,此時(shí)客戶端處于 ESTABLISHED 狀態(tài)。服務(wù)器收到 ACK 報(bào)文之后,也處于 ESTABLISHED 狀態(tài),此時(shí),雙方已建立起了連接。確認(rèn)報(bào)文段ACK=1,確認(rèn)號ack=y+1,序號seq=x+1(初始為seq=x,第二個(gè)報(bào)文段所以要+1),ACK報(bào)文段可以攜帶數(shù)據(jù),不攜帶數(shù)據(jù)則不消耗序號。
發(fā)送第一個(gè)SYN的一端將執(zhí)行主動打開(active open),接收這個(gè)SYN并發(fā)回下一個(gè)SYN的另一端執(zhí)行被動打開(passive open)。
在socket編程中,客戶端執(zhí)行connect()時(shí),將觸發(fā)三次握手。
-
四次揮手
建立一個(gè)連接需要三次握手,而終止一個(gè)連接要經(jīng)過四次揮手(也有將四次揮手叫做四次握手的)。這由TCP的半關(guān)閉(half-close)造成的。所謂的半關(guān)閉,其實(shí)就是TCP提供了連接的一端在結(jié)束它的發(fā)送后還能接收來自另一端數(shù)據(jù)的能力。TCP 連接的拆除需要發(fā)送四個(gè)包,因此稱為四次揮手(Four-way handshake),客戶端或服務(wù)端均可主動發(fā)起揮手動作。
剛開始雙方都處于ESTABLISHED 狀態(tài),假如是客戶端先發(fā)起關(guān)閉請求。四次揮手的過程如下:
四次揮手第一次揮手:客戶端發(fā)送一個(gè) FIN 報(bào)文,報(bào)文中會指定一個(gè)序列號。此時(shí)客戶端處于 FIN_WAIT1 狀態(tài)。即發(fā)出連接釋放報(bào)文段(FIN=1,序號seq=u),并停止再發(fā)送數(shù)據(jù),主動關(guān)閉TCP連接,進(jìn)入FIN_WAIT1(終止等待1)狀態(tài),等待服務(wù)端的確認(rèn)。
第二次揮手:服務(wù)端收到 FIN 之后,會發(fā)送 ACK 報(bào)文,且把客戶端的序列號值 +1 作為 ACK 報(bào)文的序列號值,表明已經(jīng)收到客戶端的報(bào)文了,此時(shí)服務(wù)端處于 CLOSE_WAIT 狀態(tài)。
即服務(wù)端收到連接釋放報(bào)文段后即發(fā)出確認(rèn)報(bào)文段(ACK=1,確認(rèn)號ack=u+1,序號seq=v),服務(wù)端進(jìn)入CLOSE_WAIT(關(guān)閉等待)狀態(tài),此時(shí)的TCP處于半關(guān)閉狀態(tài),客戶端到服務(wù)端的連接釋放??蛻舳耸盏椒?wù)端的確認(rèn)后,進(jìn)入FIN_WAIT2(終止等待2)狀態(tài),等待服務(wù)端發(fā)出的連接釋放報(bào)文段。第三次揮手:如果服務(wù)端也想斷開連接了,和客戶端的第一次揮手一樣,發(fā)給 FIN 報(bào)文,且指定一個(gè)序列號。此時(shí)服務(wù)端處于 LAST_ACK 的狀態(tài)。
即服務(wù)端沒有要向客戶端發(fā)出的數(shù)據(jù),服務(wù)端發(fā)出連接釋放報(bào)文段(FIN=1,ACK=1,序號seq=w,確認(rèn)號ack=u+1),服務(wù)端進(jìn)入LAST_ACK(最后確認(rèn))狀態(tài),等待客戶端的確認(rèn)。第四次揮手:客戶端收到 FIN 之后,一樣發(fā)送一個(gè) ACK 報(bào)文作為應(yīng)答,且把服務(wù)端的序列號值 +1 作為自己 ACK 報(bào)文的序列號值,此時(shí)客戶端處于 TIME_WAIT 狀態(tài)。需要過一陣子以確保服務(wù)端收到自己的 ACK 報(bào)文之后才會進(jìn)入 CLOSED 狀態(tài),服務(wù)端收到 ACK 報(bào)文之后,就處于關(guān)閉連接了,處于 CLOSED 狀態(tài)。
即客戶端收到服務(wù)端的連接釋放報(bào)文段后,對此發(fā)出確認(rèn)報(bào)文段(ACK=1,seq=u+1,ack=w+1),客戶端進(jìn)入TIME_WAIT(時(shí)間等待)狀態(tài)。此時(shí)TCP未釋放掉,需要經(jīng)過時(shí)間等待計(jì)時(shí)器設(shè)置的時(shí)間2MSL后,客戶端才進(jìn)入CLOSED狀態(tài)。
收到一個(gè)FIN只意味著在這一方向上沒有數(shù)據(jù)流動??蛻舳藞?zhí)行主動關(guān)閉并進(jìn)入TIME_WAIT是正常的,服務(wù)端通常執(zhí)行被動關(guān)閉,不會進(jìn)入TIME_WAIT狀態(tài)。
在socket編程中,任何一方執(zhí)行close()操作即可產(chǎn)生揮手操作。
3、描述TCP和UDP區(qū)別
TCP:傳輸控制協(xié)議
這是一個(gè)面向連接的傳輸協(xié)議,在發(fā)送數(shù)據(jù)之前,要和對方建立可靠的連接。一個(gè)TCP連接必須經(jīng)過三次握手才能建立,經(jīng)過四次揮手才能斷開。
三次握手:客戶端向服務(wù)器發(fā)送syn請求建立連接;
服務(wù)器向客戶端發(fā)送syn以及ack確定是否建立連接?
客戶端向服務(wù)器發(fā)送ack確定建立連接。
四次握手:客戶端向服務(wù)器發(fā)送fin請求斷開連接;
服務(wù)器向客戶端發(fā)送數(shù)據(jù)包;
服務(wù)器向客戶端fin以及ack確定是否斷開連接;
客戶端向服務(wù)器發(fā)送fin確定斷開連接。
UDP:用戶數(shù)據(jù)報(bào)協(xié)議
這是一個(gè)無連接的簡單的面向數(shù)據(jù)報(bào)的傳輸層協(xié)議
UDP不提供可靠性,只是把應(yīng)用程序傳給ip層的數(shù)據(jù)包發(fā)送出來,但是不能保證他們到達(dá)目的地;由于UDP在傳輸數(shù)據(jù)包前不用在客戶和服務(wù)器之間建立連接,并且沒有超時(shí)重發(fā)機(jī)制,所以速度很快。
區(qū)別:
1.基于連接與無連接;
2.對系統(tǒng)資源的要求(TCP較多,UDP較少);
3.UDP程序結(jié)構(gòu)較為簡單;
4.TCP是流模式(SOCK_STREAM) UDP是數(shù)據(jù)報(bào)模式(SOCK_DGRAM);
5.TCP保證數(shù)據(jù)正確性,UDP可能丟包,TCP保證數(shù)據(jù)順序,UDP不保證;
4、總結(jié)ip分類以及每個(gè)分類可以分配的IP數(shù)量
IP地址中的前5位用于標(biāo)識IP地址的類別:
A類地址的第一位為0;
B類地址的前兩位為10;
C類地址的前三位為110;
D類地址的前四位為1110;
E類地址的前五位為11110。
IP地址根據(jù)網(wǎng)絡(luò)號和主機(jī)號來分,分為A、B、C三類及特殊地址D、E。全0和全1的都保留不用。
A類:(1.0.0.0-126.0.0.0)(默認(rèn)子網(wǎng)掩碼:255.0.0.0或 0xFF000000)第一個(gè)字節(jié)為網(wǎng)絡(luò)號,后三個(gè)字節(jié)為主機(jī)號。該類IP地址的最前面為“0”,所以地址的網(wǎng)絡(luò)號取值于1~126之間。一般用于大型網(wǎng)絡(luò)。
定義:第1字節(jié)為網(wǎng)絡(luò)地址,其它3個(gè)字節(jié)為主機(jī)地址
范圍:1.0.0.1 - 126.255.255.254
數(shù)量:允許有126個(gè)網(wǎng)段,每個(gè)網(wǎng)段允許有16777214臺主機(jī)
子網(wǎng)掩碼:255.0.0.0
私有地址:10.X.X.X是私有地址(所謂的私有地址就是在互聯(lián)網(wǎng)上不使用,而被用在局域網(wǎng)絡(luò)中的地址),范圍10.0.0.1-10.255.255.254
保留地址:127.X.X.X是保留地址,也是本機(jī)地址,等效于localhost或本機(jī)IP。一般用于測試使用。例如:ping 127.0.0.1來測試本機(jī)TCP/IP是否正常。
B類:(128.0.0.0-191.255.0.0)(默認(rèn)子網(wǎng)掩碼:255.255.0.0或0xFFFF0000)前兩個(gè)字節(jié)為網(wǎng)絡(luò)號,后兩個(gè)字節(jié)為主機(jī)號。該類IP地址的最前面為“10”,所以地址的網(wǎng)絡(luò)號取值于128~191之間。一般用于中等規(guī)模網(wǎng)絡(luò)。
定義:第1字節(jié)和第2字節(jié)為網(wǎng)絡(luò)地址,其它2個(gè)字節(jié)為主機(jī)地址
范圍:128.0.0.1 - 191.255.255.254
數(shù)量:允許有16384個(gè)網(wǎng)段,每個(gè)網(wǎng)段允許有65534臺主機(jī)
子網(wǎng)掩碼:255.255.0.0
私有地址:172.16.0.0 - 172.31.255.255是私有地址
保留地址:169.254.X.X是保留地址。如果你的IP地址是自動獲取IP地址,而你在網(wǎng)絡(luò)上又沒有找到可用的DHCP服務(wù)器。就會得到其中一個(gè)IP.
C類:(192.0.0.0-223.255.255.0)(子網(wǎng)掩碼:255.255.255.0或 0xFFFFFF00)前三個(gè)字節(jié)為網(wǎng)絡(luò)號,最后一個(gè)字節(jié)為主機(jī)號。該類IP地址的最前面為“110”,所以地址的網(wǎng)絡(luò)號取值于192~223之間。一般用于小型網(wǎng)絡(luò)。
定義:第1字節(jié)、第2字節(jié)和第3個(gè)字節(jié)為網(wǎng)絡(luò)地址,第4個(gè)個(gè)字節(jié)為主機(jī)地址。另外第1個(gè)字節(jié)的前三位固定為110
范圍:192.0.0.1 - 223.255.255.254
數(shù)量:允許有2097152個(gè)網(wǎng)段,每個(gè)網(wǎng)段允許有254臺主機(jī)
子網(wǎng)掩碼:255.255.255.0
私有地址:192.168.X.X是私有地址。(192.168.0.0 - 192.168.255.255)
D類:是多播地址。該類IP地址的最前面為“1110”,所以地址的網(wǎng)絡(luò)號取值于224~239之間。一般用于多路廣播用戶。
定義:不分網(wǎng)絡(luò)地址和主機(jī)地址,它的第1個(gè)字節(jié)的前四位固定為1110
范圍:224.0.0.1 - 239.255.255.254
E類:是保留地址。該類IP地址的最前面為“1111”,所以地址的網(wǎng)絡(luò)號取值于240~255之間。
定義:不分網(wǎng)絡(luò)地址和主機(jī)地址,它的第1個(gè)字節(jié)的前五位固定為11110
范圍:240.0.0.1 - 255.255.255.254
5、總結(jié)IP配置方法
(1)自動獲取dhcp
(2)手動配置

