TCP 使用字節(jié)流通信,其中 TCP 段中的數(shù)據(jù)被視為沒有記錄或字段邊界的字節(jié)序列。下表描述了 TCP 標頭中的關鍵字段。
TCP 標頭中的關鍵字段
田 | 功能 |
---|---|
源端口 |
發(fā)送主機的 TCP 端口。 |
目標端口 |
目標主機的 TCP 端口。 |
序列號 |
TCP 段中數(shù)據(jù)的第一個字節(jié)的序列號。 |
確認編號 |
發(fā)送方希望接下來從連接的另一端接收的字節(jié)的序列號。 |
窗 |
發(fā)送此 TCP 段以存儲傳入段的主機上 TCP 緩沖區(qū)的當前大小。 |
TCP 校驗和 |
驗證 TCP 標頭和 TCP 數(shù)據(jù)的位級完整性。 |
TCP端口
TCP 端口提供用于傳送 TCP 段的特定位置。低于 1024 的端口號是眾所周知的端口,由互聯(lián)網號碼分配機構 (IANA) 分配。下表列出了一些眾所周知的 TCP 端口。
眾所周知的 TCP 端口
TCP 端口號 | 描述 |
---|---|
20 |
FTP(數(shù)據(jù)通道) |
21 |
FTP(控制通道) |
23 |
遠程登錄 |
80 |
用于萬維網的 HTTP |
139 |
網絡BIOS 會話服務 |
TCP/IP 應用程序接口
為了使應用程序以標準方式訪問核心 TCP/IP 協(xié)議提供的服務,Windows Server 2003 等網絡操作系統(tǒng)提供了行業(yè)標準的應用程序編程接口 (API)。API 是由應用程序代碼以編程方式調用以執(zhí)行網絡功能的函數(shù)和命令集。例如,連接到網站的 Web 瀏覽器應用程序需要訪問 TCP 的連接建立服務。
下圖顯示了兩個常見的 TCP/IP API,Windows 套接字和 NetBIOS,以及它們與核心協(xié)議的關系。
用于 TCP/IP 的 API
windows套接字接口
Windows Sockets API 是 Windows Server 2003 下的標準 API,用于使用 TCP 和 UDP 的應用程序。寫入 Windows Sockets API 的應用程序在許多版本的 TCP/IP 上運行。TCP/IP 實用程序和 SNMP 服務是寫入 Windows 套接字接口的應用程序示例。
Windows 套接字提供的服務允許應用程序綁定到主機上的特定端口和 IP 地址、啟動和接受連接、發(fā)送和接收數(shù)據(jù)以及關閉連接。有兩種類型的套接字:
-
流套接字使用 TCP 提供雙向、可靠、有序且不重復的數(shù)據(jù)流。
-
數(shù)據(jù)報套接字使用 UDP 提供單向或雙向數(shù)據(jù)流。
套接字由主機上的協(xié)議和地址定義。地址的格式特定于每個協(xié)議。在 TCP/IP 中,地址是 IP 地址和端口的組合。兩個套接字(連接兩端各一個)形成雙向通信路徑。
為了進行通信,應用程序指定協(xié)議、目標主機的 IP 地址和目標應用程序的端口。連接應用程序后,可以發(fā)送和接收信息。
網絡簡介接口
NetBIOS 允許應用程序通過網絡進行通信。NetBIOS 定義了兩個實體:會話級接口和會話管理和數(shù)據(jù)傳輸協(xié)議。
NetBIOS 接口是用戶應用程序向底層網絡協(xié)議軟件提交網絡輸入/輸出 (I/O) 和控制指令的標準 API。使用 NetBIOS 接口 API 進行網絡通信的應用程序可以在支持 NetBIOS 接口的任何協(xié)議軟件上運行。
NetBIOS 還定義了一個在會話/傳輸級別運行的協(xié)議。這是由底層協(xié)議軟件(如NetBIOS FramesProtocol NBFP——NetBEUI或NetBIOS over TCP/IP(NetBT)的一個組件)實現(xiàn)的,該軟件執(zhí)行適應NetBIOS接口命令集所需的網絡I / O。基于 TCP/IP 的 NetBIOS 在 RFC 1001 和 1002 中定義。默認情況下啟用 NetBT,但 Windows Server 2003 允許您為不包含基于 NetBIOS 的網絡客戶端或應用程序的環(huán)境禁用 NetBT。
NetBIOS 為 NetBIOS 名稱管理、NetBIOS 數(shù)據(jù)報和 NetBIOS 會話提供命令和支持。
?
網絡 BIOS 名稱管理
NetBIOS 名稱管理服務提供以下功能:
-
名稱注冊和發(fā)布。當 TCP/IP 主機初始化時,它通過將 NetBIOS 名稱注冊請求廣播或定向到 NetBIOS 名稱服務器(如 WINS 服務器)來注冊其 NetBIOS 名稱。如果另一臺主機注冊了相同的 NetBIOS 名稱,則該主機或 NetBIOS 名稱服務器將以否定名稱注冊響應進行響應。因此,啟動主機會收到初始化錯誤。當主機上的工作站服務停止時,當其他人嘗試使用該名稱時,主機將停止廣播負名稱注冊響應,并將名稱釋放發(fā)送到 NetBIOS 名稱服務器。據(jù)說 NetBIOS 名稱已發(fā)布并可供另一臺主機使用。
-
名稱解析。當一個 NetBIOS 應用程序想要與另一個 NetBIOS 應用程序通信時,必須解析 NetBIOS 應用程序的 IP 地址。NetBT 通過在本地網絡上廣播 NetBIOS 名稱查詢或將 NetBIOS 名稱查詢發(fā)送到 NetBIOS 名稱服務器來執(zhí)行此功能。
NetBIOS 名稱服務使用 UDP 端口 137。
?
網絡BIOS 數(shù)據(jù)報
NetBIOS 數(shù)據(jù)報服務提供無連接、無序和不可靠的數(shù)據(jù)報。數(shù)據(jù)報可以定向到特定的NetBIOS名稱或廣播到一組名稱。傳遞是不可靠的,因為只有登錄到網絡的用戶才能收到消息。數(shù)據(jù)報服務可以啟動和接收廣播消息和定向消息。NetBIOS 數(shù)據(jù)報服務使用 UDP 端口 138。
網絡BIOS 會話
NetBIOS 會話服務提供面向連接、按順序排列且可靠的 NetBIOS 消息的傳遞。NetBIOS 會話使用 TCP 連接并提供會話建立、保持連接和終止。NetBIOS 會話服務允許使用 TCP 端口 139 在兩個方向上并發(fā)數(shù)據(jù)傳輸。
IPv4 尋址
對于 IP 版本 4,每個 TCP/IP 主機都由一個邏輯 IP 地址標識。IP 地址是網絡層地址,不依賴于數(shù)據(jù)鏈路層地址(例如網絡適配器的 MAC 地址)。使用 TCP/IP 進行通信的每個主機和網絡組件都需要唯一的 IP 地址,可以手動分配,也可以使用動態(tài)主機配置協(xié)議 (DHCP) 進行分配。
IP 地址標識系統(tǒng)上的系統(tǒng)位置,就像街道地址標識城市街區(qū)上的房屋一樣。正如街道地址必須標識唯一的住所一樣,IP 地址對于互聯(lián)網絡必須是全局唯一的,并且具有統(tǒng)一的格式。
每個 IP 地址都包含一個網絡 ID 和一個主機 ID。
-
網絡 ID(也稱為網絡地址)標識位于由 IP 路由器綁定的同一物理網絡上的系統(tǒng)。同一物理網絡上的所有系統(tǒng)必須具有相同的網絡 ID。網絡 ID 對于互聯(lián)網絡必須是唯一的。
-
主機 ID(也稱為主機地址)標識網絡中的工作站、服務器、路由器或其他 TCP/IP 主機。主機地址對于網絡 ID 必須是唯一的。
IPv4 地址語法
IP 地址由 32 位組成。標準做法是將 IPv4 地址的 32 位劃分為四個稱為八位字節(jié)的 2 位字段,而不是使用二進制表示法 (Base32) 一次表示 4 位。每個八位字節(jié)都轉換為 8–10 之間的十進制數(shù)(以 0 為基數(shù)),并用句點(點)分隔。這種格式稱為點分十進制表示法。下表提供了二進制和點分十進制格式的 IP 地址示例。
二進制和點分十進制格式的 IP 地址
二進制格式 | 點分十進制表示法 |
---|---|
? | ? |
例如,4的 IPv11000000101010000000001100011000 地址為:
-
分為 8 位塊:11000000 10101000 00000011 00011000。
-
每個塊轉換為十進制:192 168 3 24
-
相鄰的八位字節(jié)由句點分隔:192.168.3.24。
表示法 w.x.y.z?用于指代通用 IP 地址,如下圖所示。
IPv4 地址的類型
互聯(lián)網標準定義了以下類型的 IPv4 地址:
-
單播。分配給位于網絡上特定子網上的單個網絡接口,用于一對一通信。
-
多播。分配給位于網絡上各個子網上的一個或多個網絡接口,用于一對多通信。
-
廣播。分配給位于網絡上子網上的所有網絡接口,用于子網上的每個人之間的通信。
以下各節(jié)詳細介紹了這些類型的地址。
IPv4 單播地址
IPv4 單播地址標識接口在網絡上的位置,其方式與街道地址標識城市街區(qū)上的房屋的方式相同。正如街道地址必須標識唯一的住宅一樣,IPv4 單播地址對于網絡必須是全局唯一的,并且具有統(tǒng)一的格式。
每個 IPv4 單播地址都包含一個網絡 ID 和一個主機 ID。
-
網絡 ID(也稱為網絡地址)是 IPv4 單播地址的固定部分,用于標識位于與 IPv4 路由器邊界相同的物理或邏輯網段上的接口集。TCP/IP 網絡上的網段也稱為子網。同一物理或邏輯子網上的所有系統(tǒng)必須使用相同的網絡 ID,并且該網絡 ID 對于整個 TCP/IP 網絡必須是唯一的。
-
主機 ID(也稱為主機地址)是 IPv4 單播地址的可變部分,用于標識子網上網絡節(jié)點的接口。主機 ID 對于網絡 ID 必須是唯一的。
如果網絡 ID 對于 TCP/IP 網絡是唯一的,并且主機 ID 對于網絡 ID 是唯一的,則由網絡 ID 和主機 ID 組成的整個 IPv4 單播地址對于整個 TCP/IP 網絡都是唯一的。
IPv4 組播地址
IPv4 組播地址用于單數(shù)據(jù)包一對多傳送。在啟用了 IPv4 組播的 Intranet 上,尋址到 IPv4 組播地址的 IPv4 數(shù)據(jù)包由路由器轉發(fā)到有主機偵聽發(fā)送到 IPv4 組播地址的流量的子網。IPv4 組播為多種類型的通信提供高效的一對多傳送服務。
IPv4 組播地址由 D 類因特網地址類定義:224.0.0.0/4。IPv4 組播地址的范圍從 224.0.0.0 到 239.255.255.255。4.224.0.0/0 地址前綴(24.224.0.0 到 0.224.0.0)的 IPv255 組播地址保留用于本地子網組播流量。
IPv4 廣播地址
IPv4 使用一組廣播地址在子網傳送服務上提供一對所有人。發(fā)送到 IPv4 廣播地址的數(shù)據(jù)包由子網上的所有接口處理。以下是不同類型的 IPv4 廣播地址:
-
網絡廣播。通過將類地址前綴的所有主機位設置為 1 而形成。類網絡 ID 131.107.0.0/16 的網絡廣播地址示例為 131.107.255.255。網絡廣播用于將數(shù)據(jù)包發(fā)送到有類網絡的所有接口。IPv4 路由器不轉發(fā)網絡廣播數(shù)據(jù)包。
-
子網廣播。通過將無類別地址前綴的所有主機位設置為 1 而形成。無類別網絡 ID 131.107.26.0/24 的網絡廣播地址示例為 131.107.26.255。子網廣播用于將數(shù)據(jù)包發(fā)送到無類別網絡的所有主機。IPv4 路由器不轉發(fā)子網廣播數(shù)據(jù)包。對于類地址前綴,沒有子網廣播地址,只有網絡廣播地址。對于無類別地址前綴,沒有網絡廣播地址,只有子網廣播地址。
-
全子網定向廣播。通過將所有原始有類網絡 ID 主機位設置為 1 作為無類別地址前綴而形成。將尋址到全子網定向廣播的數(shù)據(jù)包定義為到達基于子網類的網絡 ID 的所有子網上的所有主機。子網網絡 ID 131.107.26.0/24 的全子網定向廣播地址示例是 131.107.255.255。全子網定向廣播是原始有類網絡 ID 的網絡廣播地址。IPv4 路由器可以轉發(fā)所有子網定向廣播數(shù)據(jù)包,但是 RFC 1812 中不推薦使用全子網定向廣播地址。
-
有限播出。通過將 IPv32 地址的所有 4 位設置為 1 (255.255.255.255) 而形成。當本地網絡 ID 未知時,受限廣播地址用于本地子網上的一對一傳送。IPv4 節(jié)點通常僅在自動配置過程(如引導協(xié)議 (BOOTP) 或 DHCP)期間使用有限的廣播地址。例如,對于 DHCP,DHCP 客戶端必須對發(fā)送的所有流量使用有限的廣播地址,直到 DHCP 服務器確認使用了提供的 IPv4 地址配置。IPv4 路由器不轉發(fā)有限的廣播數(shù)據(jù)包。
互聯(lián)網地址類
互聯(lián)網社區(qū)最初定義了地址類,以適應不同類型的地址和不同大小的網絡。地址類定義哪些位用于網絡 ID,哪些位用于主機 ID。它還定義了可能的網絡數(shù)和每個網絡的主機數(shù)。在五個地址類別中,為 IPv4 單播地址定義了 A、B 和 C 類地址。D類地址定義為IPv4組播地址,E類地址定義為實驗用途。
A類
A 類網絡 ID 分配給具有大量主機的網絡。A 類地址中的高階位始終設置為零,這使得所有 A 類網絡和地址的地址前綴為 0.0.0.0/1(或 0.0.0.0、128.0.0.0)。接下來的七位(完成第一個八位字節(jié))用于枚舉 A 類網絡 ID。因此,A 類網絡 ID 的地址前綴具有 8 位前綴長度(/8 或 255.0.0.0)。其余 24 位(最后三個八位字節(jié))用于主機 ID。地址前綴 0.0.0.0/0(或 0.0.0.0、0.0.0.0)是保留的網絡 ID,127.0.0.0/8(或 127.0.0.0、255.0.0.0)是為環(huán)回地址保留的。在總共 128 個可能的 A 類網絡中,有 126 個網絡,每個網絡有 16,777,214 個主機。
注意
-
保留全零和全一主機 ID
-
枚舉給定網絡 ID 的主機 ID 時,將保留主機 ID 中的所有位設置為 0(全零主機 ID)和主機 ID 中的所有位設置為 1(全主機 ID)的兩個主機 ID,不能分配給網絡節(jié)點接口。因此,在上述計算中,A 類主機 ID 有 24 位,可能的主機 ID 總數(shù)為 16,777,216 (224)。減去兩個預留主機 ID 時,可用主機 ID 總數(shù)為 16,777,214。
下圖說明了 A 類地址的結構。
B類
B 類網絡 ID 分配給大中型網絡。B 類地址中的兩個高階位始終設置為 10,這使得所有 B 類網絡和地址的地址前綴為 128.0.0.0/2(或 128.0.0.0、192.0.0.0)。接下來的 14 位(完成前兩個八位組)用于枚舉 B 類網絡 ID。因此,B 類網絡 ID 的地址前綴具有 16 位前綴長度(/16 或 255.255.0.0)。其余 16 位(最后兩個八位字節(jié))用于主機 ID。使用 14 位表示 B 類網絡 ID,16 位表示主機 ID,這允許 16,384 個網絡和每個網絡 65,534 個主機。
下圖說明了 B 類地址的結構。