公司Linux下socket對接時發現接口中老是報錯,因此研究了一下Linux下的抓包web
tcpdump host #IP地址# //獲取主機210.27.48.1接收或發出的telnet包併發
-i :指定網卡 默認是 eth0
-n :線上ip,而不是hostname
-c :指定抓到多個包後推出
-A:以ASCII方式線上包的內容,這個選項對文本格式的協議包頗有用
-x:以16進制顯示包的內容
-vvv:顯示詳細信息
-s :按包長截取數據;默認是60個字節;若是包大於60個字節,則抓包會出現丟數據;因此咱們通常會設置 -s 0 ;這樣會按照包的大小截取數據;抓到的是完整的包數據
-r:從文件中讀取【與 -w 對應,/usr/sbin/tcpdump -r test.out 讀取 tcpdump -w test.out】
-w:處處指向文件【必定要用,-w t.out ,而後用 -r t.out 來看抓包信息,不然可讀性不好】
socket
2. tcpmdump 抓包出來分析包的具體含義tcp
第一行: S:表示 clinet.hostname 的臨時端口50741向 server.hostname 80 端口發起鏈接,client 的初始包序號是: 562843056 ;滑動窗口(win 14480)的大小是:14480 [14k] 滑動窗口即tcp 接收緩衝區的大小,用於tcp 擁塞控制;mss 1460:能夠接收的最大包長度,一般是MTU - 40 byte;IP頭和TCP頭各20byte
第二行: S:表示SYN狀態;是server.hostname 對第一行 clinet.hostname 發起鏈接的請求的迴應;同時帶上client 端 初始包序號 + 1:ack 562843057 ,即server.hostname 下次等待接收這個包序號的包,用於tcp 字節流的順序控制(?). server.hostname 初始包序列號:2306923370
第三行:client.hostname 再次確認,tcp鏈接完成三次握手
。
第四行:P:推送數據 client.hostname 經過 50741 端口向 server.hostname 發送數據包;數據包大小是 1005byte ;第五行是 server.hostname 響應這個數據包發送,接收這個數據包。----> 當完成後會出現一個 server.hostname F 關閉鏈接的數據包,這裏沒有抓取
第6行 ---->10行是對 1-5行的重複;由於機器是web服務是併發的。
server