1. TCP/IP 網絡通信圖示
理解:
網絡通信就好比送快遞,商品外面的一層層包裹就是各種協議,協議包含了商品信息、收貨地址、收件人、聯繫方式等,然後還需要配送車、配送站、快遞員,商品才能最終到達用戶手中。
快遞運輸流程: 快遞員攬件-> 交給配送站 -> 運輸到目的地的配送站 -> 快遞員配送 (快遞員負責把包裹轉發到各個配送站,配送站根據收穫地址裏的省市區,確認是否需要繼續轉發到其他配送站,當包裹到達了目標配送站以後,配送站再根據聯繫方式找到收件人進行派件 )
- 配送車就是物理介質,
- 配送站就是網關,
- 快遞員就是路由器,
- 收貨地址就是IP地址,
- 聯繫方式就是MAC地址。
2. TCP/IP模型分層:(自上而下)
2.1 TCP/IP 模型應用
網絡分層 | 通信方式 | 協議與實現方式 | 應用 |
應用層
|
數據通信
|
WWW、FTP、Email、HTTP等協議 | 規定應用程序的數據格式 |
傳輸層
|
端口通信
|
TCP、UDP | 端口層; IP+端口 = 套接字(網絡應用開發) |
網絡層
|
IP通信
|
IP協議(IPv4、IPv6) ARP協議、路由 |
定義了IP地址,網絡主機通信; 判斷通信雙方是否爲同一子網等 |
鏈接層
|
Mac通信
|
以太網、ARP協議、廣播 | 定義了主機身份-MAC地址 局域網通信;確定了0和1的分組方式 |
物理層
|
物理通信
|
電纜、光釺、無線電波等 | 規定了0和1的電氣特性,並負責傳送; |
2.2 TCP/IP 模型與OSI 模型對比
OSI | TCP/IP |
應用層 | 應用層 |
表示層 | |
會話層 | |
傳輸層 | 傳輸層(主機到主機) |
網絡層 | 網絡層 |
數據鏈路層 | 數據鏈路層 |
物理層 | 物理層 |
3. 數據包大小理解
4. 第一層:【物理層】物理介質
物理介質就是把電腦連接起來的物理手段,常見的有光纖、雙絞線,以及無線電波,它決定了電信號(0和1)的傳輸方式,物理介質的不同決定了電信號的傳輸帶寬、速率、傳輸距離以及抗干擾性等等。
TCP/IP協議棧分爲四層,每一層都由特定的協議與對方進行通信,而協議之間的通信最終都要轉化爲 0 和 1 的電信號,通過物理介質進行傳輸才能到達對方的電腦,因此物理介質是網絡通信的基石。
5. 第二層:【鏈接層】以太網協議(Ethernet)
作用:對電信號進行分組並形成具有特定意義的數據幀,然後以廣播的形式通過物理介質發送給接收方
定義:以太網規定,一組電信號構成一個數據包,叫做”幀”(Frame)。每一幀分成兩個部分:標頭(Head)和數據(Data)。
“標頭”包含數據包的一些說明項,比如發送者mac地址、接收者mac地址、數據類型等等;”數據”則是數據包的具體內容。“標頭”的長度,固定爲18字節(“首部”固定爲14個字節,包含了目標MAC地址、源MAC地址和類型,後4個字節稱爲“尾部”,表示數據幀校驗序列,用於確認數據包是否損壞)。”數據”的長度,最短爲46字節,最長爲1500字節。因此,整個”幀”最短爲64字節,最長爲1518字節。如果數據很長,就必須分割成多個幀進行發送。
5.1 以太網協議中的數據包怎麼傳輸的呢?
以太網協議通過對電信號進行分組並形成數據幀,然後通過物理介質把數據包發送給對方。
其中,通過網絡適配器(網卡)的MAC地址,確認對方身份(接收地址) ,然後以太網採用廣播的形式,把數據包發給該子網內所有主機,子網內每臺主機在接收到這個包以後,都會讀取首部裏的目標MAC地址,然後和自己的MAC地址進行對比,如果相同就做下一步處理,如果不同,就丟棄這個包。
6. 【鏈接層】ARP協議(address resolution protocol)
ARP協議,地址解析協議。通過IP地址獲取對方的物理地址 (侷限於同一個子網中)
- 工作方式:
- ARP先發送包含對方IP信息的ARP請求數據包,
- 該包在數據鏈路層再次包裝,生成以太網包,
- 以太網廣播給子網內的所有主機,
- 主機去除標頭的IP地址,和自己的IP進行比較,
- IP相同的主機,做出回覆,報告自己的MAC地址;其他IP不同的,則丟棄該包。
- 本機ARP獲取對方MAC的同時,將IP與MAC的映射儲存於ARP緩存中,以便下次訪問。
7.第三層:【網絡層】IP協議、ARP協議、路由協議
主要工作: 定義網絡地址,區分網段,子網內MAC尋址,對於不同字網的數據包進行路由
- IP協議: 使用IP地址,使我們能夠區分2臺主機是否同屬於一個網絡, (IPV4、IPV6)
- arp協議: (在TPC/IP 模型中,arp協議屬於網絡層)
- 路由協議:通過IP協議判斷兩臺主機是否在同一個子網中: 在,則使用ARP協議查詢對方的MAC,然後廣播給該主機發送數據包;不在,則以太網會將數據包轉發給本子網的網關進行路由。網關是互聯網上子網與子網之間的橋樑,所以網關會進行多次轉發,最終將該數據包轉發到目標IP所在的子網中,然後再通過ARP獲取目標機MAC,最終也是通過廣播形式將數據包發送給接收方。
8. 第四層:【傳輸層】UDP協議、TCP協議
作用: 定義了端口,實現端口到端口的通信 :數據包到達目標主機後,根據端口號找到對應應用程序
UDP協議:給每個應用程序標識身份,UDP協議定義了端口,同一個主機上的每個應用程序都需要指定唯一的端口號,並且規定網絡中傳輸的數據包必須加上端口信息
UDP數據包: 首部+數據, 首部8個字節,主要包含源端口、目標端口;數據最大爲65527 (65535-8)個字節
UDP缺點: UDP無確認機制,數據包一旦發出,無法知道對方是否收到,可靠性較差,因此誕生了TCP協議
TCP協議: 傳輸控制協議,面向連接、可靠、基於字節流的通信協議。 --> TCP就是有確認機制的UDP協議 : 每發出一個數據包都要求確認,有一個數據包丟失,則收不到確認,發送方需要重新發送該數據包。
UDP數據包: 首部+數據,TCP數據包理論上可以無限長,爲了保證網絡效率,原則上不會超過IP包的長度(65515)
TCP缺點: 相比於UDP,TCP實現過程複雜,消耗連接資源多,傳輸速度慢。
8.1 TCP 三次握手 (建立TCP連接)
理解:
主機A:我想發數據給你,可以麼?
主機B:可以,你什麼時候發?
主機A:我馬上就發,你準備接收!
(2)第二次握手:Server收到數據包後由標誌位SYN=1知道Client請求建立連接,Server將標誌位SYN和ACK都置爲1,ack=J+1,隨機產生一個值seq=K,並將該數據包發送給Client以確認連接請求,Server進入SYN_RCVD狀態。
(3)第三次握手:Client收到確認後,檢查ack是否爲J+1,ACK是否爲1,如果正確則將標誌位ACK置爲1,ack=K+1,並將該數據包發送給Server,Server檢查ack是否爲K+1,ACK是否爲1,如果正確則連接建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸數據了。
8.2 TCP 四次揮手:(斷開連接)
簡述:
主機A:最後一條數據ACK收到沒?收到我就斷開(FIN)了。
主機B:嗯,數據ACK收到了 。
主機B: 數據成功接收,合作愉快!(表示可以斷開)
主機A:合作愉快!(確認並斷開)
- 第一次揮手:client向和Server終止連接,發送一個FIN+ACK(seq=a,ack=b)的數據段ACK表示對於上次傳輸的數據段的確認,FIN表示請求終止和Server的連接。
- 第二次揮手:Server收到了Client的請求端口連接之後,響應一個ACK(seq=b,ack=a+1)的數據段a+1表示對於client的SYN報文的確認。
- 第三次揮手:Server也想終止連接,也會發送一個FIN+ACK(seq=b,ack=a+1)的數據段FIN表示Server想終止連接,a+1表示對於client的SYN報文的確認,這兩個報文相當於一個報文。
- 第四次揮手:Client收到Server的ACK報文和FIN+ACK報文之後,會響應一ACK(seq=a+1,ack=b+1),ack=b+1,表示對於Server的FIN報文的確認。
9.第五層【應用層】
作用:定義數據格式並按照對應的格式解讀數據。如: HTTP、FTP、SMTP等 (數據鏈路層、網絡層、傳輸層的支持,使數據可以從一臺主機上的應用程序傳輸到另一臺主機上的應用程序。但傳過來的是字節流,不能很好的被程序識別,操作性差 )
9.1【應用層】【DHCP協議】新入網的機器是如何能上網的?
- 方法1. 靜態IP地址:管理員手動添加IP地址、子網掩碼、網關地址、DNS服務器地址
- 方法2. 動態獲取IP: 通過DHCP協議,動態獲取IP地址、子網掩碼、網關地址、DNS服務器地址
1. 廣播發送給子網內所有機器關於請求IP的消息,通過網絡層,DHCP接收到該消息,其他機器丟棄該包
2. DHCP處理請求,分配IP,返回“DHCP響應”的數據包
10. 訪問google網頁時,發生了什麼?
1)打開網頁 | 發送一個網頁請求的數據包 |
2)DNS | 解析域名,得到google的IP |
3)子網計算 | 子網掩碼,判斷是否同一子網 |
4)不同子網 | 請求網關,準備向外轉發 |
5)應用層:HTTP協議 | 封裝HTTP數據包 |
6)傳輸層:TCP協議 | 封裝TCP數據包:指定端口-->獲取本地端口,指定google端口 |
7)網絡層:IP協議 | 封裝IP數據包:指定雙方IP(本機和google) |
8)鏈接層:Ethernet協議 | 封裝以太網數據包:指定MAC->本機MAC,本機的網關MAC(ARP獲取) |
9)鏈接層:Ethernet協議 | 分割IP數據包的數據,封裝成多個以太網數據包,形成數據幀,採用廣播形式,通過傳輸介質,發送給對方主機 |
10)網關通信 | 多個網關轉發,到達google的服務器 |
11)服務器處理 | 接收以太網數據包羣(數據幀) |
拼接成完整的TCP數據包 | |
解析出HTTP數據包 | |
得到HTTP請求 | |
做出HTTP響應,通過TCP協議返回給本機 | |
12)本機處理 | 收到HTTP請求,顯示網頁,完成通信 |