tcp/ip中有兩個具有代表性的傳輸層協議,分別為:
套接字(socket):
使用tcp或udp時,會廣泛使用到套接字(socket)的api。套接字原本是由bsd unix開發的,但是後被移植到了windows的winsock以及嵌入式作業系統中。
應用程式利用套接字,可以設定對端的ip位址、埠號,並實現資料的傳送與接收。
資料鏈路和ip中的位址,分別指的是mac位址和ip位址。
前者用來識別同一鏈路中不同的計算機,後者用來識別tcp/ip網路中互連的主機和路由器。
同樣的,在傳輸層中也有類似於位址的概念,那就是埠號。
埠號用來識別同一臺計算機中進行通訊的不同應用程式。因此,它也被稱為程式位址。
另:僅憑目標埠識別某乙個通訊是遠遠不夠的。通常採用5個資訊來識別乙個通訊。它們分別是:
埠號如何確定
埠號與協議
埠號由其使用的傳輸層協議決定。因此,不同的傳輸協議可以使用相同的埠號。例如,tcp與udp使用同乙個埠號,但使用目的各不相同。這是因為埠號上的處理會根據每個傳輸協議的不同而進行的。
資料到達ip層後,會先檢查ip首部中的協議號,再傳給相應協議的模組。
udp是user datagram protocol 的縮寫。
udp是利用ip提供面向無連線的通訊服務,不提供複雜的控制機制。
並且它是將應用程式發來的資料在收到的那一刻,立刻按照鴛鴦傳送到網路上的一種機制。
即使是出現網路擁堵的情況下,udp也無法進行流量控制等避免網路擁堵的行為。此外,傳輸途中即使出現丟包,udp也不負責重發。甚至當出現包的到達順序亂掉是也沒有糾正的功能。
如果需要這些細節控制,那麼不得不交有採用udp的應用程式去處理。
由於udp面向無連線,他可以隨時傳送資料。再加上udp本身的處理既簡單又高效,因此常用於以下幾個方面:
udp 首部
如下圖,除去資料的部分就是udp的首部。
udp的首部源埠號,目標埠號,包長和校驗和組成。
這個概念同樣適用於即將介紹的 tcp 首部,但是tcp的校驗和無法關閉。
與udp不同,tcp則"人如其名",可以說是對"傳輸、傳送、通訊"進行"控制"的"協議"。
tcp充分實現了資料傳輸時各種控制功能,可以進行丟包是的重發控制,還可以對次序亂掉的分包進行順序控制。
此外,tcp作為一種面向連線的協議,只有在確認通訊對端存在時才會傳送資料,從而可以控制通訊流量的浪費。
連線連線是指各種裝置、線路,或網路中進行通訊的兩個應用程式為了相互傳遞訊息而專有的、虛擬的通訊線路,也叫做虛擬電路。
一旦建立了連線,進行通訊的應用程式只是用這個虛擬的通訊線路傳送和接收資料,就可以保障資訊的傳輸。應用程式不用顧慮ip網路上可能發生的各種問題,依然可以**資料。
tcp則負責控制鏈結的建立、斷開、保持等管理工作。
tcp 首部
和 udp 首部相比,tcp 首部要複雜得多。解析這個首部的時間也相應的會增加,這是導致 tcp 連線的效率低於 udp 的原因之一。
其中某些關鍵字段解釋如下:
cwr: 與後面的ece標誌都用於ip首部的ecn欄位。ece標誌為1時,則通知對方已將擁塞視窗縮小。
ece: 表示ecn-echo。置為1會通知通訊對方,從對方到這邊的網路有擁塞。在收到資料報的ip首部中ecn為1時將tcp首部中的ece置為1。
urg: 此標誌表示tcp包的緊急指標域(後面馬上就要說到)有效,用來保證tcp連線不被中斷,並且督促中間層裝置要盡快處理這些資料;
ack: 此標誌表示應答域有效,就是說前面所說的tcp應答號將會包含在tcp資料報中;有兩個取值:0和1,為1的時候表示應答域有效,反之為0;
psh: 這個標誌位表示push操作。所謂push操作就是指在資料報到達接收端以後,立即傳送給應用程式,而不是在緩衝區中排隊;
rst: 這個標誌表示連線復位請求。用來復位那些產生錯誤的連線,也被用來拒絕錯誤和非法的資料報;
syn: 表示同步序號,用來建立連線。syn標誌位和ack標誌位搭配使用,當連線請求的時候,syn=1,ack=0;連線被響應的時候,syn=1,ack=1;這個標誌的資料報經常被用來進行埠掃瞄。掃瞄者傳送乙個只有syn的資料報,如果對方主機響應了乙個資料報回來 ,就表明這台主機存在這個埠;但是由於這種掃瞄方式只是進行tcp三次握手的第一次握手,因此這種掃瞄的成功表示被掃瞄的機器不很安全,一台安全的主機將會強制要求乙個連線嚴格的進行tcp的三次握手;
fin: 表示傳送端已經達到資料末尾,也就是說雙方的資料傳送完成,沒有資料可以傳送了,傳送fin標誌位的tcp資料報後,連線將被斷開。這個標誌的資料報也經常被用於進行埠掃瞄。
tcp是面向連線的、傳輸可靠(保證資料正確性且保證資料順序)、用於傳輸大量資料(流模式)、速度慢,建立連線需要開銷較多(時間,系統資源)。
tcp是一種流模式的協議,是面向連線的,也就是說,在連線持續的過程中,socket 中收到的資料都是由同一臺主機發出的(劫持什麼的不考慮),因此,知道保證資料是有序的到達就行了,至於每次讀取多少資料不關心。
tcp:面向連線、傳輸可靠(保證資料正確性,保證資料順序)、用於傳輸大量資料(流模式)、速度慢,建立連線需要開銷較多(時間,系統資源)。
udp:面向非連線、傳輸不可靠、用於傳輸少量資料(資料報模式)、速度快。
關於tcp是一種流模式的協議,udp是一種資料報模式的協議,這裡要說明一下,tcp是面向連線的,也就是說,在連線持續的過程中,socket 中收到的資料都是由同一臺主機發出的(劫持什麼的不考慮),因此,知道保證資料是有序的到達就行了,至於每次讀取多少資料自己看著辦。
而udp是無連線的協議,也就是說,只要知道接收端的ip和埠,且網路是可達的,任何主機都可以向接收端傳送資料。這時候,如果一次能讀取超過乙個報文的資料,則會亂套。比如,主機a向傳送了報文p1,主機b傳送了報文p2,如果能夠讀取超過乙個報文的資料,那麼就會將p1和p2的資料合併在了一 起,這樣的資料是沒有意義的。
TCP IP筆記 六 TCP與UDP
tcp ip中有兩個具有代表性的傳輸層協議,分別為 套接字 socket 使用tcp或udp時,會廣泛使用到套接字 socket 的api。套接字原本是由bsd unix開發的,但是後被移植到了windows的winsock以及嵌入式作業系統中。應用程式利用套接字,可以設定對端的ip位址 埠號,並實...
《TCP IP詳解》學習筆記(六) UDP 協議
udp 是傳輸層協議,和 tcp 協議處於乙個分層中,但是與 tcp 協議不同,udp 協議並不提供超時重傳,出錯重傳等功能,也就是說其是不可靠的協議。由於很多軟體需要用到 udp 協議,所以 udp 協議必須通過某個標誌用以區分不同的程式所需要的資料報。埠號的功能就在於此,例如某乙個 udp 程式...
tcp ip協議集,tcp和udp區別
tcp與udp區別總結 1 tcp面向連線 如打 要先撥號建立連線 udp是無連線的,即傳送資料之前不需要建立連線 2 tcp提供可靠的服務。也就是說,通過tcp連線傳送的資料,無差錯,不丟失,不重複,且按序到達 udp盡最大努力交付,即不保證可靠交付 4 每一條tcp連線只能是點到點的 udp支援...