網(wǎng)絡(luò)基礎(chǔ)

網(wǎng)絡(luò)

TCP/IP四層網(wǎng)絡(luò)模型

  • 數(shù)據(jù)鏈路層 - 以太網(wǎng)協(xié)議
  • 網(wǎng)絡(luò)層 - IP 協(xié)議
  • 傳輸層 - TCP協(xié)議
  • 應(yīng)用層 - HTTP 協(xié)議

OSI 七層網(wǎng)絡(luò)模型

  • 應(yīng)用層
  • 表示層
  • 會話層
  • 傳輸層
  • 網(wǎng)絡(luò)層
  • 數(shù)據(jù)鏈路層
  • 物理層

1.1 物理層

電腦之間需要聯(lián)網(wǎng)脓杉,都需要插一根網(wǎng)線,美國與中國聯(lián)網(wǎng)是海底的光纜冲九,這里的光纜與網(wǎng)線都屬于物理層剖膳,將各個電腦連接起來,形成一個網(wǎng)絡(luò),這就是物理層的含義榄鉴,物理層負責傳輸 0 和 1 的電路信號。

1.2 數(shù)據(jù)鏈路層

物理層將各個電腦連接起來了蛉抓,還傳輸 0 和 1 的電路信號庆尘,但是這些 01 的含義和規(guī)則并沒有統(tǒng)一規(guī)定,很多年前巷送,各個公司都定義自己的電路信號規(guī)則减余,為了互聯(lián)互通,就誕生了以太網(wǎng)協(xié)議惩系。

一組 01 電路信號是一個數(shù)據(jù)包,叫一個幀 (frame) 如筛,每個幀分成兩個部分堡牡,標頭(head) 和數(shù)據(jù)(data) ,標頭包含一些說明性的東西杨刨,比如發(fā)送者晤柄,接受者,數(shù)據(jù)類型之類妖胀。

以太網(wǎng)協(xié)議規(guī)定芥颈,接入網(wǎng)絡(luò)的所有設(shè)備惠勒,都必須有一個網(wǎng)卡,以太網(wǎng)協(xié)議里的數(shù)據(jù)包爬坑,在數(shù)據(jù)鏈路層傳輸?shù)臄?shù)據(jù)包纠屋,必須從一個電腦的網(wǎng)卡,傳輸?shù)搅硪粋€電腦的網(wǎng)卡盾计,而這個網(wǎng)卡的唯一標識就是 mac 地址售担。每塊網(wǎng)卡出廠的時候,就有一個全球唯一的 mac 地址署辉,48 bit 即 12 位 16進制數(shù)表示族铆,前 6 位是網(wǎng)卡廠商編號,后 6 為是網(wǎng)卡流水號哭尝。

在 windows 中哥攘,ipconfig /all可以查看物理地址,就是 mac地址

C:\Users\trac>ipconfig /all

# VMware 的虛擬網(wǎng)卡
以太網(wǎng)適配器 VMware Network Adapter VMnet1:
   描述. . . . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet1
   物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-01
   IPv4 地址 . . . . . . . . . . . . : 192.168.253.1(首選)

# VMware 的虛擬網(wǎng)卡
以太網(wǎng)適配器 VMware Network Adapter VMnet8:
   描述. . . . . . . . . . . . . . . : VMware Virtual Ethernet Adapter for VMnet8
   物理地址. . . . . . . . . . . . . : 00-50-56-C0-00-08
   IPv4 地址 . . . . . . . . . . . . : 192.168.252.1(首選)

# 電腦上的真網(wǎng)卡
以太網(wǎng)適配器 以太網(wǎng):
   描述. . . . . . . . . . . . . . . : Intel(R) Ethernet Connection (7) I219-V
   物理地址. . . . . . . . . . . . . : 30-9C-23-E8-C1-7E
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.107(首選)

# Hyper-V 的虛擬網(wǎng)卡
以太網(wǎng)適配器 vEthernet (Default Switch):
   描述. . . . . . . . . . . . . . . : Hyper-V Virtual Ethernet Adapter
   物理地址. . . . . . . . . . . . . : 00-15-5D-D5-CA-E6
   IPv4 地址 . . . . . . . . . . . . : 172.27.128.1(首選)

通過去網(wǎng)站 https://mac.51240.com 查詢這些網(wǎng)卡材鹦,電腦上的物理網(wǎng)卡廠商是 Micro_Star 微星逝淹,與電腦主板的廠商一致,Hyper-V 的虛擬網(wǎng)卡的廠商是 Microsoft 微軟侠姑,VMware 的虛擬網(wǎng)卡的廠商是 VMware创橄。

在以太網(wǎng)中傳輸數(shù)據(jù)包時,必須指定接受者的 mac 地址才能傳輸數(shù)據(jù)莽红。

以太網(wǎng)的數(shù)據(jù)包從一個 mac 地址發(fā)送到另一個 mac 地址并不是精準推送的妥畏。如果一個電腦發(fā)一個數(shù)據(jù)包出去,會廣播給局域網(wǎng)內(nèi)的所有電腦設(shè)備的網(wǎng)卡安吁,然后每臺電腦都從數(shù)據(jù)包里獲取接收者 mac地址醉蚁,跟自己的 mac 地址進行對比,如果一致鬼店,則說明是發(fā)送給自己的數(shù)據(jù)包网棍。

上面這種廣播的方式,僅僅針對一個子網(wǎng)(局域網(wǎng))內(nèi)的電腦進行廣播妇智,當然也不可能廣播給所有電腦的網(wǎng)卡滥玷。

1.3 網(wǎng)絡(luò)層

通過以太網(wǎng)發(fā)送數(shù)據(jù)包,會廣播給子網(wǎng)(局域網(wǎng))內(nèi)所有電腦巍棱,那么如何知道哪些電腦是在一個子網(wǎng)(局域網(wǎng))內(nèi)呢惑畴?另外在世界范圍內(nèi),不可能通過廣播的方式航徙,從千萬計的電腦里找到目標 MAC地址的電腦而不超時如贷,此時就得依靠 ip 協(xié)議

這就得依靠網(wǎng)絡(luò)層,有一套 ip 地址,ip地址就可以讓我們區(qū)分哪些電腦是一個子網(wǎng)的杠袱。

網(wǎng)絡(luò)層里有 ip 協(xié)議尚猿,ip 協(xié)議定義的地址就是 ip 地址。 ip 地址有 ipv4 和 ipv6 兩個版本楣富,目前廣泛使用的 ipv4凿掂,由 32 位 bit 組成,一般用 4 個十進制數(shù)字表示菩彬,范圍從 0.0.0.0 到 255.255.255.255 缠劝。

每臺計算機,都會分配一個 ip 地址骗灶,ip 地址的前 3 個數(shù)字惨恭,代表了子網(wǎng),后 1 個數(shù)字表示子網(wǎng)內(nèi)的電腦耙旦。如果幾臺電腦是一個子網(wǎng)的脱羡,那么前面的 3 個數(shù)字是一樣的。(這里只是舉例)

準確的來說免都,判斷是否為一個子網(wǎng)锉罐,是將 ip 地址與子網(wǎng)掩碼進行與運算,如果結(jié)果相等绕娘,則說明在同一個子網(wǎng)脓规。

將下面的設(shè)備的 ip 地址與子網(wǎng)掩碼做與運算,可得所在的子網(wǎng)是 192.168.1.0险领,如果其他設(shè)備的計算結(jié)果也是192.168.1.0侨舆,則說明在一個子網(wǎng)中,可以通過廣播的方式使用以太網(wǎng)協(xié)議向這臺電腦發(fā)送數(shù)據(jù)包

IPv4 地址 . . . . . . . . . . . . : 192.168.1.107
子網(wǎng)掩碼  . . . . . . . . . . . . : 255.255.255.0
默認網(wǎng)關(guān). . . . . . . . . . . . . : 192.168.1.1

但是如果發(fā)現(xiàn)接收者不在當前子網(wǎng)內(nèi)绢陌,那么就不能通過廣播來發(fā)送數(shù)據(jù)包挨下,則將數(shù)據(jù)包發(fā)送到默認網(wǎng)關(guān)(路由器)通過路由器來發(fā)送數(shù)據(jù)包。路由器負責將多個子網(wǎng)進行連接脐湾,比如家里的路由器臭笆,其實就是將家里的子網(wǎng)發(fā)送的數(shù)據(jù)包路由到你要訪問網(wǎng)站的所在子網(wǎng),進行通信秤掌。當然愁铺,路由器的一次轉(zhuǎn)發(fā),可能并不能直接找到要訪問網(wǎng)站的子網(wǎng)闻鉴,經(jīng)過多次轉(zhuǎn)發(fā)后茵乱,若當前路由器ip 與訪問網(wǎng)站ip 在一個子網(wǎng)內(nèi),則說明找到了目標子網(wǎng)椒拗,然后將數(shù)據(jù)包廣播給當前子網(wǎng)內(nèi)的所有網(wǎng)卡設(shè)備。(路由器的轉(zhuǎn)發(fā)規(guī)則是什么?)

舉個例子蚀苛,一個快遞從美國洛杉磯發(fā)出在验,要發(fā)給中國浙江杭州市A小區(qū)X先生,快遞公司需要將快遞多次轉(zhuǎn)發(fā)堵未,從洛杉磯 -> 紐約 -> 北京 -> 杭州 -> A小區(qū)腋舌,根據(jù)郵編指定轉(zhuǎn)發(fā)路線,然后到了 A 小區(qū)之后渗蟹,就可以用廣播的形式块饺,快遞員大喊一聲 “X先生取快遞了”,雖然小區(qū)內(nèi)所有人都聽到了快遞員的喊聲雌芽,但只有 X 先生會收取快遞并打開確認授艰。

網(wǎng)關(guān)其實就是路由器的一種,運作在網(wǎng)絡(luò)層世落,大家可以把路由器上的 ip 地址認為是網(wǎng)關(guān)淮腾,路由器其實是工作在網(wǎng)絡(luò)層的設(shè)備。我們使用ipconfig就可以看到默認網(wǎng)關(guān)屉佳,就是路由器的 ip 地址(一般為 192.168.1.1)谷朝,是子網(wǎng)與外網(wǎng)連接的設(shè)備。

交換機時工作在數(shù)據(jù)鏈路層的武花,通過 mac 地址來尋址和傳輸數(shù)據(jù)包的圆凰,主要用在局域網(wǎng)內(nèi)的通信,一般你假設(shè)一個局域網(wǎng)体箕,里面的電腦通信就是通過數(shù)據(jù)鏈路層發(fā)送數(shù)據(jù)包专钉,通過mac地址來廣播的,廣播就是通過交換機這個設(shè)備來吧數(shù)據(jù)廣播到局域網(wǎng)內(nèi)的其他機器上干旁。

路由器是工作在網(wǎng)絡(luò)層的驶沼,通過 ip 地址尋址和傳輸數(shù)據(jù)包的,一般用于連接英特網(wǎng)争群。

LAN local area network 是局域網(wǎng)回怜,WAN wide area network 是廣域網(wǎng),WLAN wireless area network 是無線局域網(wǎng)换薄,也就是 wifi玉雾,在局域網(wǎng)內(nèi),可以通過 wifi 無線聯(lián)網(wǎng)轻要。

家里的路由器包含了交換機和路由的兩個功能复旬,如果是與局域網(wǎng)的內(nèi)的設(shè)備連接,就把網(wǎng)線插在 LAN 端口冲泥,如果是與因特網(wǎng)連接驹碍,就把網(wǎng)線插在 WAN 端口壁涎。

1.4 傳輸層

通過 ip 協(xié)議解決了跨局域網(wǎng)的通信問題,但是在一臺電腦上志秃,有多個程序使用一個網(wǎng)卡進行通信怔球,那么如何區(qū)分不同程序的數(shù)據(jù)呢?

這的依靠端口浮还,發(fā)送一個數(shù)據(jù)包到指定電腦(ip)的一個網(wǎng)卡的某個端口竟坛,然后這臺電腦中會有程序來監(jiān)聽這個端口,如 Tomcat 監(jiān)聽 8080钧舌,即使用端口來區(qū)分不同程序的數(shù)據(jù)包担汤。端口范圍是[0~65535],其中[0~1023]被系統(tǒng)占用洼冻。

  • 數(shù)據(jù)鏈路層崭歧,基于以太網(wǎng)協(xié)議,進行局域網(wǎng)內(nèi)的尋址與通信碘赖;

  • 網(wǎng)絡(luò)層驾荣,基于 ip 協(xié)議,進行夸局域網(wǎng)的尋址與通信普泡;

  • 傳輸層播掷,基于 tcp 協(xié)議,通過端口來區(qū)分不同程序的通信數(shù)據(jù)撼班。

傳輸層的 tcp協(xié)議歧匈,僅僅只是規(guī)定了一套基于端口的點對點通信協(xié)議,包括如何建立連接砰嘁,如何發(fā)送和讀取消息件炉,但是實際上如果要基于 tcp 協(xié)議來開發(fā),一般是用 socket矮湘,java socket 網(wǎng)絡(luò)編程斟冕。

我們使用瀏覽器訪問https://www.baidu.com/,通過瀏覽器控制臺可以看到百度的 ip 地址為14.215.177.38:443缅阳,其中 443 端口是 HTTPS 的默認端口磕蛇。然后使用netstat -ano查看端口的占用情況,可以看到本機是進程10900使用63223端口訪問的百度十办,ESTABLISHED表示雙方已經(jīng)建議了連接秀撇。然后查找該進程,果然是我們的瀏覽器進程向族。

C:\Users\mao> netstat -ano | findstr "443"
協(xié)議    本地地址                外部地址                 狀態(tài)             PID
TCP    192.168.1.107:63223    14.215.177.38:443      ESTABLISHED     10900

C:\Users\mao>tasklist | findstr "10900"
QQBrowser.exe                10900 Console                    1    205,232 K

經(jīng)過上述步驟呵燕,我們也可以知道,瀏覽器的每一個標簽頁其實就是一個進程件相,都會分配一個端口再扭,基于 TCP 協(xié)議來與互聯(lián)網(wǎng)進行通信氧苍。

然后我們啟動一個 Web 項目,訪問端口設(shè)置為 9000泛范,即進程 9180 正在監(jiān)聽 9000端口候引,此時外部地址為 0.0.0.0:0,說明沒有人與當前端口建立網(wǎng)絡(luò)連接敦跌,再去查一下 9180 進程,恰好是我們的 java 進程逛揩。

C:\Users\mao>netstat -ano | findstr "9000"
協(xié)議    本地地址                外部地址                 狀態(tài)             PID
TCP    0.0.0.0:9000           0.0.0.0:0              LISTENING       9180
TCP    [::]:9000              [::]:0                 LISTENING       9180

然后使用瀏覽器訪問 localhost:9000柠傍,進程 9180 使用 9000 端口與外部地址 [::1]:49474 建立了連接,狀態(tài)為 ESTABLISHED辩稽;進程 10900 使用 49474 端口與外部地址 [::1]:9000 建立了連接惧笛,說人話就是本機的 java進程9180 使用 9000 端口與瀏覽器進程 10900 端口建立了連接。為什么會建立兩條連接呢逞泄?

C:\Users\mao>netstat -ano | findstr "9000"
協(xié)議    本地地址                外部地址                 狀態(tài)             PID
TCP    0.0.0.0:9000           0.0.0.0:0              LISTENING       9180
TCP    [::]:9000              [::]:0                 LISTENING       9180
TCP    [::1]:9000             [::1]:49474            ESTABLISHED     9180
TCP    [::1]:9000             [::1]:49547            ESTABLISHED     9180
TCP    [::1]:49474            [::1]:9000             ESTABLISHED     10900
TCP    [::1]:49475            [::1]:9000             TIME_WAIT       0
TCP    [::1]:49547            [::1]:9000             ESTABLISHED     10900

然后再使用瀏覽器訪問192.168.1.107:9000患整,也會訪問到前面的 web項目,可以看到本機的 java進程9180 使用 9000 端口與瀏覽器進程 8084 使用49740端口建立了連接喷众。

C:\Users\mao>netstat -ano | findstr "9000"
協(xié)議    本地地址                外部地址                 狀態(tài)             PID
TCP    0.0.0.0:9000           0.0.0.0:0              LISTENING       9180
TCP    192.168.1.107:9000     192.168.1.107:49740    ESTABLISHED     9180
TCP    192.168.1.107:49740    192.168.1.107:9000     ESTABLISHED     8084

TCP 的三次握手與四次揮手參考《碼出高效》1.5章節(jié)各谚。

1.5 應(yīng)用層

通過傳輸層的 tcp 協(xié)議可以傳輸數(shù)據(jù),接收到數(shù)據(jù)后到千,怎么解析昌渤?比如郵件如何發(fā)送如何解析,網(wǎng)頁如何請求如何解析憔四,針對不同的數(shù)據(jù)類型膀息,需要定義不同的應(yīng)用層協(xié)議。

HTTP 協(xié)議就是網(wǎng)頁傳輸?shù)膮f(xié)議了赵,GET http://localhost:8080?k1=v1&k2=v2 http-1.1 潜支,返回 200 ,說明訪問成功柿汛。以上其實就是 HTTP 協(xié)議冗酿。

參考文檔

  1. 操作系統(tǒng)與網(wǎng)絡(luò) - 慕課網(wǎng)
  2. 網(wǎng)絡(luò)是怎樣連接的
  3. netstat -ano 查看機器端口占用情況
  4. 碼出高效 1.5 TCP/IP

2021年3月25日12:00:52

后面根據(jù)參考文檔補充網(wǎng)絡(luò)部分的筆記。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苛茂,一起剝皮案震驚了整個濱河市已烤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妓羊,老刑警劉巖胯究,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異躁绸,居然都是意外死亡裕循,警方通過查閱死者的電腦和手機臣嚣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來剥哑,“玉大人硅则,你說我怎么就攤上這事≈暧ぃ” “怎么了怎虫?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長困介。 經(jīng)常有香客問我大审,道長,這世上最難降的妖魔是什么座哩? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任徒扶,我火速辦了婚禮,結(jié)果婚禮上根穷,老公的妹妹穿的比我還像新娘姜骡。我一直安慰自己,他們只是感情好屿良,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布圈澈。 她就那樣靜靜地躺著,像睡著了一般尘惧。 火紅的嫁衣襯著肌膚如雪士败。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天褥伴,我揣著相機與錄音谅将,去河邊找鬼。 笑死重慢,一個胖子當著我的面吹牛饥臂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播似踱,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼隅熙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了核芽?” 一聲冷哼從身側(cè)響起囚戚,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎轧简,沒想到半個月后驰坊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡哮独,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年拳芙,在試婚紗的時候發(fā)現(xiàn)自己被綠了察藐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡舟扎,死狀恐怖分飞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情睹限,我是刑警寧澤譬猫,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站羡疗,受9級特大地震影響删窒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜顺囊,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蕉拢。 院中可真熱鬧特碳,春花似錦、人聲如沸晕换。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闸准。三九已至益愈,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間夷家,已是汗流浹背蒸其。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留库快,地道東北人摸袁。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像义屏,于是被迫代替她去往敵國和親靠汁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容