對於TCP IP協議的一些總結

2021-09-25 09:19:06 字數 1574 閱讀 3990

曾經對三次握手的一些疑惑

最後形成的幀在網路中是如何傳遞的

參考鏈結

最近不知道怎麼回事跟網路幹上了,就是想弄明白資料在網路中到底是怎麼傳輸

雖然想這些問題想的腦袋疼,但隨著思考的深入離真相越來越近,對這些問題也越來越清晰。 為了不讓千千萬的腦細胞白白犧牲,就在此做個記錄方便以後悼念他們。

tcp和ip的的報文在此就不再多說了,主要記錄一下對於上圖曾經有過的疑惑。

就是指http協議的頭部,它應該不需要多說了吧

首部:共14位元組 = 6個位元組目的位址(目的裝置mac位址) + 6個位元組源位址(目的裝置mac位址) + 2個位元組型別(後面所跟資料報的型別,0x0800代表是ip協議幀)

尾部:4個位元組,用於校驗幀的完整性

不包含每次提到三次握手都只是在說tcp協議,慢慢的讓我陷入乙個誤區:三次握手只有tcp協議參與。但後來慢慢接觸後才了解,之所以每次提三次握手都只提tcp協議,只不過是因為在三次握手過程中是通過tcp協議的syn/ack等字段來判定建立連線的情況,所以會比較關注,其他協議在三次過程中並沒有什麼特別之處,便沒有提及。

帶有syn標誌的過程是不可以攜帶資料的,也就是說三次握手的前兩次是不可以攜帶資料的(邏輯上看,連線還沒建立,攜帶資料好像也有點說不過去),但建立連線的第三次握手允許攜帶資料。

這兩個欄位在三次握手過程和資料傳輸過程賦值邏輯是不一致的。

三次握手過程

在建立連線時,傳送端會生成隨機的seq number傳送給接收端,並且接收端通過將seq number+1賦值給為ack向傳送端作響應,代表已經收到傳送端的資訊。

資料傳輸過程

資料傳輸過程用到的初始seq其實就是三次握手結束後的seq,並沒有重新生成。接收端對傳送端的響應ack不再是seq number+1,而是seq number+資料長度,代表著接收端下次想要資料的起始序號,起始序號僅僅代表著開始,所以接收端還會響應乙個window欄位,來表示我目前可以接收多的資料,起始序號加上+window,傳送端便可以得到此時接收端想要的完整資料。

流程如上圖(源於網上-侵刪)。另外由於nat協議的存在,ip位址的變化要分如下兩種情況,

a給b傳送訊息,ip協議中的ip位址是內網ip,其次通過arp協議得知兩台裝置的mac位址並補充到幀的乙太網首部。從而實現兩台裝置的通訊

a給b傳送訊息,首先會將幀傳遞給內網閘道器c,此時ip協議的源ip位址還都是內網ip,但當繼續**到外網閘道器c時,源ip位址就會變成a的外網ip,之後的傳輸中該幀中的源ip位址將一直保持a的外網ip

在路由**過程中,源mac位址和目標mac位址是不斷變化的。舉個栗子,路由中間經過路由m->路由n,該幀的源mac位址就是路由m的mac位址,目標mac位址就是路由n的mac位址

tcp重發機制

tcp滑動視窗

TCP IP協議一些重要內容

1.tcp相關 tcp網路故障模式。1 永久或臨時網路中斷 應用程式和tcp ip棧不會知道這種情況,傳送資料會超時重發。如果路由器返回主機不可達,那麼會斷開連線,並返回ehostunreach或enetunreach錯誤。2 對等應用程式奔潰 果對等的應用程式只是奔潰或終止,那麼對等tcp會傳送乙...

對於介面的一些總結

1.介面中宣告的成員預設為static final成員 不管是基礎資料型別還是引用型別 且必須初始化 2.介面中宣告的方法預設為public且不能有實現體,即 方法體可有引數 3.實現介面的類,必須實現介面中所有方法,且不能降低方法的運用域,即必須顯示宣告為public 4,抽象類不需要實現介面的所...

網路協議一些總結

下面是一些經常在筆試或者面試中碰到的重要的概念,特在此做摘抄和總結。一 什麼是tcp連線的三次握手 第一次握手 客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個syn包 sy...