OSI七層模型 | TCP/IP協議族層次 | 功能 | TCP/IP協議族 |
應用層 | 應用層 | 電子郵件、遠程傳輸、文件傳輸 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet |
表示層 | 數據格式化、代碼轉換、數據加密 | 沒有協議 | |
會話層 | 解除或創建別的節點的聯繫 | 沒有協議 | |
傳輸層 | 傳輸層 | 提供端對端的接口,處理端到端的通訊細節 | TCP,UDP |
網絡層 | 網絡層 | 數據在網絡中分組傳輸,網絡層處理分組在網絡中的活動 | IP,ICMP,RIP,OSPF,BGP,IGMP |
數據鏈路層 | 鏈路層 | 傳輸有地址的幀和錯誤檢測功能 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理層 | 以二進制數據形式在物理媒體上傳輸數據 | ISO2110,IEEE802,IEEE802.2 |
送貨汽車
。司機
,他們駕駛着汽車,將打包好的貨物(數據幀)從一個城市(物理節點)運輸到另外一個城市。跟單員
。負責任的跟單員(使用 TCP 協議)
會保證數據
送到客戶手上,若是送不到(須要三次握手,四次揮手)
就讓公司再發一次。不負責任的跟單員(使用 UDP 協議)
層只管將快遞送到客戶指定的地方,無論快遞是否送到客戶手上。調度員
。他管理着此次物流的相關的信息。例如此次客戶要發不少數據,發到哪,究竟是一車一車發、仍是用輪船一次運過去。這些都是他的職責。而運完以後,相關信息(鏈接)也能夠被銷燬了,這也是調度員的職責。打包員
。若是快遞(數據)太臃腫,他會在不破壞快遞的狀況下壓扁(壓縮)它。若是客戶注重安全線,全能的快遞公司還能用密碼箱( SSL/TLS)打包快遞再快送。固然,打包員會肯定,目的地快遞站的拆包員,能無損地拆開包裹,將快遞交給用戶。收件員
,當客戶(應用)打電話(發起請求)給收件員(應用層)時,收件員能夠根據用戶的不一樣需求提供不一樣的服務(不一樣協議),好比隔天送達、指定時間送達等等。TCP/IP
從上往下走的時候,會分層的傳輸進行通信。應用層
到鏈路層
,接收端是從鏈路層
往上到應用層
取數據。識別
。數據包
包裝爲知足該層協議的數據包
數據包
解析爲知足上層協議的數據包
二進制包
,只要該層能處理就不須要
按照嚴格意義上的分層解析二進制包
的時候,你能夠在傳輸層包一層tcp頭
,也能夠不包,直接交給應用層解析首部
。首部
中包含了該層必要的信息,如發送的目標地址以及協議相關信息。首部
,所要發送的內容爲數據。在下一層的角度看,從上一層收到的包所有都被認爲是本層的數據。在上面咱們就能直觀地看到,每一層的數據以外,其實包了不少層協議的首部node
Wireshark
給咱們解析出來的TCP/IP協議族的四層。鏈路
、網絡
、傳輸
、應用
硬件地址
,物理層才能將數據包經過路由傳至目標地址。怎麼經過IP地址去獲取硬件地址呢?
75s
,這個時間其實通常就是TCP鏈接
請求的超時時間。ARP
回答未返回,那麼任何TCP
報文段都不會發送。高速緩存
。(每一個已經找到的mac地址都會在arp中緩存
)ARP
。最大傳輸單元。算法
傳輸單元
。MTU大小
。MTU
,就會漏傳
。短板原理
,根據最小的MTU
來設置IP數據包大小。IP地址
,在內網(局域網)中經過廣播
的方式,去詢問對應IP的以太網地址
。75s
,就不會繼續廣播
。MTU
控制咱們傳輸的大小。局域網
,屬於公網
,那麼咱們還經過ARP來尋找mac地址
嗎?若是是這樣,那麼咱們將會給每一個公網
發送一個廣播
,那得有多恐怖
,因此ARP只存在局域網
。DNS解析
獲得對應的網絡IP地址
,再經過找上層的路由
去尋找,此時路由發現不是局域網
,將會在往上尋找ISP(Internet Service Provider)
,最後找到對應的mac地址
。上面說到的路由,和它息息相關的就是咱們的網絡層,最爲
核心
的一層。windows
10進制x4個字節的數目
。由於4位最大的個數爲1111,即15,因此首部最長爲15x4,60字節
。無需關注
。65536
。數據報
。暫時不關注
。路由數
(若是不設置這個,就會無限回傳)。上層協議
是什麼。公網IP
,此時咱們沒法用ARP
找到遠端mac地址
。mac地址
。數據鏈路層
的以太網首部
放的是本機mac地址
和目標mac地址
。mac地址
和路由mac地址
。IP地址
和源IP地址
則是包在IP首部之中,最後交給路由,讓路由處理。傳輸
的目的,要找到目的IP的主機地址
,並最終到達該主機。因此IP數據報通過的每個節點
都至關因而一個中轉站
,也就是路由
。路由選擇
。
動態選路
:根據當前網絡情況
,權值
,選出一條最佳路徑。靜態選路
:以手工方式
爲每臺路由器的路由選擇表添加路由。直接送達
目標主機(相同內網下)。轉發
至該網絡存在的路由器上,再由其統一處理。192.168.0.100
,此時會匹配第一條
,他的Gateway
就是目標的mac地址
,en0是網卡
,咱們能夠經過ifconfig
查看(windows用ipconfig)192.168.0.103
,此時路由表沒有對應IP地址,則會去尋找相同網絡號
,此時找到第二條,他的Gateway
是link#8
至關於廣播
出去。192.168.1.2
,此時沒法在路由表中匹配,則走default
,對應第三條,他的Gateway
對應192.168.0.1
,192.168.0.1
其實就是咱們的路由器
。上面有提到判斷
網絡號
相同,這個咱們怎麼來作呢?緩存
類別 | 最大網絡數 | IP地址範圍 | 最大主機數 | 私有IP地址範圍 |
---|---|---|---|---|
A | 126(2^7-2) | 0.0.0.0-127.255.255.255 | 16777214 | 10.0.0.0-10.255.255.255 |
B | 16384(2^14) | 128.0.0.0-191.255.255.255 | 65534 | 172.16.0.0-172.31.255.255 |
C | 2097152(2^21) | 192.0.0.0-223.255.255.255 | 254 | 192.168.0.0-192.168.255.255 |
細分
更小力度的網絡。子網地址
,能夠將原網絡分爲多個
物理網絡的一種機制
。類別 | 子網掩碼 |
---|---|
A | 255.0.0.0 |
B | 255.255.0.0 |
C | 255.255.255.0 |
與
運算(1&0=0;0&0=0;1&1=1)來獲得網絡號
,這裏的與
操做須要將IP地址轉爲二進制
在進行與
。從上面的圖,咱們能夠看出,每類地址的網絡分段安全
(255.0.0.0)
相與
,獲得結果兩個都是10.0.0.0
,這就是他們的網絡號,也正好符合圖中的前8位,10轉爲二進制就是00001010
172.16.0.0
。192.168.10.0
和192.168.0.0
。上面的題目都是在默認的子網掩碼之下,那麼若是咱們改了子網掩碼呢?服務器
255.255.255.0
相與
,此時網絡號分別爲,172.16.0.0
和172.16.1.0
,則不一樣。子網掩碼
,把咱們原本相同網段
的IP地址
,劃爲不通網段
的地址,這樣就細分
了網絡,有更多的物理網絡
。當咱們的MTU
最大傳輸單元(1500字節,去掉以太網首部,就是1480字節)
知足不了咱們的需求時,咱們就須要IP分片
(分紅一片片傳輸)。網絡
IP分片
時,該值被複制每個分片中,至關於每一個分片的id
。IP分片
時爲0,進行時爲1。IP分片
,前兩片末位都爲1,最後一片末位爲0。前後順序
。IP分片
時,只丟失一片
數據,也須要重傳
整個IP數據報。定時器
,過時
丟棄全部數據報片。一部分
。是否
成功送達目標地址,通知在發送過程中 IP 包被廢棄的具體緣由,改善
網絡設置等。TTL
,每通過一個路由器就會減1
,直到減到0時IP報就會被丟棄。丟棄
。traceroute
命令的原理就是經過ICMP超時消息來顯示發送主機到達特定主機以前經歷了多少路由器。解決IP層的痛點,是一種安全的協議,主要經過
鏈接
疏通了整一個通道,安全傳輸。併發
箭頭
:
SYN A1
來請求創建鏈接
,SYN就是synchronization(同步)
,並且此時A1是被傳在sequence(序列)
中的,此時服務端接收到客戶端傳來的A1
信號。迴應
客戶端我接收到了
,因此發送ACK A2(只是確認應答,因此只需在原有的A1+1=A2)
,這裏的ACK就是acknowledge(確認)
。而且請求客戶端創建鏈接
, 此時發送一個信號SYN B1
。確認應答
,告知服務端接收到了信號,因此發送ACK B2(由於上次推過來的SYN B1)
。箭頭
:
FIN C1
。迴應接收到了
,此時發送信號ACK C2
,客戶端已經關閉,可是服務器處於半關閉狀態(客戶端不能向服務器發送請求,服務器仍是能接受客戶端請求)
。FIN D1
。迴應接收到了
,此時發送信號ACK D2
,服務器也關閉。序列號
是按照順序
給發送數據的每個字節(8位字節)
都標上號碼的編號。接收端查詢接收數據TCP首部中的序列號
和數據的長度
,將本身下一步應該接收的序列號
做爲確認應答
返送回去。經過序列號
和確認應答號
,TCP可以識別是否
已經接收數據,又可以判斷是否須要接收,從而實現可靠傳輸。重發超時
是指在重發數據以前,等待確認應答到來的那個特定時間間隔。若是超過這個時間仍未收到確認應答,發送端將進行數據重發
。最理想的是,找到一個最小時間
,它能保證「確認應答必定能在這個時間內返回」。誤差
。將這個往返時間和誤差時間相加,重發超時
的時間就是比這個總和要稍大一點的值。整數倍
。不過,最初其重發超時
的默認值通常設置爲6秒
左右。再次發送
。此時,等待確認應答的時間將會以2倍、4倍
的指數函數延長
。強制關閉鏈接
。而且通知應用通訊異常強行終止
。TCP
鏈接的同時,也能夠肯定發送數據包的單位,咱們也能夠稱其爲「最大消息長度」(MSS)
。最理想的狀況是,最大消息長度正好是IP中不會被分片處理的最大數據長度。TCP
在傳送大量數據時,是以MSS
的大小將數據進行分割發送。進行重發時也是以MSS
爲單位。MSS
在三次握手的時候,在兩端主機之間被計算得出。兩端的主機在發出創建鏈接的請求時,會在TCP
首部中寫入MSS
選項,告訴對方本身的接口可以適應的MSS
的大小。而後會在二者之間選擇一個較小的值投入使用。TCP
以1個段爲單位,每發送一個段進行一次確認應答的處理。這樣的傳輸方式有一個缺點
,就是包的往返時間越長通訊性能
就越低。窗口
這個概念。確認應答再也不是以每一個分段
,而是以更大的單位
進行確認,轉發時間將會被大幅地縮短
。也就是說,發送端主機,在發送了一個段之後沒必要要
一直等待確認應答,而是繼續發送
。緩衝區
,經過對多個段同時進行確認應答的功能。鏈接
的概念,在一個TCP鏈接中,僅有兩方彼此通訊
。數據處理
。流量控制
(Node.js中的流)我會留到下一篇再講,同時我會結合
node
來說解其中的http
的應用和原理,敬請期待。tcp