TCP/IP協議通常放在一起來說,但是它們是兩個不同的協議,所起的作用也不一樣。
IP協議是用來查找地址的,對應於網際互聯層。
TCP協議是用來規范傳輸規則的,對應着傳輸層。
IP協議只負責找到地址,具體傳輸的工作交給TCP來完成。
TCP在傳輸之前會進行三次溝通,一般稱為“三握手”;傳輸數據斷開的時候需要進行四次溝通,一般稱為“四揮手”。
要理解這個過程首先需要理解TCP中的兩個序號和三個標志位的含義:
- seq:sequence number的縮寫,表示所傳數據的序號。TCP傳輸時每一個字節都有一個序號,發送數據時會將數據的第一個序號發送給對方,接收方會按序號檢查是否接收完整了,如果沒接收完就需要重新傳送,這樣就可以保證數據的完整性。
- ack:acknoledgement number的縮寫,表示確認號。接收端用它來給發送端反饋已經成功接收到的數據信息,它的值為希望接收的下一個數據包起始序號,也就是ack值所代表的序號前面數據已經成功接收到了。
- ACK:確認位,只有ACK=1的時候ack才起作用。正常通信時ACK=1,第一次發起請求時因為沒有需要確認接收的數據所以ACK為0。
- SYN:同步位,用於在建立連接時同步序號。剛開始簡歷連接時並沒有歷史接收的數據,所以ack就沒辦法設置,這時按照正常的機制就無法運行了,SYN的作用就是來解決這個問題的,當接收端接收到SYN=1的報文時就會直接將ack設置為接收到的seq+1的值,注意這里的值並不是校驗后設置的,而是根據SYN直接設置的,這樣正常的機制就可以運行了,所以SYN叫同步位。需要注意的是,SYN會在前兩次握手時都為1,這是因為通信的雙方的ack都需要設置一個初始值。
- FIN:終止位,用來在傳輸數據完畢后釋放連接。
