TCP/IP協議

大家好,很高興今天可以跟大家瞭解網絡知識。

咱們今天Internet是根據TCP/IP協議通信的所以我們從這裏入手進行本次講解

主要內容是:

回顧TCP/IP 分層模型

掌握三次握手和四次斷開。

掌握TCP、UDP、IPV4報文結構

瞭解ICMP重定向

這講是我們學習網絡非常基礎的東西。無論是IPV4時代還是IPv6時代,我們今天學習的是有必要的。

好了,先來大概回顧兩者大致的區別:

1.OSI是一個理論模型。而TCP/IP是目前Internet的核心協議,也就是說是實際的協議。

2.OSI是先有模型;TCP/IP是先有協議,後有模型。

3.OSI適用於各種協議棧;TCP/IP只適用於TCP/IP網絡。

4.從層次上來看tcp/ip可以是四層協議模型,也可是五層協議模型。而OSI就是傳統的7層模型。

這裏也可以簡單的說一下TCP/IP協議簇的應用層對應這OSI高三層,提供網絡服務。比如 :瀏覽網頁,下載我們常用FTP,收發郵件協議,遠程登陸,簡單網絡管理協議,域名服務等等都是應用層可以提供的進程。

好了,大家先簡單的概述一次,網絡通信的過程:

●在A主機上,應用層將一串應用數據流傳送給傳輸層。

●傳輸層將應用層的數據流分段,並加上TCP報頭形成TCP段,交給TCP協議下相應進程的端口號並送交網絡層。

●在網絡層給TCP段加上包括源、目主機IP地址的IP報頭,生成一個IP數據包,並將IP數據包送交鏈路層。

●鏈路層在其MAC幀封裝在源目IP前,與此同時會在最後面加上校驗和。數據鏈路層會根據ARP廣播得到同一局域網下PC的MAC地址。第一種情況目的MAC是同一局域網下直連的MAC,便通過物理層的傳輸介質連接到對端。當然無線也是物理層的傳輸介質。

●在目的主機,鏈路層將MAC幀的幀頭去掉,並將IP數據包送交網絡層。

●網絡層檢查IP報頭,如果報頭中校驗和與計算結果不一致,則丟棄該IP數據包;若校驗和與計算結果一致,則去掉IP報頭,將TCP段送交傳輸層。

●傳輸層檢查數據的順序號,判斷是否是正確的TCP分組,然後檢查TCP報頭數據。若正確,則向源主機發確認信息;若不正確或丟包,則向源主機要求重發信息。

●在目的主機,傳輸層去掉TCP報頭,將排好順序的分組組成應用數據流送給應用層相應進程。

>第二種情況,show arp 沒有找到目的MAC就通過連接到這個網段的網關路由器,網關路由器就會show ip route 查看路由表,通過路由器條目查看到到目的IP的路徑,

下面看一下傳輸層,傳輸層有兩個協議TCP、UDP。TCP是面向連接的和咱們打電話一樣,建立好連接後才通信。UDP是面向無連接的,就向發短信,數據先發了,不管對方看還是沒看。TCP彌補了IP協議的不穩定性。這裏還有一個比較重要的知識點,端口號。

端口號。他是用於表示通信之間的進程的。一共有65536個。1-1024一般是大家熟知的端口號大多都是固定的。但是現在大於1024的端口也有被佔用了,比如qq是8000。

大家共同的回憶一下常用的端口號:

tcp6,udp17,icmp 1基於UDP的有:tftp69,snmp161,rip520,基於TCP的有:ftp:20,21,telnet23,smtp25,http80,HTTPS443.EIGRP88,ospf89,這裏說一下DNS,咱們PC到server的DNS一般都是基於UDP的,而server與server之間是基於TCP的。

在windows中可以通過netstat參數查看端口的使用情況。

咱們看一下TCP的包頭。

TCP報文段分爲兩部分,報文首部和數據,所謂報文首部就是TCP爲了實現端到端可靠傳輸所加上的控制信息。

簡單的看一下TCP報文首部的字段內容:

●源端口:表示進程來自與哪(任意數,一般都是大於1024的),

●目的端口:源主機想去的進程,一般是小於1024的固定端口。

這裏給大家穿插一點分用、複用:比如一個主機有多個進程,多個進程同時往外發送數據叫分用。當多個進程都通過TCP端口進來時,叫複用。

●序列號和確認號,用於目的端口的數據到達對端的可靠性傳輸的重要工具。序列號是發出的數據流中每一個字節都會編上序列號,接收到對端想收到的下一個報文段的數據的第一個序列號叫做確認號。有此看來兩者是同時存在的。

舉個例子:A發送數據包的第一個byte的序列號,比如三次握手已經建立好了。比如seq number=30,B收到的後迴應A時ACK=301,就意味着B告訴A我已經收到序列號30以前的數據,我想收到的下一個數據序列號是31,

下面字段的內容大家看一下:

●數據偏移量是指TCP包頭的首部長度,佔4bit,TCP包頭長度是可變的,後面的填充項是用來保證TCP首部長度是4字節的整數倍。

●保留位佔6bit目前設爲0,爲將來應用而留的。

●還有6bit的編碼位:(與抓的包對應着看)

1bit的緊急位和16bit緊急指針是配合使用,告訴數據的接收方,在我發送的數據裏面有緊急數據,緊急指針說明了具體放在哪,用的比較少。

1bit確認位,ACK=1表示確認連接。

1bit推送位,PSH=1也就是不將用戶進程放在緩衝區。

1bit復位位,RST=1時,斷開TCP連接。TCP斷開連接本來需要四次斷開可以用到。如果把RST設置爲1可以立即斷掉。

1bit同部位,SYN=1請求建立TCP連接。也就是說三次握手中會出現SYN位。

FIN終止比特。FIN=1釋放連接.

●窗口字段,他跟滑動窗口大小機制有關,他也是一個流控機制,

●下一個校驗和他保證你傳送過來的數據是OK的,不被破壞。

好了下來看一下TCP三次握手,這裏我們需要自己抓包類進行分析!(打開抓的包分析)

第一次握手:主機A發送syn=1請求建立連接,隨機產生seq number=X的數據包發送,主機B由SYN=1知道,A要求建立連接;

第二次握手:因爲TCP通信是雙向的這時主機B收到請求後要確認連接信息,向A發送ack =(主機A的seq+1),syn=1告訴A我也要建立連接,ack=1確認A的連接,隨機產生seq=Y的包.看到ack=1時說明單向通信建立成功了。

第三次握手:主機A收到後檢查ack number是否正確,即第一次發送的seq=number+1,以及位碼ack是否爲1,主機A會再發送ack number=(主機B的seq+1),ack=1確認連接,主機B收到後確認seq值與ack=1則連接建立成功。

問題:爲什麼TCP連接要三次握手,斷開要四次斷開尼?

因爲TCP是全雙工的,全雙工就是有兩條相互獨立的通道,可以同時傳輸數據,所以關閉就要兩邊全關,要不就是半關閉了。

四次斷開流程:

1. 當主機A完成數據傳輸後,將終止比特FIN=1,這表明提出停止TCP連接的請求,並隨機產生seq number=X的數據包發送
2主機B收到FIN=1後對其作出響應,確認這一方向上的TCP連接將關閉,將ACK置爲X+1來回應A的seq
3 與此同時應用進程關閉由B 端再提出反方向的關閉請求,將FIN置1
4 主機A對主機B的請求進行確認,將ACK=Y+1,雙方向的關閉結束.
由TCP的三次握手和四次斷開可以看出,TCP使用面向連接的通信方式,大大提高了數據通信的可靠性,使發送數據端和接收端在數據正式傳輸前就有了交互,爲數據正式傳輸打下了可靠的基礎

案例: A-------------------------------B 能否ping通

192.168.1.1/24----------------------------192.168.1.2/16

咱們看一下UDP,UDP只負責封裝起來,扔到對方就可以的。如果應用層覺得數據可以重傳就申請重傳就好了,UDP 一般應用於語音視頻,我看的是電視上的影像最多有個變形什麼的,這就用到了UDP。

下來看一下UDP報文的格式,源端口目的端口和TCP的功能是一樣的標識進程的。校驗和是一個可選項。這裏大家可以回憶一下基於UDP端口測協議有哪些??tftp69,snmp161,rip520

我們下來看一下網絡層,網絡層非常豐富,今天我們只講一下IP和ICMP,

IP的包頭就靠大家下來抓包分析了,看看IPV4與IPV6 IP包頭區別是很大的。IPV6有更高的安全性,這也是爲什麼在IPV6的世界裏面路由協議爲什麼不需要認證功能了。

IPV4的包頭

4bit的版本位,0100 IPV4 0110 IPV6,與版本位共佔一個字節。

頭部長度是可選的,5*4字節(32位bit)=20字節。

服務類型,佔了8bit,指定特殊的數據怎麼處理,抓包看到的是區分服務段3bit的優先權,最高的是網絡控制,延時,吞吐量,可靠性,開銷的。對服務要求高的視頻語音啊已經不用他了。

總長度,16bit最大長度是65535,但一般被MTU管着那,大於1500就會分片。現在想盡辦法不讓分片。

標識符,16bit 功能:通常與標記字段、分段偏移量是共同使用的。

TTL生存週期過一個路由器減1.

填充項,不夠32個字節用0 1 進行補齊。

好了,網絡層再看一下ICMP,ICMP裏面涵蓋的內容很多的,Internet網裏的信令兵,一個是普通的信息,一個是差錯報告。現在我們經常用到的ping工具,在網絡層判斷網絡層是通的就是基於ICMP的。

比如172.16.3.1 ping 172.16.3.2 看是否是通的,看的是網絡層是否可達。Ping的功能是很強的,今天就不展開細講了,還有trace路由器,主機 tracert 還可以看經過的路徑

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