TCP/IP協議棧

1. TCP三次握手

客戶端向服務端發送SYN請求建立連接的包,服務端收到後發送ACK確認收到客戶端的SYN包,接着發送SYN包表示服務端也希望建立TCP連接,客戶端收到服務端的SYN包會發送一個ACK包表示確認和服務端建立TCP連接。
(SYN,ACK在tcp包的flags字段裏面)在wrieshark中顯示的通常是相對seq和ack,而不是真實的。(跟蹤相對的會容易一些)
較官方的說法:
第一次握手:客戶端發送SYN包至服務器,並進入SYN_SENT狀態,等待服務器確認
第二次握手:服務器收到客戶端的SYN包,發送一個ACK,同時發送自己的SYN,此時服務器進入SYN_RCVD狀態
第三次握手:客戶端接收到服務器發送的SYN+ACK後,進入ESTABLISHED狀態,併發送服務器SYN包的確認ACK,服務器接收到客戶端ACK後,進入ESTABLISHED狀態
當客戶端和服務器都進入ESTABLISHED狀態後,客戶端和服務器之間就可以開始雙向傳遞數據了

2. TCP四次揮手

客戶端主動發送FIN包,請求斷開連接;服務端收到發送一個ACK包確認收到斷開連接,接着發送一個FIN包請求斷開連接;客戶端收到ACK確認後,斷開連接。此時,會話結束。
較官方的說法:
第一次揮手:主動關閉方發送一個FIN並進入FIN_WAI×××狀態
第二次揮手:被動關閉方接收到主動關閉方發送的FIN併發送ACK,此時被動關閉方進入CLOSE_WAIT狀態;主動關閉方收到被動關閉方的ACK後,進入FIN_WAIT2狀態
第三次揮手:被動關閉方發送一個FIN並進入LAST_ACK狀態
第四次揮手:主動關閉方收到被動關閉方發送的FIN併發送ACK,此時主動關閉方進入TIME_WAIT狀態,經過2MSL時間後關閉連接;被動關閉方收到主動關閉方的ACK後,關閉連接

3. TCP的重傳機制

超時重傳機制:

當發送方發現等待Seq 3的Ack(即Ack 4)超時後,會認爲Seq 3發送“失敗”,重傳Seq 3。一旦接收方收到Seq 3,會立即回Ack 4

快速重傳機制:

如果包沒有連續到達,就Ack最後那個可能被丟了的包;如果發送方連續收到3次相同的Ack,就重傳對應的Seq。
將超時重傳與快速重傳結合起來,觸發快速重傳時,只重傳局部的一小段Seq(局部性原理,甚至只重傳一個Seq),其他Seq超時後重傳。

4. TCP的窗口機制(窗口會滑動)

對於發送方將,窗口包括髮送窗口(已經發送了,但沒有收到ACK迴應)和可用窗口,接收端允許發送但是沒有發送的部分。
窗口滑動原理:
TCP並不是每一個報文段都會回覆ACK的,可能會對兩個報文段發送一個ACK,也可能會對多個報文段發送1個ACK【累計ACK】,比如說發送方有1/2/3 3個報文段,先發送了2,3 兩個報文段,但是接收方期望收到1報文段,這個時候2,3報文段就只能放在緩存中等待報文1的空洞被填上,如果報文1,一直不來,報文2/3也將被丟棄,如果報文1來了,那麼會發送一個ACK對這3個報文進行一次確認。
https://blog.csdn.net/wdscq1234/article/details/52444277

5. TCP頭部

頭部長度:一般爲20字節,選項最多40字節,限制60字節。
源端口,目的端口,確認號,序列號,頭部長度,保留,TCPflags(標誌數據包的屬性,如SYN、ACK等),滑動窗口(解決流控擁塞),數據,checksum(校驗值),Urgent Pointer:緊急指針,可以告知緊急的數據位置,需要和Flag的U flag 配合使用;options選項(如果有)

6. TCP的序列號和確認號

Seq:序列號,防亂序(第一個隨機(通常兩端的第一個seq都是0開始的),第二個開始看前一個ack大小)

Ack:確認號,防丟包(數據大小+序列號)
序列號爲當前端成功發送的數據位數,確認號爲當前端成功接收的數據位數,SYN標誌位和FIN標誌位也要佔1位

7. TCP、UDP

TCP:傳輸控制協議,面向連接,可靠傳輸,支持流控和窗口機制,HTTP、FTP等
UDP:用戶數據報協議,無連接,不可靠傳輸,不支持流控和窗口機制,TFTP、DNS、DHCP等
TCP包的固定長度爲20字節,UDP的固定長度爲8字節

8. UDP頭部

源端口,目的端口,長度,數據,checksum(校驗值),

9. 端口號

源端口隨機分配(大於1023),目的端口是知名端口(1-1023)

10. IP包

IP頭部信息:

頭部長度:通常20字節,有選項時更長,總共不超過60字節。
IP數據報長度:65535字節。
版本,頭部長度,服務類型,總長度,標識符,標誌,片偏移,生存時間TTL,上層協議,頭部校驗值,源IP,目的IP,選項,數據

11. IP數據分片與重組

分片:

標識符:識別屬於同一個數據包的分片,區別於同一主機或其他主機的數據包分片;

標誌:

判斷是否收到最後一個分片,最後一個分片的標誌字段爲0,其餘的爲1;目的端在收到標誌字段爲0時,開始重組報文;片偏移:表示每個分片在原始報文中的位置。
爲什麼要分片:IP數據包大於MTU時,需進行分片

12. TTL機制

數據報到達目的地之前允許經過的路由跳跳數。跳一下減1,得0丟棄。
https://blog.csdn.net/ythunder/article/details/65664309

13. UDP協議號17,TCP協議號6,ICMP協議號1

14. ARP泛洪

不斷髮送ARP請求,佔用上網資源,導致用戶無法上網。有點類似DDOS×××,導致服務器無法正常工作。

15. ARP欺騙×××(中間人×××)

×××將自己的MAC綁定A發送給B的ARP請求的目的IP地址爲B。也綁定B返回的目的IP地址爲A。(說的有點拗口,水平有限,敬請原諒。)

16. IP選項值

可以實現IP記錄路由,時間戳,源站路由技術
源站路由技術:源站路由反映的思路是提供一種方式,讓源主機指定一條通過互聯網的路徑。
(IP支持2種形式的源站選路:1:鬆散源站路由:它給出了一連串路由器接口的IP地址序列,報文必須沿着IP地址序列傳送,但是允許在相繼的兩個地址之間跳過多個路由器。2:嚴格源站路由:它給出了一系列路由器接口的IP地址序列,報文必要嚴格按照路由轉發,如果下一跳不在列表中,那麼將會發生錯誤。備註:一般工作中,稱鬆散源站路由爲鬆散路由。稱嚴格源站路由爲源站路由。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章