圖:徐括
五老巔——石船山線徒步線路分析
由于本次徒步使我基本搞清了雁蕩山脈最精華部分:五老巔——石船山一線山脊走向和山峰分布,所以先來全面分析下這一區域由各登山口上到這條山脊線所形成的徒步線路。
為什么說“五老巔——石船山”一線的山脈是雁蕩山的最精華所在?因為雁蕩山風景名勝區最精華的“兩靈一龍”、方洞、三折瀑和森林公園六大景區都分布于這片山脈的山下。靈峰在東南,三折瀑、森林公園、靈巖、方洞在南側的山下依次排列,大龍湫則在它西側山谷中,正是這條山脈蘊育了雁蕩山最壯美的絕佳風景。如果把我之前諸文章中介紹的“線路1、2、3、4”叫做“雁蕩山主景區中路徒步”的話,今天所介紹的這條線路則可稱做“雁蕩山主景區高路徒步”。
如下圖衛星截圖可知,從山脊線走向看,五老巔山脊與“麒麟背”所在的石船山山脊呈“Y”字形最終在靈巖景區內的臥龍谷上方北側聚合,山脊雖有斷裂,但總體保持上升態勢,一直延伸至雁蕩山最高峰——百崗尖。從南側山下來看,登上五老巔山脊的山徑主要有朝陽嶂下的兩個登山口(詳見“雁蕩山 經典徒步線路攻略(四)- 朝陽嶂:https://www.mafengwo.cn/i/7295375.html”);登上石船山山脊的山徑正是本線路要介紹的位于靈巖景區上方的蓮花洞附近茶園的上山野道,和位于臥龍谷上方新建玻璃棧道某處的上山野道。另外,從森林公園景區內一直向上爬升,可到達圖中位于五老巔山脊上的“埡口1”,向左可去石船山,向右可去登頂五老巔,如果翻越這個埡口沿野道可一直走到百崗尖(詳見“最全登頂 雁蕩山最高峰“百崗尖”線路:https://www.mafengwo.cn/i/7289960.htm”)。所以,綜上所述,徒步者可以在山下選擇上面介紹的任意兩個上山口做為起點和終點,規劃一條自己的徒步石船山或五老巔山脊的線路。
本線路分析:森林公園景區停車場--游絲嶂背---蓮花洞附近茶園------石船山山脊與五老巔山山脊交點---埡口2---箬竹林---臥龍谷玻璃棧道---靈巖寺---靈巖景區出入口---景區公路---森林公園景區停車場
推薦指數:AAAA
難度指數:AAAA
適合人群:有一定經驗的戶外徒步愛好者
預估全程時間:5-6小時(大環線13km),4小時左右(小環線8km)
綜合評述:此線路的精華段在于石船山山脊,特別是麒麟背一段,確實驚險、壯美,而且一路可以遠眺方洞上方的板嶂巖,高險奇絕。最艱難的一段是由埡口2下到靈巖景區臥龍谷玻璃棧道段,全為臨時開辟的土路和溪流巖石段(后面有詳細照片為證),強烈建議勿在雨天前往。下圖所繪制的為大環線,但如果你不想走太多冤枉路,只想感受下這條線路的精華,可以走本線路的小環線:靈巖景區出入口---靈巖寺---蓮花洞附近茶園---石船山山脊(麒麟背)---石船山山脊與五老巔山山脊交點---埡口2---箬竹林---臥龍谷玻璃棧道---靈巖寺---靈巖景區出入口,這樣至少可以節省一個半小時以上的時間。但代價是需要購買靈巖景區的門票。另外,如果你在到達埡口2后仍有體力,可以嘗試繼續向前登上雁蕩最高峰——百崗尖,再由JY公路走下來,或叫輛車上來接你(車費得自己談,一般在150-300元間)。那就是個超大的環線了。
麒麟背大環線徒步線路圖,如果走小環線,需要先進入靈巖景區核心——靈巖寺所在的谷地。
本人華為運動手表記錄的實際線路情況,由于在穿越“箬竹林”時操作失誤,手表運動軌跡重啟了一次,所以這里看到有兩段,僅供參考。
第一段:森林公園停車場至蓮花洞附近茶園
這一段線路與“雁蕩山經典徒步線路攻略(二)-森林公園門外至靈巖:https://www.mafengwo.cn/i/7305893.html”中介紹的”線路2“完全相同,所以不再做詳細介紹。由于“線路2”寫作于十多年前,所以山下的部分建筑和設施有些改變,請注意區分。
上圖為線路起點的,即位于森林公園景區入口左側的登山道。注意不要進入景區,這條道位于景區外的停車場。
十年前看到此墓非常平常,現在已明顯被修葺過,由于清明剛過不久,應該有人祭掃過。
剛開始段現在的路旁有座挺大的民宿叫“林下見鹿”,之前還真沒聽說過,以這樣的規模,有些低調了。
”線路2“現在已非常成熟,沿途可以看到大量戶外團隊遺留的紅絲帶,它上升段坡度很大,很費體力,但總體不長,約一小時就能免費進入靈巖景區了。估計這就是它受歡迎的原因了。
第二段:蓮花洞附近茶園至埡口2
在”線路2”上我們花了很多時間去尋找上山道,最后才發現是在靈巖景區上方的蓮花洞附近的茶園邊。標志就是這個“禁止通行”的牌子和非常非常多的紅絲帶。了解到這里我們還是有些后悔,因為如果早點知道在這個位置,我們就會從靈巖景區直接進來了,因為時下,景區對所有樂清人仍是免門票的。
入口的標志就是這個牌子和數不清的戶外絲帶了。
10:43 這里實際上離山下高度至少有150多米,可以平齊看到對面的天柱峰頂。從靈巖寺走上來,雖然有很好的石階路,但坡度很大,相當耗費體力。這里開始就都是土路了,開始段基本在茶園的左側。
走出一點就開始爬升了,路跡非常明顯,不用擔心迷路。
11:11,不到半小時的時間,我們就登上了山脊。
再向前走出100來米,我們便看到這峭立的山脊,可以斷定是麒麟背到了。
為了詳細記錄麒麟背的美景,我和同伴R用山脊上的片石搭起一個平臺,方便無人機起落。R負責操控無人機拍攝,我則在這段山脊上走了兩個來回。
麒麟背盡頭的一座山峰,走完麒麟背后就要翻越它。
東北方向是五老巔,它們間的峽谷就是凈名谷。
麒麟背的巖石呈片狀,在千萬年的地質作用下被壓斷、轉動,直戳天穹。
麒麟背這名稱的由來,應該是因為這巖壁的紋理類似于傳說中麒麟身上的鱗片。
11:58,在完成航拍后,我們繼續前行。
翻越過一座小山峰后,又是一段類似于麒麟背樣的山脊,但寬度要大些,看起來沒之前那么驚險。
12:34接下來的路大多是在懸崖邊行走,眼在天堂,腳若稍有閃失,就可能墜落地獄了,必須小心對待。
南側山下可以清楚地看到去年剛建的連接方洞景區與靈巖景區的玻璃棧道。它所在的山谷就是小龍湫上方的臥龍谷。
12:38前面又是一座筆直的山峰,R說好象沒路了,我說走到跟前就有了。
12:45我爬上峰頂時R還在峰底的茶園。一路上很多地方都被種上了茶樹,使山間野道感受起來不那么荒蕪了。
這個角度可以比較完整地看到凈名谷內的全貌,雁蕩山的險峻可不是浪得虛名。認為雁蕩山可輕松拿下的估計都是只游歷過山下主景區的人。
13:05,又行一段后,我們來到了一個三叉路口,我才意識到這里就是石船山山脊與五老巔山脊相交的地方,至此兩條山脊匯合成一條繼續向西北方向的雁蕩主峰——百崗尖延伸開去。這里有很多垃圾,應該徒行到此進行休憩的團隊比較多,我們甚至還撿到了一個保溫杯(上圖這個),里面盛的茶液都還沒有變質。
此地遠眺五老巔,完整的山形對稱端正,莊嚴老成。
在西北側石船山山脊與五老巔山脊匯合成一條繼續向雁蕩主峰——百崗尖延伸開去。就近的這段山脊比麒麟背還要狹窄,而且怪石突起,粗看根本無處下腳。與R商量后我們決定繼續前行,如果真沒路再折回。
正南側的臥龍谷就在腳下。更遠處是飛泉寺所在的山脈。
繼續向前,拍了張已走過的路。
12:25我們來到了一座斷崖前,明明可以看到對面山崖上的路,但已疲憊不堪的我們必須先下到崖下才能再爬上去。
居高臨下是看不到下面路的情況,只能循著還算清晰的路跡向下探尋。
很快在山腰的右側找到了一條下降的繩索。
循繩下降,在中途發現一條向右的叉道,我懷疑這路是去“埡口1”的一條土路,但人已很疲憊,就沒有去探證。
下到峰底,路跡變得有些模糊,好在樹上的紅絲帶一路指引。
然后我們又爬上了對面的一座山峰,在這里可以看到北面的群山,遠處那幾列應該已是永嘉地域了。
在我們東北方向的不遠處,隱約有條山道,我推斷那就是從森林公園登頂百崗尖的山道(詳見“最全登頂 雁蕩山最高峰“百崗尖”線路:https://www.mafengwo.cn/i/7289960.htm”)。
13:53又躍上一峰的峰頂,看起來百崗尖已經很近,但估計真走到那里,沒個把小時是拿不下來的。在我們到達五老巔與石船山交叉口時,我們本打算再向前探索一段就折回下山的。沒想到越走越深,兩邊也一直看不到下山的路。
又下一峰。
14:07我們下到了峰底的一塊空地,這塊地方拋滿了很多垃圾。R催促我快點繼續向前,我卻感覺有些不對,為什么那么多團隊選擇在這里駐足?所以我在空地的四周仔細巡視了一遍,很快就在峰底的巖石邊發現了一條隱藏在箬竹林中的小道(下圖)。于是我們決定由此處回,因為如果這里能順利進入靈巖景區的話,將大大節省回程的時間。而如果我們去登頂百崗尖,那到達百崗尖的時間目測是還需要一小時,但實際情況無法預知,并且上到百崗尖的JY公路,走下來至少還要1.5小時。為了標記這個可以折入靈巖景區的地方,我把它標記為“埡口2”。
第三段:埡口2至靈巖景區
箬竹林的路況如上圖所示,總體有約400米的長度。竹比人高,環境幽閉,路面濕滑,一個人走這種是要點膽量的。R滑倒了兩次,我建議他拋掉手中的木棒,改用雙手都去抓住兩邊的竹節,加強身體穩定性,減緩下沖勢能。
14:25我倆終于走出了箬竹林,這時可以清楚地聽到山下傳來的人聲,我們推斷是行走在玻璃棧道上的人發出的。
接下來的路也好不到哪里去,先是一段灌木叢和著杉木林的下降路,再是沿著一段溪流下行。腳下雖然艱難,谷中的人聲卻越來越清,有時仿佛就是從前方不遠處傳過來,我們心情大好。
最后一段就是沿著水管走。
15:04 水管盡,小屋現,玻璃棧道到達了。
從玻璃棧道上看我們下來的地方,同樣是個“禁止通行”的牌子。
抬頭仰望我們下來的“埡口2”所在處,我們估計應該是上圖左側的凹處。
我們沿玻璃棧道下行,就下到臥龍谷中,再繼續向下就到達靈巖景區內,出景區,沿公路又走了半小時回到了森林公園停車場時已近下午四點,提車歸家。
有互聯網服務,均依賴于TCP/IP協議棧。懂得數據是如何在協議棧傳輸的,將會幫助你提升互聯網程序的性能和解決TCP相關問題的能力。
我們講述在Linux場景下數據包是如何在協議層傳輸的。
1、發送數據
應用層發送數據的過程大致如下:
我們把上述處理過程的區域大致分為:
1. User區域
2. Kernel 區域
3. Device區域
在user和kernel區域的任務都是由本機cpu執行,這兩個區域合并稱為host區域,以區分device區域(網絡接口卡上有單獨的cpu)。device是接收和發送數據包的網絡接口卡(Network Interface Card),一般也稱為LAN card。
當應用程序調用write(fd, buf, len)來發送數據時,用戶態區域會進入內核態區域,建立這個關系的紐帶是socket fd和系統調用write。
在內核態的socket有兩個buffer:
1. send socket buffer,用于發送數據
2. receive socket buffer,用于接收數據
當write系統調用被執行,用戶態的數據(buf,長度)會被拷貝到內核區域的內存,并被放入到send socket buffer的末尾(見下圖,發送是按照順序發送的),然后TCP就會被調用。
TCP中的數據結構是TCB(TCP Control Block)。TCB包含了執行TCP會話所需要的信息,包括TCP連接狀態,接收窗口,擁塞窗口,序號,重傳timer 等。
TCP會創建TCP數據分段,而TCP數據分段包括TCP header和payload,如下圖:
Payload是待發送的socket buffer中的數據,而TCP header是為了TCP可靠發送數據而加的輔助信息。
這些數據分段會進入到IP層,IP層會加上IP頭部信息到數據分段,如下圖:
IP在執行路由之前會去檢查Netfilter LOCAL_OUT鉤子,看是否需要執行iptables相關配置。之后執行IP路由。IP路由主要功能是尋找下一跳(例如網關或路由器)的IP地址,而路由的目的是到達目的地IP地址所在的機器。
IP執行路由之后,檢查Netfilter POST_ROUTING鉤子,如果有iptables在這方面的配置,就會去執行相關操作。委托給數據鏈路層之前,IP層還會執行ARP(網絡地址轉換),通過下一跳IP地址來查找目的MAC地址,并把Ethernet頭部添加到IP數據包,如下圖。
IP層同時還給用戶提供了raw socket接口,即發送數據包的接口。raw socket發送的數據包與正常流程的數據包不一樣,在執行Netfilter的時候,會跳過這些鉤子。
IP層做完工作以后,會把數據包(上圖中的數據包,一般稱frame)委托給數據鏈路層。
由于ARP已經把目的MAC地址寫入到數據包頭部,這樣就減輕了驅動driver的工作。進入數據鏈路層后,內核會去檢測是否有抓包工具在監聽抓包(例如tcpdump),如果有,內核會拷貝數據包信息到抓包工具的內存地址空間。
之后,根據一定的協議規則,驅動driver會要求NIC傳遞這個數據包。當NIC收到這個請求后,NIC復制數據包到自己的內存里,并且發送給網絡。當NIC發送完一個數據包,會產生一個中斷, 主機 cpu去執行中斷處理程序,完成后續工作。
2、接收數據
應用程序接收數據的過程大致如下:
首先NIC把數據包寫入自己的內存,并校驗數據包是不是有效的,如果是有效的,把數據包寫入主機的內存空間,然后NIC給主機操作系統發送一個中斷信號,這時就進入到kernel區域。
在數據鏈路層,內核首先會做數據包檢測,然后Driver驅動把數據包進行改裝,以便后續TCP/IP能夠理解這個數據包。改裝完以后,根據Ethernet頭部信息中的Ethertype分發給上層,假設為IPv4,去除Ethernet頭部,并發送給IP層。值得注意的是,委托給IP層之前,如果有抓包工具在監聽抓包,那么內核就會拷貝數據包信息到抓包工具的內存地址空間。
IP層通過計算checksum來校驗IP頭部的checksum是否有效,如果有效,接著檢查PRE_ROUTING鉤子(比如查看是否有iptables的相應配置需要執行),然后執行IP路由,IP路由會判斷這個數據包是本地處理還是轉發當前數據包到其它主機。如果是轉發數據包,執行FORWARD和POST_ROUTING鉤子,并轉發給數據鏈路層;如果是本地處理,IP還會檢查LOCAL_IN鉤子,執行完以后,根據IP頭部信息的proto值,假設為TCP,去除IP頭部,并把數據包傳遞給上層TCP。值得注意的是,委托給TCP層之前,如果有raw socket在監聽抓包,那么內核會拷貝數據包信息到raw socket的內存地址空間(默認tcpcopy利用raw socket來監聽IP層的數據包)。
TCP層會根據TCP checksum來檢測數據包是否有效(如果采用了checksum offload,NIC會去做相關計算),然后就給這個數據包查找相應的TCB(TCP control block),查找的方法是通過如下組合信息來查找:
<source IP, source port, target IP, target port>
如果沒有查到,一般會發送reset數據包;如果查到了,進入TCP數據包處理環節。
如果是接收到新數據,TCP就會把它放入到socket接收緩沖區,然后根據TCP狀態,必要時發送ack確認數據包。Socket接收緩沖區的大小就是TCP接收窗口大小。在某種程度上,如果接收窗口很大,TCP吞吐量就會很大。目前較新的內核都能動態調整窗口的大小,無需用戶去修改系統參數。
用戶應用程序根據讀事件去執行讀操作,用戶態空間進入到內核空間。內核把socket buffer里面的內容復制到用戶指定的內存區域,然后把socket buffer讀取過的內容釋放,TCP增加接收窗口大小,如果有必要,會傳遞一個更新窗口的數據包給對端TCP。例如下圖,TCP發送了一個ack數據包,用于通知對端TCP,本方TCP接收窗口更新了。
讀取操作完成后,返回應用程序,應用程序就可以進行對數據進行處理了。
3、抓包工具工作原理
知道了數據如何發送和接收以后,我們分析一下tcpdump抓包原理。
在數據鏈路層和IP層交界的地方(屬于數據鏈路層,如下圖),是數據包被tcpdump捕獲的場所。
執行到這個交界處時,內核會去查看tcpdump是否在監聽,一旦有監聽,就把數據包內容放入到tcpdump設置的緩沖區。理論上只要tcpdump及時去提取數據,在線上壓力不大的情況下,抓包不會丟包。
tcpdump所抓到的數據包,僅僅是代表數據包經過了鏈路層和網絡層之間的交界處。從網卡進來的數據包未來的命運,可能是繼續一路往前走到TCP,也有可能在IP層被干掉,還有可能被路由轉發出去;從本機發送出去的數據包,一旦被tcpdump捕獲到,說明已經到了數據鏈路層,沒有被IP層過濾掉,因為如果數據包被IP層過濾掉,這些數據包就不會到達tcpdump捕獲點,也不會出現在抓包文件里。
下面我們通過一些實驗來驗證上述結論。
實驗之前,我們先介紹一下iptables工具。iptables是被廣泛使用的防火墻工具,它主要跟內核netfilter數據包過濾框架進行交互。
3.1 實驗 LOCAL_IN過濾
我們在服務器上面配置如下的iptables命令:
iptables -I INPUT -p tcp --dport 3306 -s 172.17.0.2 -j QUEUE
上述iptables命令設置了"-I INPUT"參數,意味著在netfilter LOCAL_IN鉤子處執行上述iptables規則,即通往服務器端TCP之前,如果匹配到上述iptables規則,則會被放入目標QUEUE(默認情況下是直接丟棄數據包),不再繼續前行。
具體命令執行見下圖:
設置上述iptables后,當172.17.0.2訪問172.17.0.3 3306服務時,IP數據包(如下圖綠色箭頭)會在服務器端IP層被丟棄掉,而紅色箭頭所指方向是tcpdump抓包的地方。
我們開啟tcpdump抓包:
tcpdump -i any tcp and port 3306 and host 172.17.0.2 -n -v
在172.17.0.2上利用MySQL客戶端命令訪問172.17.0.3上面的3306服務,如下圖:
結果經過長時間等待,最終顯示連接不上。
服務器端抓包結果如下:
我們看到第一次握手數據包反復重傳。
利用netstat命令,查看有沒有相應的TCP狀態,結果發現沒有,如下圖:
正常情況下,沒有TCP狀態,說明數據包沒有進入服務器端TCP,第一次握手數據包在服務器端IP層被干掉了。
利用netstat -s命令,在服務器端TCP/IP統計參數里找線索:
上圖服務器端IP層接收到20079個數據包,下圖接收到20086個數據包,MySQL客戶端登入過程累計增加了7個數據包,正好符合抓包文件顯示的7個第一次握手數據包。
在服務器端TCP層,對比上面兩張圖,數據沒有任何變化,說明了服務器端TCP沒有收到任何數據包。
實驗說明了在服務器端IP層進來的方向干掉數據包,服務器端TCP層不會有任何變化。
3.2 實驗 LOCAL_OUT過濾
我們這次實驗的目的是查看IP層netfilter LOCAL_OUT情況下的抓包情況。
如下圖:
我們設置如下iptables命令:
iptables -I OUTPUT -p tcp --sport 3306 -d 172.17.0.2 -j QUEUE
具體操作如下圖:
上述iptables命令設置了OUTPUT參數,意味著在netfilter LOCAL_OUT鉤子處會執行上述iptables規則,即IP數據包在IP路由之前,如果匹配上述iptables規則,則會被放入目標QUEUE(默認情況下直接丟棄數據包),不會繼續往下走。
在172.17.0.2上利用MySQL客戶端命令訪問172.17.0.3上面的3306服務,如下圖:
結果經過長時間等待,最終顯示連接不上。
服務器端抓包結果如下:
我們看到第一次握手數據包反復重傳,跟上一個抓包結果幾乎一模一樣
利用netstat命令,查看有沒有相應的TCP狀態,結果發現有SYN_RECV狀態,如下圖:
有TCP狀態,說明數據包進入服務器端TCP,并進入SYN_RECV狀態,服務器端TCP會發送第二次握手數據包,但抓包顯示并沒有第二次握手數據包,說明被iptables配置干掉了。
查看netstat -s結果:
上圖顯示了實驗之前的值,下圖顯示了實驗之后的值。
從TCP層面信息來看,發送了17個數據分段,說明服務器端TCP發送了第二次握手數據包,而且發送了很多次,但因為設置了iptables,這些數據包被攔截掉了,所以到不了數據鏈路層,也就沒法被tcpdump捕獲到。
從這兩個實驗來看,tcpdump抓的數據包是一樣的,都是在努力重傳第一次握手數據包,但iptables設置的位置不一樣,一個在入口,在TCP層無狀態,一個在出口,在TCP層有狀態。
進一步的分析可以嘗試下面兩個方向:
1. 通過分析TCP狀態來區分這兩種情況
2. 利用netstat -s給出的TCP/IP統計參數變化
通過上面實驗,我們看出tcpdump抓包只是從一個點來觀察世界,并不能看到全貌,這個時候就需要通過推理來輔助解決問題。
4、潛在協議層的干擾
4.1 接收數據
下圖展示了數據包從NIC到協議棧,再到應用程序的過程。
TCP offload由NIC完成,目的是減輕TCP的工作量,但存在潛在坑;在數據鏈路層,存在抓包接口,供tcpdump等抓包工具抓包,同時也存在著raw socket原始抓包方式接口;在網絡層,存在raw socket抓包接口,IP Forward轉發功能,還有一整套Netfilter框架(存在大量坑的地方);在TCP層則相對比較清靜,干擾少;用戶程序通過socket接口從TCP取出數據或者獲取新建連接。
4.2 發送數據
下圖展示了數據包從應用發送數據到NIC的過程。
用戶程序通過socket接口來委托TCP發送數據或者建立連接;在網絡層,存在raw socket發包接口,還有一整套Netfilter框架(存在大量坑的地方);在數據鏈路層,存在pcap發包接口,同時也存在著raw socket原始發包接口;TCP offload是NIC做的,目的為了提升減輕TCP的工作量(比如分段,checksum),我們也遇到過由于TCP offload不當導致的丟包問題。
4.3 案例
下面是一個從NIC接收數據包,并一路到應用,再發送響應出去的案例:
我們的應用程序是Nginx(Web服務器軟件),其中Nginx配置監聽端口為8080,且開啟access log。
上圖設置了nginx keepalive_timeout=0,即保持客戶端空閑連接(方便實驗)。
啟動nginx,通過netstat查看,nginx已經在監聽8080端口的連接請求。
剛開始nginx沒有任何訪問,access log都為空,iptables也沒有設置。
在172.17.0.2機器,利用telnet訪問172.17.0.3上面的8080端口服務,如下圖:
這樣telnet跟nginx建立連接,下圖可以看出服務器端相應連接已經進入ESTABLISHED狀態。
建立連接后,我們設置iptables命令,如下圖,對返回172.17.0.2的nginx響應進行攔截并丟棄。
我們在客戶端(172.17.0.2)上面繼續執行telnet命令,鍵入"GET hello.html",然后回車執行。
從nginx日志來看,這個請求已經被處理了,雖然是非法請求,但請求已經確認到達nginx了。
大概過了2分鐘,查看客戶端抓包情況,累計捕獲了16個數據包,客戶端還顯示連接處于ESTABLISHED狀態。
我們查看服務器端情況,利用netstat已經查不到服務器端的相應連接了,說明連接在服務器端的TCP層已經不存在了。
我們分析抓包情況(服務器抓包和客戶端抓包效果一樣):
自從發送了請求數據包,客戶端由于沒有看到任何服務器端的數據包回來,一直在重傳請求數據包。客戶端以為服務器還沒有收到請求,但其實請求已經被nginx處理完畢。
在服務器端查看netstat -st的統計情況。
上圖是執行telnet請求之前的狀況,下圖是執行telnet請求之后的狀況。
從上圖我們可以看出connection aborted due to timeout增加了一個,說明在服務器端TCP看來,請求的響應數據包(同時帶有關閉fin標志)由于發送不出去,連接被aborted,這個時候在服務器端看不到連接相應狀態的存在。
在上層nginx看來,遇到了非法請求,回復了響應并關閉了連接。在TCP層看來,由于帶有關閉fin的數據包到不了tcpdump抓包接口,服務器端的TCP狀態會處于FIN_WAIT_1狀態("遇到大量FIN_WAIT1,怎么破?"會有詳細介紹),會維持一段時間并不斷努力重傳。由于重傳一直得不到響應,TCP就把FIN_WAIT_1狀態變為CLOSED狀態,在服務器端查不到該連接了。
這里案例中,我們事先知道我們設置了iptables,但如果不知道呢,我們如何判斷出問題出在哪一個環節呢?
僅僅靠tcpdump抓包,明顯不夠,因為通過抓包分析,我們只能得出服務器端沒有接收到請求,我們還需要利用服務器端的信息,才能繼續進一步判斷。通過nginx日志,判斷出請求已經被應用層處理了,說明請求數據包已經到達應用層,nginx已經處理請求,并作了響應處理,接著委托服務器端TCP去發送這些響應數據包,但顯然服務器端TCP發送的響應都沒有到達抓包接口,說明在IP層干掉了,于是可以根據這些信息去找數據包出去方向(outgoing)的netfilter相關配置,看看有沒有這樣針對這些響應進行過濾。
從上面案例,可以看出僅僅利用tcpdump是不夠的,還需要綜合利用各種信息,并加以推理,最終得出問題出在哪一個環節,才能解決問題。如果不會利用這些知識,客戶端就就會得出服務器端沒有收到請求的錯誤判斷。
5、跨機器判斷
在跨機器訪問過程中,存在著如下潛在干涉(坑):
1. 本機器自身IP層安全過濾
2. 鏈路層發送QUEUE丟包
3. 鏈路層TCP offload潛在問題(這里把NIC歸入數據鏈路層)
4. 中途設備各種問題(設備包括路由器/交換機/防火墻/網關/負載均衡器等)
5. 對端機器鏈路層接收QUEUE丟包
6. 對端鏈路層TCP offload(NIC)潛在問題
7. 對端IP層安全過濾
8. 對端TCP異常狀態干擾
這些問題將在TCPCopy和其它章節會有所介紹,這里不再詳細描述。
6、常用工具工作層次分析
上圖展示了部分流行性工具的工作層次,比如tcpcopy默認工作在4層,調用IP層提供的raw socket接口來抓包和發包;netstat或者ss工具可以去獲取TCP/IP各種統計值;LVS工作在4層,利用Netfilter來強行改變路由;tcpdump工作在數據鏈路層;HTTP應用工作在應用層。
懂得了這些工作原理,可以更加深刻的理解問題,并解決各種TCP相關問題。
克線---這些年,在普通游客中知之甚少,而在戶外圈卻聲名鵲起。說到洛克線,難免先要把戶外圈大家都知道的故事復述一遍,這也是為了普通讀者能夠多一點了解。
1928年3月,美國探險家約瑟夫·洛克從木里出發,穿越稻城、亞丁等地,深入貢嘎嶺地區。他兩次穿越稻城亞丁之后,在美國《國家地理雜志》發表了他撰寫的文章和拍攝的照片。
1933年4月,詹姆斯·希爾頓(James Hilton)以此約瑟夫·洛克穿越時的文章和照片為素材,尤其是洛克貢嘎嶺三座神山(仙乃日、央邁勇、夏諾多吉)的探險經歷,創作了著名的小說——《消失的地平線》》(Lost Horizon)
人們將小說中所描述的“世外桃源”稱之為“香格里拉”,同時也在世界范圍內興起了尋找香格里拉的熱潮,洛克探險時從木里穿越到貢嘎嶺地區的這條線路,就是后人所說“洛克線”。
想一睹風景的人都必須得踏上千百年來的茶馬古道,徒步深入自然,轉三座神山,才能一睹尋常人無法窺探的瑰麗。由于交通和自然條件所限,洛克線至今沒有被開發,這里是地球上所剩不多的一塊凈土,這里是一塊人類涉足有限的處女地。
“洛克線”,是一條世界級的精品徒步穿越路線,由木里縣境內的水洛鄉起,沿白水河而上,穿越水洛貢嘎,圍繞夏朗多吉、仙乃日、央邁勇三座神山而行,直至進入稻城亞丁。沿途景色是由森林、河流、山澗瀑布、湖泊、雪峰組成的高原風光,整個旅程美景不斷,目不暇接。
(圖片來源網絡)
雖然關注了好幾年,但是2019年起才提上日程,當年各種原因沒有成行。今年,從6月起,也有幾次機會但都未能實現,進入8月,各種不利因素輪番出現,先是,成都到西昌的火車因塌方中斷,不知何時能在通行。然后,四川多地8月暴雨塌方不斷,天氣預報也看不出何時能好轉。
不過,既然下了決心就盡力去實現。這條線路出于安全考慮(要讓家人放心),同時還出于出行成本(比如西昌到水洛鄉需要包車2000多元,穿越需要請向導每天200元等,一個人負擔會比較高)需要約上通行驢友。于是,又花了一些時間在網上約人,總算跟上一個8月18日西昌會合的隊伍,最后確定下來的有5個人,重慶2人,杭州1人,洛陽1人,加上我,別的沒多了解,只知道我年紀最大。
其實,我已經好多年沒有背包穿越了,2018年徒步雨崩,因為可以吃住在村子里,所以,沒有帶露營裝備和準備餐食,相對而言輕松很多。這次提前準備,把很久不用的帳篷等裝備拿出來,檢查發現,充氣墊也漏氣了,換成蛋巢。一雙買了幾年的麥樂徒步鞋沒用過也拿出來用。背包擔心被馱馬磨壞,用了朋友送的從來沒用過的軍警背包。其他基本上沒多大問題。
8.17 遵義到成都,上午7點過的火車,一路感覺天氣都還好,不時有點太陽,快到成都時天陰了下來,但是沒下雨,心里多少有點安慰。不過各種資訊傳來的消息似乎并不樂觀,四川很多地方仍然是大雨乃至暴雨,各地交通管制,黃色和紅色預警,家里一直表示很擔心。
晚上到永輝超市買食品,回來又遇大雨,心理還真有點不踏實。和隊友約的西昌會合,本來可以選北門車站或者茶店子車站,后面有石家莊過來一個隊,說她們約了車,8點過到成都站,想想很方便就確定跟她們包的車走。后來說晚點2小時,也還好。
最后,補充的食品和背包一起稱,足有20公斤。
8.18 第二天早上,最新消息,石家莊隊火車晚點5小時多,有點糾結了。隨后,重慶過來的隊友2人已確定在東站客車站坐11點的班車,所以,爭求幾方意見后我網上訂到11點半客車東站到車,心想到車站改簽到11點和隊友一起走。
到客車東站改簽窗口,售票員說路上塌方交通中段,只能退票,這就尷尬了!重慶2隊友短褲和猴子也得知消息趕過來退票。我聯絡一些網約車,這時都亂喊價,240380400 一個人不等,短褲在車站門口聯絡到說有客車220一人,這時杭州隊友丸子也下飛機趕過來了,確定就坐這個車。一輛車拉我們到成彭路高架下面一輛晉M牌照的大巴車上,50來個人湊齊開車,這時明白是黑車但也沒別的更好辦法,1點過了才發車。
出去雖然比較慢天氣也不太好,但還算順利,下午6點來鐘車到石棉下道,路邊停了好多車,大巴車開進一停車場說交通管制不知道啥時候能走,通知各自散開,9點過來聽消息,如果不行就只有等明天再說了。無奈,先填飽肚子再說,4個人轉了下找了家順眼的燒烤店撮一頓,好像沒影響胃口。
8點半回大巴,好消息是說往西昌方向可以放行了,壞消息是,司機清點人數差4個人他不敢走,如果這時不走不知道什么時候還能走,大寫的尷尬!不行,我們選擇報警,警察來了解了情況同意讓車走,把沒來人的行李帶到西昌讓他們聯系司機取行李,車開進高速我們才松了一口氣,這時已經是晚上9點過。折騰了一天晚上12點過終于到達西昌,下午到西昌到隊友洛陽已取了氣罐,折騰了一整天,5個人終于聚齊了。丸子說,好累啊,明天睡到自然醒。
后面,短褲聯系包車司機,由于錯過晚10點接我們,新的方案是明早5點另一個車接我們送到木里,再趕包車司機的車到呷洛村,那里還有自然醒。
8.19 凌晨1點過才睡覺,早上4點過就被司機電話吵醒,起來收拾東西退房,5點準時出發。睡意朦朧有點難受,天慢慢亮了,霧氣很重,雖然基本沒下雨了,但還是陰沉沉的,汽車在盤山路上一會兒上一會兒下,遠處的云在山頂個山腰環繞,彎道太多,坐后排的隊友被甩得暈乎乎的。
路上見到多處塌方,還好都清理開了,10點過到木里換了蘭小軍司機的長安面包繼續往水洛鄉呷洛村進發,出木里吃了點東西踏實一點了。還是一路盤山道,還是多處塌方,雖然車坐得有點辛苦,但感覺離今天的目的地越來越近了,下午,天氣也慢慢亮點了。翻過一個大坡,從海拔4000米埡口一直下到3000米,在走了10來公里小路,下午4點來鐘終于到達呷洛村。
這一路從成都算起,足有1000公里多,用了2天時間,趕車坐車的辛苦很久沒有過了。稍作休息我們出門到村子的寺廟轉轉,希望后面的行程順順利利。5點過鐘天有點晾開了,一點點的白云和藍天讓我們好開心,感覺明天的好天氣有希望。回到房東家,暖暖的酥油茶和熱騰騰的飯菜讓我們的胃也安心了,早早睡覺。
自左而右 短褲 司機 洛陽 丸子 猴子 我 一個老大爺跟著一群年輕人:)
8.20 從呷洛村--菩薩洞--下滿措牛場,六小時左右,17公里,海拔3000米到3700米左右。爽爽的天氣,徒步的好日子。
早上,一壺酥油茶,一盤奶酪還有才出鍋的青稞餅,吃飽喝足,收拾東西出發。除了隨身小背包,其他行李都交給了馬夫(正式名稱 解放色空打者次爾他說叫依西 我們親切稱為一休哥 我們的馬夫是他夫人)。房東翁丁為我們掛上哈達和扎西德勒的祝福,我們出發了。
走一段后回頭看呷洛村 翠綠的村子點綴著彩色的藏式民居,微露的藍天下白云漂在村子的上面,十分的美麗,經歷了兩天的趕路天氣好轉讓我們的心情格外愉快,興奮得邊走邊拍照,在埡口上,遠處的盤山道,近綠遠黛的群山 朵朵白云漂在天際,非常動人的畫卷!從埡口下到河邊,我們沿白水河而上。
菩薩洞,好像洞口有點高沒看到,奔騰而下的河水咆哮著,伴隨舞動的經幡,我們繼續逆流而上。前些天太多下雨,有些大樹倒塌阻斷道路,向導幫我們翻越障礙。
陽光透過森林,藍天依稀可見,空氣格外清新。森林中各種菌類包括林芝,拍一拍就好。后來還看到好多野韭菜,開著美麗的紅色花朵。三點來鐘到達今天的營地滿措牛場,兩邊山溝一塊不大的營地,過一陣,隊友和石家莊6人隊也陸續到了。他們的行程和我們一致。
扎好帳篷一陣雨漂來,但不久之后云開霧散,各自埋鍋造飯,好些年沒做戶外餐了,這次我做的米飯(快熟米),小塊火鍋底料煮的火腿肉加洋蔥和香菇,味道還行,超市買的熟菜,努力讓自己吃飽了。跑后泡了一杯紅茶,很滿足!
夜晚,白水河的聲音加上馱馬的鈴聲不絕于耳,營地地面不是很平,雖然不覺得難受,但久久不能入睡。其實,這也是輕微的高反癥狀。
8.21 下滿措牛場--滿措牛場--藏別牛場--萬花池牛場,7.8公里 約4個半小時,一路野地爬升,海拔提升至4200米左右
昨晚沒下雨,7點過起來收拾帳篷行李,煮了一鍋方便面加鹵蛋,吃飽了,天空云霧散開,8點半左右出發,很長一段路依然沿白水河而上,道路比昨天難走些,基本上都是馬道,海拔也繼續上升,風景依然養眼,10點過鐘,上到藏別牛場,滿地的紅花,后面是白雪點綴的雜巴拉山,十分美麗!再往前,山腳下,婉延的溪水穿過牧場,牧場里到處是黃色的野花,秏牛和馬兒或悠閑吃草或奔跑嬉戲,婉若人間仙境!
繼續爬山,中午近1點到達今天的宿營地萬花池牛場,天氣晴朗,收拾東西后晾曬帳篷睡袋,一休哥給我安排了一間免費的牛棚,估計今晚能睡個好覺。
中午,夏諾多吉神山(金剛菩薩)抬頭可見,但云霧環繞在山峰上,我們不停觀看和守候,終于在下午5點來鐘守得云開霧山,得見神山真容,這次進山也算非常幸運!晚上,一休哥給我們送來土豆炒臘肉,還有菌菇湯,加上我們的香腸煮成一鍋,我們5人吃得很開心,感謝一休哥夫婦對我們的關懷。
今天路上,向導還教會了我認識當歸,他給我挖了一些我也自己挖了一些。
從心開始CSS 發表于 2020-9-23 22:44
算起時間的話,8.22中午后15:10,我們在新果牛場埡口那里遇到的是樓主你們了,我們是3個人重裝反穿洛克線
發自8264手機版 m.8264.com
是的,我剛好下完坡,你們新果出來在上坡,我們聊了幾句,重裝反穿,你們好厲害!
又是很精彩的一天,昨晚滿以為會下雨結果沒下,早上,央邁勇出來露了一下臉就拉上到面巾,我們伴著濃霧往黑湖埡口爬升,雨也下來了,我這次穿了東麗公司為我們定制的沖鋒衣,靚麗的黃色,我叫它黃金戰袍。雨不大不小正好測試下新買的沖鋒衣。
海拔4800的黑湖埡口,還是得踹好幾口氣。中間一段長長的橫切碎石坡得小心行進,如果遇上大雨和下雪難度就會比較大。翻過埡口霧氣漸散,烏云依然,偶爾也有藍天一現白云漂過。過埡口遠處可見黑湖,湖如其名黑色的湖水上空時有云霧,只拍拍照片沒走近看看。6公里多了往山下走,下面1公里多是非常著名的蝴蝶石,當年洛克這張照片成了洛克線的標志。
過一陣隊友到齊,大家合影,石家莊隊合向導馬夫我們一齊大合影。蝴蝶石營地的花也非常漂亮,配上悠閑吃草的馬兒十分好看。石家莊隊的馬夫是一個20多歲的小伙子,即興在蝴蝶石上跳起了藏族舞蹈,非常開心。
吃過路餐繼續出發,向導給我說好路線又讓我先走,爬坡有點小累,但翻下蛇湖埡口卻有幾分驚險,坡度很陡,而且又有石砂,有些路段手腳并用才能應對。下到湖邊,沒太久到達蛇湖營地。一休哥說,今天最后一天大家一起吃吧,所以他們辛苦給我們大家做了晚餐,大家都吃得飽飽的。
做飯時,下起了雨,越來越大,后來轉變成好大的冰雹,好擔心把帳篷給砸塌了,冰雹停了,地面都鋪上厚厚一層,久久不化。這是央邁勇神山再次露出臉來,十分驚艷!我突然想到是否可以給央邁勇拍個倒影。于是踩著鋪滿冰雹的小路往山下跑去,400米左右才找到一個角度能拍到央邁勇的倒影,很神奇的是,兩分鐘后,倒影突然沒有了,拍不到了,不過我也很滿足了。很精彩的一天!
黃金戰袍經受考驗,防雨透氣很棒!
前后不到30秒的央邁勇蛇湖倒影,隨后光線變化倒影消失,很神奇!
突如其來的冰雹,鋪滿地面
8.24 從蛇湖--松多埡口--牛奶海--五色海--洛絨牛場觀光車到沖古寺 (單程30) 大巴車到景區大門(正價120) 景區門票(正價146) 包車到稻城(每人50) 這些錢怎么花看各人操作, 沒有一定答案。
由于景區修路,找行李多走了5公里,后面又重裝走了3公里,多出了一半行程
昨晚10點下起了雨,雨越下越大伴隨著電閃雷鳴,兩小時了一直沒停,扎帳篷的石圍子里沒有泄水孔全靠自然滲水,所以積水越來越多,帳篷和睡袋也潮了,雨沒有停的意思,心里越來越擔心。幾經猶豫之后收拾背包,抱著睡墊和睡袋跑到30米外的空牛棚里(好在我昨天就已經看好),回頭又把丸子也喊了過來。
終于安心睡了一晚。天亮了,雨停了,大家收拾好7點半就早早出發,出門就爬坡翻埡口,陰天霧氣濃濃翻過4700埡口后進入到亞丁景區。最先看到的是牛奶海,粉藍色的海子鑲嵌著一圈白色的石子,像高原上到一塊藍寶石。在往下來到五色海,平靜的湖面仿佛寶藍色的緞帶,小伙伴們按捺不住穿越成功的喜悅,在湖邊放肆擺pose拍照。
指點江山
打靶歸來
逍遙一劍
陶醉其中
執鞭在手
一直往下走到洛絨牛場,由于溝通問題,為了找到行李在棧道上來回走了5公里,又因為景區修路,再背著大包走了3公里(洛絨牛場7號乘車點走到5號乘車點),坐觀光車景區大巴車離開景區,又包車到稻城(30+120+50)。終于,住進了酒店睡到舒服的床上。晚上,和小伙伴們共聚一席,舉杯同慶。
此時,亞丁景區對我已經幾無興趣
隱約可見的仙乃日
順便說下回程,3個小伙伴分別稻城飛重慶和杭州,我和洛陽稻城大巴到成都,早上七點半出發晚9點半到成都新南門車站,除去新都橋堵車2小時,坐車12小時。
也許,正是進出線路的不易,對季節也有較高要求,洛克線沒有成為大眾景點,對于戶外人算得上是好事。當然,5天徒步,其中3天一直在海拔4000以上行走,也是讓部分人放棄的原因。相對而言,如果不遇上極端天氣,線路的難度和強度并不算很高,有一定戶外經歷的驢友都能勝任。這些是我個人的看法。
費用方面,我個人大約2800元左右,包括遵義到成都來回火車,成都到西昌汽車,西昌到呷洛村包車,稻城到成都汽車,以及分擔的向導,馱馬,餐費,亞丁景區費用,等等,但是,費用這東西每個人處理方式不同,消費不同,不好作何推薦,也就沒必要詳細說明。
非常感謝這一路對我們照顧有加的一休哥夫婦!
——轉自8264,作者:吳楓
*請認真填寫需求信息,我們會在24小時內與您取得聯系。