傳輸層的協議介紹
一、TCP/IP協議簇的傳輸層協議
TCP(Transmission Control Protocol)
傳輸控制協議
UDP(User Datagram Protocol)
用戶數據報協議
二、TCP協議
TCP是面向連接的、可靠的進程到進程通信的協議
TCP提供全雙工服務,即數據可在同一時間雙向傳輸
TCP報文段
▪TCP將若干個字節構成一個分組,叫報文分段(Segment)
▪TCP報文段封裝在IP數據報中
三、TCP報文段
序號: 發送端為每個字節進行編號,便於接收端正確重組。
確認號: 用於確認發送端的信息。
窗口大小:用於說明本地接收端數據段的數目,窗口大小是可變的。
SYN: 同步序號位,TCP需要建立連接時,將該值設為“1”。
ACK: 確認序號位,當該位為“1”時,用於確認發送方的數據。
FIN: 當TCP斷開連接時將該位置射為“1”。
源端口號(16) | 目標端口號(16) | |||||||
序號(32) | ||||||||
確認號(32) | ||||||||
首部長度 (4) |
保留 (6) |
U R G |
A C K |
P S H |
R S T |
S Y N |
F I N |
窗口大小(16) |
校驗和(16) | 緊急指針(16) | |||||||
選項 |
四、三次握手
TCP建立連接的過程稱為三次握手。
建立TCP連接時,需要客戶端和服務器共發送3個包。
第一次:客戶端發送初始序號x和syn=1請求標志
第二次:服務器發送請求標志syn,發送確認標志ACK,發送自己的序號seq=y,發送客戶端的確認序號ack=x+1
第三次:客戶端發送ACK確認號,發送自己的序號seq=x+1,發送對方的確認號ack=y+1
五、狀態轉換和安全問題
半關閉
當TCP鏈接中,A向B發送FIN請求關閉,另一端B回應ACK后,並沒有立即向A發送FIN,A處於半連接狀態(半開關),此時A可以接收B發送的數據,但A不能向B發送數據。
半連接
發生在TCP三次握手中
如果A向B發起鏈接,B按照正常情況響應,但A不進行三次握手,這就是半連接。
半連接攻擊:半連接會造成B分配的內存資源就這么一直耗着,直到資源耗盡。(SYN攻擊)
半打開
如果一方關閉或者異常關閉(斷電、斷網),而另一方並不知情,這樣的鏈接稱為半打開。處於半打開連接,如果雙方不進行數據通信,是發現不了問題的,只有通信才能真正的察覺到這個連接已經處於半打開狀態,如果雙方不傳輸數據的話,仍處於連接狀態的一方就不會檢測另一方已經出現異常。
解決方法:
如何解決半打開問題,引入心跳機制就可以察覺半打開。
如果需要發數據的話,這邊收到之后,其實發現這個連接並不存在了,就會回復RST包報告,這個時候就需要重新建立連接了!
六、四次揮手
TCP斷開連接的過程稱為四次揮手。
第一次揮手:客戶端發出釋放FIN=1,自己序列號seq=u,進入FIN-WAIT-1狀態
第二次揮手:服務器收到客戶端的后,發出ACK=1確認標志和客戶端的確認號ack=u+1,自己的序列號seq=v,進入CLOSE-WAIT狀態
第三次揮手:客戶端收到服務器確認結果后,進入FIN-WAIT-2狀態。此時服務器發送釋放FIN=1信號,確認標志ACK=1,確認序號ack=u+1,自己序號seq=w,服務器進入LAST-ACK(最后確認態)
第四次揮手:客戶端收到回復后,發送確認ACK=1,ack=w+1,自己的seq=u+1,客戶端進入TIME-WAIT(時間等待)。客戶端經過2個最長報文段壽命后,客戶端CLOSE;服務器收到確認后,立刻進入CLOSE狀態。
七、TCP連接
常見的TCP端口號及功能
端口 協議 說明
21 FTP FTP服務器所開放的控制端口。
23 TELNET 用於遠程登錄,可以遠程控制管理目標計算機。
25 SMTP SMTP服務器開放的端口,用於發送郵件。
80 HTTP 超文本傳輸協議。
110 POP3 用於接收郵件。
八、UDP協議
無連接,不可靠的傳輸協議。
花費的開銷小。
源端口號(16) | 目標端口號(16) |
UDP長度(16) | UDP校驗和(16) |
UDP長度:用來指出UDP的總長度,為首部加上數據。
校驗和: 用來完成對UDP數據的差錯校驗,它是UDP協議提供的唯一的可靠機制。
端口 協議 說明
69 TFTP 簡單文件傳輸協議。(網卡都帶TFTP服務,必須把69端口號放空)
111 RPC 遠程過程調用。(用的不多)
123 NTP 網絡時間協議。(搭一個NTP服務,使時間保持一致)