1域醇、簡述osi七層模型和TCP/IP五層模型
OSI七層模型
TCP/IP五層模型
2、總結(jié)描述TCP三次握手四次揮手
-
三次握手
三次握手(Three-way Handshake)其實(shí)就是指建立一個TCP連接時(shí)驼唱,需要客戶端和服務(wù)器總共發(fā)送3個包销斟。進(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ā)一個 SYN 報(bào)文筑累,并指明客戶端的初始化序列號 ISN袱蜡。此時(shí)客戶端處于 SYN_SENT 狀態(tài)。首部的同步位SYN=1慢宗,初始序號seq=x坪蚁,SYN=1的報(bào)文段不能攜帶數(shù)據(jù),但要消耗掉一個序號镜沽。
第二次握手:服務(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ā)送一個 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,第二個報(bào)文段所以要+1)煮盼,ACK報(bào)文段可以攜帶數(shù)據(jù)短纵,不攜帶數(shù)據(jù)則不消耗序號。
發(fā)送第一個SYN的一端將執(zhí)行主動打開(active open)僵控,接收這個SYN并發(fā)回下一個SYN的另一端執(zhí)行被動打開(passive open)香到。
在socket編程中,客戶端執(zhí)行connect()時(shí),將觸發(fā)三次握手悠就。
-
四次揮手
建立一個連接需要三次握手千绪,而終止一個連接要經(jīng)過四次揮手(也有將四次揮手叫做四次握手的)。這由TCP的半關(guān)閉(half-close)造成的梗脾。所謂的半關(guān)閉荸型,其實(shí)就是TCP提供了連接的一端在結(jié)束它的發(fā)送后還能接收來自另一端數(shù)據(jù)的能力。TCP 連接的拆除需要發(fā)送四個包炸茧,因此稱為四次揮手(Four-way handshake)瑞妇,客戶端或服務(wù)端均可主動發(fā)起揮手動作。
剛開始雙方都處于ESTABLISHED 狀態(tài)梭冠,假如是客戶端先發(fā)起關(guān)閉請求辕狰。四次揮手的過程如下:
第一次揮手:客戶端發(fā)送一個 FIN 報(bào)文,報(bào)文中會指定一個序列號控漠。此時(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)文癣缅,且指定一個序列號厨剪。此時(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ā)送一個 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)。
收到一個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é)議
這是一個面向連接的傳輸協(xié)議,在發(fā)送數(shù)據(jù)之前反惕,要和對方建立可靠的連接尝艘。一個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é)議
這是一個無連接的簡單的面向數(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分類以及每個分類可以分配的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)第一個字節(jié)為網(wǎng)絡(luò)號色解,后三個字節(jié)為主機(jī)號。該類IP地址的最前面為“0”餐茵,所以地址的網(wǎng)絡(luò)號取值于1~126之間科阎。一般用于大型網(wǎng)絡(luò)。
定義:第1字節(jié)為網(wǎng)絡(luò)地址忿族,其它3個字節(jié)為主機(jī)地址
范圍:1.0.0.1 - 126.255.255.254
數(shù)量:允許有126個網(wǎng)段锣笨,每個網(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)前兩個字節(jié)為網(wǎng)絡(luò)號,后兩個字節(jié)為主機(jī)號判哥。該類IP地址的最前面為“10”献雅,所以地址的網(wǎng)絡(luò)號取值于128~191之間。一般用于中等規(guī)模網(wǎng)絡(luò)姨伟。
定義:第1字節(jié)和第2字節(jié)為網(wǎng)絡(luò)地址惩琉,其它2個字節(jié)為主機(jī)地址
范圍:128.0.0.1 - 191.255.255.254
數(shù)量:允許有16384個網(wǎng)段豆励,每個網(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ù)器良蒸。就會得到其中一個IP.
C類:(192.0.0.0-223.255.255.0)(子網(wǎng)掩碼:255.255.255.0或 0xFFFFFF00)前三個字節(jié)為網(wǎng)絡(luò)號技扼,最后一個字節(jié)為主機(jī)號。該類IP地址的最前面為“110”嫩痰,所以地址的網(wǎng)絡(luò)號取值于192~223之間剿吻。一般用于小型網(wǎng)絡(luò)。
定義:第1字節(jié)串纺、第2字節(jié)和第3個字節(jié)為網(wǎng)絡(luò)地址丽旅,第4個個字節(jié)為主機(jī)地址。另外第1個字節(jié)的前三位固定為110
范圍:192.0.0.1 - 223.255.255.254
數(shù)量:允許有2097152個網(wǎng)段纺棺,每個網(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個字節(jié)的前四位固定為1110
范圍:224.0.0.1 - 239.255.255.254
E類:是保留地址米丘。該類IP地址的最前面為“1111”,所以地址的網(wǎng)絡(luò)號取值于240~255之間糊啡。
定義:不分網(wǎng)絡(luò)地址和主機(jī)地址拄查,它的第1個字節(jié)的前五位固定為11110
范圍:240.0.0.1 - 255.255.255.254
5、總結(jié)IP配置方法
(1)自動獲取dhcp
(2)手動配置