# 網絡,第 1 部分:簡介
> 原文:<https://github.com/angrave/SystemProgramming/wiki/Networking%2C-Part-1%3A-Introduction>
警告:很明顯,頁面是 _ 而不是 _ 完整的 IP,UDP 或 TCP 描述!相反,它只是一個簡短的介紹,足以讓我們在以后的講座中建立這些概念。
## 什么是“IP4”“IP6”?
以下是互聯網協議(IP)的“30 秒”介紹 - 這是從一臺機器向另一臺機器發送信息包(“數據報”)的主要方式。
“IP4”,或者更準確地說,“IPv4”是因特網協議的第 4 版,其描述了如何通過網絡從一臺機器向另一臺機器發送信息包。目前,互聯網上大約 95%的數據包都是 IPv4 數據包。 IPv4 的一個重要限制是源和目標地址限制為 32 位(IPv4 是在連接到同一網絡的 40 億設備的想法是不可想象的時候設計的 - 或者至少不值得使數據包大小更大)
每個 IPv4 數據包包括一個非常小的標頭 - 通常為 20 個字節(更確切地說,“八位字節”),包括源和目標地址。
從概念上講,源地址和目標地址可以分為兩部分:網絡號(高位)和低位表示該網絡上的特定主機號。
較新的分組協議“IPv6”解決了 IPv4 的許多限制(例如,使路由表更簡單和 128 位地址),但是不到 5%的網絡流量是基于 IPv6 的。
機器可以具有 IPv6 地址和 IPv4 地址。
## “沒有像 127.0.0.1 這樣的地方”!
特殊的 IPv4 地址是`127.0.0.1`,也稱為 localhost。發送到 127.0.0.1 的數據包永遠不會離開機器;地址被指定為同一臺機器。
注意,32 位地址被分成 4 個八位字節,即點表示法中的每個數字可以是 0-255(含)。但是,IPv4 地址也可以寫為整數。
## ......和......“沒有像 0:0:0:0:0:0:0:1 那樣的地方?”
IPv6 中的 128 位本地主機地址是`0:0:0:0:0:0:0:1`,可以縮寫形式寫入`::1`
## 什么是港口?
要使用 IPv4(或 IPv6)將數據報(數據包)發送到 Internet 上的主機,您需要指定主機地址和端口。端口是無符號的 16 位數(即最大端口號是 65535)。
進程可以偵聽特定端口上的傳入數據包。但是,只有具有超級用戶(root)訪問權限的進程才能偵聽端口&lt; 1024.任何進程都可以偵聽 1024 或更高的端口。
常用端口是端口 80:端口 80 用于未加密的 http 請求(即網頁)。例如,如果 Web 瀏覽器連接到 [http://www.bbc.com/](http://www.bbc.com/) ,則它將連接到端口 80。
## 什么是 UDP?什么時候使用?
UDP 是一種建立在 IPv4 和 IPv6 之上的無連接協議。它使用起來非常簡單:確定目標地址和端口并發送數據包!但是,網絡不保證數據包是否會到達。如果網絡擁塞,可能會丟棄數據包(也稱為數據報)。數據包可能會重復或無序到達。
在兩個遠程數據中心之間,通常會看到 3%的數據包丟失。
UDP 的典型用例是接收最新數據比接收所有數據更重要。例如,游戲可以發送玩家位置的連續更新。流視頻信號可以使用 UDP 發送圖片更新
## 什么是 TCP?什么時候使用?
TCP 是基于連接的協議,它建立在 IPv4 和 IPv6 之上(因此可以描述為“TCP / IP”或“TCP over IP”)。 TCP 在兩臺機器之間創建 _ 管道 _ 并抽象出互聯網的低級別數據包性質:因此,在大多數情況下,從一臺機器發送的字節最終將到達另一端而不會出現重復或數據丟失。
TCP 將自動管理重發數據包,忽略重復數據包,重新排列無序數據包以及更改數據包發送速率。
TCP 的三次握手稱為 SYN,SYN-ACK 和 ACK。此頁面上的圖表有助于理解 TCP 握手。 [TCP 握手](http://www.inetdaemon.com/tutorials/internet/tcp/3-way_handshake.shtml)
當今因特網上的大多數服務(例如,web 服務)使用 TCP,因為它隱藏了因特網的較低的分組級特性的復雜性。
- UIUC CS241 系統編程中文講義
- 0. 簡介
- #Informal 詞匯表
- #Piazza:何時以及如何尋求幫助
- 編程技巧,第 1 部分
- 系統編程短篇小說和歌曲
- 1.學習 C
- C 編程,第 1 部分:簡介
- C 編程,第 2 部分:文本輸入和輸出
- C 編程,第 3 部分:常見問題
- C 編程,第 4 部分:字符串和結構
- C 編程,第 5 部分:調試
- C 編程,復習題
- 2.進程
- 進程,第 1 部分:簡介
- 分叉,第 1 部分:簡介
- 分叉,第 2 部分:Fork,Exec,等等
- 進程控制,第 1 部分:使用信號等待宏
- 進程復習題
- 3.內存和分配器
- 內存,第 1 部分:堆內存簡介
- 內存,第 2 部分:實現內存分配器
- 內存,第 3 部分:粉碎堆棧示例
- 內存復習題
- 4.介紹 Pthreads
- Pthreads,第 1 部分:簡介
- Pthreads,第 2 部分:實踐中的用法
- Pthreads,第 3 部分:并行問題(獎金)
- Pthread 復習題
- 5.同步
- 同步,第 1 部分:互斥鎖
- 同步,第 2 部分:計算信號量
- 同步,第 3 部分:使用互斥鎖和信號量
- 同步,第 4 部分:臨界區問題
- 同步,第 5 部分:條件變量
- 同步,第 6 部分:實現障礙
- 同步,第 7 部分:讀者編寫器問題
- 同步,第 8 部分:環形緩沖區示例
- 同步復習題
- 6.死鎖
- 死鎖,第 1 部分:資源分配圖
- 死鎖,第 2 部分:死鎖條件
- 死鎖,第 3 部分:餐飲哲學家
- 死鎖復習題
- 7.進程間通信&amp;調度
- 虛擬內存,第 1 部分:虛擬內存簡介
- 管道,第 1 部分:管道介紹
- 管道,第 2 部分:管道編程秘密
- 文件,第 1 部分:使用文件
- 調度,第 1 部分:調度過程
- 調度,第 2 部分:調度過程:算法
- IPC 復習題
- 8.網絡
- POSIX,第 1 部分:錯誤處理
- 網絡,第 1 部分:簡介
- 網絡,第 2 部分:使用 getaddrinfo
- 網絡,第 3 部分:構建一個簡單的 TCP 客戶端
- 網絡,第 4 部分:構建一個簡單的 TCP 服務器
- 網絡,第 5 部分:關閉端口,重用端口和其他技巧
- 網絡,第 6 部分:創建 UDP 服務器
- 網絡,第 7 部分:非阻塞 I O,select()和 epoll
- RPC,第 1 部分:遠程過程調用簡介
- 網絡復習題
- 9.文件系統
- 文件系統,第 1 部分:簡介
- 文件系統,第 2 部分:文件是 inode(其他一切只是數據...)
- 文件系統,第 3 部分:權限
- 文件系統,第 4 部分:使用目錄
- 文件系統,第 5 部分:虛擬文件系統
- 文件系統,第 6 部分:內存映射文件和共享內存
- 文件系統,第 7 部分:可擴展且可靠的文件系統
- 文件系統,第 8 部分:從 Android 設備中刪除預裝的惡意軟件
- 文件系統,第 9 部分:磁盤塊示例
- 文件系統復習題
- 10.信號
- 過程控制,第 1 部分:使用信號等待宏
- 信號,第 2 部分:待處理的信號和信號掩碼
- 信號,第 3 部分:提高信號
- 信號,第 4 部分:信號
- 信號復習題
- 考試練習題
- 考試主題
- C 編程:復習題
- 多線程編程:復習題
- 同步概念:復習題
- 記憶:復習題
- 管道:復習題
- 文件系統:復習題
- 網絡:復習題
- 信號:復習題
- 系統編程笑話