現在進入了傳輸層,是OSI(Open Systems Interconnection )模型的第四層,送的那一端負責把應用層丟下來的Message 拆分成Segments並往下傳到Network Layer;而收到的那一端就負責重組(reassembles)然後往上傳到應用層。
協定上多使用TCP、UDP(其他還有很多)
我們需要IP 與 Port 才能把訊息送到正確的socket
TCP 比 UDP 複雜很多,TCP 提供可靠、有序的「雙向傳輸」,不僅會flow control(流量控制)、congestion control(阻塞控制)、connection setup(預先建立連線),此外還有報錯功能;而UDP就是unreliable, unordered
的「單向傳輸」,而且是Connectionless的(TCP是Connection-oriented)!
可以看看:我之前的文章
A:connectionless是不事先安排將消息從一個端點發送到另一端點。
下圖是UDP的segment型式,前四個欄位為header部分,header每一欄位是16bits,這裡逐一介紹:
下面那一大塊寫著"application data"的是主要內容,也叫(payload)
稍微檢查有無錯誤的機制,在UDP中如果發現錯誤直接丟掉此封包,不會報錯(也會有漏網之魚)
此外,世界上還有很多檢查的算法,有的還有錯誤校正功能EX:哈明code
參見:WIKI|Checksum
加完之後如果多一位,就把那多出的一位加在最右邊,如此得到"sum",
sum 做 flip(0變1,1便0) 就是checksum。
名詞解釋:flipped bits:傳送過程可能發生0變成1,1變成0的錯誤。
注:在UDP中,sender 與 receiver都會做相同的檢查。
之後TCP會詳細解釋,這裡稍微點一下。
因為TCP比較複雜,傳輸時需要4個數組(source IP 位址、source Port、目的地 IP 位址、目的地Port),
如此可以確認你開的socket是唯一的。
UDP 只要兩個:目的地 IP 位址、目的地Port
下圖是多線程