網絡是個不少人都知道, 卻又是不少人都說不清楚的東西, 對於通常用戶來講, 沒什麼問題. 但對於一個軟件開發人員來講, 至少要可以大體描述本身的程序中網絡部分是如何運做的.git
由於, 目前幾乎任何程序都和網絡有關, 純粹的單機程序幾乎已經絕跡. 若是弄不清楚網絡的運做機制, 除了網絡相關問題每每一籌莫展, 而網絡問題每每是開發過程當中很難遇到的.瀏覽器
下面就以一次 HTTP 請求爲例, 儘可能簡要的說明網路的方方面面.服務器
網絡中一些常見的基本概念, 弄清楚以後有助於瞭解網絡的構造.網絡
這是最多見的網絡設備, 經過網線(無線網除外), 咱們纔將一個個網絡設備鏈接在一塊兒, 網線承擔的責任就是就是把咱們的數據都經過電信號傳輸到不一樣的地方.socket
收到的網絡包廣播到整個網絡.性能
收到的包根據 MAC 地址錶轉發到指定的端口, 交換機的端口有 MAC 模塊, 可是沒有 MAC 地址 交換機的 MAC 地址表主要包含 2 個信息:google
交換機的特殊操做:加密
二層交換機 所謂的二層交換機, 其實和通常的交換機在功能上沒有什麼區別, 就是更高級, 性能更好的交換機而已.設計
路由器是基於 IP 設計的, 路由器中的每一個端口都有 IP 地址和 MAC 地址 經過路由器轉發的包, 其中接收方 MAC 地址就是路由器端口的 MAC 地址.視頻
如今的路由器其實包含了交換機的功能, 若是隻是純粹的路由器, 包的傳輸功能實際上是交給交換機來完成的. 路由器設計成只負責 IP 層是有重要意義的, 這樣具體的傳輸就能夠委託給其餘各類傳輸技術.
路由器是按照 IP 規則傳輸包的設備(IP) 集線器是按照以太網規則傳輸包的設備(MAC) 也就是說, 網絡包的傳輸過程當中, IP 協議頭部中的目的 IP 能夠不變, 可是 IP 協議頭部中 MAC 是不斷變化的, 傳輸過程當中, 中間通過了幾回路由器就會變化幾回.
接入網就是指鏈接互聯網與家庭, 公司網絡的通訊線路.
互聯網與家庭, 公司的網路結構基本同樣, 不一樣點主要有 2 個:
接入網中的術語:
IP 地址由 網絡號+主機號 組成
經常使用的 IP 地址有 A, B, C 3 類:
注 主機號全是 0, 表示整個子網, 主機號全是 1, 表示向子網上全部設備發送包, 即 廣播
DNS 查詢消息由 3 部分組成:
DNS 消息示例: a) 域名: google.com b) Class: IN c) 記錄類型: A DNS 會根據這條消息, 返回 goole.com 的 IP 地址
以太網是一種網絡類型, 它有 3 個基本特徵:
無線局域網也符合以太網的特徵, 只是識別包內容不用以太類型, 用的是其餘類型
以太網有 全雙工 和 半雙工 2 種方式:
協議棧主要是 TCP/IP 協議, 其餘還有 UDP, ICMP, ARP 等等
服務器和客戶端對於 socket 通訊來講是沒有區別的, 惟一的區別在於調用 socket 庫的方式上.
客戶端 (1). 建立套接字(建立套接字階段) (2). 用管道鏈接服務器端的套接字(鏈接階段) (3). 收發數據(收發階段) (4). 斷開管道並刪除套接字(斷開階段)
服務端 (1). 建立套接字(建立套接字階段) (2-1). 將套接字設置爲等待鏈接狀態(等待鏈接階段) (2-2). 接受鏈接(接受鏈接階段) (3). 收發數據(收發階段) (4). 斷開管道並刪除套接字(斷開階段)
服務端的套接字, 須要 4 種信息來確認:
有了這 4 種信息, 就能夠肯定服務端的套接字, 爲何還要套接字描述符來指定套接字呢? 由於: