1. 程式人生 > >tcp/ip知識點的總結

tcp/ip知識點的總結

mac 程序 icm 狀態 圖片 異常 ets size 可靠性

知識點搜集於網絡,在加上自己的總結,還有很多不全,希望大家多提意見,共享學習!

一、TCP/IP是什麽?

TCP/IP是一個協議族,而不是單獨的協議。包括arp、ip、icmp、tcp、udp、http、ftp等協議

二、TCP/IP分層

技術分享圖片 技術分享圖片

從上面兩個圖表中可以看出ARP和RARP協議處於的網絡層次不同。由於IP協議使用了ARP協議,所以經常把ARP協議劃歸到網絡層,但是ARP協議的用途是為了從網絡層使用的IP地址解析出在數據鏈路層使用的硬件地址即MAC地址,所以有些地方也把ARP協議劃歸到數據鏈路層,但是一般情況下,我們還是把ARP和RARP協議劃分到網絡層,這個沒有明確的界限。

網絡接口層關鍵元素:MAC,網絡層關鍵元素:IP,傳輸層關鍵元素:端口號

三、TCP/IP數據包的封裝和分用

1、封裝過程,協議棧從上到下,如圖:

技術分享圖片

數據被送入協議棧中,然後逐個通過每一層直到被當作一串比特流送入網絡。其中每一層收到數據都要增加一些首部信息(有時候還要增加一下尾部信息),最後到達以太網,也就是數據鏈路層,這時候把這這個比特流叫做幀。

2、數據分用過程,從協議棧由下往上,如圖:

技術分享圖片

目的主機收到以太網數據幀後,首先去掉各層協議加上的報文首部,同時每層協議盒都要去檢查報文首部中的協議標識,以確定接收數據的上層協議

四、TCP協議的三次握手和四次揮手

1、三次握手

技術分享圖片

2、四次揮手

技術分享圖片

3、為什麽是三次握手,四次揮手?

握手3次原因:tcp中,一方接收到syn報文後,需向對方回應一個ack。三次握手中,第一個是syn報文,第二個是ack、syn報文,第三個ack報文。這樣就都回應了ack,需要3次。

揮手4次原因:tcp中,一方接收到fin報文後,需向對方回應一個ack,並且tcp可以實現半關閉。4次揮手中,第一個fin報文,第二個ack報文(它可能還要繼續傳送數據),第三個是fin報文(它已經不需要繼續傳送數據了),第四個ack報文。這樣就都回應了ack,需要4次

能否揮手3次:能。收到第一個fin報文後,它自己也不需要傳送數據了,回應fin、ack報文,對方再回應ack,總共三次,揮手完畢。實際中抓報文,有很多這樣的情況。

如果出現異常斷開情況,那麽會直接發送RST報文,這種情況是兩次握手

五、TCP和UDP區別

1、TCP協議是有連接的,有連接的意思是開始傳輸實際數據之前TCP的客戶端和服務器端必須通過三次握手建立連接,會話結束之後通過四次揮手結束連接。而UDP是無連接的
2、TCP協議保證數據按序發送,按序到達,提供超時重傳來保證可靠性,但是UDP不保證按序到達,甚至不保證到達,只是努力交付,即便是按序發送的序列,也不保證按序送到
3、TCP協議所需資源多,TCP首部需20個字節(不算可選項),UDP首部字段只需8個字節
4、TCP有流量控制和擁塞控制,UDP沒有,網絡擁堵不會影響發送端的發送速率
5、TCP是一對一的連接,而UDP則可以支持一對一,多對多,一對多的通信
6、TCP面向的是字節流的服務,UDP面向的是報文的服務

六、TCP半連接狀態(半開連接,半關連接)

半開連接:

TCP的半開連接是指TCP連接的一端異常崩潰,或者在未通知對端的情況下關閉連接,這種情況下不可以正常收發數據,否則會產生RST(後面內容我們在介紹RST)。
比如一個常見的情況是TCP連接的一端異常斷電,就會導致TCP的半開連接。如果沒有數據傳輸,對端就不會知道本端的異常而一直處於ESTABLISHED狀態。
TCP半開連接是指發送了TCP連接請求,等待對方應答的狀態,此時連接並沒有完全建立起來,雙方還無法進行通信交互的狀態,此時就稱為半連接。
由於一個完整的TCP連接需要經過三次握手才能完成,這裏把三次握手之前的連接都稱之為半連接。

半關閉連接:

TCP的半關連接是指TCP連接只有一方發送了FIN,另一方沒有發出FIN包,仍然可以在一個方向上正常發送數據。這種場景並不常見,一般來說Berkeley sockets API調用shutdown()接口時候就會進入半關閉狀態(調用常規的close()一般是期待完整的雙向關閉這個TCP連接),shutdown()接口相當指示程序,本端已經沒有數據待發送,所以我發送一個FIN到對端,但是我仍然想要從對端接收數據,直到對端發送一個FIN指示關閉連接為止。

tcp/ip知識點的總結