亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux中如何使用tcpdump命令

發布時間:2022-01-25 11:29:01 來源:億速云 閱讀:171 作者:柒染 欄目:開發技術

這篇文章的內容主要圍繞Linux中如何使用tcpdump命令進行講述,文章內容清晰易懂,條理清晰,非常適合新手學習,值得大家去閱讀。感興趣的朋友可以跟隨小編一起閱讀吧。希望大家通過這篇文章有所收獲!

tcpdump簡介:

  • tcpdump是一個用于截取網絡分組,并輸出分組內容的工具。

  • 憑借強大的功能和靈活的截取策略,使其成為類UNIX系統下用于網絡分析和問題排查的首選工具

  • tcpdump 支持針對網絡層、協議、主機、網絡或端口的過濾,并提供and、or、not等邏輯語句來幫助你去掉無用的信息。

1、在 Linux 中安裝 tcpdump

用下面的命令檢查一下是否已經安裝了 tcpdump:

 which tcpdump

Linux中如何使用tcpdump命令

如果還沒有安裝 tcpdump,用如下命令安裝 tcpdump:

 sudo yum install -y tcpdump

tcpdump 依賴于 libpcap,該庫文件用于捕獲網絡數據包。如果該庫文件也沒有安裝,系統會根據依賴關系自動安裝它。

2、用 tcpdump 抓包

使用 tcpdump 抓包,需要管理員權限,因此下面的示例中絕大多數命令都是以 sudo 開頭

首先,先用 tcpdump -D 命令列出可以抓包的網絡接口:

 sudo tcpdump -D

Linux中如何使用tcpdump命令

如上所示,可以看到我的機器中所有可以抓包的網絡接口。其中特殊接口 any 可用于抓取所有活動的網絡接口的數據包

我們就用如下命令先對 any 接口進行抓包:

 sudo tcpdump -i any

Linux中如何使用tcpdump命令

tcpdump 會持續抓包直到收到中斷信號。你可以按 Ctrl+C 來停止抓包。正如上面示例所示,tcpdump 抓取了超過 10000 個數據包。在這個示例中,由于我是通過 ssh 連接到服務器,所以 tcpdump 也捕獲了所有這類數據包。

-c 選項可以用于限制 tcpdump 抓包的數量:

 sudo tcpdump -i any -c 3

Linux中如何使用tcpdump命令

如上所示,tcpdump 在抓取 3 個數據包后自動停止了抓包。這在有些場景中十分有用 —— 比如你只需要抓取少量的數據包用于分析。當我們需要使用過濾規則抓取特定的數據包(如下所示)時,-c 的作用就十分突出了。

在上面示例中,tcpdump 默認是將 IP 地址和端口號解析為對應的接口名以及服務協議名稱。而通常在網絡故障排查中,使用 IP 地址和端口號更便于分析問題;用 -n 選項顯示 IP 地址,-nn 選項顯示端口號:

 sudo tcpdump -i any -c 3 -nn

Linux中如何使用tcpdump命令

如上所示,抓取的數據包中顯示 IP 地址和端口號。這樣還可以阻止 tcpdump 發出 DNS 查找,有助于在網絡故障排查中減少數據流量。

現在你已經會抓包了,讓我們來分析一下這些抓包輸出的含義吧。

3、理解抓取的報文

tcpdump 能夠抓取并解碼多種協議類型的數據報文,如 TCP、UDP、ICMP 等等。雖然這里我們不可能介紹所有的數據報文類型,但可以分析下 TCP 類型的數據報文,來幫助你入門。更多有關 tcpdump 的詳細介紹可以參考其 幫助手冊。tcpdump 抓取的 TCP 報文看起來如下:

 12:43:24.047063 IP 202.106.2.140.22 > 202.106.2.116.52980: Flags [P.], seq 4020757562:4020757774, ack 1254862904, win 274, length 212

1列:12:43:24.047063 是該數據報文被抓取的系統本地時間戳。

2列:IP 是網絡層協議類型,這里是 IPv4,如果是 IPv6 協議,該字段值是 IP6。

3列:202.106.2.140 是源 IP 地址和端口號 22

4列:202.106.2.116 是目的 IP 地址和端口號 52980

5列: TCP 報文標記段 Flags [P.]。該字段也可以是這些值的組合,例如 [S.] 代表 SYN-ACK 數據包。該字段通常取值如下:

標志類型描述
SSYNConnection Start
FFINConnection Finish
PPUSHData push
RRSTConnection reset
.ACKAcknowledgment

6列:接下來是該數據包中數據的序列號。對于抓取的第一個數據包,該字段值是一個絕對數字,后續包使用相對數值,以便更容易查詢跟蹤。例如此處 seq 4020757562:4020757774代表該數據包包含該數據流的第 XX 到 XXX 字節。

7列:接下來是 ack 值:ack 1254862904。該數據包是數據發送方,ack 值為 XXX。在數據接收方,該字段代表數據流上的下一個預期字節數據。

8列:接下來字段是接收窗口大小 win 274,它表示接收緩沖區中可用的字節數,后跟 TCP 選項如 MSS(最大段大小)或者窗口比例值。更詳盡的 TCP 協議內容請參考 Transmission Control Protocol(TCP) Parameters

9列:length 212代表數據包有效載荷字節長度。這個長度和 seq 序列號中字節數值長度是不一樣的。

現在讓我們學習如何過濾數據報文以便更容易的分析定位問題。

4、過濾數據包

正如上面所提,tcpdump 可以抓取很多種類型的數據報文,其中很多可能和我們需要查找的問題并沒有關系。舉個例子,假設你正在定位一個與 web 服務器連接的網絡問題,就不必關心 SSH 數據報文,因此在抓包結果中過濾掉 SSH 報文可能更便于你分析問題。

tcpdump 有很多參數選項可以設置數據包過濾規則,例如根據源 IP 以及目的 IP 地址,端口號,協議等等規則來過濾數據包。下面就介紹一些最常用的過濾方法。

  • 協議

在命令中指定協議便可以按照協議類型來篩選數據包。比方說用如下命令只要抓取 ICMP 報文:

 sudo tcpdump -i ens192 icmp -c 5

然后再打開一個終端,去 ping 另一臺機器或者用本機ping連接的這個服務器。

回到運行 tcpdump 命令的終端中,可以看到它篩選出了 ICMP 報文。這里 tcpdump 并沒有顯示有關 opensource.com 的域名解析數據包:

Linux中如何使用tcpdump命令

  • 主機

用 host 參數只抓取和特定主機相關的數據包,只抓取和顯示與 202.106.2.116 有關的數據包。

 sudo tcpdump -i ens192  -c 5 -nn host 202.106.2.116
  • 端口號

tcpdump 可以根據服務類型或者端口號來篩選數據包。例如,抓取和 HTTP 服務相關的數據包:

 sudo tcpdump -i ens192  -c 5 -nn port 80

Linux中如何使用tcpdump命令

  • IP 地址/主機名

同樣,你也可以根據源 IP 地址或者目的 IP 地址或者主機名來篩選數據包。例如抓取源 IP 地址為 202.106.2.116 的數據包:

 sudo tcpdump -i ens192  -c 5 -nn src 202.106.2.116

注意此處示例中抓取了來自源 IP 地址 192.168.122.98 的 53 端口以及 80 端口的數據包,它們的應答包沒有顯示出來因為那些包的源 IP 地址已經變了。

相對的,使用 dst 就是按目的 IP/主機名來篩選數據包。

 sudo tcpdump -i ens192  -c 5 -nn dst 202.106.2.116

Linux中如何使用tcpdump命令

  • 多條件篩選

當然,可以使用多條件組合來篩選數據包,使用 and 以及 or 邏輯操作符來創建過濾規則。例如,篩選來自源 IP 地址 XXX 的 HTTP 數據包:

 sudo tcpdump -i ens192  -c 5 -nn dst 202.106.2.116 and port 80
 
 sudo tcpdump -i ens192  -c 5 -nn dst 202.106.2.116 or port 80

Linux中如何使用tcpdump命令

你也可以使用括號來創建更為復雜的過濾規則,但在 shell 中請用引號包含你的過濾規則以防止被識別為 shell 表達式:

 sudo tcpdump -i ens192  -c 5 -nn 'port 80 and (dst 202.106.2.116 or src 202.106.2.140)'
 sudo tcpdump -i ens192  -c 5 -nn 'port not 80 and (dst 202.106.2.116 or src 202.106.2.140)'

Linux中如何使用tcpdump命令

小結:

第一種是關于類型的關鍵字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一臺主機,net 202.0.0.0 指明 202.0.0.0是一個網絡地址,port 23 指明端口號是23。如果沒有指定類型,缺省的類型是host.

第二種是確定傳輸方向的關鍵字,主要包括src , dst ,dst or src, dst and src ,這些關鍵字指明了傳輸的方向。舉例說明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的網絡地址是202.0.0.0 。如果沒有指明方向關鍵字,則缺省是src or dst關鍵字。

第三種是協議的關鍵字,主要包括fddi,ip,arp,rarp,tcp,udp等類型。Fddi指明是在FDDI(分布式光纖數據接口網??上的特定的網絡協議,實際上它是”ether” 的別名,fddi和ether具有類似的源地址和目的地址,所以可以將fddi協議包當作ether的包進行處理和分析。其他的幾個關鍵字就是指明了監聽的包的協議內容。如果沒有指定任何協議,則tcpdump將會監聽所有協議的信息包。

除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less,greater,還有三種邏輯運算,取非運算是 ‘not ‘ ‘! ‘, 與運算是’and’,’&&’;或運算 是’or’ ,’││’;這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要,下面舉幾個例子來說明。

5、檢查數據包內容

在以上的示例中,我們只按數據包頭部的信息來建立規則篩選數據包,例如源地址、目的地址、端口號等等。有時我們需要分析網絡連接問題,可能需要分析數據包中的內容來判斷什么內容需要被發送、什么內容需要被接收等。tcpdump 提供了兩個選項可以查看數據包內容,-X 以十六進制打印出數據報文內容,-A 打印數據報文的 ASCII 值。

例如,HTTP 請求報文內容如下:

 sudo tcpdump -i ens192  -c 5 -nn 'port not 80 and (dst 202.106.2.116 or src 202.106.2.140)' -A
 sudo tcpdump -i ens192  -c 5 -nn 'port not 80 and (dst 202.106.2.116 or src 202.106.2.140)' -X

Linux中如何使用tcpdump命令

這對定位一些普通 HTTP 調用 API 接口的問題很有用。當然如果是加密報文,這個輸出也就沒多大用了。

6、保存抓包數據

tcpdump 提供了保存抓包數據的功能以便后續分析數據包。例如,你可以夜里讓它在那里抓包,然后早上起來再去分析它。同樣當有很多數據包時,顯示過快也不利于分析,將數據包保存下來,更有利于分析問題。

使用 -w 選項來保存數據包而不是在屏幕上顯示出抓取的數據包:

 sudo tcpdump -i ens192  -c 5 -nn port 80  -w /tmp/test.pcap

Linux中如何使用tcpdump命令

該命令將抓取的數據包保存到文件 、test.pcap。后綴名 pcap 表示文件是抓取的數據包格式。

正如示例中所示,保存數據包到文件中時屏幕上就沒有任何有關數據報文的輸出,其中 -c 5 表示抓取到 5 個數據包后就停止抓包。如果想有一些反饋來提示確實抓取到了數據包,可以使用 -v 選項。

查看pcap文件內容

tcpdump 將數據包保存在二進制文件中,所以不能簡單的用文本編輯器去打開它。使用 -r 選項參數來閱讀該文件中的報文內容:

 tcpdump -nn -r /tmp/test.pcap

Linux中如何使用tcpdump命令

這里不需要管理員權限 sudo 了,因為此刻并不是在網絡接口處抓包。

你還可以使用我們討論過的任何過濾規則來過濾文件中的內容,就像使用實時數據一樣。 例如,通過執行以下命令從源 IP 地址 54.204.39.132 檢查文件中的數據包:

 tcpdump -nn -r /tmp/test.pcap  src port 80

Linux中如何使用tcpdump命令

7.補充 TCP的幾個狀態 (SYN, FIN, ACK, PSH, RST, URG)

Linux中如何使用tcpdump命令

 1、在 Linux 中安裝 tcpdump
 用下面的命令檢查一下是否已經安裝了 tcpdump:
 
 which tcpdump
 
 
 如果還沒有安裝 tcpdump,用如下命令安裝 tcpdump:
 
 sudo yum install -y tcpdump
 tcpdump 依賴于 libpcap,該庫文件用于捕獲網絡數據包。如果該庫文件也沒有安裝,系統會根據依賴關系自動安裝它。
 
 2、用 tcpdump 抓包
 使用 tcpdump 抓包,需要管理員權限,因此下面的示例中絕大多數命令都是以 sudo 開頭。
 
 首先,先用 tcpdump -D 命令列出可以抓包的網絡接口:
 
 sudo tcpdump -D
 
 
 如上所示,可以看到我的機器中所有可以抓包的網絡接口。其中特殊接口 any 可用于抓取所有活動的網絡接口的數據包。
 
 我們就用如下命令先對 any 接口進行抓包:
 
 sudo tcpdump -i any
 
 
 
 
 tcpdump 會持續抓包直到收到中斷信號。你可以按 Ctrl+C 來停止抓包。正如上面示例所示,tcpdump 抓取了超過 10000 個數據包。在這個示例中,由于我是通過 ssh 連接到服務器,所以 tcpdump 也捕獲了所有這類數據包。
 
 -c 選項可以用于限制 tcpdump 抓包的數量:
 
 sudo tcpdump -i any -c 3
 
 
 如上所示,tcpdump 在抓取 3 個數據包后自動停止了抓包。這在有些場景中十分有用 —— 比如你只需要抓取少量的數據包用于分析。當我們需要使用過濾規則抓取特定的數據包(如下所示)時,-c 的作用就十分突出了。
 
 在上面示例中,tcpdump 默認是將 IP 地址和端口號解析為對應的接口名以及服務協議名稱。而通常在網絡故障排查中,使用 IP 地址和端口號更便于分析問題;用 -n 選項顯示 IP 地址,-nn 選項顯示端口號:
 
 sudo tcpdump -i any -c 3 -nn
 
 
 
 
 
 
 如上所示,抓取的數據包中顯示 IP 地址和端口號。這樣還可以阻止 tcpdump 發出 DNS 查找,有助于在網絡故障排查中減少數據流量。
 
 現在你已經會抓包了,讓我們來分析一下這些抓包輸出的含義吧。
 
 3、理解抓取的報文
 tcpdump 能夠抓取并解碼多種協議類型的數據報文,如 TCP、UDP、ICMP 等等。雖然這里我們不可能介紹所有的數據報文類型,但可以分析下 TCP 類型的數據報文,來幫助你入門。更多有關 tcpdump 的詳細介紹可以參考其 幫助手冊。tcpdump 抓取的 TCP 報文看起來如下:
 
 12:43:24.047063 IP 202.106.2.140.22 > 202.106.2.116.52980: Flags [P.], seq 4020757562:4020757774, ack 1254862904, win 274, length 212
 1列:12:43:24.047063 是該數據報文被抓取的系統本地時間戳。
 
 2列:IP 是網絡層協議類型,這里是 IPv4,如果是 IPv6 協議,該字段值是 IP6。
 
 3列:202.106.2.140 是源 IP 地址和端口號 22
 
 4列:202.106.2.116 是目的 IP 地址和端口號 52980
 
 5列: TCP 報文標記段 Flags [P.]。該字段也可以是這些值的組合,例如 [S.] 代表 SYN-ACK 數據包。該字段通常取值如下:
 
 值 標志類型 描述
 S SYN Connection Start
 F FIN Connection Finish
 P PUSH Data push
 R RST Connection reset
 . ACK Acknowledgment
 
 
 6列:接下來是該數據包中數據的序列號。對于抓取的第一個數據包,該字段值是一個絕對數字,后續包使用相對數值,以便更容易查詢跟蹤。例如此處 seq 4020757562:4020757774代表該數據包包含該數據流的第 XX 到 XXX 字節。
 
 7列:接下來是 ack 值:ack 1254862904。該數據包是數據發送方,ack 值為 XXX。在數據接收方,該字段代表數據流上的下一個預期字節數據。
 
 8列:接下來字段是接收窗口大小 win 274,它表示接收緩沖區中可用的字節數,后跟 TCP 選項如 MSS(最大段大小)或者窗口比例值。更詳盡的 TCP 協議內容請參考 Transmission Control Protocol(TCP) Parameters。
 
 9列:length 212代表數據包有效載荷字節長度。這個長度和 seq 序列號中字節數值長度是不一樣的。
 
 現在讓我們學習如何過濾數據報文以便更容易的分析定位問題。
 
 4、過濾數據包
 正如上面所提,tcpdump 可以抓取很多種類型的數據報文,其中很多可能和我們需要查找的問題并沒有關系。舉個例子,假設你正在定位一個與 web 服務器連接的網絡問題,就不必關心 SSH 數據報文,因此在抓包結果中過濾掉 SSH 報文可能更便于你分析問題。
 
 tcpdump 有很多參數選項可以設置數據包過濾規則,例如根據源 IP 以及目的 IP 地址,端口號,協議等等規則來過濾數據包。下面就介紹一些最常用的過濾方法。
 
 協議
 在命令中指定協議便可以按照協議類型來篩選數據包。比方說用如下命令只要抓取 ICMP 報文:
 
 sudo tcpdump -i ens192 icmp -c 5
 然后再打開一個終端,去 ping 另一臺機器或者用本機ping連接的這個服務器。
 
 回到運行 tcpdump 命令的終端中,可以看到它篩選出了 ICMP 報文。這里 tcpdump 并沒有顯示有關 opensource.com 的域名解析數據包:
 
 
 
 
 
 主機
 用 host 參數只抓取和特定主機相關的數據包,只抓取和顯示與 202.106.2.116 有關的數據包。
 
 sudo tcpdump -i ens192  -c 5 -nn host 202.106.2.116
 端口號
 tcpdump 可以根據服務類型或者端口號來篩選數據包。例如,抓取和 HTTP 服務相關的數據包:
 
 sudo tcpdump -i ens192  -c 5 -nn port 80
 
 
 IP 地址/主機名
 同樣,你也可以根據源 IP 地址或者目的 IP 地址或者主機名來篩選數據包。例如抓取源 IP 地址為 202.106.2.116 的數據包:
 
 sudo tcpdump -i ens192  -c 5 -nn src 202.106.2.116
 注意此處示例中抓取了來自源 IP 地址 192.168.122.98 的 53 端口以及 80 端口的數據包,它們的應答包沒有顯示出來因為那些包的源 IP 地址已經變了。
 
 相對的,使用 dst 就是按目的 IP/主機名來篩選數據包。
 
 sudo tcpdump -i ens192  -c 5 -nn dst 202.106.2.116
 
 
 
 
 
 
 多條件篩選
 當然,可以使用多條件組合來篩選數據包,使用 and 以及 or 邏輯操作符來創建過濾規則。例如,篩選來自源 IP 地址 XXX 的 HTTP 數據包:
 
 sudo tcpdump -i ens192  -c 5 -nn dst 202.106.2.116 and port 80
 
 sudo tcpdump -i ens192  -c 5 -nn dst 202.106.2.116 or port 80
 
 
 
 
 
 
 你也可以使用括號來創建更為復雜的過濾規則,但在 shell 中請用引號包含你的過濾規則以防止被識別為 shell 表達式:
 
 sudo tcpdump -i ens192  -c 5 -nn 'port 80 and (dst 202.106.2.116 or src 202.106.2.140)'
 
 
 sudo tcpdump -i ens192  -c 5 -nn 'port not 80 and (dst 202.106.2.116 or src 202.106.2.140)'
 
 
 
 
  小結:
 
 第一種是關于類型的關鍵字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一臺主機,net 202.0.0.0 指明 202.0.0.0是一個網絡地址,port 23 指明端口號是23。如果沒有指定類型,缺省的類型是host.
 
 第二種是確定傳輸方向的關鍵字,主要包括src , dst ,dst or src, dst and src ,這些關鍵字指明了傳輸的方向。舉例說明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net 202.0.0.0 指明目的網絡地址是202.0.0.0 。如果沒有指明方向關鍵字,則缺省是src or dst關鍵字。
 
 第三種是協議的關鍵字,主要包括fddi,ip,arp,rarp,tcp,udp等類型。Fddi指明是在FDDI(分布式光纖數據接口網??上的特定的網絡協議,實際上它是"ether" 的別名,fddi和ether具有類似的源地址和目的地址,所以可以將fddi協議包當作ether的包進行處理和分析。其他的幾個關鍵字就是指明了監聽的包的協議內容。如果沒有指定任何協議,則tcpdump將會監聽所有協議的信息包。
 
 
 除了這三種類型的關鍵字之外,其他重要的關鍵字如下:gateway, broadcast,less,greater,還有三種邏輯運算,取非運算是 'not ' '! ', 與運算是'and','&&';或運算 是'or' ,'││';這些關鍵字可以組合起來構成強大的組合條件來滿足人們的需要,下面舉幾個例子來說明。
 
 5、檢查數據包內容
 
 在以上的示例中,我們只按數據包頭部的信息來建立規則篩選數據包,例如源地址、目的地址、端口號等等。有時我們需要分析網絡連接問題,可能需要分析數據包中的內容來判斷什么內容需要被發送、什么內容需要被接收等。tcpdump 提供了兩個選項可以查看數據包內容,-X 以十六進制打印出數據報文內容,-A 打印數據報文的 ASCII 值。
 
 例如,HTTP 請求報文內容如下:
 
 
 
 sudo tcpdump -i ens192  -c 5 -nn 'port not 80 and (dst 202.106.2.116 or src 202.106.2.140)' -A
 sudo tcpdump -i ens192  -c 5 -nn 'port not 80 and (dst 202.106.2.116 or src 202.106.2.140)' -X
 
 
 
 
 這對定位一些普通 HTTP 調用 API 接口的問題很有用。當然如果是加密報文,這個輸出也就沒多大用了。
 
 6、保存抓包數據
 tcpdump 提供了保存抓包數據的功能以便后續分析數據包。例如,你可以夜里讓它在那里抓包,然后早上起來再去分析它。同樣當有很多數據包時,顯示過快也不利于分析,將數據包保存下來,更有利于分析問題。
 
 使用 -w 選項來保存數據包而不是在屏幕上顯示出抓取的數據包:
 
 sudo tcpdump -i ens192  -c 5 -nn port 80  -w /tmp/test.pcap
 
 
 該命令將抓取的數據包保存到文件 、test.pcap。后綴名 pcap 表示文件是抓取的數據包格式。
 
 正如示例中所示,保存數據包到文件中時屏幕上就沒有任何有關數據報文的輸出,其中 -c 5 表示抓取到 5 個數據包后就停止抓包。如果想有一些反饋來提示確實抓取到了數據包,可以使用 -v 選項。
 
 查看pcap文件內容
 tcpdump 將數據包保存在二進制文件中,所以不能簡單的用文本編輯器去打開它。使用 -r 選項參數來閱讀該文件中的報文內容:
 
 tcpdump -nn -r /tmp/test.pcap
 
 
 這里不需要管理員權限 sudo 了,因為此刻并不是在網絡接口處抓包。
 
 你還可以使用我們討論過的任何過濾規則來過濾文件中的內容,就像使用實時數據一樣。 例如,通過執行以下命令從源 IP 地址 54.204.39.132 檢查文件中的數據包:
 
 tcpdump -nn -r /tmp/test.pcap  src port 80
 
 
 
 
 7.補充 TCP的幾個狀態 (SYN, FIN, ACK, PSH, RST, URG)
 復制代碼
 在TCP層,有個FLAGS字段,這個字段有以下幾個標識:SYN, FIN, ACK, PSH, RST, URG.
 
 其中,對于我們日常的分析有用的就是前面的五個字段。
 
 它們的含義是:
 
 SYN表示建立連接,
 
 FIN表示關閉連接,
 
 ACK表示響應,
 
 PSH表示有 DATA數據傳輸,
 
 RST表示連接重置。
 
 其中,ACK是可能與SYN,FIN等同時使用的,比如SYN和ACK可能同時為1,它表示的就是建立連接之后的響應,
 
 如果只是單個的一個SYN,它表示的只是建立連接。
 
 TCP的幾次握手就是通過這樣的ACK表現出來的。
 
 但SYN與FIN是不會同時為1的,因為前者表示的是建立連接,而后者表示的是斷開連接。
 
 RST一般是在FIN之后才會出現為1的情況,表示的是連接重置。
 
 一般地,當出現FIN包或RST包時,我們便認為客戶端與服務器端斷開了連接;而當出現SYN和SYN+ACK包時,我們認為客戶端與服務器建立了一個連接。
 
 PSH為1的情況,一般只出現在 DATA內容不為0的包中,也就是說PSH為1表示的是有真正的TCP數據包內容被傳遞。
 
 TCP的連接建立和連接關閉,都是通過請求-響應的模式完成的。
 
 概念補充-TCP三次握手:
 
 TCP(Transmission Control Protocol)傳輸控制協議
 
 TCP是主機對主機層的傳輸控制協議,提供可靠的連接服務,采用三次握手確認建立一個連接:
 
 位碼即tcp標志位,有6種標示:SYN(synchronous建立聯機) ACK(acknowledgement 確認) PSH(push傳送) FIN(finish結束) RST(reset重置) URG(urgent緊急)Sequence number(順序號碼) Acknowledge number(確認號碼)
 
 第一次握手:主機A發送位碼為syn=1,隨機產生seq number=1234567的數據包到服務器,主機B由SYN=1知道,A要求建立聯機;
 
 第二次握手:主機B收到請求后要確認聯機信息,向A發送ack number=(主機A的seq+1),syn=1,ack=1,隨機產生seq=7654321的包;
 
 第三次握手:主機A收到后檢查ack number是否正確,即第一次發送的seq number+1,以及位碼ack是否為1,若正確,主機A會再發送ack number=(主機B的seq+1),ack=1,主機B收到后確認seq值與ack=1則連接建立成功。
 
 完成三次握手,主機A與主機B開始傳送數據。
 
 
 在TCP/IP協議中,TCP協議提供可靠的連接服務,采用三次握手建立一個連接。
 第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,并進入SYN_SEND狀態,等待服務器確認;
 第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
 第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。完成三次握手,客戶

感謝你的閱讀,相信你對“Linux中如何使用tcpdump命令”這一問題有一定的了解,快去動手實踐吧,如果想了解更多相關知識點,可以關注億速云網站!小編會繼續為大家帶來更好的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉祥县| 绥化市| 镇雄县| 阳城县| 罗田县| 犍为县| 桐柏县| 莱芜市| 阳原县| 庄浪县| 珠海市| 同江市| 工布江达县| 云阳县| 栾川县| 尼勒克县| 南平市| 芜湖县| 雅江县| 磐安县| 昂仁县| 浦城县| 浦北县| 若羌县| 泰州市| 诏安县| 定安县| 从江县| 佛坪县| 万盛区| 遂溪县| 桃江县| 普陀区| 普洱| 罗平县| 衡阳县| 苏尼特左旗| 丰城市| 东乌| 萍乡市| 定安县|