網絡通訊協議-TCP/IP協議

一.?了解2個名詞及語義: "OSI 7層參考模型"和"TCP/IP協議"

????????OSI 7層參考模型之所以叫它為參考模型 ,?是因為它并沒有被實現出來 ,?它是軟件工程學的東西 ,?分層的目的就是為了解耦 ,?讓每層只做自己的事情 ,?別的層該做的事情交給別的層去做 ,?最終實現網絡通訊的目的(參考圖:OSI7層參考模型)?

????????TCP/IP協議是基于OSI 7層參考模型已經實現的一種協議 , TCP/IP協議在最終實現時 ,?是把OSI 7層參考模型分成了5層 ,?這里面主要是把"應用層","表示層","會話層"縮到了"應用層"一起 ,?顧名思義 , "應用層"由應用程序來提供 ,? "傳輸控制層" , "網絡層" , "鏈路層" , "物理層"?這4層放到了操作系統的內核里面 ,?以內核和應用程序劃分了2個鴻溝 ,?內核的東西由操作系統提供 ,?剩下"應用層"就需要應用程序來提供了

? ? ? ?到這里 ,?OSI 7層參考模型和TCP/IP協議這2個名詞算是解釋清楚了 ,?OSI 7層參考模型中理論上的東西就不聊了,?比如每層該干些什么啊之類的 , 我們進入重點 ,?接下來聊聊已經實現了的TCP/IP協議.

????????TCP/IP協議總的來說就是"應用層","傳輸控制層","網絡層","鏈路層","物理層"這么些層次的分法 , 比如說"應用層"的常見協議有HTTP協議,HTTPS協議,FTP協議,SSH協議等等這些應用程序當中使用到的協議 , "傳輸控制層"有TCP協議,UDP協議 , "網絡層"有IP協議或者是關于IP的一些協議 , "鏈路層"有ARP協議 , "物理層"就是計算機編程里面硬件上面制定的一些協議了,比如編碼解碼器之類的 , 每個層有每層自己的相關協議來規定和約束一些工作的事情 ,?層與層之間沒有重疊 ,?互相調用就可以了 ,?這就實現就TCP/IP協議.

? ? ? ? 到這里 ,?TCP/IP協議這個名詞的語義也解釋清楚了?

OSI7層參考模型


TCP/IP實現的OSI 7層參考模型

二. TCP/IP協議?之?應用層

????????我們先不去深挖TCP/IP協議的事 , 先來說說"應用層" ,?應用程序使用的那些協議 ,?比如說WEB工程師最常見的"HTTP協議 , SSH協議" ,?我們先來看HTTP協議 ,?那么什么是HTTP協議啊??比如說我們的服務器和網址www.huangcuigang.cn的服務器請求頁面的過程就要走一個HTTP協議 ,?咱們用一個簡單的方式來演示 , 使用LINUX操作系統 ,?這里有一些瑣碎的知識點和概念 ,?一定要細心的觀察演示的過程 ,?后面的東西才能聽懂 ,?比如說先演示一個大家看不懂的一個事情:

[root@iZbp19r2vmlr853x5azt4rZ ~]# exec 8<> /dev/tcp/www.huangcuigang.cn/80

這里解讀一下我們寫下的這段字符串,?

第一部分的字符串是"exec" ,?它是一個命令(exec命令) , "exec"是"execute"單詞的簡寫 ,?顧名思義 ,?就是執行的意思? ,?這個命令簡單了解一下就行 ,?不是我們要演示的重點 ,?簡單知道是干什么的就行 ,??

第二部分的字符串是一個數字8(這個數字可以隨便寫,不是必須為8)緊鄰著<> , "<>"是Shell 輸入/輸出重定向?,?我們這里是把輸入輸出重定向到了一個數字8上了 ,?也就是說這里的數字8可以輸入也可以輸出 ,?

第三部分的字符串是一個路徑 ,?它是一個文件目錄 ,

我們思考一下這段字符串的語義 ,?當我們按下回車鍵時 ,?在linux系統中 ,?一切都是文件 ,?比如說我們的打印機可以是一個文件 ,?我們把一個東西對著這個文件寫 ,?那么打印機會把東西打印出來 ,?我們的攝像頭可以是一個文件 ,?我們讀取這個文件 ,?就會把攝像頭拍到的東西讀出來 ,

如果我們與網址www.huangcuigang.cn建立TCP連接 , 它的連接也是一個文件 ,?那么對著這個文件讀寫的話 ,?就造成了對網址www.huangcuigang.cn的TCP連接的一種輸入輸出?,?linux中一切皆文件 ,?那么這段命令的語義就是 ,?對著網址www.huangcuigang.cn的80端口建立一個TCP連接 ,?并用一個數字8來代表這個TCP連接 , 且這個數字8代表的TCP連接可以輸入也可以輸出 ,?

按下回車 , 終端上什么提示輸出都沒有 ,?沒提示就是最好的提示 ,?說明成功了 ,?到這里我們就創建好了一個數字8的TCP連接對象 ,?通過這個數字8的TCP連接對象我們可以拿到輸入流 ,?也可以拿到輸出流 ,?這個理論一定要能明白

我們要演示的是HTTP協議 , 我們都知道HTTP協議是用來發送HTTP請求的 ,?那么什么叫做HTTP協議?簡單說HTTP協議就是一個基于TCP/IP通信協議來傳遞數據所制定的規范 ,?只有發送數據方和接收數據方都遵守HTTP協議來發送數據 ,?雙方才能根據HTTP協議的約定去解析出來想要的數據

我們現在是在服務器上去演示 , 我們要把我們自己的雙手來充當瀏覽器的角色 ,?瀏覽器在請求一個網址時 ,?必須要創造出一個基于HTTP協議請求的文本內容 ,?我們來用echo命令打印一下這個文本內容 (?HTTP協議的所有約定細節這里就不細談了 ,?主要目的是演示講解 )

小知識點 : echo?的 -e選項是激活轉義字符 ,?也就是解析\n為換行 ,?而不是把\n作為字符串打印出來

[root@iZbp19r2vmlr853x5azt4rZ ~]# echo -e "GET / HTTP/1.0\n"

GET / HTTP/1.0

[root@iZbp19r2vmlr853x5azt4rZ ~]#

我們現在是用echo把字符串打印到我們的終端了 ,?其實我們應該是要把這個字符串發送到網址www.huangcuigang.cn的TCP連接去 ,?我們再來重新改一下我們的echo輸出 ,?使用">"輸出重定向 ,?把echo的輸出重定向到數字8 ,?數字8代表了我們的一個TCP連接 ,?但是這里的數字8其實是一個文件描述符 ,?">"輸出重定向的對象要求是一個文件 ,?而輸出重定向到文件描述符的話要用">&",?然后數字8又代表了網址www.huangcuigang.cn的TCP連接 ,?那么這樣 ,?這個echo輸出的內容就寫入TCP連接對象了

按下回車 ,?我們就已經向www.huangcuigang.cn的TCP連接對象按照HTTP協議發送了請求了 ,

[root@iZbp19r2vmlr853x5azt4rZ ~]# echo -e "GET / HTTP/1.0\n" >& 8

按照HTTP協議 ,?收到消息了就必須要返回消息 ,?我們發送給www.huangcuigang.cn的TCP連接的消息是寫入到文件描述符8了 ,?那么www.huangcuigang.cn的TCP連接的返回數據應該也是寫入到文件描述符8了 ,?我們讀取文件描述符8的內容就能得到返回的內容了 ,?這里我們使用cat命令去讀取 ,?cat加上<&輸出重定向?從文件描述符讀取數據 ,?敲下回車 .?

注意圖片紅色圈出來的部分命令 ,?使用cat <& 8去讀取文件描述符的內容時 ,?是沒有任何數據的 ,?我們要注意一下這個事情 ,?這是因為我們再寫這篇文章時 ,?花的時間比較長 ,?造成TCP連接被斷開了 ,?這里的知識點 ,?我們如果想要給對方發送數據 ,?我們就必須先與對方建立TCP連接 , TCP連接有了之后 ,?我們才能夠給對方發送數據 ,?那么重點來了 ,?我們與對方建立了連接 ,?但是我們什么時候會給對方發送消息 ,?這是一個未知數 ,?我們有可能建立連接后很快就發送了數據給對方 ,?也有可能一直不發消息給對方 ,?所以站在www.huangcuigang.cn服務器的一方去想 ,?如果別人與我們建立了連接之后 ,?就相當于我們也創建了TCP連接的資源 ,?也是一個文件描述符 , 我從這個連接去讀數據 ,?就是在做I/O操作 , 對方一直沒有發送數據 ,?一是會造成我們的資源浪費 ,?二是一直在對文件做I/O操作也是性能浪費 ,?再者就是這有可能會造成一種阻塞狀態 ,?所以才會出現BIO , NIO ,?多路復用等等技術的出現 ,?所以這完全是沒有意義的事情 ,?所以才會斷開連接 ,?有興趣的朋友 ,?可以想想 ,?如果沒有超時自動斷開連接這個機制會怎么樣?? 比如我們寫一個程序 ,?使用不同的虛擬IP ,?大量的與你服務器創建TCP連接但是不發送數據 ,?其實每臺服務器可以創建的連接是有限的 ,?你的服務器會怎么樣? 再好的硬件也撐不住吧.

既然TCP連接斷開了 ,?那我們再重新創建一個TCP連接不就OK了嗎 ,?到這里 ,?請求回了www.huangcuigang.cn域名返回的頁面數據了

這里有一張截圖 ,?上部分是www.huangcuigang.cn所在的服務器 , IP為47.111.242.7 ,?下半部分是發起請求的一方 , IP為121.196.47.141 ,?首先IP47.111.242.7使用tcpdump命令監聽了網卡上與IP121.196.47.141的數據包 ,?然后IP121.196.47.141使用exec命令創建了一個TCP連接 ,?每一條數據前面都有時間 ,?根據時間可以看到 , 20分28秒的時候 ,?IP47.111.242.7與IP121.196.47.141完成了3次握手 ,?然后,我們什么都沒有動 ,?建立了TCP連接都也不發送數據了 ,?在29分28秒的時候 ,?www.huangcuigang.cn所在的服務器IP47.111.242.7向發起請求方IP121.196.47.141發送了數據包完成了4次分手 ,?也就斷開了連接了

TCP/IP協議?之?應用層?的?總結 :?

????????我使用HTTP協議請求服務器獲得頁面的演示 ,?核心就是HTTP協議 ,?如果我們的"GET / HTTP/1.1\n"不按照HTTP協議的這種格式去寫 ,?那么我們發送給服務器 ,?服務器當然也能夠接收到數據 ,但是服務器根本就不知道我們是想要干什么 ,?就更不會正確的返回給我們想要的數據了 ,?再比如我們自己手寫了一個xx程序 , xx程序運行在服務器上 , 我們xx程序監聽系統的1314端口 , 我們xx程序自己制定了一套xx協議 ,?xx協議規定 , 發送字符串"操作:連接xx|賬號:xxx|密碼:xxx"格式到與我們xx程序的TCP連接 ,?就代表了連接與登錄操作 ,?再有就是增刪改查等等的操作我們xx協議都有規定 ,?那么你要連接登錄我們xx程序發過來字符串為:"我要登錄 ,?我的賬號是xx ,?密碼你等等 ,?我再想想" ,?這樣的字符串我們xx程序按照xx協議去解析 ,?并不能知道你想要干什么 ,?當然也不能給你完成連接與登錄了 ,?這就是應用層的協議完成是事情.

三. TCP/IP協議?之?傳輸控制層

????????接著上面 ,?我們已經知道了應用層只是完成了各種應用程序之間通訊的一些協議 , 創建好了TCP連接并拿到了輸入輸出流 ,?就搞定了 ,?至于這些數據是怎么發出去的 ,?怎么走的 ,?從那一塊網卡進出的 ,?我們根本就沒有去管 ,?因為這些事情都統一的交給了系統內核的TCP/IP協議層了 , "傳輸控制層"?就是控制數據怎么傳輸 ,?以什么方式來傳輸的 ,?那么?"傳輸控制層"?的協議都有哪些呢?? 常見的就有TCP協議 , UDP協議 ,?我們這里只分析TCP協議.

什么是TCP協議?

????????簡單來說,TCP協議就是網絡通訊協議中的一種傳輸控制協議,TCP的工作原理是將消息或文件分解成更小的片段(稱為數據包),在通過Internet發送。然后,這些數據包由另一個TCP層接收,然后將該數據重組為完整的文件或消息。TCP還負責對數據流進行錯誤檢查,以確保數據的傳遞; 如果發現錯誤,則TCP重新傳輸數據包。這樣來確保不同節點之間的端到端數據傳輸。Internet協議提供用于傳輸數據的指令,同時TCP創建連接并確保將數據傳遞到正確的目標。這兩種協議通常是協同工作的,稱為TCP / IP協議.所以 , TCP協議是面向連接的 , 可靠的傳輸控制協議

這有引發一個新的問題 ,?既然TCP協議是面向連接的 ,?那么什么是連接?

? ? ? ? 這里的連接 ,?他肯定不是通過物理的連接吧 , 所以是虛擬的連接 ,?既然是虛擬的連接 ,?那就不要糾結"連接"這個詞了 ,?我們真實的問題是 , TCP連接 , 是通過什么形式來代表的連接??這里就引出了 "3次握手和4次分手"的過程了 ,?比如客戶端和服務端想要建立連接 ,?客戶端是要向服務端發送一個sync數據包 ,?表示想建立連接 , 那么服務端收到了客戶端發送的建立連接的請求?,?也回一個sync+akc數據包給客戶端 ,?sync也代表服務器想與客戶端建立連接 ,?akc表示確認收到了客戶端建立連接的請求 ,?這個時候 ,?才完成了2次握手 ,?服務端并不確定自己發給客戶端的sync+akc有沒有被客戶端正確的收到 ,?所以 ,?這時客戶端又給服務端回復了一個ack,表示確認收到了 ,?這時 ,?客戶端和服務端就完成了3次握手了 , 雙方都創建了為對方服務的資源 ,?這就是某種意義上的連接 ,?這里的為對方服務的資源就是我們上面演示HTTP協議時創建TCP連接見到的輸入輸出流文件描述符 ,?服務端的消息通過這個文件可以給到客戶端 ,?那么客戶端的消息也可以通過這個文件給到服務端 ,?這不就是真正意義上的連接了嗎.

簡單回答 ,?就是經過3次握手為對方開辟的資源 ,?就是連接.


socket

還有一個比較重要的東西 ,?一說到傳輸控制層 ,?除了上面聊的傳輸控制協議 TCP協議 , UDP協議 ,?還有一個概念叫socket ,?個人理解 ,?本質上socket還是TCP協議 ,?但是建立連接的方式不一樣 ,?我們來通過一個命令?netstat -natp?來找找socket的感覺 ,

這里就能看明白很多東西了,?有Proto列標識使用的協議 ,?有Recv-Q,Send-Q列標識發送接收的序列 ,?重點來了 ,?local Address和Foreign Address代表了本地地址和對端的地址,都是IP:Prot ,?這就是socket的概率 , 后面還State標識了socket狀態 ,?簡單了解一下這個狀態 ,?LISTEN?表示套接字正在監聽連接[調用listen后] ,?ESTABLISHED?表示已經3次握手 , 連接已建立 ,?CLOSE_WAIT 遠程套接字已經關閉:正在等待關閉這個套接字[被動關閉的一方收到FIN] ,?TIME_WAIT 這個套接字已經關閉,正在等待遠程套接字的關閉傳送[FIN、ACK、FIN、ACK都完畢,這是主動方的最后一個狀態,在過了2MSL時間后變為CLOSED狀態] ,?還有一些狀態 ,?不在這里展開聊 , PID/Program name標識進程ID和進程名稱在使用當前socket連接

這里我們來看第3行PID為873的sshd進程 , 它是我們現在遠程登錄服務器所使用的一個協議在linux系統上的一個服務進程 ,?它現在是LISTEN狀態 ,?表示它是在監聽狀態 ,?然后監聽的是22端口 ,?這個不是我們與服務器創建TCP連接后產生的 ,?它本身就一直在 , 下面還有2個sshd的socket連接進程 , PID:8138和PID:7688 ,?我們注意看著兩個的狀態 ,?都是表示已經3次握手 , 連接已建立 ,?那是因為我們現在確實是起了2個連接到服務器 ,?再看?local Address和Foreign Address的值 ,?服務器本地地址一樣 ,?但是客戶端的端口不一樣了 ,?說明客戶端是2個進程來連接了我們的服務器的22端口 ,?這個可以換例子去理解 ,?我們在使用瀏覽器去訪問網址www.huangcuigang.cn時 ,?可以打開多個標簽都訪問同一個網址 ,?但是這些瀏覽器的標簽其實都是不同的進程 ,?不同的端口去與服務器建立的連接進行通訊的 ,?這樣各自是各自的連接 ,?他們的數據才能發送到正確的端與端 .

聊到這里 ,?新的問題來了 ,?上面我們能看到 ,?服務端的22端口 ,?同時與我們的客戶端創建了2個TCP連接 ,?那么我們會不會有疑問 ,?同一個端口號可以創建的TCP連接會沒有上限 ,?如果有的話 ,?上限時多少個連接?

同一個端口號可以創建的TCP連接數有限制嗎?

答案是有 ,?連接數是有上限的 ,?我們可以使用ulimit -a?命令去查看一下 ,?ulimit -a是用來顯示目前資源限制的設定 ,?里面有很多 ,?我們沒必要展開都解釋 ,?我們看open files這個參數 ,?值是65535 ,?代表1個進程可以創建可以創建的文件描述符的數量 ,?換言之 ,?一個PHP程序可以創建變量的數量或者創建對象的數量 ,?一切皆文件 ,?socket也是文件 ,?用文件描述符 ,?打開真正的文件 ,?也用文件描述符 ,?打開一個設備 ,?設備被抽象成文件了也是一個文件描述符 ,?所以1個進程可以創建多少個連接 ,?受這個內核參數的約束的影響 ,?如果我們修改nginx的配置文件 ,?讓nginx一個進程可以創建10萬個連接 ,?那就不好意思了 ,?沒用 ,?因為受系統內核的限制 ,?一個nginx進程只能向系統申請到65535個文件描述符 ,?或者說65535個TCP連接所使用的文件描述符 .?當然我們的應用程序雖然受限制與系統內核 ,?但是系統內核本身也只是一段程序 ,?所以內核的限制值是可以改的 ,?不過65535本身已經是最大值了

我們打印當期進程的fd目錄 ,?可以看到 ,?一開始只有0 ,1 ,2 ,255 ,?一個進程必然會有0 ,1 ,2這個3個文件描述符 , 0?是標準輸入文件描述符 , 1?是標準輸出 , 2?是報錯輸出 ,?但是我孟創建了一個TCP連接 ,?使用8代表文件描述符后就多了一個為8的文件描述符了 ,?也就是說 ,?對于我們當前這個進程而言 ,?這fd目錄下最多可以有65535個文件描述符 ,?并且新打開一個SSH連接進程 ,?去查看自己進程的fd目錄 ,?是沒有文件描述符8的

,

所以 ,?傳輸控制層還有一個重要的東西 ,?那就是斷開連接 ,?釋放資源 ,?本身系統的可用連接數是有限的 ,?斷開連接就是 4?次分手的過程

TCP/IP協議?之?傳輸控制層?的?總結:

? ? ? ? 我們這里分析了TCP協議 ,?對3次握手4次分手有了一個宏觀的概念 ,?傳輸控制層只創建了傳輸控制包 ,?重點在控制 ,?傳輸控制層本身也完成不了傳輸數據包給別人 ,?所以下面才有其他的層

四. TCP/IP協議?之?網絡層

? ? ? ? 接著上面傳輸控制層 ,?傳輸控制層本身是傳輸不了數據包的 ,?數據包的傳輸還得交給網絡層 ,?聊到網絡層 , IP協議就出現了 ,?那么先提一個問題 ,

IP是干什么的 , IP是為了解決什么問題的 ??

IP是用來尋址的 , 解決端到端的問題的 ,?互聯網上那么多計算機 ,?沒有IP誰能知道數據要怎么傳輸什么地址去?

IP地址,掩碼,網關分別的作用?

IP地址里面包含兩個東西 ,?一個叫做"網絡號" ,?一個叫做"主機號","網絡號"用于定位到區域,也就是我們常說的局域網" , "主機號"用于定位到局域網的主機 ,?在一段IP地址中怎么去區分哪些是代表"網絡"的 ,?哪些是代表"主機"的 ??這就跟我們的掩碼有關系了 ,?一說算法就知道了 , IP地址是點分字節 ,?點分字節就是兩點之間放的是一個字節可以表示的10進制數 , 1個字節由8個2進制位組成 ,?這8個2進制位從全0到全1的演變過程 ,?它能表示的10進制的數的范圍是0到255 ,?那么我們來看掩碼的特征"255.255.255.0" , "255"這個字節為全1,"0"這個字節為全0 ,?我們的IP地址"192.168.0.100"的每個點分字節也是代表了某種0和1的二進制組合 ,?那么掩碼和ip做的事情就是 ,?用IP地址和掩碼做二進制的"按位與運算"后會得到一個數 ,?切割后產生網絡號和主機號 ,?也就是我們的IP地址.

那么網關是起到什么作用呢??互聯網中有很多的計算機 ,?那么每個計算機訪問到另一個計算機就需要有網關作為一個橋梁來連接了 ,?這里面有一個機制叫做"下一跳"機制 ,?英文原文叫"Nxet dump" ,?我們訪問本機電腦訪問網址www.huangcuigang.cn ,?在IP尋址時 ,?通過網關發現網址的IP地址不是我們同一個網關內的設備 , "下一跳"到網關的上級網關 ,?比如是路由器 ,?路由器的網關尋址發現也不是同一個路由器下的設備 ,?又"下一跳"到路由器服務商的網關去找 ,?就這樣直到找到為止 ,?所以叫"下一跳"機制

我們來看一個有意思的東西 ,?使用route -n命令查看機器的如有表 ,?這里面有des描述 ,?有Gateway網關 ,?還有Genmask掩碼 ,?這里有3條配置 , 當我們ping?www.huangcuigang.cn時 ,?網絡會從DNS去解析回IP地址是47.111.242.7,這個IP使用路由表的那一條數據的掩碼能匹配上??我們不會用二進制按位與的算法就看des描述字段就行 ,?能與誰匹配上 ??很明顯169.254.0.0和172.16.48.0都匹配不上 ,?所有IP地址使用掩碼0做二進制按位與運算后都為0 ,?所以能匹配上第1條路由配置 ,?那么就得到了下一跳的網關地址172.16.63.253 , ping?www.huangcuigang.cn這個網絡請求的數據包就給到下一跳的網關地址172.16.63.253去處理了


TCP/IP協議?之?網絡層?的?總結:

網絡層的主要工作就是用來完成下一跳機制的 ,?訪問本機局域網的IP地址時 ,?根據子網掩碼可以匹配出路由規則 ,?網關地址為0.0.0.0 ,?則代表不需要下一跳網關 ,?就在本機局域網內尋找主機即可 ,?如果訪問的IP地址為外網地址,?那么根據路由配置只能使用子網掩碼0.0.0.0做二進制按位與運算后匹配上 ,?并且得到下一跳網關地址 .?數據包交給下一跳網關 ,?進入鏈路層的工作來完成數據包在各個網關中跳來跳去并正確的到達正確的主機

五. TCP/IP協議?之?鏈路層

? ? ? ? 鏈路層的鏈字就比較有意思了 ,?因為它是一個一個的節點鏈起來的 ,?所以才能這個點不行就跳到下一個點去 , 每層都有協議 ,?鏈路層有個ARP協議?,?簡單來說 ,?就是我們通過ARP協議 ,?把要訪問的IP地址廣播出去 ,?局域網內相同IP地址的主機收到廣播后回復消息 ,?然后就找到了對應的主機了 ,?舉個例子 ,?我們當前主機去訪問www.huangcuigang.cn ,?請求的數據包下一跳到了網關100.xxx.xxx.100 ,?網關100.xxx.xxx.100?中還是根據IP地址子網掩碼去匹配 ,?匹配不上繼續把數據包下一跳給下一個網關101.xxx.xxx.100 ,?根據IP地址和子網掩碼能匹配上 ,?說明IP地址已經找到了對應的局域網了 ,?我們根據ARP協議再廣播一個www.huangcuigang.cn的IP地址101.xxx.xxx.200 ,?局域網內101.xxx.xxx.200收到消息后立即回復一個消息 ,?就正確的找到www.huangcuigang.cn的所在主機了

到這里了 ,?我們總的來理一下邏輯 ,?想要把一個請求頭發出去 , 要做的那些事情 ,?應用層根據HTTP協議去封裝請求的數據 ,?傳輸控制層要建立TCP連接 ,?建立TCP連接的時候就要先發送第1次握手的包 ,?發送第1次握手的包就要走網絡層找路由條目的下一跳網關 ,?找到路由條目的下一跳地址后還得去看鏈路層有沒有下一跳網關地址的網卡硬件地址 ,?沒有的話還要觸發ARP協議去請求回來 ,? 最終到"物理層"那些電啊光啊的硬件的東西了 ,?這樣第1次握手的包才能到達目標地址 ,?反反復復的這樣才能建立3次握手建立TCP連接

附學習視頻地址:https://www.bilibili.com/video/BV1ai4y1s7sG?p=14

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,565評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,115評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,577評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,514評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,234評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,621評論 1 326
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,641評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,822評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,380評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,128評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,319評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,879評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,548評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,970評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,229評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,048評論 3 397
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,285評論 2 376