计算机网络基础回顾
對于程序員來說,計算機網絡的知識是很重要也很基礎的。尤其是做web開發就要對http或者https很熟。有的時候涉及到域名,還會碰到跨域問題。這些其實都是計算機網絡相關的知識,本篇就主要回顧下計算機網絡中的重要內容:
- 1 IP地址
- 2 分層結構
- 3 網絡層
- 4 傳輸層
- 5 應用層
IP地址
IP地址是一臺機器在局域網或者公網上唯一的標識,比如最常見的我們檢測本機的網絡好不好使需要ping 127.0.0.1;在局域網的時候,需要設置局域網的地址,比如192.168.0.2;上網的時候,還需要配置貓...種種的操作都與IP地址有關系。
IP地址分類
IP地址的結構是這樣的:0-255.0-255.0-255.0-255,但是并不是每一個ip都能隨便給別人用的,IP地址大致分為五類:
| A類 | 前8位為網絡位 0開頭 | 1.0.0.0/8-126.0.0.0/8 |
| B類 | 前16位為網絡位 10開頭 | 128.0.0.0/16-191.0.0.0/16 |
| C類 | 前24位為網絡位 110開頭 | 192.168.0.0/24-223.0.0.0/24 |
| D類 | 不區分網絡位和主機位 1110開頭 | 224.0.0.0-232.0.0.0 |
| E類 | 不區分網絡位和主機位 11110開頭 | 233.0.0.0-255.0.0.0 |
這里的網絡位和主機位就涉及到子網掩碼的作用了....一般公司或者我們自己上網的IP都是C類的。這個C類的地址只是一個出口,內部會形成一個局域網,內部的IP就隨便分類啦...只要最后數據包能從這個口發出去就行啦。
note: 127.0.0.0/8作為環回地址測試使用
回環地址
127.0.0.1是回環地址,這個應該是眾所周知的。那么它到底有什么作用呢?搜索了一下知乎的答案,可以這么理解:
127.0.0.1是專門給本機用的,叫做lookback,即回環,它是一塊虛擬的網卡。如果本機的兩個軟件進行通信,就可以直接使用127.0.0.1,這樣可以避免再走一次協議棧(物理層、數據鏈路層、ip層),節省了大量的時間。這個地址一般配置再電腦的hosts文件里面,當然你也可以改...改完大量的軟件都可能不好使了...localhost默認就是指向的這個ip地址。
分層結構
計算機網絡的體系結構有幾種版本,最常見的就是OSI的七層網絡模型:
物理層-->數據鏈路層-->網絡層-->運輸層-->會話層-->表示層-->應用層另外還有TCP/IP的五層結構:
物理層-->數據鏈路層-->網絡層-->運輸層-->應用層一般TCP/IP的五層體系結構說的比較多點,就簡單的描述下他們每層的作用:
數據鏈路層
這一層主要負責數據幀的封裝、傳輸和差錯檢測。
網絡層
IP數據報
這一層是對數據報的基礎封裝,主要是針對分片和IP相關的內容:
協議
另外,這一層主要是幾個網絡協議很重要,其中包括:
ARP地址解析協議
ARP,Address Resolution Protocol 地址解析協議,是根據IP地址獲取對應的物理地址。大致的流程是:
比如A主機訪問B主機,對應的ip分別為ipa,ipb;對應的Mac地址為maca,macb
那么:
這個APR的緩存一般都是在網卡中記錄的。
RARP逆地址解析協議
RARP,Reverse Address Resolution Protocol 用于不知道自己IP只知道Mac地址而想要與其他主機通信的場景。原理過程與ARP差不多。
ICMP網際控制報文協議
ICMP,Internet Control Message Protocol 控制報文協議。這個協議其實日常使用非常多,比如ping和traceroute,它主要用于主機和路由之間傳遞控制消息。比如網絡痛不痛、主機達不達、路由是否可用等等。
IGMP網際組管理協議
IGMP,Internet Group Management Protocol 組管理協議,在組播的場景下比較有用。平時接觸的比較少...
單播、多播和廣播
- 單播就是固定的兩個ip之間的通信,比如訪問網頁、看看新聞等等;
- 多播一般用于局域網內的視頻會議等等,可以節省流量。另外現在很火的直播技術,其實用的也是單播,而非組播。因為組播目前公網沒有開放,應該是運營商利益問題或者是安全角度考慮吧
- 廣播一般也是在局域網內,比如某個具有探測功能的集群,一般會采用這種方法。
VPN
VPN的全稱是Virtual Private Network,是在公網上建立的專用網絡,通過復雜的加密手段,可以實現目標地址的遠程訪問。比如一般的公司,都會開啟VPN,這樣你放假在家有事情也可以直接連公司的VPN,就像在公司一樣進行辦公。
常用的端口號
傳輸層
UDP
UDP, User Datagram Protocol 中文是用戶數據報協議。是一種不需要進行連接的傳輸層協議,提供簡單不可靠的服務,沒有什么擁塞控制,這種傳輸協議主要就是用于音頻視頻的實時傳輸,丟包無所謂的場景。比如看足球直播,畫面花一點或者停頓一下,都是無所謂的,只要后續的傳輸能正常繼續就可以了。使用它的協議包括:TFTP、SNMP、NFS、DNS、BOOTP
特點: 無連接、盡最大努力交付、面向報文;并且沒有擁塞控制、支持多種對接方式、首部開銷小。
小故事: 據說很多有年代的即時通訊比如QQ底層是基于UDP為主的,主要的原因就是TCP在0幾年那個網絡環境很差的時代,開銷太大。一旦網絡發生擁塞,TCP的重傳或者三次握手,都會有很大的壓力。因此就采用UDP,基于應用層進行重傳、亂序等機制的封裝。參考資料:QQ為什么以UDP為主TCP為輔
TCP
TCP,Transmission Control Protocol 傳輸控制協議,它是一種面向連接、可靠的、基于字節流的傳輸通信協議。在可靠性方面,TCP通過超時重傳以及確認機制進行傳輸;在流量控制方面,采用滑動窗口協議,進行窗口內的分組確認以及重傳。
關于流量控制,有個很經典的機制就是——慢開始和擁塞避免,之前在做分布式日志采集的時候,想要引入這種機制來著,后來不了了之了。
TCP的連接采用三次握手機制
三次握手說起來很簡單,就是A想和B建立連接,那么需要經過三個步驟:
TCP的釋放采用四次握手機制
因為TCP是全雙工的通信方式,即兩個方向都可以傳輸數據。因此在釋放的時候需要雙向進行釋放。如果只釋放了單向,那么另一個方向也是可以傳輸數據的。步驟大致如下:
狀態機
參考
- http://www.jianshu.com/p/ef892323e68f
總結
- 上一篇: Android中关于dip和px以及转换
- 下一篇: brk(), sbrk() 用法详解【转