網絡知識學習篇,惡補網絡知識。
講主題之前,先補習一下基礎知識。
OSI網絡模型
OSI模型,Open System Interconnection 開放式通信系統互聯參考模型,是國際標准化組織ISO提出的一個試圖使全世界計算機互聯為網絡的標准框架,簡稱OSI。
OSI網絡模型按照功能划分了七層,由下往上分別是物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層。
OSI模型是最經典的網絡模型,但是結構過於復雜,我們常用的是TCP/IP模型。
TCP/IP模型
TCP/IP是一個協議族,里面有很多的協議,之所以叫CP/IP是因為TCP和IP是里面兩個很重要的協議,就這樣命名了。TCP/IP現在已經成為了Internet上通信的工業標准。
TCP/IP總共分為四層,從下往上分別是網絡接口層,網絡層,傳輸層和應用層。
應用層:各種服務和應用程序通過該層利用網絡。常用協議:HTTP超文本傳輸協議,FTP文本傳輸協議,SMTP簡單郵件傳輸協議Telnet遠程登錄,SNMP簡單網絡管理協議,DNS域名系統。
傳輸層:確認數據傳輸並進行糾錯處理。常用協議便是今天的主角:TCP傳輸控制協議和UDP用戶數據報協議。
網絡層:負責數據傳輸、路徑及地址選擇。常用協議有IP Internet協議,ICMPI Internet控制信息協議,ARP地址解析協議,RARP方向地址解析協議。
最后是網絡接口層:針對不同的物理網絡連接形式的協議。常用協議比如Ethernet以太網。
咳咳,敲黑板!
TCP
TCP 傳輸控制協議,這是一個面向連接的協議,也就是說在收發數居前,必須和對方建立一個可靠的連接,這也就到了面試中常常問到的一個點,三次握手。
說三次握手之前先來一波名次解釋,下面將會出現。
ACK:TCP報頭的控制位之一,作用是對數據進行確認,確認由目的端發回來告訴發送端這個序列號之前的數據段收到了,ACK位置為1標識有效,為0確認無效,無效將會要求重發數據以保證數據的完整性。
SYN:同步序列號,建立連接的時候使用,發送端將SYN位置置為1向目的端發送。
FIN:當發送完成發送,TCP完成數據傳輸以后需要斷開連接時,提出斷開的一方將FIN置為1.
三次握手過程:
1、主機A向主機B發送一個一個數據段,這個數據段中帶有同步序列號SYN的標志位,向主機B請求連接,說的通俗一點這一步就相當於A告訴B,我要發數據了,行不?你能拿哪個序列號最為起始數據段來回應我啊?
2、主機B收到了A發送的數據段,用一個帶有確認應答ACK和同步序列號SYN標志位的數據段響應主機A,這一步通俗講就是B收到A的問話后回復。我收到了,你可以發數據,你要用那個序列號作為其實數據段來回應我?
3、主機A收到了主機B的響應,再發送一個帶有確認應答ACK的數據段,確認已收到B的響應,這一步通俗講就是A主機告訴B主機,我收到了你的回復,我要開始傳數據了。
這樣三次握手完成,主機A和主機B建立了連接,可以傳輸數據。
TCP建立連接是三次握手,而斷開連接需要四次揮手。
四次揮手的過程:
1、主機A完成傳輸數據任務了,需要斷開,就將控制位FIN置1,提出停止連接的請求。
2、主機B收到后做出響應,確認這一方向的TCP連接將關閉,也就是告訴自己的相應的應用程序對方請求關閉,將ACK置1.
3、B主機再向A主機發送斷開請求,FIN置1.
4、主機A收到請求后進行確認,將ACK置1,這樣AB之間雙向關閉結束。
三次握手和四次揮手可以發映出TCP使用面向連接的通信方式,使得數據通信的可靠性大大提高,發送端和接收端在正式傳輸數居前就有了交互,為正式傳輸打下了基礎。
UDP
UDP 用戶數據報協議,是一個非連接的協議,和TCP的面向連接相對,UDP在傳輸數據之前,發送端和接收端不建立連接,當它想傳送數據時就抓取應用程序中的數據盡可能快的將它扔出去。發送端速度只是受到應用程序的生成數據的速度,計算機的能力和帶寬的限制。接收端,UDP會把每個消息段放入隊列,讓應用程序每次從隊列中讀一個消息段。
UDP的吞吐量不受擁擠算法的調整,只受軟件生成數據的速度,發送端接收端機器性能還有帶寬的限制。
UDP傳輸數據的時候不需要建立連接,不需要維持連接狀態,所以對系統資源要求少,且一台服務器可以實現向多台客戶機發送相同的數據。說到資源要求少,UDP信息包的標題為8字節,而TCP包頭最小長度為20字節,相對來說額外開銷小。
UDP不保證可靠交付,使用盡最大努力交付,所以主機不需要維持復雜的鏈接狀態表。
前面也說到,UDP是非連接的協議,而是面向報文的。發送端應用程序交下來的報文,進行添加首部處理后就交付給IP層,不進行其他處理,不拆分要不合並,保留報文辯解,所以以UDP傳輸時,應用程序需要選擇合適的報文大小。
我們平時測試兩台電腦是否通信所說的是否PING通,用的就是UDP,發送方發送一個UDP數據報,對方主機收到數據報的話就反饋回來,那么就是能PING通。
小結
TCP和UDP的主要區別:
1、TCP面向連接,UDP面向報文。TCP是流模式,UDP是數據報模式
2、TCP需要建立連接,維持連接狀態,系統資源要求更多,而UDP不需要維持雙方連接狀態,系統資源要求少,且可以向多台客戶機同時發送數據。
3、TCP包頭最小長度20字節,UDP信息報標題8字節,額外開銷少。
4、TCP的連接保證了數據的可靠性,UDP不保證可靠交付。
5、TCP保證數據的順序,UDP不保證數據順序。
6、UDP結構更為簡單。
這也只是我個人寫的幾點不同,還有很多不同,更有好多知識等着我們學習,大佬們多指點。