1. 傳輸層的作用
在傳輸層中有兩個特別重要的協議 TCP/UDP .
以快遞員送快遞為例說明這個問題吧. 在進行包裹傳輸的過程中快遞員需要根據快遞上的目的地址(目的計算機)來投遞包裹(IP數據報), 加入在快遞單上只寫了收件人的所在地, 所在單位, 而只寫了收件人的姓沒有寫收件人的名字, 此時包裹(數據報)就不知道應該發送給誰, 因此在進行包裹收發的過程中必須寫上收件的詳細名字(應用程序), 此時的收件人的名字就相當于端口號.因此端口號是用來表示一個主機上進行通信的不同應用程序的編號. 其中 IP 數據報分為源 IP 目的 IP 源端口號 目的端口號以及有效載荷
2. 通信處理
TCP / IP 的眾多應用程序都是以客戶端服務器端進行運行. 其中 的客戶端相當于客戶, 而服務器端是用來提供服務的. 作為服務器端的程序必須要先啟動隨時等待客戶的接入. 其中的服務進程都是守護進程. 在確認一個請求究竟是那個服務端發來的, 此時可以通過收到數據報的端口號進行判斷.
3. 兩種協議 TCP/UDP
(1)TCP
TCP是面向連接有可靠性的面向字節流的協議. 其中的字節流表示數據在發送的時候一次可以發送一個數據報, 也可以一次發送10個數據報, 接收數據報的時候一次可以接收1個也可以接收10個. 即數據在接收和發送的時候的數目是一個位置數, 完全由操作系統決定. 但是TCP實行”順序控制”, “重發控制”機制同時也涉及”流量控制”, “擁塞控制”
(2)UDP
UDP 是不具有可靠性傳輸的數據報協議. 它會將細微的處理交給上層的應用層完成. 在 UDP 的情況下, 雖然可以保證發送消息的大小, 但是不能保證消息一定會到達. 如果出錯會進行重發處理.
4. TCP 與 UDP 的區分
TCP 用于傳輸層有必要實現可靠性傳輸的情況下. 但是 UDP 雖然不可靠但是可以用于那些高速傳播的情況下. 比如當我們在看視頻的過程中如果出現數據報的丟失, 那么也將會一小部分的數據報, 如果進行重傳, 那么客戶在觀看視屏的過程中無非就會出現等待時間過長的情況, 此時就需要用 UDP 進行傳輸.
5. TCP 的特點及其目的
為了實現數據的可靠性傳輸, 因此在進行數據的傳輸過程中就必須考慮數據的丟包, 破壞, 重復以及數據的分片順序等等, 因此 TCP 通過檢驗和, 序列號, 確認應答, 重發機制, 連接管理以及窗口控制等實現可靠性傳輸
(1) 通過序號確認序號實現可靠性傳輸
在進行數據的收發過程中, 發送方會將數據發送給接收方, 當接收方接收到數據后會給發送方發送一個確認應答信號代表自己已經接收到數據, 反之, 當發送方發送數據后, 經過一段時間后還沒有接受到對方的確認應答信號, 此時發送方會認為接受方沒有接收到數據, 因此會將數據進行重發直到收到接受方的確認應答信號. 但是有的時候會出現這種情況, 接受方接受到了發送方給自己發送來的數據, 因此接收方給發送方發送了一個確認信號, 但是此時由于信號在傳輸的過程中丟了, 此時發送方也得不到接收方的確認應答信號, 因此發送方會不斷將數據進行發送, 此時接收方就會收到大量的無用的重復數據報, 此時為了給上層提供可靠的數據, 此時接收方就需要扔掉大量的重復數據報, 為了接收方能夠確認自己是否收到重復數據報, 以及自己是否需要接受發送方發送來的數據報, 此時就引入了序列號. 接收方可以通過序列號判斷出自己是否收到了重復數據報, 同時當數據報過大的時候發送方會將數據報進行分組, 為了接收方能夠正確地將這些分組進行正確組裝, 接收方可以通過序列號來正確對數據報進行組裝.
(2)重發超時
重發超時指的是在重發數據之前發送方等待接收方確認應答信號到來的特定時間間隔. 當發送方在等待這段時間之后還沒有接收到接受方的確認應答信號的時候, 此時就需要重新進行數據報的發送.
(3)TCP 以段為單位發送數據
在進行建立連接的同時就已經確定了數據報的單位, 在進行發送的時候, 為了防止在發送的時候對其進行分片和組裝, TCP 在發送的過程中最理想的情況就是發送數據報的時候發送數據報的長度正好我是 IP 數據報不會被分組的最大長度, 這個長度就叫做最大消息長度. 在進行三次握手的時候, 兩個主機會將自己可以處理的最大消息長度寫入到 MSS 選項, 高速對方自己能夠容納的最大消息長度.
(4) 利用窗口控制提高速度
在之前的數據收發過程中發送方發送一個數據報必須等到收到接受方的確認信號后才能進行發送第二個數據報, 這樣顯然就降低了雙方之間的通信效率, 此時為了提高雙方之間的數據傳輸效率, 此時就給雙方定義一個緩沖區, 在接受方緩沖取未滿的情況下, 發送方可以無須等到接受方的確認應答信號才發送數據, 發送方可以一次發送一大批的數據. 此時就會引入窗口這個名詞, 即窗口的大小無非就是發送方無須等待確認應答一次所能繼續發送數據的最的值.
(5)滑動窗口
正如上圖所示, 透明地方就是滑動窗口, 在窗口左邊代表的是已經收到接受方應答的信號, 窗口內部代表的是對方接受緩沖區的大小, 也是已經發送的數據報但是沒有接受到應答的數據報, 窗口右邊代表的則是還沒有發送的數據報.
(6)窗口控制和重發控制
1)確認信號丟失
在為使用窗口機制的時候, 此時必須等到確認信號到達之后才能進行再次的發送數據. 擔當引入窗口機制的時候, 此時發送方沒有收到接收方的確認應答的時候, 此時由于引入了窗口機制,
發送方可以繼續進行發送, 這是就不需要進行重發.
在收到 ACK 信號的時候窗口會自動向右滑動, 操作系統為了實現這個窗口, 在底層是以緩沖區的形式來維護這個窗口, 只有確認應答過的數據才能從窗口中, 即緩沖區中刪除.
2)數據報丟失
當在數據進行發送的過程中發送的數據報出現丟失時, 此時接收方會給發送端發送重復的確認信號, 這個確認信號仿佛就是在提醒發送方我要收的數據是 XXX 信號, 此時發送方一旦接受到超過連續的相同的確認應答信號時, 此時它就會認為自己發送的數據丟失, 此時就會引發重傳機制.
(7)流量控制
TCP 引入讓發送端根據接收端接受能力的大小確認一次發送的最大數據報的數據量, 這就是流量控制.具體表現在當雙方在建立連接的時候接收方會告訴發送方自己一次可以接收數據的最大量, 這個量的大小就是對方的接受緩沖區的大小, 也就是對方窗口的大小.于是發送方在發送的時候都會發送一個不超過接受方窗口大小的主句量給對方, 使得對方可以接收.當接受方接受到這個數據時, 此時的窗口會立即設置為一個更小的窗口告訴發送方目前自己可以接收的最大數據量.于是雙方就形成了 TCP 的流量控制