首頁 > 易卦

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

作者:由 老夫科技說 發表于 易卦日期:2023-01-06

源埠號和目的埠號怎麼求

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

網路程式設計

01

網路套接字

源IP地址和目的IP地址以及源埠號和目的埠號的組合稱為網路套接字,

用於標識客戶端請求的伺服器和服務;應用程式可以透過套接字開啟、讀寫、關閉資料,允許應用程式在網路中加入I\O,與網路中的其他應用程式進行通訊。

傳輸層實現端到端的通訊,每個傳輸層連線有兩個端點,那麼,這個連線的端點是什麼呢?既不是主機的IP地址,也不是某個應用程序,更也不是傳輸層的協議埠;而是套接字(socket)。每一個傳輸層連線唯一地被通訊兩端的兩個端點(即兩個套接字)所確定。

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

網路套接字

根據

RFC793

的定義:

IP地址和埠號組合起來就構成了套接字

。套接字,實際上是一個通訊端點,每個套接字都有一個套接字序號,包括主機的IP地址與一個16位的主機埠號,展現形式是點分十進位制的IP地址後面寫上埠號,中間用冒號或逗號隔開,即:

主機IP地址:埠號,比

如,113。301。151。231:23就是一個套接字。

兩個應用程式之間的資料傳輸要透過套接字來完成。當兩個網路應用程式進行通訊時,其中的一個網路應用程式將要傳輸的資訊寫入它所在主機的Socket中,然後該Socket透過網路介面卡的傳輸介質將這段資訊傳送給另一臺主機的Socket中,使這段資訊能傳送到其他程式中。

TCP/IP的核心內容被封裝在作業系統中,並向外提供了程式設計介面,如果應用程式要使用TCP/IP,可以透過系統提供的TCP/IP的程式設計介面來實現。在Windows環境下,網路應用程式程式設計介面稱作Windows Socket,Linux 下Linux socket API存在標頭檔案sys/socket。h中。

網路程式設計

透過呼叫套接字介面來實現程序間通訊的程式設計就是網路程式設計。利用網路程式設計便可以實現同一系統中不同程序之間的通訊,更是可以透過網路連線實現不同系統中多個程序的通訊。

也正是因為網路程式設計的出現,才能實現現如今大型網路遊戲的多人競技,若是沒有網路,遊戲再怎麼發展也只是單機遊戲。

網路程式設計三要素

IP地址:能夠確定是哪一臺主機

埠號:能夠確定主機上的某個程序

網路通訊協議:制定網路通訊、資料互動的規則

Java 中的網路程式設計:

java 對網路程式設計也提供了很好的支援,java 中關於網路程式設計的api位於java。net包下。

02

IP

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

IP

IP,

即Internet Protocol,網際互連協議的縮寫,簡稱“網協”;是TCP/IP體系中的網路層協議,為計算機網路互連通訊而設計,IP地址具有唯一性。

IP地址根據網路通訊協議的不同,有IPv4和IPv6兩種:

IPv4:

網際協議版本4(全稱 Internet Protocol version 4,簡稱IPv4),又稱網際網路通訊協議第四版,比如:192。168。0。7

IPv6:

網際網路協議第6版,全稱 Internet Protocol Version 6,簡稱IPv6,是網際網路工程任務組(

IETF

)為替代IPv4而設計的下一代IP協議,其地址數量號稱可以為全世界的每一粒沙子編上一個地址,地址比如:1080:0:0:0:8:800:200C:417A

IP地址編址方案,

IP地址編址方案將IP地址空間劃分為A、B、C、D、E五類,其中A、B、C是基本類,D、E類作為多播和保留使用。

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

IP地址編址方案

本機IP地址

127。0。0。1

localhost

Java 中的IP地址

在Java中,使用InetAddress類來表示IP地址,InetAddress類有兩個子類:Inet4Address類 和 Inet6Address類,分別對應IPv4和IPv6。

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

InetAddress類

InetAddress類的使用也很簡單,demo如下所示:

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

InetAddressDemo。java

上述demo執行結果如下所示:

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

InetAddressDemo 執行結果

03

埠(port)

,英文port的中文名稱,常見於各類網路技術文件,可以認為是裝置與外界通訊交流的出口。埠可分為

虛擬埠

物理埠

,虛擬埠指計算機內部或交換機路由器內的埠,對普通使用者不可見,例如計算機中的80、21、23等埠;而物理埠是位於裝置外部的可見埠,比如電腦主機的RJ45網口,交換機、路由器、集線器等的RJ45埠,電話使用的RJ11插口等都屬於物理介面。

協議埠

如果把IP地址比作一棟建築,埠就是出入這棟建築的門,建築可以有多個門;同理,IP地址的埠也可以有多個,而且會比門的數量多得多,因為一個IP地址的埠可以有65536(65536 = 2^16)個之多;

埠是透過埠號來標記的

,埠號只有整數,範圍是從0 到65535(2^16-1),共計65536個。因此,埠的使用需要注意:

在同一個計算機系統中,埠不能重複;若埠重複,會引發埠衝突而導致系程式執行錯誤;

在開發中,經常會自定義埠,在自定義埠時儘量選擇10000以後的,避免和系統現有的程式衝突;

04

協議

協議(protocol)

,全稱是網路協議,是要通訊的計算機雙方必須共同遵從的一組約定,如怎樣建立連線、通訊雙方如何互相識別、如何保證通訊的順利完成等,

網路通訊協議的三要素:語法、語義、時序

。只有雙方都按照通訊規則建立連線,通訊才能完成。

語法:

協議中資料和要傳輸的資訊的結構或格式;

語義:

發出何種控制資訊,可以完成何種動作,又會做出何種響應;

時序(同步):

即事件實現順序的詳細說明。

網路模型各層中的網路協議:

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

網路模型各層中的網路協議

下面是一些常見的網路協議:

http:超文字傳輸協議資源,基本所有面向用戶的網路應用都是使用http協議進行通訊的

https:用安全套接字層傳送的超文字傳輸協議

ftp :檔案傳輸協議

mailto:電子郵件地址

file:當地電腦或網上分享的檔案,當我們用瀏覽器開啟本地檔案時便會看到這個協議

05

MIME 編碼

在因特網上有很多的不同型別的資源,HTTP協議要為每種型別的資源打上於是MIME型別標籤,依此來描述其傳輸的資源型別。

MIME,全稱是Multipurpose Internet Mail Extension,即“多用途因特網郵件擴充套件”,最初的設計是為了解決在不同的電子郵件系統之間來回搬移報文時存在的問題,但由於其出色的表現,所以,在HTTP 協議中也繼續使用,使用其來標記資原始檔型別。

MIME 型別是一種文字標記,其內容由一種主要的資源型別和一個子型別組成,中間使用“/”分隔。在HTTP協議中使用首部中的Content-type欄位來表示,常見的MIME型別有數百個,以下是一些常見的:

text/html:表示html格式的文字文件;

text/plain:表示ASCII格式的文字文件;

image/jpeg:表示jpeg格式的圖片;

image/gif:表示gif格式的圖片;

video/quicktime:表示apple的QuickTime電影型別;

application/vnd。ms-powerpoint:表示微軟的ppt文件;

06

URI、URL、URI

URI

:統一資源識別符號(

Uniform Resource Identifier

,簡稱URI),是一個用於標識聯網資源名稱的字串,能夠在世界範圍內唯一標識某一資源。URI有兩種形式,即URL和URN。

URL:

統一資源定位符,是資源識別符號最常見的形式,用於定位某一網際網路上的資源,是對可以從網際網路上得到的資源的位置和訪問方法的一種簡潔的表示,使用URL可以明確說明如何從一個精確、固定的位置獲取資源。

大部分的URL,都是由三部分組成:

scheme:這裡通常是協議頭,如:http,https;

伺服器地址:伺服器地址一般指的就是我們常說的域名,比如:baidu。com;

資源位置:跟在域名之後的部分,比如:/index,其指定了伺服器上的某個資源;

網際網路上的每個資源都有一個唯一的URL,它會指出檔案的位置以及客戶端的處理方式,現在幾乎所有的URI都是URL,所以,平常所說的URI指的就是URL。

URN:

統一資源名,URN是作為特定內容的唯一名稱使用的,而且與資源所在的位置無關,因此,使用URN,就不必擔心因資源遷移而導致無法訪問的問題。此外,還可以使用同一個名稱透過多種網路協議來訪問資源。

比如:urn:ietf:rfc:2141 可以用來命名RFC 2141文件,而不閉擔心其位於何處。

07

TCP、UDP

在傳輸層中的TCP協議和UDP協議在網路程式設計會經常使用到,下面就來介紹介紹:

TCP :

面向連線(經歷三次握手)、傳輸可靠(保證資料正確性,保證資料順序)、用於傳輸大量資料(流模式)、速度慢,建立連線需要開銷較多(時間,系統資源)。 工作模式在服務端和客戶端之間進行。

UDP:

面向非連線、傳輸不可靠(容易發生丟包[,導致資料丟失)、用於傳輸少量資料(資料報包模式)、速度快。工作模式在傳送端和接收端客戶端之間進行。

在所有的網路程式語言中都提供了對TCP協議和UDP協議的支援,Java 同樣也不例外,下面就透過兩個demo來展示:

Java 中的TCP

服務端:Server。java

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

tcp 服務端

客戶端:Client。java

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

tcp 客戶端

記得要先執行服務端,再執行客戶端。不然,會有意想不到的結果。

Java 中的UDP

傳送端:Send。java

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

udp 傳送端

接收端:Receive。java

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

udp 接收端

現執行接收端,再執行傳送端即可。

完結。老夫雖不正經,但老夫一身的才華

想了解更多精彩內容,快來關注老夫不正經

何謂網路套接字,埠、IP、協議如何配合,TCP、UDP有何不同?

圖解TCP/IP 第5版

¥

45。3

京東

購買