tcp/ip知识点的总结
知識點(diǎn)搜集于網(wǎng)絡(luò),在加上自己的總結(jié),還有很多不全,希望大家多提意見,共享學(xué)習(xí)!
一、TCP/IP是什么?
TCP/IP是一個協(xié)議族,而不是單獨(dú)的協(xié)議。包括arp、ip、icmp、tcp、udp、http、ftp等協(xié)議
二、TCP/IP分層
? ? ??
?從上面兩個圖表中可以看出ARP和RARP協(xié)議處于的網(wǎng)絡(luò)層次不同。由于IP協(xié)議使用了ARP協(xié)議,所以經(jīng)常把ARP協(xié)議劃歸到網(wǎng)絡(luò)層,但是ARP協(xié)議的用途是為了從網(wǎng)絡(luò)層使用的IP地址解析出在數(shù)據(jù)鏈路層使用的硬件地址即MAC地址,所以有些地方也把ARP協(xié)議劃歸到數(shù)據(jù)鏈路層,但是一般情況下,我們還是把ARP和RARP協(xié)議劃分到網(wǎng)絡(luò)層,這個沒有明確的界限。
網(wǎng)絡(luò)接口層關(guān)鍵元素:MAC,網(wǎng)絡(luò)層關(guān)鍵元素:IP,傳輸層關(guān)鍵元素:端口號
三、TCP/IP數(shù)據(jù)包的封裝和分用
1、封裝過程,協(xié)議棧從上到下,如圖:
數(shù)據(jù)被送入?yún)f(xié)議棧中,然后逐個通過每一層直到被當(dāng)作一串比特流送入網(wǎng)絡(luò)。其中每一層收到數(shù)據(jù)都要增加一些首部信息(有時(shí)候還要增加一下尾部信息),最后到達(dá)以太網(wǎng),也就是數(shù)據(jù)鏈路層,這時(shí)候把這這個比特流叫做幀。
2、數(shù)據(jù)分用過程,從協(xié)議棧由下往上,如圖:
目的主機(jī)收到以太網(wǎng)數(shù)據(jù)幀后,首先去掉各層協(xié)議加上的報(bào)文首部,同時(shí)每層協(xié)議盒都要去檢查報(bào)文首部中的協(xié)議標(biāo)識,以確定接收數(shù)據(jù)的上層協(xié)議
四、TCP協(xié)議的三次握手和四次揮手
1、三次握手
?
2、四次揮手
?3、為什么是三次握手,四次揮手?
握手3次原因:tcp中,一方接收到syn報(bào)文后,需向?qū)Ψ交貞?yīng)一個ack。三次握手中,第一個是syn報(bào)文,第二個是ack、syn報(bào)文,第三個ack報(bào)文。這樣就都回應(yīng)了ack,需要3次。
揮手4次原因:tcp中,一方接收到fin報(bào)文后,需向?qū)Ψ交貞?yīng)一個ack,并且tcp可以實(shí)現(xiàn)半關(guān)閉。4次揮手中,第一個fin報(bào)文,第二個ack報(bào)文(它可能還要繼續(xù)傳送數(shù)據(jù)),第三個是fin報(bào)文(它已經(jīng)不需要繼續(xù)傳送數(shù)據(jù)了),第四個ack報(bào)文。這樣就都回應(yīng)了ack,需要4次
能否揮手3次:能。收到第一個fin報(bào)文后,它自己也不需要傳送數(shù)據(jù)了,回應(yīng)fin、ack報(bào)文,對方再回應(yīng)ack,總共三次,揮手完畢。實(shí)際中抓報(bào)文,有很多這樣的情況。
如果出現(xiàn)異常斷開情況,那么會直接發(fā)送RST報(bào)文,這種情況是兩次握手
五、TCP和UDP區(qū)別
1、TCP協(xié)議是有連接的,有連接的意思是開始傳輸實(shí)際數(shù)據(jù)之前TCP的客戶端和服務(wù)器端必須通過三次握手建立連接,會話結(jié)束之后通過四次揮手結(jié)束連接。而UDP是無連接的
2、TCP協(xié)議保證數(shù)據(jù)按序發(fā)送,按序到達(dá),提供超時(shí)重傳來保證可靠性,但是UDP不保證按序到達(dá),甚至不保證到達(dá),只是努力交付,即便是按序發(fā)送的序列,也不保證按序送到
3、TCP協(xié)議所需資源多,TCP首部需20個字節(jié)(不算可選項(xiàng)),UDP首部字段只需8個字節(jié)
4、TCP有流量控制和擁塞控制,UDP沒有,網(wǎng)絡(luò)擁堵不會影響發(fā)送端的發(fā)送速率
5、TCP是一對一的連接,而UDP則可以支持一對一,多對多,一對多的通信
6、TCP面向的是字節(jié)流的服務(wù),UDP面向的是報(bào)文的服務(wù)
六、TCP半連接狀態(tài)(半開連接,半關(guān)連接)
半開連接:
TCP的半開連接是指TCP連接的一端異常崩潰,或者在未通知對端的情況下關(guān)閉連接,這種情況下不可以正常收發(fā)數(shù)據(jù),否則會產(chǎn)生RST(后面內(nèi)容我們在介紹RST)。
比如一個常見的情況是TCP連接的一端異常斷電,就會導(dǎo)致TCP的半開連接。如果沒有數(shù)據(jù)傳輸,對端就不會知道本端的異常而一直處于ESTABLISHED狀態(tài)。
TCP半開連接是指發(fā)送了TCP連接請求,等待對方應(yīng)答的狀態(tài),此時(shí)連接并沒有完全建立起來,雙方還無法進(jìn)行通信交互的狀態(tài),此時(shí)就稱為半連接。
由于一個完整的TCP連接需要經(jīng)過三次握手才能完成,這里把三次握手之前的連接都稱之為半連接。
半關(guān)閉連接:
TCP的半關(guān)連接是指TCP連接只有一方發(fā)送了FIN,另一方?jīng)]有發(fā)出FIN包,仍然可以在一個方向上正常發(fā)送數(shù)據(jù)。這種場景并不常見,一般來說Berkeley sockets API調(diào)用shutdown()接口時(shí)候就會進(jìn)入半關(guān)閉狀態(tài)(調(diào)用常規(guī)的close()一般是期待完整的雙向關(guān)閉這個TCP連接),shutdown()接口相當(dāng)指示程序,本端已經(jīng)沒有數(shù)據(jù)待發(fā)送,所以我發(fā)送一個FIN到對端,但是我仍然想要從對端接收數(shù)據(jù),直到對端發(fā)送一個FIN指示關(guān)閉連接為止。
?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
轉(zhuǎn)載于:https://www.cnblogs.com/stupidbug/p/8325472.html
總結(jié)
以上是生活随笔為你收集整理的tcp/ip知识点的总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 交行优逸白大放水的真相!官方承认是BUG
- 下一篇: 术语-服务:PaaS