整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          前端需要了解的計算機網絡知識, 這一篇就夠了!(圖文

          前端需要了解的計算機網絡知識, 這一篇就夠了!(圖文并茂)

          文主要目的也是為了非科班前端補充計算機科班基礎知識,比如你要做node開發,不熟悉數據如何在網絡中傳輸的話,理解很多API會比較疑惑,那接下來,來看看這篇為你精心準備的文章吧!

          這些內容其實比較枯燥,但我采取圖文并茂的形式,并且對于不重要的知識會標注,盡量減少閱讀的枯燥感。啥也不說了,喝口水,開擼!



          1、計算機網絡概念(簡單掃一眼即可)

          計算機網絡:是一個將分散的、具有獨立功能的計算機系統,通過通信設備與線路連接起來,由功能完善的軟件實現資源共享和信息傳遞的系統。



          這里需要注意的是,按分布范圍,計算機網絡里有局域網LAN和廣域網WAN, 其中局域網的代表以太網,以及這兩種網絡最重要的區分點,局域網基于廣播技術,廣域網基于分組交換技術。(這些概念聽一下就行,后面會詳細介紹,因為理解廣播和分組交換技術,大體上就理解了局域網和廣域網)

          2、衡量計算機網絡的性能的指標

          這些內容主要是為了學習后面具體的協議,以及分析這些協議的報文時,需要掌握的基本概念。

          2.1 速率

          速率就是數據傳輸(數據是指0和1)的速率,比如你用迅雷下載,1兆每秒,來衡量目前數據傳輸的快慢。它是計算機網絡中最重要的一個性能指標。

          2.2 帶寬

          在計算機網絡中,網絡帶寬是指在單位時間(一般指的是1秒鐘)內能傳輸的數據量,比如說你家的電信網絡是100兆比特,意思是,一秒內最大的傳輸速率是100兆比特。

          2.3 吞吐量

          吞吐量表示在單位時間內通過某個網絡(或信道、接口)的數據量。

          以上三點,我們舉個案例

          • 一條路每秒最多能過100輛車(寬帶就相當于100輛/秒)。
          • 而并不是每秒都會有100輛車過,假如第一秒有0輛,第二秒有10輛...,(但是最多不能超過100輛)。
          • 所以有第1秒0輛/秒,第2秒10輛/秒,第3秒30輛/秒,這不能說帶寬多少吧,于是就用吞吐量表示具體時間通過的量有多少(也有可能等于帶寬的量)。
          • 由此可知帶寬是說的是最大值速率,吞吐量說的是某時刻速率。但吞吐量不能超過最大速率。

          2.4 時延

          時延是指數據(報文/分組/比特流)從網絡(或鏈路)的一端傳送到另一端所需的時間。單位是s。 時延分一下幾種:

          (1)發送時延

          就是說我跟你說話,從我開始說,到說話結束這段時間,就是發送時延。



          (2)傳播時延

          如gif圖所示,信道上第一個比特開始,到最后一個比特達到主機接口需要的時間就是傳播時延。


          (3)排隊時延


          • 分組在經過網絡傳輸時,要經過很多的路由器。
          • 但分組在進入路由器后要先在輸入隊列中排隊等待處理。
          • 在路由器確定了轉發接口后,還要在輸出隊列中排隊等待轉發,這就產生了排隊時延。
          • 排隊時延的長短往往取決于網絡當時的通信量,當網絡的通信量很大時會發生排隊溢出,是分組丟失。


          (4)處理時延


          路由器或主機在收到數據包時,要花費一定時間進行處理,例如分析數據包的首部、進行首部差錯檢驗,查找路由表為數據包選定準發接口,這就產生了處理時延。



          (5)往返時間(RTT)

          在計算機網絡中,往返時間也是一個重要的性能指標,它表示從發送方發送數據開始,到發送方收到來自接收方的確認(接受方收到數據后便立即發送確認)總共經歷的時間

          (6)時延帶寬積

          是指傳播時延乘以帶寬

          3、正文開始!OSI參考模型

          OSI參考模型是網絡互連的七層框架, 這里不詳細介紹了,每一層的具體內容會在后面介紹,這里只需要有一個初步的印象。

          如下圖所示,1,2,3層主要是是物理鏈路組成的,比如光纖,路由器,集線器,主要負責的是數據通信。5,6,7層是軟件控制的,比如http協議,是一種軟件層面控制的協議,主要負責處理傳輸來的數據。



          4、物理層

          4.1 物理層有啥用?

          對于物理層,有人會說,這不就是網線嗎,比如家里連接路由器的網線,電線桿上的光纖?其實不然,物理層更多的是規定一種標準,他并不管物理介質具體是什么,比如電線桿上是光纖還是雙絞線,只要你能按物理層規定的標準傳輸數據就行。

          那物理層到底有哪些主要任務呢?

          • 比如說,規定了電氣特性,信號的電平用+10V - +15V表示二進制的0,用-10V - -15V表示二進制的1,只要條網線能表示這個特性,就不管你用什么材料了。
          • 當然還有其它特性,我們不需要了解,知道物理層是規定傳輸媒體接口的標準即可。

          4.2 光纖寬帶上網是以什么樣的形式傳輸數據呢?

          • 首先計算機網卡傳輸出來的數據是電信號,光纖傳輸的是光脈沖信號,有光脈沖表示1,無光脈沖表示0。
          • 而可見光的頻率大約是10的8次方MHz,因此光纖通信系統的帶寬遠遠大于其它各種傳輸媒體的帶寬
          • 所以我們計算機傳輸數據需要先把電信號轉為光信號,然后光信號快到服務器的時候,再把光信號轉為電信號。

          4.3 物理層設備中繼器

          為什么需要中繼器呢?

          因為再線路上傳輸的信號功率會逐漸衰減,衰減到一定程度時將造成信號失真,因此會導致接收錯誤。



          中繼器可以對信號進行再生和還原,增加信號的傳輸距離。

          需要注意的是,中繼器兩端連接不同的網段,而不是子網。什么叫不同的網段呢,需要在網絡層學習IP分類之后才能夠理解這個概念,這里簡單的理解為,不同的網段就是不同路由器連接的網絡。

          你能看完上面這么多概念也真是不容易,喝口水,咋們繼續!



          接下來我們進入下一層,數據鏈路層!

          5、數據鏈路層

          5.1 數據鏈路層是做什么的呢?

          我們用一個小故事來舉例



          • 網絡層是個大Boss, 負責給數據鏈路層這個小秘書下達任務,讓小秘把5份文件給B公司,小秘呢,就找送快遞物理層去做這個事
          • 但物理層是個傻傻,他只知道拿起文件就飛奔到B公司,中間丟沒丟東西也不清楚,所以數據鏈路層這個小秘書必須心里有底,一共送了5個文件,并且寫到了快遞外層。B公司小秘在拿到傻傻送到的文件時,就要看看到底有沒有文件丟了,如果丟了就要讓傻傻回去重新拿丟到的文件。
          • 從這個故事中,我們可以總結下數據鏈路層主要功能

          5.2 數據鏈路層的主要功能

          (1) 封裝成幀 數據鏈路層并不是無腦轉發boss的信息,她要把文件編號封裝一下。封裝的網絡數據包,在鏈路層就叫數據幀。



          (2)透明傳輸

          透明傳輸是指不管boss下達的任何信息,比如文件里有裁掉這個秘書的信息,秘書都要原原本本的傳輸。幀的數據部分可能有跟幀首部完全一樣的字符,這時候就要采取一定的措施,讓接受方不要被被誤導,能讓接收方知道哪些是幀的首部哪些是幀的數據。這個問題有沒有類似js的轉義字符的問題,比如字符串<div>到底是指div標簽呢,還是div字符串呢?

          (3)差錯控制

          差錯控制是在文件送到B公司小秘書手里的時候,快遞包上寫著5個文件,秘書一看只有3個文件,就會讓傻傻重新發送有沒有送到的文件。差錯控制的方法有CRC循環冗余碼,這個就不細講了,我自己也不甚了解,只知道鏈路層的幀,會有一個FCS位留給這個碼,用來判斷一個幀是否出錯。

          (4)差錯糾正

          差錯糾正是鏈路層知道1,2,3,4,5個文件,丟失的兩個文件到底是哪兩個,并且能通過重新發送沒有的文件來糾正。

          還有一些是故事里沒有提到的數據鏈路層的功能,比如:

          (5)流量控制 比如說發送方發送速度特別快,接收方接收速度特別慢,會造成傳輸出錯。

          這里需要注意的是,傳輸層TCP也有流量控制功能,區別在于TCP是端到端的流量控制,鏈路層是點到點(比如一個路由器到下一個路由器)

          流量控制的方法有滑動窗口協議,以及選擇重傳協議,這兩個留在講TCP的時候講。接下來講一下以太網,以太網是目前最常見的局域網技術。對于我們理解局域網比較有幫助。

          6 以太網和無線網

          以太網是一種局域網技術,其規定了訪問控制方法、傳輸控制協議、網絡拓撲結構、傳輸速率等,完成數據鏈路層和物理層的一些內容,它采用一種稱作CSMA/CD的媒體接入方法(后面會介紹),另外的一些局域網技術,比如無線局域網等。

          6.1 以太網的幀格式



          • 其中目的地址和源地址指的是MAC地址,即設備的物理地址。MAC地址用于標示網卡,每個網卡都具有唯一的MAC 地址
          • 當在同一個局域網中,主機A需要給主機B發送消息時,主機A將以太網幀發出,此時局域網中所有主機均可收到這個楨,主機中的網卡接收到以太網楨后,會將目的MAC地址和自己的MAC地址進行比較,如果不相同就會丟棄,如果相同則會接收,此時則B主機就收到了A的消息。
          • 其最后面是CRC循環冗余碼,用于差錯控制,即檢驗幀的正確性
          • 在以太網協議中,目的地址分為三種單播地址、廣播地址、多播地址,其中單播地址如上面A給B主機發送,其接收者為一個,并且其目的地址的最高字節的低位為0

          6.2 以太網的特點

          • 無連接。發送方和接收方不建立連接。
          • 不可靠。接收方不向發送方進行確認,差錯幀直接丟棄。

          6.3 以太網的拓撲結構

          跟以太網相關的拓撲結構有星型和總線型。

          星型拓撲如下:



          總線型拓撲如下:



          互聯網初期,以太網的總線型拓撲比較普遍。隨著總線型以太網上的站點數目增多,可靠性也會隨之下降,而隨著大規模集成電路以及專門芯片的發展,使得星型以太網變得便宜又可靠。

          需要注意的是,以太網雖然物理上是星型拓撲,但邏輯上是總線型。

          6.4 網卡

          計算機傳出的數據,經過網卡,就會變為以太網的幀,還會完成一些鏈路管理(CDMA/CD的實現),以及編碼和譯碼(編碼譯碼我不太理解。。。好像是曼徹斯特編碼,規定如何表示高低電平)。

          6.5 無線局域網

          無線局域網WLAN是利用無線電波、激光和紅外線等無線通信技術來構建的局域網。

          無線局域網我們只介紹一下典型的網絡結構。



          • 上圖的AP就是通信基站,如果基站覆蓋的移動設備可以直接通過基站來通信
          • 如果是不同基站的移動設備,不僅僅要通過自己的基站傳輸數據,還需要基站和基站之間傳輸數據,來達到兩個在不同基站覆蓋范圍內的無線設備通信。

          6.6 CSMA/CD協議

          因為這個協議是以太網所使用的,所以我們只需要記住一些特點就行了。

          • 每一個站在發送數據之前以及發送數據時以及發送數據時都要檢測一下總線上是否有其他計算機在發送數據。
          • 是總線型,半雙工網絡(半雙工是指允許數據在兩個方向上傳輸,但是,在某一時刻,只允許數據在一個方向上傳輸)

          6.7 鏈路層的設備

          (1)網橋

          網橋根據MAC幀的目的地址進行轉發和過濾。當網橋收到一個幀時,并不會向所有接口轉發此幀,而是先檢查此幀的目的MAC地址,然后再確定將該幀轉發到哪一個口,或者是把它丟棄。



          這里需要注意的是,網橋連接的是不同的網段,網段是什么呢,我這里簡單介紹一下,具體要到講IP地址的時候細說,同一網段指的是IP地址和子網掩碼(講ip地址的時候會細講)相與得到相同的網絡地址。

          (2)以太網交換機

          談到交換機,就不得不提兩個概念,沖突域和廣播域

          • 沖突域: 是指同一時間只能由一臺設備發送信息的范圍。
          • 廣播域:如果站點發出一個廣播信號,所有能接收到這個信號的設備范圍稱為廣播域
          • 也就是說,廣播域可以跨網段,而沖突域只是發生的同一個網段。

          舉個例子,公司里大家的電腦一般都是連接到交換機上,因為交換機可以隔離沖突域,沖突域的最大問題在于,同一時間只能有一臺機器傳輸數據,公司那么多人,如果這樣的話,傳輸數據速度太慢了。然后交換機再連接到路由器上,首先路由器能隔離廣播域,其次不經過路由器,你的數據鏈路層上的包沒辦法進入到互聯網里面去`,路由器是網絡層的設備。

          兄弟,能看完上面內容,你也真夠能忍的,牛B,喝口水!繼續!



          7、 網絡層

          概念走一走,看一看,瞄一眼就行啦!

          7.1 網絡層概念

          網絡層主要任務是將分組(分組的概念是大多數計算機網絡都不能連續地傳送任意長的數據,所以實際上網絡系統把數據分割成小塊,然后逐塊地發動,這種小塊就稱作分組)從一臺主機移動到另一臺主機,從而提供了主機到主機的通信服務和各種形式的進程到進程的通信。

          7.2 學習網絡層需要了解的概念

          7.2.1 分組交換

          當主機H1要向另一主機H2發送數據(報文)時,首先將數據劃分成若干個等長的分組,然后將這些分組一個接一個地發往里與H1相聯的路由A ,當A接到分組后,先放入緩沖區,再按一定的路由算法確定該分組下一步將發注哪個結點,如此一個結點一個結點傳遞,直到最終目的H2。

          這一段話比較啰嗦,簡單來說分組就是分數據塊,同時還具有無需建立連接,存儲轉發(存儲轉發是指以太網交換機的控制器先將輸入端口到來的數據包緩存起來,先檢查數據包是否正確,并過濾掉沖突包錯誤),動態分配路線(交換設備會根據網絡狀況選擇不同的路線,比如路由器)的優點。

          7.2.2 數據報

          數據報是通過網絡傳輸的數據的基本單元,包含一個報頭(header)和數據本身。說白了,就是帶地址的數據,比如你的寫了一句微信"你好",這串文字本上加上源地址,目的地址,就是數據報。

          7.2.3 數據報格式



          • 首部的固定部分是20字節,共20 * 8=160比特(1字節=8比特)
          • 0 - 4比特是版本號,版本有ipv4/ipv6
          • 首部長度,單位是4B,最小為5, 為什么是5呢?因為首部至少20字節,所以4* 5就是20字節
          • 區分服務不用看。
          • 總長度是,首部+數據
          • 生存時間是TTL,它告訴網絡,數據包在網絡中的時間是否太長而應被丟棄。每經過一個路由器減一,變成0就丟棄
          • 協議是指數據部分用的什么協議,我們只需要知道TCP協議用6表示,UDP協議用17表示即可。
          • 首部校驗和占16位。這個字段只檢驗數據報的首部,但不包括數據部分。
          • 目的地址和源地址都是IP地址,目的地址是通過DNS查詢得來的。

          7.2.4 IP分片

          為什么要分片呢?

          鏈路層數據幀封裝的數據大小是有限制的,以太網的MTU(MTU是指一種通信協議的某一層上面所能通過的最大數據包大?。┦?500字節。

          接下來我們就看看在ip數據包上,哪些字段標識了分片的數據呢?



          • 標識是在同一數據的分片時相同。
          • 標志占3位,但只有兩位有意義,第一個位叫MF,MF=1即表示后面“還有分片”的數據報。MF=0表示這已是若干數據報片中的最后一個。
          • 標志字段中間的一位記為DF(Don’t Fragment),意思是“不能分片”。只有當DF=0時才允許分片。
          • 片偏移,較長的分組在分片后,某片在原分組中的相對位置。

          7.2.5 ip地址分類


          ip地址有5種


          • A類:1.0.0.0~126.255.255.255
          • B類:128.0.0.0~191.255.255.255
          • C類:192.0.0.0~223.255.255.255
          • D類:224.0.0.0~239.255.255.255
          • E類:240.0.0.0~254.255.255.255
          • 其中127.0.0.0~127.255.255.255用于環回測試,D類地址用于組播,E類地址用于科研

          這里需要注意的是,你發沒發現,為什么我們前端啟動webpack測試環境的時候,一般地址都是192.168.*.*(* 是指0-255的數字); 在公司和家里都是這個網段,不是很奇怪嗎,你家里的網段怎么和公司一樣呢?

          其實是因為有一部分叫私有IP地址,是不能拿到網絡上跟別的計算機通信的。只能是局域網自己內部用。比如說有:



          可以看到,C類私有地址就是192.168網段,每個局域網都可以有這些私有IP。

          還有一些特殊地址,需要了解


          注意,這里的全1是指,ipv4地址由4個字節組成,每一個字節是8位,8位全一就是十進制的255, 即255.255.255.255。


          • 第一行,全一,代表是255.255.255.255,在本網絡的目的地址寫這個的話,就會內網廣播
          • 第二行,網絡號特定值,主機號是全0,比如,192.169.10.1,這是c類網絡,所以網絡號是192.169.10,主機號是1,當主機號全0時,就是0,表示192.169.10.0這個網段
          • 第三行,還是192.169.10.1這個c類地址,主機號都是1,也就是8個1,代表255,所以192.169.10.255表示本網段的廣播地址
          • 第四行,大家最熟悉不過了,127作為網絡號,主機號非全0或1,比如說127.0.0.1代表本機,稱為環回地址。

          7.2.6 網絡地址轉換(NAT)

          在ip地址分類里面,我們知道私有ip地址是不能跟外網交互的,在小公司大多數計算機的地址都是192.168網段,都是私有ip地址,它是怎么跟外網交互數據的呢,這里就引出來一個知識點叫網絡地址轉換NAT。



          如上圖所示,192.168.0.3,192.168.0.4都是私有網段上的,它們無法跟外網通信,這個時候由于路由器安裝了NAT軟件,就可以將自己的ip地址,即路由器的ip地址172.38.1.5作為內網的代理,去訪問外網,外網返回來的數據,經過路由轉換,轉換成內網的192.168網段的私有地址。

          7.2.7 子網劃分和子網掩碼

          首先要明白,為什么要劃分子網?

          首先大家要知道: 總體來說,劃分子網不但沒有增加可用IP地址,而且減少了可用IP地址,因為每個子網中的全0網絡地址和全1廣播地址均不能作為主機ip來使用。

          為什么劃分子網:

          • 例如,一個A類網絡可以容納16777214臺主機。
          • 但是在實際運用中,不可能把一個A類網絡只用于一個子網,因為那樣管理起來很不方便,也會出現廣播風暴等種種問題,所以需要根據實際需求把它劃分為若干個較小的子網。一個B類網絡可以容納65534臺主機,往往也是需要劃分子網的。
          • 即便一個小型企業內部,為了部門之間的職能的需要,配置那些電腦可以互相訪問,哪些不能互相訪問,就需要通過劃分子網的方法來實現。

          接下來,我們看看子網劃分



          如上圖右側,我們將145.13.0.0這個網段劃分了三個子網,其中一個是145.13.3.0,一個是145.13.21.0,問題來了,如果一個網絡包來了,網絡包要交給的ip地址是145.13.3.10,我們怎么知道給哪個子網呢?

          方法是將目的包的ip地址,跟子網的子網掩碼相與預算(二進制與預算規則是,1跟1得1,其它為0),也就是目的地址145.13.3.10跟子網145.13.3.0的子網掩碼255.255.255.0的與預算,得到的結果是145.13.3.0,所以發送到的子網就是145.13.3.0。

          這里有人會問什么是子網掩碼,子網掩碼的格式跟IP是一樣的,0,0,0,0 到 255.255.255.255,主要是幫助我們劃分子網的,了解到這里對我們前端就夠了。

          7.3 ARP協議

          為什么需要ARP協議呢?

          我們簡單回顧一下以太網的幀的格式


          上圖有一個源地址和目的地址,這兩個地址都是指的mac地址,mac地址是什么呢?簡單說來就是兩臺相鄰的路由器A和B,A怎么把數據傳給B呢,它總要知道B的物理地址吧,物理地址就像門牌號一樣,我要知道你住在哪里,才能把數據送過去吧?


          首先你肯定知道自己的mac地址是多少,因為在網卡上有,問題在于,別人的mac地址是多少?ARP協議就是來幫你找mac地址的。

          接著我們說一下ARP協議的過程(比較官方的介紹,看不懂可以略過):



          • 每臺主機都會在自己的ARP緩沖區中建立一個 ARP列表,以表示IP地址和MAC地址的映射關系
          • 當源主機需要將一個數據包要發送到目的主機時,會首先檢查自己 ARP列表中是否存在該IP地址對應的MAC地址
          • 如果有,就直接將數據包發送到這個MAC地址;如果沒有,就向本地網段發起一個ARP請求的廣播包,查詢此目的主機對應的MAC地址
          • 此ARP請求數據包里包括源主機的IP地址、硬件地址、以及目的主機的IP地址。網絡中所有的主機收到這個ARP請求后,會檢查數據包中的目的IP是否和自己的IP地址一致
          • 如果不相同就忽略此數據包;如果相同,該主機首先將發送端的MAC地址和IP地址添加到自己的ARP列表中
          • 如果ARP表中已經存在該IP的信息,則將其覆蓋,然后給源主機發送一個 ARP響應數據包,告訴對方自己是它需要查找的MAC地址
          • 源主機收到這個ARP響應數據包后,將得到的目的主機的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息開始數據的傳輸
          • 如果源主機一直沒有收到ARP響應數據包,表示ARP查詢失敗

          7.4 DHCP協議

          DHCP(動態主機配置協議)是一個局域網的網絡協議。指的是由服務器控制一段lP地址范圍,客戶機登錄服務器時就可以自動獲得服務器分配的lP地址和子網掩碼。說白了,當你接入局域網的時候,自動由這個dhcp服務器給你分配ip,windows用戶可能知道網卡配置里面,由自動獲取ip的功能,如果路由器提供DHCP服務,你就會自動獲取隨機分配的ip。

          路由器里可以開啟這個服務。

          大致工作過程(了解即可)



          7.5 ICMP協議

          ICMP協議是一個網絡層協議。 為什么我們需要ICMP協議呢?

          一個新搭建好的網絡,往往需要先進行一個簡單的測試,來驗證網絡是否暢通;但是IP協議并不提供可靠傳輸。如果丟包了,IP協議并不能通知傳輸層是否丟包以及丟包的原因。

          所以我們就需要一種協議來完成這樣的功能–ICMP協議。

          ICMP協議的功能主要有:

          1. 確認IP包是否成功到達目標地址
          2. 通知在發送過程中IP包被丟棄的原因 我們舉一個例子:



          主機H2收到主機H1的一個UDP包,結果H2發現這個包里的端口沒有被監聽,這時候就回復給H2一個ICMP應答報文,意思是這個UDP數據包,無法交給應用進程,只能丟棄了。

          以下是4種常見的ICMP差錯報告報文


          我們常用的ping命令借助ICMP協議,探測主機是否能找到目的主機。

          7.6 網絡設備路由器簡介

          路由器是一種具有多個輸入端口和多個輸出端口的專用計算機,其任務是轉發和分組。

          如下圖所示,分別由轉發和分組功能的說明。


          接著,我們看一下路由器輸入端口做了哪些事情



          • 首先,物理層是傻瓜層,傳輸比特流,我們把物理層的比特流還原成數據鏈路層的數據幀,然后把數據鏈路層的數據報脫去,成為網絡層數據包,交給路由器。這時候就要判斷一下這個數據包是什么類型的了。
          • 如果它是路由器之間,交換路由信息的分組,就會把這個數據包交付給如上上圖所示的,路由選擇處理機,進行處理和計算。如果是數據分組,就會放到一個隊列里面,排隊等候,然后選擇一個合適的輸出端口輸出。
          • 最后我們看一下路由器輸出端口做了哪些事情


          從上圖可以看到,輸出端口是做的輸入端口的逆過程,將網絡層的數據包轉換為鏈路層的數據幀,最后轉為物理層的比特流。


          輸入和輸出端口需要注意的是,它們都有一個緩沖隊列,比如輸入數據的速度太快,輸出數據速度慢,為了平衡輸入輸出速度,就用緩沖隊列把數據緩沖下來,一個一個慢慢的處理,但緩沖隊列也有限度,超出這個限度,緩沖隊列容納不下,包就會被丟到。

          馬上就要到對前端最重要的傳輸層和應用層知識了!準備接招!



          8 傳輸層知識

          傳輸層是只有計算機才有的層次,主要提供是進程間邏輯通信 + 可靠傳輸或者不可靠的功能。比如你的QQ跟你異地女友的QQ視頻聊天,這就是不同計算機之間,進程間的通信。

          這里簡單說一下可靠傳輸協議TCP + 不可靠傳輸協議UDP。

          TCP面向連接,可靠,不提供廣播和多播,而且時間延遲比較大,適用于大文件傳輸。 UDP無連接,收到的報也不確認,但時間延遲小,適用于小文件。

          8.1 端口號有什么用

          端口號可以用來標識同一個主機上通信的不同應用程序(就是哪個應用程序在使用這個端口)。

          那為什么一個端口只能分配給一個應用程序,不能是多個呢?

          如果服務器有兩個應用程序A,B,分別啟動了A服務和B服務,它們監聽同一個端口,那有數據來的時候,服務器無法判斷這個數據到底是給A,還是給B。

          8.2 UDP協議

          UDP協議是參考模型中一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務。

          (1) UDP協議的特點

          • UDP是無連接的,減少開銷和發送數據之前的時間延遲。大家都知道TCP的三次握手和四次分手,這個是需要時間花銷的,但是UDP沒有這部分花銷。
          • UDP使用最大努力交付,即不保證可靠交付。那誰來保證可靠的交付呢?是由UDP的上一層協議,應用層來保證。
          • UDP是面向報文的,適合一次性傳輸少量數據的網絡應用。什么意思呢,如下圖,UDP這層,把應用層的全部內容作為自己的數據報部分,在IP層也只是加了一個IP首部,我們知道,在以太網,鏈路層上的數據如果超過1500字節,就會分片,所以網絡層發現上面傳輸層給了太大的數據就會分片,加上UDP是不可靠的協議,這就加大了UDP的不可靠性,容易丟失,所以UDP適合數據量少的。
          • UDP沒有擁塞控制,適合很多實時應用。也就是說如果網絡堵塞,UDP不管那么多,照樣按照自己的速率發數據,那有些人就會說,這協議是不是有點坑B,路都堵上了,還發死勁發數據呢,但是反過來看,這也是UDP的優點,它允許丟包,如果你的網絡情況還不錯,UDP就非常適合實時應用,比如視頻會議。
          • UDP首部較小,只有8字節,而TCP由20字節。這也是減少網絡傳輸開銷的一方面。

          (2)UDP首部



          • 16位端口號占了2B,也就是16位,說明端口號的范圍是0 - 65535。源端口號可以沒有,因為不希望收到對方的回應,可以寫全0,目的端口是一定要有的。
          • 16位UDP長度是指首部+數據的長度,比如數據2B,首部固定是8B,那么UDP長度就是2+8=10B
          • 16位UDP校驗和,是用來校驗首部和數據有錯誤,如果有錯就丟棄掉。比如說目的主機找不到對應的端口號,就會給發送方返回一個ICMP,‘端口不可達’的差錯報文。

          8.3 TCP協議

          TCP協議簡單來說是一種位于傳輸層的,面向連接的、可靠的、基于字節流的傳輸層通信協議 TCP協議的特點:

          • TCP是面向連接的傳輸層協議。比如說TCP的三次握手,四次分手,針對的都是連接。
          • 每一條TCP連接只能有兩個端點,每一條TCP連接是點對點的。也就是說TCP是不同計算機之間的進程的通信。
          • TCP提供可靠交付的服務,無差錯,不丟失,不重復,按序到達??偨Y一下就是,可靠有序,不丟不重。
          • TCP提供全雙工通信。全雙工指的是連接雙方可以同時收發數據。在收發兩端都有發送緩存和接收緩存,發送緩存就是一個準備發送的隊列,接收緩存是一個準備接收的隊列。
          • TCP面向字節流。如下圖,我們解釋一下什么是面向字節流: 圖中的1,2,3,4.....數據塊,每一個表示一個字節。tcp將應用層的數據變為了這樣的字節進行發送,比如玩過node同學,知道一個buffer,buffer就是字節流。

          TCP報文的首部格式

          如下圖所示,我們看一下比較重要的一些首部字段,這里我們介紹固定的20字節的TCP首部


          • 源端口和目的端口分別是指發送方應用程序的端口和目的方應用程序的端口號。
          • 序號是指在一個TCP連接中傳送的字節流中的每一個字節都按順序編號,本字段表示本報文段所發送數據的第一個字節的序號。
          • 確認號是指期望收到對方下一個報文段的第一個數據字節的序號。弱確認好位n,則證明到需要N-1為止所有的數據都已經正確收到。如下圖,我們舉例說明一下



          接收方收到了1,2,3個字節組成的數據包,然后接收方就會發送一個確認報文給發送方,其中確認報文的確認號就應該是4,因為1,2,3這三個字節的組成的數據包已經收到了。

          • 數據偏移指的是TCP報文段的數據起始處舉例TCP報文段的起始處有多遠。
          • 6個控制位介紹如下

          控制位 作用 ACK 置1時表示確認號合法,為0的時候表示數據段不包含確認信息,確認號被忽略 PSH 置1時請求的數據段在接收方得到后就可直接送到應用程序,而不必等到緩沖區滿時才傳送 RST 置1時重建連接。如果接收到RST位時候,通常發生了某些錯 SYN 置1時用來發起一個連接 FIN 置1時表示發端完成發送任務。用來釋放連接,表明發送方已經沒有數據發送了 URG 緊急指針,告訴接收TCP模塊緊要指針域指著緊要數據

          8.3.3 TCP建立連接

          如下圖所示,分別來了解一下建立連接的過程:


          • 首先客戶端要發送一個數據包告訴服務器要建立連接,根據上面我們了解到的控制位信息,建立連接需要把SYN置為1,seq指的是序號,是隨機產生的。
          • 然后服務器收到該數據包后,會為該TCP連接分配緩存和變量,緩存指的是一個字節流隊列。(發送方和接收方都有這個隊列,而且如果雙方需要互相通信,那么雙方都會有發送緩存和接收緩存),接著會返回一個確認報文,其中SYN控制位置為1,意思是允許建立連接,ACK是確認號,確認收到了發送方的包,并且會設一個seq序號,也為一個隨機數。小寫ack是確認號,也就是接下來希望發送方要發的數據從哪開始。
          • 最后,客戶端需要給服務器端返回一個確認,此時SYN控制位變為0,意思這不是建立連接的請求了,要正式發數據了,ACK是確認碼,意思是收到了服務器的確認請求了。

          8.3.4 TCP釋放連接

          如下圖所示,分別來了解一下釋放連接的過程:


          • 客戶端發起請求,請求斷開鏈接。FIN=1,seq=u。u是之前傳送過來的最后一個字節的序號+1。

          FIN:用來釋放一個鏈接,當FIN=1的時候,表明此報文的發送方已經完成了數據的發送,沒有新的數據要傳送,并要求釋放鏈接。 客戶端等著服務器返回確認

          • 服務器收到客戶端的請求斷開鏈接的報文之后,返回確認信息。ACK=1,seq=v,ack=u+1。這個時候,客戶端不能給服務器發送信息報文,只能接收。但是服務器要是還有信息要傳給服務器,仍然能傳送。這里的v是什么意思呢,這就取決于服務器發送給客戶端之前的一個包確認號是多少了。
          • 當服務器也沒有了可以傳的信息之后,給客戶端發送請求結束的報文。FIN=1,ACK=1,ack=u+1,seq=w。這里的w,跟上面的v是一個意思,為什么不都是v呢,因為這一步和上一步中間可能還在發數據呢,所以seq這個數據發送的字節流序號可能要變。
          • 客戶端接收到FIN=1的報文之后,返回確認報文,ACK=1,seq=u+1,ack=w+1。發送完畢之后,客戶端進入等待狀態,等待兩個時間周期。關閉。

          為什么最后還要等待兩個時間周期呢?

          • 客戶端的最后一個ACK報文在傳輸的時候丟失,服務器并沒有接收到這個報文。這個候時候服務器就會超時重傳這個FIN消息,然后客戶端就會重新返回最后一個ACK報文,等待兩個時間周期,完成關閉。
          • 如果不等待這兩個時間周期,服務器重傳的那條消息就不會收到。服務器就因為接收不到客戶端的信息而無法正常關閉。

          8.3.5 TCP3次握手4次揮手常見面試題

          為什么連接的時候是三次握手,關閉的時候卻是四次握手?

          • 關閉連接時,服務器收到對方的FIN報文時,僅僅表示對方不再發送數據了但是還能接收數據,而自己也未必全部數據都發送給對方了,所以己方可以立即關閉,也可以發送一些數據給對方后,再發送FIN報文給對方來表示同意現在關閉連接
          • 因此,己方ACK和FIN一般都會分開發送,從而導致多了一次。

          為什么不能用兩次握手進行連接?

          以下是網上普遍的解答:

          • 若建立連接只需兩次握手,客戶端并沒有太大的變化,仍然需要獲得服務端的應答后才進入ESTABLISHED狀態,而服務端在收到連接請求后就進入ESTABLISHED狀態。
          • 此時如果網絡擁塞,客戶端發送的連接請求遲遲到不了服務端,客戶端便超時重發請求,如果服務端正確接收并確認應答,雙方便開始通信,通信結束后釋放連接。此時,如果那個失效的連接請求抵達了服務端,由于只有兩次握手,服務端收到請求就會進入ESTABLISHED狀態,等待發送數據或主動發送數據
          • 但此時的客戶端早已進入CLOSED狀態,服務端將會一直等待下去,這樣浪費服務端連接資源
          • 但我覺得這個只是兩次握手可能造成的問題,最關鍵的是兩次握手有服務器對客戶端的起始序列號做了確認,但客戶端卻沒有對服務器的起始序列號做確認,不能保證傳輸的可靠性。

          如果已經建立了連接,但是客戶端突然出現故障了怎么辦?

          TCP?;钣嫊r器 每次客戶端請求服務器會重置計時器,當2小時之內沒收到客戶端任何數據時,會每隔75s向客戶端發一個探測報文,若接連發送10個,客戶端都沒有反應,則認為客戶端故障,關閉連接。

          什么是SYN洪泛攻擊?

          • SYN洪泛攻擊就是利用TCP協議的特性(三次握手)。
          • 攻擊者發送TCP的 SYN,SYN是TCP三次握手中第一個數據包,而當服務器返回ACK后,該攻擊者就不對其進行再確認,那這個TCP連接就處于掛起狀態,也就是半連接狀態,服務器收不到再確認的話,還會重復發送ACK給攻擊者。
          • 這樣更加會浪費服務器資源。攻擊者就對服務器發送大量的這種TCP連接,由于每一個連接都無法完成三次握手,所以就在服務器上,這些TCP連接會因為掛起狀態而消耗CPU和內存,最后服務器可能死機。

          序號(ISN)為什么要隨機? 增加安全性,為了避免被第三方猜測到,從而被第三方偽造的RST報文Reset。 三次握手的第一次可以攜帶數據嗎?為何?

          • 不可以,三次握手還沒有完成。而且這樣會放大SYN FLOOD(SYN洪泛)攻擊。
          • 如果攻擊者偽造了成千上萬的握手報文,攜帶了1K+ 字節的數據,而接收方會開辟大量的緩存來容納這些巨大數據,內存會很容易耗盡,從而拒絕服務。

          三次握手的第三次可以攜帶數據嗎?為何? 第三次握手,此時客戶端已經處于ESTABLISHED狀態。對于客戶端來說,他已經建立起連接了,并且已經知道服務器的接收和發送能力是正常的。所以也就可以攜帶數據了。

          8.3.6 TCP如何實現可靠傳輸

          主要通過以下四種方式實現可靠傳輸機制:

          • 校驗。偽首部是為了增加TCP校驗和的檢錯能力:通過偽首部的目的IP地址來檢查TCP報文是否收錯了、通過偽首部的傳輸層協議號來檢查傳輸層協議是否選對了。需要注意的是,偽首部實際上是不存在的,只是用來驗證TCP報文是否出錯。
          • 序號。之前我們提到TCP是面向字節流的,比如第一個字節就是序號1,第二個字節就是序號2。 而在TCP報文格式介紹的時候,有一個序號字段,這個指的是一個報文段第一個字節的序號。報文段就是你每個數據包。有了序號,就能保證數據是有序的傳入應用層。
          • 確認。發送方在收到接收方的確認包之后,才繼續發送剩下的數據。
          • 重傳。TCP的發送方在規定的時間內沒有收到確認就要重傳已發送的報文段(超時重傳)。重傳時間是動態改變的,依據的是RTTS(加權平均往返時間)。

          8.3.7 TCP的流量控制

          為什么需要流量控制呢?

          比如發送方發送速度非??欤邮辗浇邮账俣忍貏e慢,這樣就會發生嚴重的丟包現象。


          TCP通過滑動窗口的機制來實現流量控制。簡單來說如下(建議網上找一個動畫教程來理解,文字效果不是很好):


          • TCP 中采用滑動窗口來進行傳輸控制,滑動窗口的大小意味著接收方還有多大的緩沖區可以用于接收數據。發送方可以通過滑動窗口的大小來確定應該發送多少字節的數據。
          • 當滑動窗口為 0時,發送方一般不能再發送數據報,但有兩種情況除外,一種情況是可以發送緊急數據,例如,允許用戶終止在遠端機上的運行進程。另一種情況是發送方可以發送一個 1 字節的數據報來通知接收方重新聲明它希望接收的下一字節及發送方的滑動窗口大小。

          8.3.8 TCP的擁塞控制

          這部分我也覺得文字部分太生硬了,開始我也不怎么理解,看來一個視頻之后我了解了基本原理,這里我文字版和視頻地址都放上來。

          視頻地址如下:擁塞控制視頻版

          文字版如下:

          • 如果網絡出現擁塞,分組將會丟失,此時發送方會繼續重傳,從而導致網絡擁塞程度更高。因此當出現擁塞時,應當控制發送方的速率。這一點和流量控制很像,但是出發點不同。流量控制是為了讓接收方能來得及接收,而擁塞控制是為了降低整個網絡的擁塞程度。
          • TCP 主要通過四個算法來進行擁塞控制:慢開始、擁塞避免、快重傳、快恢復。
          • 發送方需要維護一個叫做擁塞窗口(cwnd)的狀態變量,注意擁塞窗口與發送方窗口的區別:擁塞窗口只是一個狀態變量,實際決定發送方能發送多少數據的是發送方窗口。
          • 為了便于討論,做如下假設:
          • 接收方有足夠大的接收緩存,因此不會發生流量控制;
          • 雖然 TCP 的窗口基于字節,但是這里設窗口的大小單位為報文段。

          慢開始與擁塞避免

          • 發送的最初執行慢開始,令 cwnd=1,發送方只能發送 1 個報文段;當收到確認后,將 cwnd 加倍,因此之后發送方能夠發送的報文段數量為:2、4、8 ...
          • 注意到慢開始每個輪次都將 cwnd 加倍,這樣會讓 cwnd 增長速度非常快,從而使得發送方發送的速度增長速度過快,網絡擁塞的可能性也就更高。設置一個慢開始門限 ssthresh,當 cwnd >=ssthresh 時,進入擁塞避免,每個輪次只將 cwnd 加 1。

          如果出現了超時,則令 ssthresh=cwnd / 2,然后重新執行慢開始。

          快重傳與快恢復

          • 在接收方,要求每次接收到報文段都應該對最后一個已收到的有序報文段進行確認。例如已經接收到 M1 和 M2,此時收到 M4,應當發送對 M2 的確認。
          • 在發送方,如果收到三個重復確認,那么可以知道下一個報文段丟失,此時執行快重傳,立即重傳下一個報文段。例如收到三個 M2,則 M3 丟失,立即重傳 M3。
          • 在這種情況下,只是丟失個別報文段,而不是網絡擁塞。因此執行快恢復,令 ssthresh=cwnd / 2 ,cwnd=ssthresh,注意到此時直接進入擁塞避免。
          • 慢開始和快恢復的快慢指的是 cwnd 的設定值,而不是 cwnd 的增長速率。慢開始 cwnd 設定為 1,而快恢復 cwnd 設定為 ssthresh。

          9、應用層

          9.1 應用層有啥用?

          應用層對應用程序的通信提供服務。

          • 區分是發送報文還是接收報文
          • 定義報文類型的語法,比如某字段的意思,例如http中content-type字段是什么意思。
          • 最后就是進程如何,什么時候把傳輸層的數據交給應用層。

          一些比較重要的應用層協議如下圖:



          9.2 應用層常見的模型

          第一種是客戶端/服務器模型,也就是C/S架構。比如電子郵件、web都是。



          第二種是P2P模型,每個主機既可以提供服務,也可以請求服務。比如迅雷下載也是使用P2P技術的。



          9.3 短鏈接和長鏈接

          而TCP連接有兩種工作方式:短連接方式(Short-Live Connection)和長連接方式(Long-Live Connection)。

          1. 短連接方式:
          • 當客戶端有請求時,會建立一個TCP連接,接收到服務器響應后,就斷開連接。下次有請求時,再建立連接,收到響應后,再斷開。如此循環。這種方式主要有兩個缺點:
          • 建立TCP連接需要3次“握手”,拆除TCP連接需要4次“揮手”,這就需要7個數據包。如果請求和響應各占1個數據包,那么一次短連接的交互過程,有效的傳輸僅占2/9,這個利用率太低了。
          • 主動斷開TCP連接的一端,TCP狀態機會進入TIME_WAIT狀態。如果頻繁地使用短連接方式,就有可能使客戶端的機器產生大量的處于TIME_WAIT狀態TCP連接。
          1. 長連接方式:
          • 客戶端和服務器建立TCP連接后,會一直使用這條連接進行數據交互,直到沒有數據傳輸或異常斷開。在空閑期間,通常會使用``心跳數據包(Keep-Alive)`保持鏈路不斷開。目前長連接方式應用范圍比較廣泛。

          9.4 DNS

          什么是DNS說白了就是將域名轉化為ip,比如www.qq.com,這是域名,可以是網絡包需要對方ip地址,域名是不能加入網絡包報頭的,所以就需要去找一個服務器問,qq的域名對應的ip是多少。



          大概的通信過程如下:

          • 用戶主機上運行著DNS的客戶端,就是我們的PC機或者手機客戶端運行著DNS客戶端了
          • 瀏覽器將接收到的url中抽取出域名字段,就是訪問的主機名,比如http://www.baidu.com/, 并將這個主機名傳送給DNS應用的客戶端
          • DNS客戶機端向DNS服務器端發送一份查詢報文,報文中包含著要訪問的主機名字段(中間包括一些列緩存查詢以及分布式DNS集群的工作)
          • 該DNS客戶機最終會收到一份回答報文,其中包含有該主機名對應的IP地址
          • 一旦該瀏覽器收到來自DNS的IP地址,就可以向該IP地址定位的HTTP服務器發起TCP連接

          這里需要補充一個小知識,關于域名的,大概了解一下就行




          9.5 萬維網和http協議

          萬維網www是一個大規模的、聯機式的信息存儲所,是無數個網絡站點和網頁的集合。

          知識盲區: 在不少人看來,互聯網、因特網、萬維網沒有大多的區別,其實這三者之間的關系應該是:互聯網包含因特網,因特網包含萬維網。

          • 互聯網internet。凡是由能彼此通信的設備組成的網絡就叫互聯網,即使僅有兩臺機器(計算機、手機等),不論用何種技術使其彼此通信,都叫互聯網,所以,互聯網有廣域網、城域網及局域網之分,國際標準的互聯網寫法是internet,字母i一定要小寫!
          • 因特網Internet。而因特網是互聯網中的一種,它可不是僅有兩臺機器組成的網絡,而是由上千萬臺設備組成的網絡(該網絡具備很大的規模)。因特網使用TCP/IP協議讓不同的設備可以彼此通信。但使用TCP/IP協議的網絡并不一定是因特網,一個局域網也可以使用TCP/IP協議。
          • 因特網是基于TCP/IP協議實現的,TCP/IP協議由很多協議組成,不同類型的協議又被放在不同的層,其中,位于應用層的協議就有很多,比如FTP、SMTP、HTTP。所以,因特網提供的服務一般包括有:www(萬維網)服務、電子郵件服務(outlook)、遠程登錄(QQ)服務、文件傳輸(FTP)服務、網絡電話等等。
          • 萬維網。只要應用層使用的是HTTP協議,就稱為萬維網(World Wide Web)。之所以在瀏覽器里輸入百度網址時,能看見百度網提供的網頁,就是因為您的個人瀏覽器和百度網的服務器之間使用的是HTTP協議在交流。

          萬維網使用統一資源定位符作為標識符來訪問資源。


          URL的格式如下:



          • 用戶通過點擊超鏈接獲取資源,這些資源通過超文本傳輸協議(http)傳送給使用者。
          • HTTP協議定義了瀏覽器怎樣向萬維網服務器請求萬維網文檔,以及服務器怎樣把文檔傳送給瀏覽器。



          http報文頭分析:


          下面是對各部分的簡要描述:


          1. 方法(method):客戶端希望服務器對資源執行的動作,是一個單獨的詞,比如,GET、POST或HEAD
          2. 請求URL(request-URL):要直接與服務器進行對話,只要請求URL是資源的絕對路徑就可以了,服務器可以假定自己是URL的主機/端口
          3. 版本(version):報文所使用的HTTP版本。其格式:HTTP/<主要版本號>.<次要版本號>
          4. 狀態碼(status-code):狀態碼是三位數字,描述了請求過程中所發生的情況。每個狀態碼的第一位數字都用于描述狀態的一般類別(比如,“成功”、“出錯”等等)
          5. 原因短語(reason-phrase):數字狀態碼的可讀版本,包含行終止序列之前的所有文本。原因短語只對人類有意義,因此,盡管響應行HTTP/1.0 200 NOT OK和HTTP/1.0 200 OK中原因短語的含義不同,但同樣都會被當作成功指示處理
          6. 頭部(header):可以有零個或多個頭部,每個首部都包含一個名字,后面跟著一個冒號(:),然后是一個可選的空格,接著是一個值,最后是一個CRLF首部是由一個空行(CRLF)結束的,表示了頭部列表的結束和實體主體部分的開始
          7. 實體的主體部分(entity-body):實體的主體部分包含一個由任意數據組成的數據塊,并不是所有的報文都包含實體的主體部分,有時,報文只是以一個CRLF結束。

          下面是常用頭部:

          通用頭部:既可以出現在請求報文中,也可以出現在響應報文中,它提供了與報文相關的最基本的信息

          • Connection:允許客戶端和服務器指定與請求/響應連接有關的選項,http1.1默認是keep-alive
          • Date:提供日期和時間標志,說明報文是什么時間創建的
          • Transfer-Encoding:告知接收端為了保證報文的可靠傳輸,對報文采用了什么編碼方式
          • Cache-Control:用于隨報文傳送緩存指示

          請求頭部:請求頭部是只在請求報文中有意義的頭部。用于說明是誰或什么在發送請求、請求源自何處,或者客戶端的喜好及能力

          • Host:給出了接收請求的服務器的主機名和端口號
          • Referer:提供了包含當前請求URI的文檔的URL
          • User-Agent:將發起請求的應用程序名稱告知服務器
          • Accept:告訴服務器能夠發送哪些媒體類型
          • Accept-Encoding:告訴服務器能夠發送哪些編碼方式
          • Accept-Language:告訴服務器能夠發送哪些語言
          • Range:如果服務器支持范圍請求,就請求資源的指定范圍
          • If-Range:允許對文檔的某個范圍進行條件請求
          • Authorization:包含了客戶端提供給服務器,以便對其自身進行認證的數據
          • Cookie:客戶端用它向服務器傳送數據

          響應頭部:響應頭部為客戶端提供了一些額外信息,比如誰在發送響應、響應者的功能,甚至與響應相關的一些特殊指令

          • Age:(從最初創建開始)響應持續時間
          • Server:服務器應用程序軟件的名稱和版本
          • Accept-Ranges:對此資源來說,服務器可接受的范圍類型
          • Set-Cookie:在客戶端設置數據,以便服務器對客戶端進行標識

          實體首部:描述主體的長度和內容,或者資源自身

          • Allow:列出了可以對此實體執行的請求方法
          • Location:告知客戶端實體實際上位于何處,用于將接收端定向到資源的位置(URL)上去
          • Content-Base:解析主體中的相對URL時使用的基礎URL
          • Content-Encoding:對主體執行的任意編碼方式
          • Content-Language:理解主體時最適宜使用的自然語言
          • Content-Length:主體的長度
          • Content-Type:這個主體的對象類型
          • ETag:與此實體相關的實體標記
          • Last-Modified:這個實體最后一次被修改的日期和時間

          實體的主體部分:該部分其實就是HTTP要傳輸的內容,是可選的。HTTP報文可以承載很多類型的數字數據,比如,圖片、視頻、HTML文檔電子郵件、軟件應用程序等等。

          常用的HTTP方法和狀態碼就不詳細介紹了,本文完結!你這都能耐心看完,我覺得你太厲害了!

          紹一些思維導圖軟件的電腦版與手機版,

          排名不分先后

          思維導圖是一種能夠幫助我們發散思維、提高效率的大腦工具,由英國人東尼·博贊發明,在商業、教育以及個人學習等領域有著非常廣泛的運用。

          從出現至今的幾十年時間里,它改變了全球3億人的思維方式,因此思維導圖又被譽為是20世紀人類最偉大的發明之一。

          手繪思維導圖已經跟不上如今高效率的工作節奏,這里整理了部分好用、各具特點的思維導圖工具,讓你快速探索思路,秒秒鐘提高工作效率!

          1、思想快車(ThinkingExpress) V2.7 綠色版

          軟件大?。?37KB,免費的

          思想快車是一款輕便的用于制作""的軟件,與MindManager,FreeMind等思維導圖軟件屬于同類產品。

          思想快車(ThinkingExpress)的特色

          快捷: 最快捷的思維導圖工具,瞬間啟動;靈巧:最靈巧的思維導圖工具;便攜: 最便攜的思維導圖工具,單文件無需安裝,零環境要求;簡潔:最簡潔的思維導圖工具,超大整潔的思考界面;自動: 最自動的思維導圖工具,強大的可編程環境和交互式控制臺。

          功能特色:

          1. 思想快車是一個輕巧的思維導圖軟件。它只有一個EXE文件組成,大小為800多K, 沒有DLL,無需安裝,直接運行。

          2. 啟動思想快車后,會自動生成一個config.mapx文件。這是一個配置文件,主要用于保存思想快車的配置信息。

          3. 思想快車的導圖存放在以mapx文件結尾的文件中。一個導圖文件可以存放多個導圖。配置文件(config.mapx)也可以存放導圖。

          4. 思想快車支持命令行參數,從而可以直接打開如下文件:*.tmap, *.mmap, *.mm, *.txt,*.mpx。

          5. 思想快車有靈活的菜單和按鈕布局,以及豐富的快捷鍵提示,從而更加容易操作。并提供了一個全局熱鍵:Ctrl+Q,用于顯示或隱藏主界面。

          6. 思想快車允許您最大自由地、最小步驟地創建您的節點,查找您的節點,布置您的節點,格式化您的節點,導航您的節點。

          7. 為保護導圖和節點的信息安全,思想快車提供了多項安全功能,包括節點信息馬賽克、節點擴展信息加鎖,導圖加鎖,導圖文件加鎖。

          8. 思想快車提供了充足的導入導出功能,以方便與其他應用程序交互。例如*.mmap, *.mm, *.mpx, *.txt,*.pdf,圖像文件,剪貼板以及鼠標拖拽。

          2、NovaMind(思維導圖繪制) v6.0.5.11825 綠色便攜版

          軟件大小:14.1MB 軟件語言:簡體中文

          NovaMind綠色版是一款帶有演示功能的思維導圖繪制軟件,據說蘋果版 NovaMind 在業內名聲很好,其實 Windows 版也同樣*,woodheadz 在布局、圖形、連接線等方面對比 NovaMind 和 MindManager 后得出,NovaMind 具有完善的思維導圖功能,比 MindManager 更能體現「用圖形和色彩激發人的思維能力」這個思維導圖的核心價值。

          NovaMind 支持任意角度的自動布局,節點和連接線也異常靈活,能夠任意拖動,強大的連接線編輯功能也是特色之一,可以說NovaMind銳意進取,在精益求精中不斷創新思維導圖軟件。

          NovaMind 的幻燈片面板能夠創建和管理幻燈片,將思維導圖和演示有機結合起來,動畫播放有利于觀眾理解思路的變化。

          NovaMind 的界面美觀,富有親和力, 優化過的 Ribbon 工具欄能輕松訪問常用的功能,雖然也是基于 .NET 開發,但軟件安裝簡單,運行起來也蠻流暢,支持直接導出思維導圖為 PDF、PNG、Word、PowerPoint、MindManager 文件、純文本、OPML 或者 MS Project 文件。

          溫馨提示

          使用說明:

          已經做成綠色便攜版,直接運行 NovaMindPortable.exe 即可,2014/12/4 更新為 NovaMind 6.0.5 Build 11825,為全功能無水印試用版,自帶多國語言,默認顯示簡體中文界面。使用 NovaMind 前必須安裝 .NET Framework 4,如果軟件無法運行,請先下載安裝 .NET Framework 4 獨立安裝程序。

          說明

          軟件開始有以下窗口,只要按"取消"就可以,進入使用了。

          3、FreeMind: (免費開源的思維導圖軟件)

          Freemind是一款免費開源的思維導圖軟件。界面簡單,涵蓋基本創作思維導圖功能,適合奉行極簡主義用戶進行簡單的思維導圖編輯與個人創作。

          是一款基于java的免費的電腦,Freemind中文版可以作為你的思維筆記,以層級圖的展現方式,把各種主題的隸屬關系表現得很清晰。Freemind中文版在思維導圖軟件中,是屬于極少數免費開源的類型。需要的朋友千萬不要錯過哦!

          華軍軟件園https://www.onlinedown.net/soft/101098.htm

          *****************************************************************************

          4、XMind

          XMind 最受歡迎思維導圖軟件。XMind是一款非常專業的思維導圖軟件,美觀簡單易用、功能強大,擁有高效的可視化思維模式,具備可擴展跨平臺、穩定性和性能,幫助用戶提高生產率,促進有效溝通及協作。我們有時候突然有了靈感需要記錄下來,當我們需要記錄要點時,用思維導圖作記錄,將要點以關鍵詞記下,把相關的意念用線連上,加以組織,方便記憶,思維導圖叫做 MindMap,也叫腦圖,作為一個頭腦風暴的工具,靈活運用「思維導圖」會讓你在學習和工作上幫助極大!XMind,它能跨平臺支持 Win、Mac、Linux 和 iOS,而且還能制作流程圖、魚骨圖、二維圖、樹狀圖、邏輯圖等,XMind應用全球先進的Eclipse RCP軟件架構,是集思維導圖與頭腦風暴于一體的"可視化思考"工具,可以用來捕捉想法、理清思路、管理復雜信息并促進團隊協作。



          網站:https://www.xmind.cn/

          5、MindMaster(億圖思維導圖 )

          性價比最高的一款思維導圖軟件,是億圖軟件的新產品。

          軟件顏值較高,操作簡單易上手、主題樣式豐富、穩定性高、自定義功能強大;除了可以繪制常規的思維導圖,還支持繪制魚骨圖、組織結構圖、時間軸等。有云協作功能,可跨平臺操作。

          MindMaster 自帶幻燈片展示功能,不需要借助其他的工具,就可以進行幻燈片展示。同時支持一鍵將思維導圖拆分成多個幻燈片頁面,可以在全屏模式下遍歷思維導圖的主題或者分支,當思維導圖內容較多時,也可以很好的將每個細節展示清楚,除此之外,MindMaster 專業版還可以將思維導圖幻燈片導出為 PPT 格式,在 Office PowerPoint 中,進行分頁展示和打印。

          MindMaster 專業版搭載億圖云服務,提供多人協作辦公的功能,團隊辦公中輕松實現文件共享、編輯,1G 云空間讓文件保存和分享更方便自由。通過添加、管理自定義的標簽,在進行任務管理的人員分配時,還可以更高效地設置任務信息。MindMaster 專業版還可以從思維導圖一鍵生產甘特圖。在思維導圖中添加的任務信息會一一對應到甘特圖中,思維導圖和甘特可以同步編輯、更新。繪制好的甘特圖,還可以導出至 PDF 格式,對于進行日程計劃、安排、任務管理等,都非常的實用。

          MindMaster 專業版在免費版的基礎上,增加了更多主題樣式,通過彩虹色、單色、對稱色、交替色四種配色,讓思維導圖色彩更豐富,同時還可以一鍵切換漂亮的手繪模式的思維導圖,除此之外,MindMaster 專業版還提供了豐富的高清且純矢量剪貼畫,適用于商業、教育、人物、自然、科技等各個領域。

          MindMaster 專業版可以將思維導圖導出為 Word、PPT、Excel、PDF 等文件格式,無需使用MindMaster 軟件就可以進行再次編輯、修改。同時 MindMaster 專業版還支持導出更高 DPI 圖片格式,以及 HTML 和 SVG 格式。


          網站:https://www.edrawsoft.cn/mindmaster/

          6、iMindMap

          iMindMap 是思維導圖創始人托尼·巴贊(Tony Buzan)開發的思維導圖軟件,線條自由,具有手繪功能。

          它結合獨特的自由形態頭腦風暴視圖模式和系統的思維導圖視圖模式,特別適用于頭腦風暴、策劃和管理項目、創建演示文稿等。


          網站:

          http://www.thinkbuzan.com/uk/

          https://imindmap.com/

          https://www.imindmap.cc/(中國獨家代理商)

          7、MindManager

          MindManager是老品牌了,它支持移動設備和在線編輯功能,內置功能豐富,所做圖形較為美觀,與Office整合較好,支持數據庫、任務管理、批注等功能,對于高手而言可配置性強。


          網站:

          http://download.mindjet.com/

          http://www.mindjet.com/

          https://www.mindmanager.cn/(中國獨家代理商)

          8、MindMapper

          MindMapper思維導圖是表達發射性思維的有效的圖形思維工具。思維導圖運用圖文并重的技巧,把各級主題的關系用相互隸屬與相關的層級圖表現出來,把主題關鍵詞與圖像、顏色等建立記憶鏈接,思維導圖充分運用左右腦的機能,利用記憶、閱讀、思維的規律,協助人們在科學與藝術、邏輯與想象之間平衡發展,從而開啟人類大腦的無限潛能。

          網站:

          https://www.mindmapper.cc/(中國獨家代理商)

          www.mindmapper.com

          9、MindMeister:

          MindMeister是一款在線思維導圖,目前在應用市場上被認為是最好的在線思維導圖。

          風格開放活潑,可隨時保存,支持快捷鍵。不過有一點,它是純英文,英文水平不夠的同學就比較憂傷了。

          10、百度腦圖:

          百度腦圖,在線版的里面算是比較靈活,隨意拖拽,使用感覺很流暢,不足的是可能因為它是網頁版所以素材基本沒有,但可以自己插入圖片,做寫簡單的思維導圖是完全沒有問題的。

          11、Bubbl.us :

          Bubbl.us是一個基于Flash的簡單、免費的Web應用程序。

          方便個人或團體在線創建豐富多彩的樹形流程圖,勾勒出在腦海中構思的概念圖。

          新版Bubbl.us注冊用戶擁有共享權限??芍苯訉⑽募戏诺焦蚕韰^域,進而編輯、完善共享權限。

          12、Text2MindMaps :

          在線腦圖制作工具。優勢在于使用簡單,只需使用者在文本區域鍵入文本,再配合Tab鍵進行文本行的縮進,最后單機繪圖按鈕就可以了。

          13、Popplet :

          popplet是個 "個人或集體輔助使用的應用程序,或者是智能處理筆記的工具 "。

          外觀可愛,操作簡捷;特點是可以進入popplet博客,上傳自己的popplet,也可以在上面觀看別人的popplet博文。

          14、WiseMapping

          WiseMapping 是一個開源的 HTML5 心智圖應用,既可以在線使用,也可以下載到自己的服務器上運行。

          15、Coggle

          Coggle 是一款簡約漂亮的思維導圖工具,輕量級,需要 Google 賬號,可導出 PDF、PNG、TXT 格式,支持多人協作,嵌入網頁等等。

          16、Stormboard

          一款不錯的討論工具,大大解決了在線討論不能做到的收集觀點、分享資料、沒有條理的問題。特點是頭腦風暴討論設計,討論者可以像在用真正的白板一樣,往上面貼便利貼。

          17、Wridea

          Wridea協作和頭腦風暴的web服務。可以把這看作一個匯聚創意和想法的網站,不失為一個和好友交流想法和創意的好地方,也許就能碰撞出不錯的創意。

          18、Mindomo

          跨平臺,提供云服務來同步文件。在 Windows 上可以用網頁版也可以用桌面版來工作??梢酝耆膮f作,每個工作區中啟用了對話,討論和主題。

          19、思維導圖XMind手機版

          「XMind」是一款讓你專注思維,捕捉每一個靈感瞬間的 App。每當你有一個想法,「XMind」幫你專注于它的擴展延伸和梳理,融合藝術與創造力,讓思維清晰可見。你可以創建 workflow,接下來心無旁騖投入工作流程;以靈感為中心,在無限的腦圖幕布上延伸想法;隨手記錄點滴靈感、待辦清單、會議記錄或是項目規劃,盡情享受邏輯思維。

          20、MindLine手機版

          這個思維導圖,直接就起思維導圖,連個標志名字都沒有。。

          思維導圖(MindLine)秉承極簡設計的原則,沒有繁瑣的操作和復雜的界面,在這里你可以輕松構思和擴展想法和計劃。

          點擊分支上的+號,即可向左右兩邊擴展分支,長按分支上的文本會彈出功能菜單,可以進行復制、剪切、刪除、備注和標記等操作。制作好的導圖可以導出為圖片、PDF和Html等多種格式,并能隨時隨地分享給好友。

          我們還提供了強大的云服務備份和同步導圖文件,實現不同設備上文件共享,并確保文件不會丟失。登錄我們的官網可以在線打開和編輯保存在云空間的導圖。



          21、MindNode手機版

          MindNode是Mac上的思維導圖軟件,也有iOS版本。顏值頗高,比較小清新。軟件簡單易學,適合剛入門思維導圖的新手使用。


          還有以下手機版

          總結

          本文旨在將優秀的思維導圖工具簡單介紹給大家,由于精力有限,也沒能對每款工具都深入了解,也歡迎大家補充哦。工具的使用最關鍵還是在于人,再好的工具也要使用者養成結構化思維習慣。如果你正在尋找順手的思維導圖工具,希望這篇文章能幫助你哦。

          TML 或超文本標記語言 允許 Web 用戶使用元素、標簽和屬性創建和構造部分、段落和鏈接。然而,值得注意的是,HTML 不能被視為一種編程語言,因為它不能創建動態功能。

          HTML有很多用例,即:

          1. 網頁開發。開發人員使用 HTML 代碼來設計瀏覽器如何顯示網頁元素,例如文本、超鏈接和媒體文件。
          2. 互聯網導航。由于 HTML 被大量用于嵌入超鏈接,因此用戶可以輕松地在相關頁面和網站之間導航和插入鏈接。
          3. 網絡文檔。HTML 使組織和格式化文檔成為可能,類似于 Microsoft Word。
          4. 還值得注意的是,HTML 現在被視為官方 Web 標準。萬維網聯盟 (W3C)維護和開發 HTML 規范,同時提供定期更新。

          本文將介紹 HTML 的基礎知識,包括它的工作原理、優缺點以及它與 CSS 和 JavaScript 的關系。

          什么是 HTML?

          HTML(代表超文本標記語言)是構成大多數網頁和在線應用程序的計算機語言。超文本是用于引用其他文本片段的文本,而標記語言是告訴 Web 服務器文檔的樣式和結構的一系列標記。

          HTML 是如何工作的

          在國內的網站上找了一圈,這應該是介紹歷史最細致的,長按保存手機里翻譯

          html文件

          平均每個網站包含幾個不同的信息 HTML 頁面。例如,主頁、關于頁面和聯系頁面都將具有單獨的 HTML 文件。

          HTML 文檔是以 .html 或 .htm 擴展名結尾的文件。Web 瀏覽器讀取 HTML 文件并呈現其內容,以便互聯網用戶可以查看它。

          html元素的三個部分

          所有 HTML 頁面都有一系列 HTML 元素,由一組標簽和屬性組成。HTML 元素是網頁的構建塊。標簽告訴 Web 瀏覽器元素在哪里開始和結束,而屬性描述元素的特征。

          元素的三個主要部分是:

          • 開始標簽 - 用于說明元素開始生效的位置。標簽用左尖括號和右尖括號包裹。例如,使用開始標簽 <p> 創建一個段落。
          • 內容——這是其他用戶看到的輸出。
          • 結束標簽 - 與開始標簽相同,但在元素名稱前有一個正斜杠。例如,</p> 結束一個段落。

          這三個部分的組合將創建一個 HTML 元素:

          <p>這是在HTML中添加段落的方法。</p>

          HTML 元素的另一個關鍵部分是它的屬性,它有兩個部分——名稱和屬性值。名稱標識用戶想要添加的附加信息,并且屬性值給出進一步的說明。

          例如,添加紫色和 font-family verdana 的樣式元素將如下所示:

          < p style="color:purple;font-family:verdana" >這是在HTML中添加段落的方法。< /p >

          另一個屬性,HTML 類,對于開發和編程來說是最重要的。class 屬性添加了可以作用于具有相同類值的不同元素的樣式信息。 例如,我們將對標題 <h1> 和段落 <p> 使用相同的樣式。樣式包括背景顏色、文本顏色、邊框、邊距和填充,在 .important 類下。要在 <h1> 和 <p> 之間實現相同的樣式,請在每個開始標記后添加 class=”important”:

          <html>
          <head>
          <style>
          .important {
            background-color: blue;
            color: white;
            border: 2px solid black;
            margin: 2px;
            padding: 2px;
          }
          </style>
          </head>
          <body>
          <h1 class="important">This is a heading</h1>
          <p class="important">This is a paragraph.</p>
          </body>
          </html>

          大多數元素都有一個開始標簽和一個結束標簽,但有些元素不需要結束標簽即可工作,例如空元素。這些元素不使用結束標簽,因為它們沒有內容:

          < img src="/" alt="圖像" >

          這個圖像標簽有兩個屬性——一個src屬性,圖像路徑,和一個alt屬性,描述性文本。但是,它沒有內容,也沒有結束標簽。

          最后,每個 HTML 文檔都必須以 <!DOCTYPE> 聲明開頭,以告知 Web 瀏覽器文檔類型。使用 HTML5,doctype HTML public 聲明將是:

          < !DOCTYPE html >

          最常用的 HTML 標簽和 HTML 元素

          目前,有 142 個 HTML 標簽可以用于創建各種元素。盡管現代瀏覽器不再支持其中一些標簽,但學習所有可用的不同元素仍然是有益的。

          第二節將討論最常用的 HTML 標簽和兩個主要元素——塊級元素和內聯元素。

          塊級元素

          塊級元素占據頁面的整個寬度。它總是在文檔中開始一個新行。例如,標題元素將位于與段落元素不同的行中。

          每個 HTML 頁面都使用這三個標簽:

          • <html>標簽是定義整個 HTML 文檔的根元素。
          • <head> 標簽保存頁面標題和字符集等元信息。
          • <body>標簽包含了頁面上出現的所有內容。
          <html>
            <head>
              <!-- META INFORMATION -->  
            </head>
            <body>
              <!-- PAGE CONTENT -->
            </body>
          </html>

          其他流行的塊級標簽包括:

          • 標題標簽 - 這些范圍從 <h1> 到 <h6>,其中標題 h1 的大小最大,當它們向上移動到 h6 時變得越來越小。
          • 段落標簽——全部使用 <p> 標簽括起來。
          • 列表標簽——有不同的變體。<ol> 標簽用于有序列表,<ul> 用于無序列表。然后,使用 <li> 標記將各個列表項括起來。

          內聯元素

          內聯元素格式化塊級元素的內部內容,例如添加鏈接和強調的字符串。內聯元素最常用于在不破壞內容流的情況下格式化文本。

          例如,一個 <strong> 標簽會以粗體呈現一個元素,而 <em> 標簽會以斜體顯示它。超鏈接也是使用 <a> 標記和 href 屬性來指示鏈接目標的內聯元素:

          <a href="https://www.icodingdeu.com/" >點我!</a> 

          HTML 演變——HTML 和 HTML5 有什么區別?

          HTML 的第一個版本由 18 個標簽組成。從那時起,每個新版本都帶有添加到標記中的新標簽和屬性。迄今為止,該語言最重大的升級是 2014 年引入的 HTML5。

          HTML 和 HTML5的主要區別在于HTML5 支持新類型的表單控件。HTML5 還引入了幾個語義標簽,可以清楚地描述內容,例如 <article>、<header> 和 <footer>。

          HTML 的優點和缺點

          就像任何其他計算機語言一樣,HTML 有其優點和局限性。以下是 HTML 的優缺點:

          優點:

          • 初學者友好: HTML 具有干凈且一致的標記,以及較淺的學習曲線。
          • 支持領域廣:該語言被廣泛使用,擁有大量資源和龐大的社區。
          • 無障礙:它是開源的并且完全免費。HTML 在所有 Web 瀏覽器中本機運行。
          • 靈活的:HTML很容易與PHPNode.js等后端語言集成。

          就像任何其他計算機語言一樣,HTML 有其優點和局限性。以下是 HTML 的優缺點:

          缺點:

          • 靜止的 該語言主要用于靜態網頁。對于動態功能,您可能需要使用 JavaScript 或 PHP 等后端語言。
          • 單獨的 HTML 頁面 用戶必須為 HTML 創建單獨的網頁,即使元素相同。
          • 瀏覽器兼容性 一些瀏覽器采用新特性的速度很慢。有時較舊的瀏覽器并不總是呈現較新的標簽。

          HTML、CSS 和 Javascript 是如何相關的

          HTML 用于添加文本元素并創建內容結構。然而,僅僅建立一個專業的和完全響應的網站是不夠的。因此,HTML 需要借助層級樣式表 (CSS)和JavaScript來創建絕大多數網站內容。

          • CSS 負責樣式,例如背景、顏色、布局、間距和動畫。
          • JavaScript 添加了動態功能,例如滑塊、彈出窗口和照片庫。這三種語言是前端開發的基礎。

          結論

          HTML 是 Internet 上的主要標記語言。每個 HTML 頁面都有一系列創建網頁或應用程序內容結構的元素。

          HTML 是一種對初學者友好的語言,有很多支持,主要用于靜態網站頁面。HTML 與用于樣式的 CSS 和用于功能的 JavaScript 一起使用效果最好。

          我們還向您展示了一些在線教學課程,它們將有助于提高您的 HTML 知識或提供對 HTML 的基本理解。

          如果您有任何其他喜歡的資源來學習 HTML,請在評論部分告訴我們。


          主站蜘蛛池模板: 日本一区二区三区在线观看视频 | 亚洲日本一区二区一本一道| 亚洲综合色自拍一区| 国产伦精品一区二区免费| 精品福利一区二区三区| 在线精品亚洲一区二区三区| 国产精品日本一区二区不卡视频| 无码精品一区二区三区免费视频 | 无码欧精品亚洲日韩一区| 久久4k岛国高清一区二区| 国产精品电影一区| 日本精品夜色视频一区二区| 中日韩一区二区三区| 精品少妇ay一区二区三区 | 在线视频亚洲一区| 久久99久久无码毛片一区二区| 国精无码欧精品亚洲一区| 色狠狠色狠狠综合一区| 国产SUV精品一区二区88L| 寂寞一区在线观看| 无码aⅴ精品一区二区三区| 大屁股熟女一区二区三区| 国产午夜精品一区二区三区小说| 亚洲熟妇av一区二区三区| 99国产精品欧美一区二区三区| 亚洲国产一区二区三区| 亚洲国产成人精品无码一区二区| 日韩在线视频一区二区三区| 国产成人精品一区二区三区无码| av无码免费一区二区三区| 亚洲av成人一区二区三区在线观看| 香蕉久久一区二区不卡无毒影院 | 日本国产一区二区三区在线观看 | 成人区人妻精品一区二区不卡视频 | 国产一区二区在线观看app| 99在线精品一区二区三区| 一区 二区 三区 中文字幕| 人妖在线精品一区二区三区| 国产福利一区二区在线视频| 精品成人乱色一区二区| 国产福利视频一区二区|