應該是高中時做的...
將第二顆電源供應器的啟動/接地與第一顆相連,並改裝放入光碟機的殼內,用來獨立供電給多顆硬碟
2016年8月8日 星期一
DIY LAMA 直升機倒飛
這個部分跟一般六動直升機倒飛不同,而是直接將葉片反裝,再修改遙控系各動的正反性來達到(所以沒辦法降落XD)
https://goo.gl/photos/yEcdytLwuHQacgma9
https://goo.gl/photos/yEcdytLwuHQacgma9
自製四軸直升機飛控板
基本上這個架構是自己陸續看一些東西後整理出來的一個大致的架構
目前input 跟output 部分都有經驗了,會等姿態的部分研究差不多後,就可以全部都整合都起來...
目前input 跟output 部分都有經驗了,會等姿態的部分研究差不多後,就可以全部都整合都起來...
- input
- 直接接到接收機輸出的PPM 訊號
- 好處是可以只使用一個pin來接收多動訊號
- 之前使用nrf24l01時已經有實際解析ppm訊號
- 核心運算
- 姿態取得
- gyro + g-sensor
- http://ddddiy.blogspot.tw/2014/02/blog-post.html
- https://zh.wikipedia.org/zh-tw/%E5%8D%A1%E5%B0%94%E6%9B%BC%E6%BB%A4%E6%B3%A2
- 如要加入無頭模式,需額外得取得一個絕對的方位做參考
- e-compass
- http://ddddiy.blogspot.tw/2014/04/gy-273-hmc5883-e-compass.html
- 須想辦法避免飛機上大電流產生的磁場做干擾
- 金屬的干擾
- hard iron
- 可靜態校正
- soft iron
- 須在想辦法在設計上遠離,不過實際由於無法向公司的專案一樣找廠商用儀器去掃,可能只能手動try 一個好一點的位置
- 馬達控制
- 根據目前輸入的控制資訊,搭配實際量測到的姿態做自我修正
- PID控制之前有看了一下,概念蠻簡單的不難實現
- output
- 4*PWM 控制四顆電子變速器
- 直接使用arduino的PWM 輸出
- https://www.arduino.cc/en/Reference/AnalogWrite
- 須注意output PWM使用的timer 不要跟input PPM 解析的timer衝到
考慮到成本與實際上飛行時的載重,應該會採用這台450來當作載具測試
用普通的2212馬達/電變加上紅白機架兩千塊即可打發,撞壞比較不傷荷包
使用gyro + g-sensor 達到姿態控制
這篇文章用來紀錄一下使用sensor取得物體姿態(yaw/row/pitch)的部分
- g-sensor
- 在物體靜止不動時,加速度只有固定的地心引力,故可透過此加速度在三軸上的分量來計算姿態
- 但在物體動作時,除了重力,物體本身改變姿態的加速度會混進去造成失真,以前做的的專題就是只使用g-sensor, 在快速動作時,可看到螢幕上顯示的動作與實際物體動作有一點點落差
- 以前做的專案,也有研究過android 內使用g-sensor 偵測螢幕旋轉的原理
- gyro
- 輸出單位時間內在某個軸上旋轉的角度(很精確)
- 時間長會有積分誤差
- 簡單的使用一軸來舉例
- 瞬間旋轉10度,此時由於精確度很高,可能量出來誤差只有0.001度,所以此時取得的姿態仍很正確
- 但隨著時間增加,物體一直動作,每次轉動的誤差會一直累加,造成一段時間後物體的角度跟程式內上看到的角度誤差會越來越大
- gyro+g-sensor
- 結合兩種sensor的優點,去算出一個接近真實姿態的輸出,既可精確表達姿態,又能避免誤差累積
- 卡爾曼濾波
- http://ddddiy.blogspot.tw/2014/02/blog-post.html
2016年8月7日 星期日
使用手機實做飛機黑盒子
這是2008年念研究所時跟同學寫的其中一個專題
當初會做這個專案,最主要目的是我為了想個好理由光明正大的來玩遙控飛機,不過做出來似乎效果不錯,出乎意料的在課程上拿了高分...
最近看到照片突然好懷念以前研究所的時光,寫出來紀念一下
整體主要分幾個部分
- 手機端(openmoko)
- 儲存GPS資料(經緯度與高度)
- 讀取g-sensor值
- 偵測碰撞後傳簡訊回報GPS坐標<==墜機時可以找到飛機
- 透過bluetooth(SPP)及時送出g-sensor的值 <==很炫,但距離短不實用
- NB端
- 透過bluetooth接收g-sensor 的值
- 即時計算姿態
- 使用opengl即時顯姿態
- offline
- 將手機儲存的GPS 紀錄使用google earth reply, 在PC上replay 整個飛行的軌跡
GY-521模組(MPU6050, g-sensor + gyro)
GY-521是一個標榜為"六軸"的模組,包含了三軸陀螺儀跟三軸加速度計
上面的MEMS 是MPU6050
MPU6050除了可以讀出個別sensor的值外,也可以當作i2c master, 外掛一顆e-compass, 對host(如arduino)來看,直接變成一個9軸模組
官網文件
https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf
https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf
參考資料
http://www.den-uijl.nl/electronics/gyro.html
http://playground.arduino.cc/Main/MPU-6050
http://www.geekmomprojects.com/gyroscopes-and-accelerometers-on-a-chip/
arduino 解析PPM 訊號
這是在弄X9D+ 搖控器控制jj1000四軸時,因為發現四軸飛在空中時偶爾會抖一下,debug後發現問題的紀錄
http://ddddiy.blogspot.tw/2016/08/x9d-nrf24l01-v2x2-protocoljj1000.html
PPM(Pulse code Modulation mode) 訊號格式可以參考這邊
http://diydrones.com/profiles/blogs/705844:BlogPost:38393
基本上就是把PWM 訊號全部編碼整合在一個pin 上
在遙控模型的領域內,PWM 格式"一般"定義如下
- 每個clock周期總長20ms
- 拉high
- 1ms: 通道最小值
- 1.5ms: 通道最小值
- 2ms: 通到最大值
而PPM 內每個通道用的時間相同,只是改成時間到時瞬間拉一下high(送interrupt)
可參考網路上這張圖
https://www.google.com.tw/search?biw=1280&bih=614&tbm=isch&sa=1&q=PPM+&oq=PPM+&gs_l=img.3..0i19l10.7835.7835.0.8134.1.1.0.0.0.0.54.54.1.1.0....0...1c.1.64.img..0.1.53.DsrA7tEbXa8#imgrc=68KP1G0WoL6ovM%3A
一開始先來個脈波,之後依各通道的值對應的時間到了送出一個脈波,最後low的時間夠長,可以用來判斷一個大週期的結束
舉個例子來說,假設共四通道,各通道的值為
- CH1: 最小值
- CH2: 中立點
- CH3: 中立點
- CH4: 最大值
實際上送出的訊號如下
|上一個週期| ↑↓(1ms)↑↓(1.5ms)↑↓(1.5ms)↑↓(2ms)↑↓(明顯大於2ms的時間) |下一個週期|
所以只要用中斷抓rising edge並計算間隔後,即可知道各通道對應的值,最後剩下來的時間,長度明顯大於2ms, 當作sync 訊號來判斷此次周期已結束
照這個設計來看,20ms 可放入8通道的訊號(9通道無法分辨sync)
來看一下之前控制jj1000四軸的程式,這個project一開始是clone網路上其他玩家的project
原本的設計有一些問題
https://github.com/goebish/nrf24_multipro/
原本的code做法如下
- setup
- PPM pin 設為input
- 註冊ISR(CHANGE)
- 看起來像是level trigger(high + low),可參考 https://www.arduino.cc/en/Reference/AttachInterrupt
- 設定timer1 每1us增加1
- arduino timer 0 已經被內建的delay/sleep...使用,用了會打亂原本的功能,所以要用timer 1
- timer的部分可參考
- loop
- 確認protocol, 對RF 模組做初始化與對頻
- 從Servo_data[chan]取出目前各通道的值
- ISR
- 讀出目前timer值<==可得知經過多少us
- reset timer
- 小於510us 當作雜訊,紀錄長度
- 大於1910當作sync
- 其他則是將讀出的數據加上雜訊依序填入Servo_data[chan]
這個做法沒有判斷目前PPM 訊號的high/low,每次狀態改變都會觸發中斷,會造成中斷數量增加,且以PPM設計來說拉high時間短,很有可能掉中斷(level trigger的狀況,如果轉換過快,沒有在high or low停留一段時間,比較可能會漏掉),使得干擾等因速會影響到該大週期內,每個channel 的對應
以工作的經驗來說,這類型的訊號適合用edge trigger, 搭配PPM 的設計,使用rising edge trigger較合適
實際遇到問題,通常下一個大週期就會回復正常,但飛行時就會導致四軸在空中會突然抖一下
修正成下面的做法後調整PPM判斷參數與interrupt,中斷數量可以也少一半,且實際飛行也穩定多了
- initial
- PPM_IN_MIN=510
- PPM_IN_MAX=2200
- setup
- PPM pin 設為input
- 註冊ISR(rising)
- 設定timer1 每1us增加1
- loop
- 確認protocol, 對RF 模組做初始化與對頻
- 從Servo_data[chan]取出目前各通道的值
- ISR
- 讀出目前timer值<==可得知經過多少us
- reset timer
- 目前timer小於PPM_IN_MIN當作雜訊,紀錄長度
- 目前timer大於PPM_IN_MAX當作sync
- 其他則是將讀出的數據加上雜訊依序填入Servo_data[chan]
2016年8月6日 星期六
四驅車GP晶片計畫
自從去年發現租屋處附近開了一家四驅車店家之後,就又重新燃燒起熱血
台灣不流行的期間基本上幾乎完全沒有消息,也沒有軌道可玩(日本好一點四驅車一直都存在,但也是沉寂多年官方沒有辦全國性的比賽)
回鍋後發現現在的玩家有很大的比例跟我一樣是二十多到三十多歲的大人,小時候有玩過,長大後又跳進來玩
可能因此導致現在軌道跟十多年前相比比較偏向技術軌,多了很多難度,所以不是單純比高速,而是變成在不飛車的前提下盡快跑完全程
之前看了很多四驅車相關的網站、論壇、玩家的部落格
基本上是都是以田宮 or 半田宮 的規則在玩,使用固定的機制去應付像是跳台或交換到這種難關
例如跳台落地為了穩定度,改成避震車或使用金球、吊鐘,為了過彎加裝單向輪/彈簧前後翼等...
為了因應不同場地而做調整,須累積大量的經驗,熟悉各種零件的特性,以整體賽道所有難關的"最大公約數" 的方向去做調整
在這個過程中,不斷的去發揮創意改裝與測試,真的有很多樂趣,這也是四驅車吸引人的地方
不過玩了一陣子後,就一直在想以這種玩法,就算玩到最極限,也是要配合賽道在各種方面(速度、重量、改裝方式等...)做取捨,所以漸漸地有了一個想法:
何不結合單晶片,讓車子自行適應軌道後做調整,這樣可以使用幾個基本車型(像是輕量高速型或是扭力型)來稱霸所有類型跑道
其實這就是卡通裡的GP 晶片啊!!!
在網路上有看到一些玩家使用單晶片改裝GP晶片,但是偏向語音或人工控制車子
https://www.youtube.com/watch?v=85913C7MjoQ
https://www.youtube.com/watch?v=C1x2Jdm_9eA
而我比較感興趣的部分則是讓車子自行學習,能夠自行適應各種跑到跑出不錯的成績
有了這個想法後,漸漸的想了一些可行的架構與做法,部分的功能也曾經做出可行的成品
(綠色部分是已經有做過有經驗的部分,藍色部分是已有方向正在研究中,紅色部分是還沒有想法或是需要重頭學習的領域)
目前先規劃一下架構,整理一下有能力與需要學習的部分,最後再全部整合起來
台灣不流行的期間基本上幾乎完全沒有消息,也沒有軌道可玩(日本好一點四驅車一直都存在,但也是沉寂多年官方沒有辦全國性的比賽)
回鍋後發現現在的玩家有很大的比例跟我一樣是二十多到三十多歲的大人,小時候有玩過,長大後又跳進來玩
可能因此導致現在軌道跟十多年前相比比較偏向技術軌,多了很多難度,所以不是單純比高速,而是變成在不飛車的前提下盡快跑完全程
之前看了很多四驅車相關的網站、論壇、玩家的部落格
基本上是都是以田宮 or 半田宮 的規則在玩,使用固定的機制去應付像是跳台或交換到這種難關
例如跳台落地為了穩定度,改成避震車或使用金球、吊鐘,為了過彎加裝單向輪/彈簧前後翼等...
為了因應不同場地而做調整,須累積大量的經驗,熟悉各種零件的特性,以整體賽道所有難關的"最大公約數" 的方向去做調整
在這個過程中,不斷的去發揮創意改裝與測試,真的有很多樂趣,這也是四驅車吸引人的地方
不過玩了一陣子後,就一直在想以這種玩法,就算玩到最極限,也是要配合賽道在各種方面(速度、重量、改裝方式等...)做取捨,所以漸漸地有了一個想法:
何不結合單晶片,讓車子自行適應軌道後做調整,這樣可以使用幾個基本車型(像是輕量高速型或是扭力型)來稱霸所有類型跑道
其實這就是卡通裡的GP 晶片啊!!!
在網路上有看到一些玩家使用單晶片改裝GP晶片,但是偏向語音或人工控制車子
https://www.youtube.com/watch?v=85913C7MjoQ
https://www.youtube.com/watch?v=C1x2Jdm_9eA
而我比較感興趣的部分則是讓車子自行學習,能夠自行適應各種跑到跑出不錯的成績
有了這個想法後,漸漸的想了一些可行的架構與做法,部分的功能也曾經做出可行的成品
(綠色部分是已經有做過有經驗的部分,藍色部分是已有方向正在研究中,紅色部分是還沒有想法或是需要重頭學習的領域)
目前先規劃一下架構,整理一下有能力與需要學習的部分,最後再全部整合起來
- 自動偵測與儲存完整軌道
- 使用車身上的感測器,低速跑完軌道後自動記錄
- 例如這樣
- 直線*5->左轉90度->直線*2->上坡*1->直線*2->下坡*1->右轉45度.....
- 四驅車軌道有一些基本的單位,可以參考http://ddddiy.blogspot.tw/2016/08/blog-post_6.html
- 使用陀螺儀與g-sensor來做判斷目前所在的軌道型態
- 自我測試取得數據
- 例如
- 直線: 全速
- 剎車力道(例如直線全速後,接近彎道要降速到適合此彎道的入彎速度)
- 90度轉彎,入彎速度最高10M/s才不會飛車
- 跳台
- 飛越跳台時,空中自我修正車身姿態,使落地時能四輪著地
- 依照跳台後面直線的距離,決定進入跳台的車速,保證落地時仍在直線的範圍內
- 若跳台後接急彎,可使落地姿態為稍微前傾,在使導輪能吃到軌道順利轉彎
- 上坡
- 類似跳台,若上坡後接急彎,需考慮到進上坡速度避免衝上去後還在空中就遇到彎道
- 自動學習與控制方法
- 得知軌道排列後,需要計算在哪些路段要運甚麼速度,實際在跑時也要動態控制車子
- 計算的部分運算量可能較大,可以使用
- 自己開發合適的演算法,如果太複雜,也可基於專家系統或人工智慧
- 專家系統
- 大學時修過相關的課程,可使用CLIPS(http://clipsrules.sourceforge.net)
- 使用有限的時間去找出相對較好的解
- 適合變因太多,就算用電腦也無法簡單算出最佳解的用途(以前有學長姊專題用專家系統做出排課系統,最後也真的在學校內上線使用了)
- 這部分以前有寫過一些小專題,真的要做算是有方向
- 人工智慧
- machine learning(最有名的就是Alpha Go了),這部分目前完全沒概念
- 不過這邊有先天上的限制,圍棋可以讓電腦自行對弈,輸了或贏了直接重來,但四驅車有續航力的限制,"失敗"(飛車/翻車/掛軌...) 後須人工修正,甚至壞了需修復,無法快速累積夠多經驗
- 系統平台
- 目前比較熟悉的有8051/Arduino,不過現在Arduino資源很多,有問題也比較好找到高手討論,應該採用Arduino
- Arduino 目前有很多開發板,手邊有的玩過幾張體積比較小的各有優缺點,考量到效能與IO數量,Arduino Micro應該是較好的選擇
- Arduino Pro Mini
- https://www.arduino.cc/en/Main/ArduinoBoardProMini
- ATmega328
- 需使用ISP 燒錄
- Arduino Micro
- https://www.arduino.cc/en/Main/ArduinoBoardMicro
- 效能較強
- ATmega32u4
- 內建micro USB
- Arduino Nano
- https://www.arduino.cc/en/Main/ArduinoBoardNano
- Atmel ATmega168 or ATmega328
- 內建USB
- DigiSpark
- http://digistump.com/products/1
- http://ddddiy.blogspot.tw/2016/08/arduino-digispark.html
- Attiny85
- 體積超級小,但IO太少
- 基本感測器
- 車身姿態
- 可以直接套用四軸姿態系統
- 使用卡爾曼濾波結合g-sensor + gyro 來算出車身姿態
- http://ddddiy.blogspot.tw/2016/08/gyro-g-sensor.html
- 使用整合性的硬體(MPU6050)
- 轉向
- 使用陀螺儀確認彎道的角度
- 車身是否離地
- 接近感應器(手機接電話拿到耳朵邊時自動關螢幕) <==可從公司報廢的開發板上拆下
- 電池電壓
- 單晶片通常都內建ADC可直接用
- 車速
- 車身未離地時的輪胎轉速
- 可用光遮斷器(滑鼠滾輪的原理, 組合了光電晶體與LED)
- 搭配G-sensor可判斷輪胎是否空轉
- 紅外線感應器
- 如果排軌時軌道有分色,可以參考自走車的作法,偵測跑了幾節軌道
- 基本控制功能
- 車速
- 可由電子變速器控制車速,也可做到剎車
- 調電壓來調速
- PWM調速
- 可藉由偵測輪胎轉速回授,使用PID控制馬達達到定速功能,這樣對於上層控制系統來說,能用更簡單的演算法來控制
- 轉向
- 使用電磁鐵 - 一些便宜的玩具遙控車的作法
- 成本低,但通常只能兩段控制,且力道不大
- 使用伺服機 - 一般遙控車做法
- 控制簡單,且拉力大又能夠比例控制
- http://ddddiy.blogspot.tw/2016/08/blog-post_5.html
- 重心
- 前後方向
- 可使用馬達轉速控制前後傾斜,原理同遙控車跳跳台
- 在空中時,加油門用輪胎的反作用力抬起車頭,反之剎車可壓低車台
- 搭配車身姿態偵測,使車身在空中自我保持水平
- 左右方向
- 移動重捶? 目前還沒有太好的想法
- 通訊
- BT
- 一般NB/手機都有內建
- 成本較高,使用SPP 實做簡單
- http://ddddiy.blogspot.tw/2014/02/hc-05-bt-module.html
- http://ddddiy.blogspot.tw/2014/03/arduino.html
- digital RF 模組
- NRF24L01 - 便宜好取得(露天拍賣就一堆),沒加PA控制距離就跟藍芽差不多
- NB端需外掛一個Arduino + NRF24L01 來做通訊
- http://ddddiy.blogspot.tw/2016/08/x9d-nrf24l01-v2x2-protocoljj1000.html
四驅車軌道基本單位跟常見的排列
基本單位
彩虹交換道
波浪道
直線
轉彎(一片45度)
常見組合關卡
上坡後接下波
上下坡接急轉彎
360/720度(這個應該是台灣原創的吧)
超高爬坡
富士山交換道
kingkong blheli電變刷FW & 調整參數
關於blheli的介紹
Blheli:
Blhelisuit:
燒錄教學
可直接在網路上搜尋這份文件,有原廠的詳細設定教學
<<KINGKONG
BLHeli电子调速器上位机设置和固件升级指南 - 1.0 - 中文 (1).pdf>>
blheli 簡介
blheli(https://github.com/bitdump/BLHeli) 是一個開源的無刷ESC(電子變速器) firmware,
原本是給使用silabs MCU架構的電變使用,新版的好像也支援Atmel了
很多市售的電變都可以刷成blheli, 預設參數運作起來就已經比大多數電變原本還好
且有更多可調整功能,有興趣也可以自行修改原始碼(天啊...組語)
目前很多型號電變,甚至直接原生搭載blheli FW
像是little bee、kingkong...甚至大廠像"好盈" 也推出幾款原生為blheli的型號
原本是給使用silabs MCU架構的電變使用,新版的好像也支援Atmel了
很多市售的電變都可以刷成blheli, 預設參數運作起來就已經比大多數電變原本還好
且有更多可調整功能,有興趣也可以自行修改原始碼(天啊...組語)
目前很多型號電變,甚至直接原生搭載blheli FW
像是little bee、kingkong...甚至大廠像"好盈" 也推出幾款原生為blheli的型號
解決CC3D 翻滾速度
在CC3D 上,翻滾可在半自穩(Ratitude)或是手動(RATE/AERO...)控制
主要速度都是取決於"Rate" 參數
不過我發現我設定的兩個飛行模式,Rate都調相同,但翻滾速度卻有差
研究了一下發現原來在stabilization的進階設定內有一個Rate的最大限制,會擋住使用者設定的Rte值,須將"Max rate limit"設到比"Rate mode"大才行
arduino 超小型開發板digispark
這個開發板很特別
燒錄方法:
來自 <https://digistump.com/wiki/digispark/tutorials/digicdc>
- 優點
- 小
- 有USB
- 缺點
- IO太少
- 效能差
- 需使用專用的IDE
建立開發環境與連接
基礎
無法燒錄問題arduino-1.6.8
未知的板子digispark-tiny(平台avr,套件digistump)
Error compiling
for board Digispark (Default - 16.5mhz).
|
方法:
- Uninstall through boards manager
- Exit Arduino
- Remove contents of .arduino15/staging/packages (I had a CRC doesn't match error)
- ==>位置在C:\Users\CY\AppData\Local\Arduino15
- Remove .arduino15/packages/digistump
- Reinstall boards through boards manager
- Restart Arduino
我用的是這種,是model A(LED在pin1)
燒錄方法:
- 板子選digispark default 16.5mhz
- 燒錄器不須設定(不會看)
- 移除板子usb
- IDE 按上傳
- 插上板子usb
有library可軟體模擬成USB裝置
DigiCDC - Digispark USB CDC Serial Library
2016年8月5日 星期五
git - 使用bisect 夾板本找出有問題的修正
git內建提供binary search來找改爛掉的commit
初始化
- git bisect start
- git bisect good [commit/tag]
- git bisect bad [commit/tag]
之後就會跳到good與bad中間的一版commit,測試後可以標示為good
or bad
git bisect [bad/good]
git 會自動根據測試結果繼續切,最後即可找到出問題的版本
結束後可以回到原本做bisect之前的狀態
git bisect reset
TCP 連線建立/斷開 與sequence number 與 selective ack(SACK)
建立:
Host A
|
Host B
|
||
1
|
SYN
|
->
|
|
2
|
<-
|
ACK
|
|
3
|
<-
|
SYN
|
|
4
|
ACK
|
->
|
Step 2 and 3可以合併,共三行,所以叫做3-way handshake
Host A
|
Host B
|
||
1
|
SYN
|
->
|
|
2
|
<-
|
ACK,
SYN
|
|
3
|
ACK
|
->
|
斷開:
由於TCP是雙向的,所以TX/RX方向都要送出FIN通知要結束
Host A
|
Host B
|
||
1
|
FIN
|
->
|
|
2
|
<-
|
ACK
|
|
3
|
<-
|
FIN
|
|
4
|
ACK
|
->
|
selective ack(SACK)
- linux 可控制SACK 是否開啟: /proc/sys/net/ipv4/tcp_sack
- 這邊說的server指傳送端,client指接收端
- 由於TCP 原本ack 機制,client發現有掉了一個封包後(某個封包漏掉,但之後的有收到),會重送最後有收到封包的ACK,server 在收到這個ACK,得知掉封包時,又會從少掉的那個重送
- 可以發現在server 知道掉包時,已經過一段時間,在這中間server 送出的封包,可能部分client還是有收到,但原本的機制會忽略掉這些部分,造成浪費
- SACK機制可以讓client 通知server 雖然有掉封包,但是後面的某部分有收到,所以可以不用重送
- 在原本機制中client重送最後收到封包的ACK 內,再帶SACK 欄位標明那些資料區段有收到,讓server避免重送已收到的封包
參考
http://packetlife.net/blog/2010/jun/7/understanding-tcp-sequence-acknowledgment-numbers/
http://packetlife.net/blog/2010/jun/17/tcp-selective-acknowledgments-sack/
訂閱:
文章 (Atom)






