本節索引:
一、TCP協議
二、TCP協議中的三次握手及四次揮手
三、UDP協議
四、IP協議
五、IP地址
在前面的網絡基礎內容中我們了解了TCP/IP協議的定義以及TCP/IP模型的分層結構即:
應用層,傳輸層,Internet層以及網絡訪問層。
今天我來帶大家詳細了解下TCP/IP協議棧中的典型協議:
傳輸層的TCP、UDP協議,網絡層的IP協議。
一、TCP協議
TCP是面向連接的通信協議,通過三次握手建立連接,通訊完成時要拆除連接,由于TCP是面向連
接的,所有只能用于端到端的通訊。
TCP協議的工作特性:
工作在傳輸層
面向連接協議:先協商確保網絡狀態正常穩定
全雙工協議
半關閉:支持一端關閉,一端傳輸的半關閉狀態
錯誤檢查
將數據打包成段,排序
確認機制:保證數據包可靠
數據恢復,重傳
流量控制,滑動窗口
擁塞控制,慢啟動和擁塞避免算法
TCP協議報文格式:
為何TCP協議具有上述工作特性呢,這就要結合TCP報文格式來講起。
下圖是TCP報文格式圖:
具體含義如下:
1.源端口、目標端口:計算機上的進程要和其他進程通信需要通過計算機端口,而一個計算機端口
某個時刻只能被一個進程占用,所以通過指定源端口和目標端口,就可以制度哪兩個進程通信。
2.序列號:seq序號,占32位,用來標識從TCP源端口向目的端口發送的字節流,發起方發送數據時
對此進行標記。
3.確認序號:ack序號,占32位,只有ACK標志位為1時,確認序號字段才有效,ack=seq+1
4.數據偏移:表示TCP報文段的首部長度,共4位,由于TCP首部包含一個長度可變的選項部
分,需要指定這個TCP報文段到底有多長。它指出 TCP 報文段的數據起始處距離 TCP 報文
段的起始處有多遠。該字段的單位是32位(即4個字節為計算單位),4位二進制最大表示
15,所以數據偏移也就是TCP首部最大60字節。
5.標志位:共6個,URG、ACK、PSH、RSH、SYN、FIN,具體含義如下:
(1)URG:緊急指針位,0表示無效,1表示有效
(2)ACK:確認序號有效
(3)PSH:收到數據包后是否直接傳給應用程序使用,或傳到buffer
(4)RST:重置位,0表示正常,1表示異常需要重傳
(5)SYN:同步位,代表發起一個新連接
(6)FIN:代表釋放一個連接
6.窗口大小:表示現在允許對方發送的數據量,從本報文段的確認號開始允許對方發送數據量
7.校驗和:提供額外的可靠性
8.緊急指針:標記緊急數據在數據字段的位置
9.選項部分:其最大長度可根據TCP首部長度進行推算。TCP首部長度用4位標識,選項部分最長
為:(2^4-1)*4-20=40字節
TCP協議端口號:
傳輸層通過port號,確認應用層協議
tcp:傳輸控制協議,面向連接的協議;通信前需要建立虛擬鏈路;結束后拆除鏈路
port number:0-65535
其中:
0-1023:系統端口或特權端口(僅管理員可用),總所周知,永久的分配給固定的系統應用使用;
如:22/tcp(ssh),80/tcp(http),443/tcp(https)等
1024-49151:用戶端口或注冊端口,要求并不嚴格,分配給程序注冊為某應用使用;
如:1433/tcp(SqlServer),1521/tcp(oracle)
3306/tcp(mysql),11211/tcp/udp(memcached)
49152-65535:動態端口或私有端口,客戶端程序隨機使用的端口;
其范圍的定義:/proc/sys/net/ipv4/iplocalportrange
二、TCP協議三次握手及四次揮手
TCP協議三次握手:
所謂的三次握手即建立TCP連接,是指建立一個TCP連接時,需要客戶端和服務端總共發送3個包以
確認連接的建立。
整個流程如下圖所示:
第一次握手:客戶端將標志位SYN置為1,隨機產生一個序列值seq=x,并將該數據包發送給服務器,
客戶端進入SYN_SENT狀態,等待Server確認。
第二次握手:服務器收到數據包后由標志位SYN=1指定客戶端請求建立連接,服務器端將標志位SYN
和ACK都置為1,ack=x+1,隨機產生一個序列值seq=y,并將該數據包發送給客戶端以確認連接請求,
此時,服務器進入SYN_RCVD狀態。
第三次握手:客戶端收到確認后,檢查ack是否為x+1,ACK是否為1,如果正確則將標志位ACK置為1,
ack=y+1,發送數據包給服務器端,客戶端進入ESTABLISHED狀態;服務器端收到對端發來的確認數據
包后也轉入ESTABLISHED狀態,此時三次握手完成,客戶端與服務器已建立通訊連接。
SYN攻擊
在三次握手過程中,服務器發送SYN-ACK之后,收到客戶端的ACK之前的TCP連接稱為半連接,此時服務
器處于SYN_RCVD狀態,當收到ACK后,服務器轉入ESTABLISHED狀態。SYN攻擊就是Client在短時間
內偽造大量不存在的IP地址,并向Server不斷地發送SYN包,Server回復確認包,并等待Client的確認,
由于源地址是不存在的,因此,Server需要不斷重發直至超時,這些偽造的SYN包將長時間占用未連接
隊列,導致正常的SYN請求因為隊列滿而被丟棄,從而引起網絡堵塞甚至系統癱瘓。SYN攻擊時一種典
型的DDOS攻擊,檢測SYN攻擊的方式非常簡單,即當Server上有大量半連接狀態且源IP地址是隨機的,
則可以斷定遭到SYN攻擊了,使用如下命令可以讓之現形:
#netstat -nap | grep SYN_RECV
TCP協議四次揮手:
所謂四次揮手即終止TCP連接,就是指斷開一個TCP連接時,需要客戶端和服務器端總共發送4個包以確認
連接的端開。
整個流程如下圖所示:
由于TCP連接是全雙工工作,因此,每個方向都必須要單獨進行關閉。即當一方完成數據發送任務后,
發送一個FIN來終止這一方向的連接,收到一個FIN只是代表這一方向上沒有數據流動了,即不再接收到
數據,但在這個TCP連接上仍然能夠發送數據,直到這一方向也發送了FIN。
第一次揮手:客戶端發送一個FIN,用來關閉客戶端到服務器端的數據傳送,客戶端進入FIN_WAIT_1
狀態。
第二次揮手:服務器端收到FIN后,發送一個ACK給客戶端,確認序號+1,服務器進入CLOSE_WAIT狀態。
第三次揮手:服務器端發送一個FIN,用來關閉服務器到客戶端的數據傳送,服務器進入LAST_WAIT狀態。
第四次揮手:客戶端收到FIN后,進入TIME_WAIT狀態,在等待2個報文最大生產時限后會轉入
CLOSED狀態,客戶端發送ACK確認,服務器收到ACK確認報文后由LAST_ACK狀態轉為CLOSED狀態。
此時四次揮手完成。
三、UDP協議
UDP是非面向連接的通訊協議,UDP數據包括目的端口號和源端口號信箱,由于通訊不需要連接,所有可
以實現廣播發送。
UDP與TCP位于同一層,但它不管數據包的順序、錯誤或重發。因此,UDP不被應用于那些使用面向連
接的服務,UDP主要用于那些面向查詢—應答的服務,例如NFS。相對于FTP或Telnet,這些服務需
要交換的信息量較小。使用UDP的服務包括NTP(網絡時間協議)和DNS(DNS也使用TCP)。
UDP通訊時不需要接收方確認,屬于不可靠的傳輸,可能會出現丟包現象。
UDP協議的工作特性:
工作在傳輸層
提供不可靠的網絡訪問
非面向連接協議
有限的錯誤檢查
傳輸性能高
無數據恢復特性
UDP協議報文格式:
16-bit source port:占16位,源端口
16-bit destination port:占16位,目的端口
16-bit UDP length:占16位,定義數據報長度
16-bit UDP checksum:占16位,校驗和
通過UDP協議報文格式,我們可以發現,欺騙UDP包比欺騙TCP包更容易,因為UDP沒有建立初始化連
接(也可以稱為握手),也就是說,與UDP相關的服務面臨著更大的危險。
四、IP協議
IP協議(Internet Protocol)是將多個包交換網絡連接起來,它在源地址和目的地址之間傳送一種
稱之為數據包的東西,它還提供對數據大小的重新組裝功能,以適應不同網絡對包大小的要求。
IP協議的工作特性:
運行于 OSI 網絡層
面向無連接的協議
獨立處理數據包?
分層編址
盡力而為傳輸
無數據恢復功能
IP協議報頭格式:
如下圖所示:
版本:占4位,指IP協議版本,目前IP協議版本號為4,即IPv4。
首部長度:占4位,定義了IP首部長度最大值是60字節。
區分服務:占8位,用來獲取更好的服務,一般情況下不使用。
總長度:占16位,指首部和數據之和的長度,單位為字節,因此數據包的最大長度為65535字節???/p>
長度不可超過最大傳送單元MTU。
標識:占16位,它是一個計數器,每發送一個報文,該值會加1,也用于數據包分片,在同一個包的若干
分片中,該值相同。
標志(flag):占3位,目前只有后兩位有意義。
(1)DF:Don’t Fragment,中間的一位,只有DF=0時才允許數據包分片。
(2)MF:More Fragment,最高位,MF=1表示后面還有分片。MF=0表示這是數據包最后一個分
片。
片偏移:占12位,值較長的分組在分片后,該分片在原分組中的相對位置,片偏移以8個字節為偏移單
位。
生存時間:占8位,TTL(Time To Live),數據包在網絡中可通過的路由器數最大值。
協議:占8位,指出該數據包攜帶的數據使用何種協議,以便目的主機的IP層將數據不符上交給哪個處理
進程。其中:1表示為 ICMP 協議, 2表示為 IGMP 協議, 6表示為TCP 協議, 17表示為 UDP 協議。
首部校驗和:占16位,只檢驗數據包的首部不檢驗數據不符。采用簡單計算的方法。
源地址和目的地址:各占4字節,分別記錄源IP地址和目的IP地址。
五、IP地址:
IP地址用來唯一標識IP網絡中的每臺設備
每臺主機(計算機、網絡設備、外圍設備)必須具有唯一的地址
IP地址由兩部分組成:
網絡ID:
標識網絡
每個網段分配一個網絡ID
主機ID:
標識單個主機
由組織分配給各設備
IP地址分類:
A類地址
0XXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
8位網絡ID,24位主機ID
0-127.x.x.x
主機數:1600萬左右
網段數:2^7-2=126
拋去特殊0開頭127開頭(本地回環)
1-126.x.x.x????? 共有126個A類可用網段
B類地址
10XXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
16位網絡ID,16位主機ID
128-191.x.x.x 開頭
主機數:65534
網段數:2^14=16384
C類地址
110XXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
24位網絡ID,8位主機ID
192-223.x.x.x 開頭
主機數:2^8-2=254
D類地址
1110XXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
224-239.x.x.x 開頭
E類地址(保留)
11110XXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
239-255.x.x.x 開頭
特殊地址
0.0.0.0
表示一個集合:所有不清楚的主機和目的網絡
255.255.255.255
廣播地址。對本機來說,這個地址指本網段內(同一廣播域)所有主機
127.0.0.1—127.255.255.254
本機回環地址,主要用于測試。
224.0.0.0到239.255.255.255
組播地址,224.0.01特指所有主機,224.0.0.2特指所有路由器。
169.254.x.x
公有IP地址:
A:1.0.0.0???? 到? 9.255.255.255
11.0.0.0??? 到? 126.255.255.255
B:128.0.0.0?? 到? 172.15.255.255
172.32.0.0? 到? 191.255.255.255
C:192.0.0.0?? 到? 192.167.255.255
192.169.0.0 到? 223.255.255.255
私有IP地址:局域網用
A:10.0.0.0??? 到? 10.255.255.255
B:172.16.0.0? 到? 172.31.255.255
C:192.168.0.0 到? 192.168.255.255
子網掩碼
子網掩碼(subnet mask)又叫網絡掩碼、地址掩碼、子網絡遮罩,它是一種用來指明一個IP地址的哪些位標
識的是主機所在的子網,以及哪些位標識的是主機的位掩碼。子網掩碼不能單獨存在,它必須結合IP地址
一起使用。子網掩碼只有一個作用,就是將某個IP地址劃分成網絡地址和主機地址兩部分。
傳統表示法:
XXXXXXXX.XXXXXXXX.XXXXXXXX.XXXXXXXX
00000000 ?0
10000000 ?128
11000000 ?192
11100000 ?224
11110000 ?240
11111000 ?248
11111100 ?252
11111110 ?254
11111111 ?255
CIDR表示法:
IP/網絡ID位數
如192.168.10.132/30
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97625