日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

TCP的FIN_WAIT1状态理解|深入理解TCP

發布時間:2024/4/11 ChatGpt 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP的FIN_WAIT1状态理解|深入理解TCP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


原文鏈接:

https://blog.csdn.net/dog250/article/details/81697403

近期遇到一個問題,簡單點說,主機A上顯示一條ESTABLISHED狀態的TCP連接到主機B,而主機B上卻沒有任何關于主機A的連接信息,經查明,這是由于主機A和主機B的發送/接收緩沖區差異巨大,導致主機B進程退出后,主機A暫時憋住,主機B頻繁發送零窗口探測,FIN_WAIT1狀態超時,進而連接被銷毀,然而主機A并不知情導致。

正好昨天也有人咨詢另外一個類似的問題,那么就抽昨晚和今天早上的時間,寫一篇總結吧。


TCP處處是坑!

不要覺得你對TCP的實現的代碼爛熟于心了就能把控它的所有行為!不知道你有沒有發現,目前市面上新上市的關于Linux內核協議棧的書可謂是汗牛充棟,然而無論作者是國內的還是國外,幾乎都是碰到TCP就草草略過,反而對IP,ARP,DNS這些大書特書,Why?因為Linux內核里TCP的代碼太亂太復雜了,很少有人能看明白80%以上的,即便真的有看過的,其中還包括只懂代碼而不懂網絡技術的,我就發現很多聲稱自己精通Linux內核TCP/IP源碼,結果竟然不知道什么是默認路由…

所以我打算寫一篇文章,趁著這個FIN_WAIT1問題,順便表達一下我是如何學習網絡技術,我是如何解決網絡問題的方法論觀點,都是形而上,個人看法:

  • 設計覆蓋全面的復現實驗

  • 通讀協議標準文檔,理解實現建議

  • 再次實驗,預測并確認問題以外的現象

  • 核對代碼實現,跟蹤代碼的Changelog

  • 寫一個自己的實現或者亂改代碼

本文聊聊TCP的FIN_WAIT1以及TCP假連接(死連接)問題。先看FIN_WAIT1


首先還是從狀態機入手,看看和FIN_WAIT1相關的狀態機轉換圖:

我們只考慮常規的從ESTABLISHED狀態的轉換,很簡單的一個單一狀態轉換:

  • ESTAB狀態發送FIN即切換到FIN_WAIT1狀態;

  • FIN_WAIT1狀態下收到針對FIN的ACK即可離開FIN_WAIT1到達FIN_WAIT2.

看一下和上述狀態機轉換相關的簡單時序圖:

從狀態圖和時序圖上,我們很明確地可以看到,FIN_WAIT1持續1個RTT左右的時間!這個時間段幾乎不會被肉眼觀察到,轉瞬而即逝。

然而,這是真的嗎?

我們之所以得到FIN_WAIT1持續1個RTT這個結論,基于兩個假設,即:

TCP的對端是一個正常的TCP端;

兩端TCP之間的鏈路是正常的,可達的。

OK,接下來我們來設計一個實驗模擬異常的情況。準備實驗拓撲如下:

host1和host2的系統內核版本(uname -r獲取):

3.10.0-862.2.3.el7.x86_64

首先,我們看一下如果對端TCP針對FIN發送的ACK丟失,會發生什么。按照上述的時序圖,正常應該是FIN_WAIT1將會永久持續。我們來驗證一下。

實驗1:模擬ACK丟失

在host1上做以下命令:

nc -l -p 1234

host2上完成以下命令:

cat /dev/zero|nc 1.1.1.1 1234

以上保證了host1和host2之間的TCP建立并且連接之間有持續的數據傳輸。接下來,在host2上執行下列動作:

iptables -A INPUT -p tcp --tcp-flags ACK,FIN ACK killall nc

此時在host2上:

[root@localhost ~]# netstat -antp|grep 1234 tcp 0 1229 1.1.1.2:39318 1.1.1.1:1234 FIN_WAIT1 -

連續上翻命令,這個FIN_WAIT1均不會消失,暫時符合我們的預期…出去抽根煙,刷會兒微博…回來后,發現這個FIN_WAIT1消失了!

它是如何消失的呢?這個時候,我們提取netstat數據,執行“ netstat -st”,會發現:

TcpExt: ...1 connections aborted due to timeout

多了一條timeout連接!


我這里直接說答案吧。

雖然說在協議上規范上看,TCP沒有必要為鏈路或者說對端的不合常規的行為而買單,但是從現實角度,TCP的實現必須處理異常情況,TCP的實現必然要有所限制!

我們知道,計算機是無法處理無限,無窮這種抽線的數學概念的,所有如果針對FIN的ACK遲遲不來,那么必然要有一個等待的極限,這個極限在Linux內核協議棧中由以下參數控制:

net.ipv4.tcp_orphan_retries # 默認值是0!這里有坑...

這個參數表示如果一直都收不到針對FIN的ACK,那么在徹底銷毀這個FIN_WAIT1的連接前,等待幾輪RTO退避

所謂的orphan tcp connection,意思就是說,在Linux進程層面,創建該連接的進程已經退出銷毀了,然而在TCP協議層面,它依然在遵循TCP狀態機的轉換規則存在著。

注意,這個參數不是一個時間量,而是一個次數量。我們知道,TCP每一次超時,都會對下一次超時時間進行指數退避,這里的次數量就是要經過幾次退避的時間。舉一個例子,如果RTO是2ms,而tcp_orphan_retries 的值是4,那么所計算出的FIN_WAIT1容忍時間就是:

T=21+22+23+24T=21+22+23+24

還是看看Linux內核文檔怎么說的吧:

tcp_orphan_retries - INTEGERThis value influences the timeout of a locally closed TCP connec tion, when RTO retransmissions remain unacknowledged.See tcp_retries2 for more details.The default value is 8.If your machine is a loaded WEB server,you should think about lowering this value, such socketsmay consume significant resources. Cf. tcp_max_orphans.

讓我們看看tcp_retries2,以獲取數值的含義:

tcp_retries2 - INTEGERThis value influences the timeout of an alive TCP connection,when RTO retransmissions remain unacknowledged.Given a value of N, a hypothetical TCP connection followingexponential backoff with an initial RTO of TCP_RTO_MIN wouldretransmit N times before killing the connection at the (N+1)th RTO.The default value of 15 yields a hypothetical timeout of 924.6seconds and is a lower bound for the effective timeout.TCP will effectively time out at the first RTO which exceeds the hypothetical timeout.RFC 1122 recommends at least 100 seconds for the timeout,which corresponds to a value of at least 8.

雖然說文檔上默認值的建議是8,但是大多數的Linux發行版上其默認值都是0。更多詳情,就自己看RFC和Linux源碼吧。

有了這個參數保底,我們知道,即便是ACK永遠不來,FIN_WAIT1狀態也不會一直持續下去的,這有效避免了有針對性截獲ACK或者不發送ACK而導致的DDoS,退一萬步講,即便是沒有DDoS,這種做法也具有資源利用率的容錯性,使得資源使用更加高效。

實驗1的結論如下:

  • 如果主動斷開端調用了close關掉了進程,它會進入FIN_WAIT1狀態,此時如果它再也收不到ACK,無論是針對pending在發送緩沖的數據還是FIN,它都會嘗試重新發送,在收到ACK前會嘗試N次退避,該N由tcp_orphan_retries參數控制。

接下來,我們來看一個更加復雜一點的問題,還是先從實驗說起。

實驗2:模擬對端TCP不收數據,接收窗口憋死

在host1上做以下命令:

# 模擬小接收緩存,使得憋住接收窗口更加容易

sysctl -w net.ipv4.tcp_rmem="16 32 32" nc?-l?-p?1234

host2上完成以下命令:

cat /dev/zero|nc 1.1.1.1 1234 sleep 5 # 稍微等一下 killall nc

此時,我們發現host2的TCP連接進入了FIN_WAIT1狀態。然而抓包看的話,數據傳輸依然在進行:

05:15:51.674630 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [P.], seq 305:321, ack 1, win 5840, options [nop,nop,TS val 1210945 ecr 238593370], length 16 05:15:51.674690 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 321, win 0, options [nop,nop,TS val 238593471 ecr 1210945], length 0 05:15:51.674759 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 321, win 16, options [nop,nop,TS val 238593471 ecr 1210945], length 0 05:15:51.777774 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [P.], seq 321:325, ack 1, win 5840, options [nop,nop,TS val 1211048 ecr 238593471], length 4 05:15:51.777874 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 325, win 16, options [nop,nop,TS val 238593497 ecr 1211048], length 0 05:15:52.182918 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [P.], seq 325:341, ack 1, win 5840, options [nop,nop,TS val 1211453 ecr 238593497], length 16 05:15:52.182970 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 341, win 0, options [nop,nop,TS val 238593599 ecr 1211453], length 0 05:15:52.183055 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 341, win 16, options [nop,nop,TS val 238593599 ecr 1211453], length 0 05:15:52.592759 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [P.], seq 341:357, ack 1, win 5840, options [nop,nop,TS val 1211863 ecr 238593599], length 16 05:15:52.592813 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 357, win 0, options [nop,nop,TS val 238593701 ecr 1211863], length 0 05:15:52.592871 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 357, win 16, options [nop,nop,TS val 238593701 ecr 1211863], length 0 05:15:52.695160 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [P.], seq 357:361, ack 1, win 5840, options [nop,nop,TS val 1211965 ecr 238593701], length 4 05:15:52.695276 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 361, win 16, options [nop,nop,TS val 238593727 ecr 1211965], length 0 05:15:53.099612 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [P.], seq 361:377, ack 1, win 5840, options [nop,nop,TS val 1212370 ecr 238593727], length 16 05:15:53.099641 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 377, win 0, options [nop,nop,TS val 238593828 ecr 1212370], length 0 05:15:53.099671 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 377, win 16, options [nop,nop,TS val 238593828 ecr 1212370], length 0 05:15:53.505028 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [P.], seq 377:393, ack 1, win 5840, options [nop,nop,TS val 1212775 ecr 238593828], length 16 05:15:53.505081 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 393, win 0, options [nop,nop,TS val 238593929 ecr 1212775], length 0 05:15:53.505138 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 393, win 16, options [nop,nop,TS val 238593929 ecr 1212775], length 0 05:15:53.605923 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [P.], seq 393:397, ack 1, win 5840, options [nop,nop,TS val 1212876 ecr 238593929], length 4

這是顯然的,這是因為收發兩端巨大的緩存大小差異造成的,即便是host2發送端進程退出了,在退出前已經有大量數據pending到了TCP的發送緩沖區里面而脫離已經被銷毀的進程了,FIN包當然是排在了緩沖區的末尾了。

TCP的狀態機運行在緩存的上層,即只要把FIN包pending排隊,就切換到了FIN_WAIT1,而不是說實際發送了FIN包才切換。

因此,我們可有的等了,數據傳輸依然在正常有序進行,針對小包的ACK源源不斷從host1回來,這進一步促進host2發送未竟的數據包,直到所有緩沖區的數據全部發送完畢…

不管怎樣,總是有個頭兒,只要有結束,就不需要擔心。我們可以簡單得出一個結論:

  • 如果主動斷開端調用了close關掉了進程,它會進入FIN_WAIT1狀態,如果接收端的接收窗口呈現打開狀態,此時它的TCP發送隊列中的數據包還是會像正常一樣發往接收端,直到發送完,最后發送FIN包,收到FIN包ACK后進入FIN_WAIT2。

現在,我們進行實驗的下一步,把host1上的接收進程nc的接收邏輯徹底憋死。很簡單,host1上執行下面的命令即可:

killall -STOP nc

進程并沒有退出,只是暫停了,nc進程上下文的recv不再執行,然而軟中斷上下文的TCP協議的處理依然在進行。

這個時候,抓包就會發現只剩下指數時間退避的零窗口探測包了:

# 注意觀察探測包發送時間的間隔 05:15:56.444570 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [.], ack 1, win 5840, options [nop,nop,TS val 1215715 ecr 238594487], length 0 05:15:56.444602 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 465, win 0, options [nop,nop,TS val 238594664 ecr 1214601], length 0 05:15:57.757217 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [.], ack 1, win 5840, options [nop,nop,TS val 1217027 ecr 238594664], length 0 05:15:57.757248 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 465, win 0, options [nop,nop,TS val 238594992 ecr 1214601], length 0 05:16:00.283259 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [.], ack 1, win 5840, options [nop,nop,TS val 1219552 ecr 238594992], length 0 05:16:00.283483 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 465, win 0, options [nop,nop,TS val 238595624 ecr 1214601], length 0 05:16:05.234277 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [.], ack 1, win 5840, options [nop,nop,TS val 1224503 ecr 238595624], length 0 05:16:05.234305 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 465, win 0, options [nop,nop,TS val 238596861 ecr 1214601], length 0 05:16:15.032486 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [.], ack 1, win 5840, options [nop,nop,TS val 1234301 ecr 238596861], length 0 05:16:15.032532 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 465, win 0, options [nop,nop,TS val 238599311 ecr 1214601], length 0 05:16:34.629137 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [.], ack 1, win 5840, options [nop,nop,TS val 1253794 ecr 238599311], length 0 05:16:34.629164 IP 1.1.1.1.1234 > 1.1.1.2.39318: Flags [.], ack 465, win 0, options [nop,nop,TS val 238604210 ecr 1214601], length 0 05:17:13.757815 IP 1.1.1.2.39318 > 1.1.1.1.1234: Flags [.], ack 1, win 5840, options [nop,nop,TS val 1292784 ecr 238604210], length 0 05:17:13.757863?IP?1.1.1.1.1234?>?1.1.1.2.39318:?Flags?[.],?ack?465,?win?0,?options?[nop,nop,TS?val?238613992?ecr?1214601],?length?0

這個實驗的現象和實驗1的現象,僅有一個區別,那就是實驗1是阻塞了ACK,而本實驗則是FIN根本就還沒有發送出去就進入了FIN_WAIT1,且針對RTO指數時間退避發送的零窗口探測的ACK持續到來,簡單總結就是:

實驗1沒有ACK到來,實驗2有ACK到來。

在實驗結果之前,我們來看一段摘錄,來自RFC1122:

https://tools.ietf.org/html/rfc1122#page-92

4.2.2.17 Probing Zero Windows: RFC-793 Section 3.7, page 42 .Probing of zero (offered) windows MUST be supported. .A TCP MAY keep its offered receive window closedindefinitely. As long as the receiving TCP continues tosend acknowledgments in response to the probe segments, thesending TCP MUST allow the connection to stay open.

緊接著后面是一段注解:

DISCUSSION:It is extremely important to remember that ACK(acknowledgment) segments that contain no data are notreliably transmitted by TCP. If zero window probing isnot supported, a connection may hang forever when anACK segment that re-opens the window is lost. .The delay in opening a zero window generally occurswhen the receiving application stops taking data fromits TCP. For example, consider a printer daemonapplication, stopped because the printer ran out ofpaper.

只要有ACK到來,連接就要保持,這會帶來什么問題呢?確實會帶來問題,但是在正視這些問題之前,Linux內核協議棧的實現者,也保持了緘默,我們來看一段實驗主機host1和host2所用的標準內核主線版本3.10的內核源碼,來自tcp_probe_timer函數內部的注釋以及一小段代碼:

/* *WARNING* RFC 1122 forbids this** It doesn't AFAIK, because we kill the retransmit timer -AK** FIXME: We ought not to do it, Solaris 2.5 actually has fixing* this behaviour in Solaris down as a bug fix. [AC]** Let me to explain. icsk_probes_out is zeroed by incoming ACKs* even if they advertise zero window. Hence, connection is killed only* if we received no ACKs for normal connection timeout. It is not killed* only because window stays zero for some time, window may be zero* until armageddon and even later. We are in full accordance* with RFCs, only probe timer combines both retransmission timeout* and probe timeout in one bottle. --ANK*/...max_probes = sysctl_tcp_retries2;if (sock_flag(sk, SOCK_DEAD)) { // 如果是orphan連接的話 const int alive = ((icsk->icsk_rto << icsk->icsk_backoff) < TCP_RTO_MAX); // 即獲取tcp_orphan_retries參數,有微調,請詳審。本實驗參數默認值取0!max_probes = tcp_orphan_retries(sk, alive);if (tcp_out_of_resources(sk, alive || icsk->icsk_probes_out <= max_probes)) return;} // 只有在icsk_probes_out,即未應答的probe次數超過探測最大容忍次數后,才會出錯清理連接。 if (icsk->icsk_probes_out > max_probes) {tcp_write_err(sk);} else { /* Only send another probe if we didn't close things up. */tcp_send_probe0(sk);}

是的,從上面那一段注釋,我們看出了抱怨,一個FIN_WAIT1的連接可能會等到世界終結日之后,然而我們卻只能“in full accordance with RFCs”!

這也許暗示了某種魔咒般的結果,即FIN_WAIT1將會一直持續到終結世界的大決戰之日。然而非也,你會發現大概在發送了9個零窗口探測包之后,連接就消失了。netstat -st的結果中,呈現:

connections aborted due to timeout

看來想制造點事端,并非想象般容易!

如上所述,我展示了標準主線的Linux 3.10內核的tcp_probe_timer函數,現在的問題是,為什么下面的條件被滿足了呢?

if (icsk->icsk_probes_out > max_probes)

只有當這個條件被滿足,tcp_write_err才會被調用,進而:

tcp_done(sk); // 遞增計數,即netstat -st中的那條“1 connections aborted due to timeout” NET_INC_STATS_BH(sock_net(sk), LINUX_MIB_TCPABORTONTIMEOUT);

按照注釋和代碼的確認,只要收到ACK,icsk_probes_out 字段就將被清零,這是很明確的啊,我們在tcp_ack函數中便可看到無條件清零icsk_probes_out的動作:

static int tcp_ack(struct sock *sk, const struct sk_buff *skb, int flag) {...sk->sk_err_soft = 0;icsk->icsk_probes_out = 0;tp->rcv_tstamp = tcp_time_stamp;... }

從代碼上看,只要零窗口探測持續發送,不管退避到多久(最大TCP_RTO_MAX),只要對端會有ACK回來,icsk_probes_out 就會被清零,上述的條件就不會被滿足,連接就會一直在FIN_WAIT1狀態,而從我們抓包看,確實是零窗口探測有去必有回的!

預期會永遠僵在FIN_WAIT1狀態的連接在一段時間后竟然銷毀了。沒有符合預期,到底發生了呢?

如果我們看高版本4.14版的Linux內核,同樣是tcp_probe_timer函數,我們會看到一些不一樣的代碼和注釋:

static?void?tcp_probe_timer(struct?sock?*sk) {.../* RFC 1122 4.2.2.17 requires the sender to stay open indefinitely as* long as the receiver continues to respond probes. We support this by* default and reset icsk_probes_out with incoming ACKs. But if the* socket is orphaned or the user specifies TCP_USER_TIMEOUT, we* kill the socket when the retry count and the time exceeds the* corresponding system limit. We also implement similar policy when* we use RTO to probe window in tcp_retransmit_timer().*/start_ts = tcp_skb_timestamp(tcp_send_head(sk));if (!start_ts)tcp_send_head(sk)->skb_mstamp = tp->tcp_mstamp;else if (icsk->icsk_user_timeout &&(s32)(tcp_time_stamp(tp) - start_ts) >jiffies_to_msecs(icsk->icsk_user_timeout))goto abort; max_probes = sock_net(sk)->ipv4.sysctl_tcp_retries2;if (sock_flag(sk, SOCK_DEAD)) {const bool alive = inet_csk_rto_backoff(icsk, TCP_RTO_MAX) < TCP_RTO_MAX;max_probes = tcp_orphan_retries(sk, alive);// 如果處在FIN_WAIT1的連接持續時間超過了TCP_RTO_MAX(這是前提)// 如果退避發送探測的次數已經超過了配置參數指定的次數(這是附加條件)if (!alive && icsk->icsk_backoff >= max_probes)goto abort; // 注意這個goto!直接銷毀連接。if (tcp_out_of_resources(sk, true))return;}if (icsk->icsk_probes_out > max_probes) { abort: tcp_write_err(sk);} else {/* Only send another probe if we didn't close things up. */tcp_send_probe0(sk);} }

我們來看這段代碼的注釋,RFC1122的要求:

RFC 1122 4.2.2.17 requires the sender to stay open indefinitely as long as the receiver continues to respond probes. We support this by default and reset icsk_probes_out with incoming ACKs.

然后我們接著看這段注釋,有一個But轉折:

But if the socket is orphaned or the user specifies TCP_USER_TIMEOUT, we kill the socket when the retry count and the time exceeds the corresponding system limit.

看起來,這段注釋是符合我們實驗的結論的!然而我們實驗的是3.10內核,而這個卻是4.X的內核啊!即Linux在高版本內核上確實進行了優化,這是針對資源利用的優化,并且避免了有針對性的DDoS。

答案揭曉了。

*我們實驗所使用的內核版本不是社區主線版本,而是Redhat的版本!***Redhat顯然會事先回移上游的patch,我們來確認一下我們所所用的實驗版本3.10.0-862.2.3.el7.x86_64的tcp_probe_timer的源碼。

為此,我們到下面的地址去下載Redhat(Centos…)專門的源碼,我們看看它和社區同版本源碼是不是在關于probe處理上有所不同:

http://vault.centos.org/7.5.1804/updates/Source/SPackages/

使用下面的命令解壓:

rpm2cpio ../kernel-3.10.0-862.2.3.el7.src.rpm | cpio -idmv xz linux-3.10.0-862.2.3.el7.tar.xz -d tar xvf linux-3.10.0-862.2.3.el7.tar

查看net/ipv4/tcp_timer.c文件,找到tcp_probe_timer函數:

看來是Redhat移植了4.X的patch,導致了源碼的邏輯和社區版本的出現差異,這也就解釋了實驗現象!


那么這個針對orphan connection的patch最初是來自何方呢?我們不得不去patchwork去溯源,以便得到更深入的Why。

在maillist,我找到了下面的鏈接:

http://lists.openwall.net/netdev/2014/09/23/8

Date: Mon, 22 Sep 2014 20:52:13 -0700 From: Yuchung Cheng ycheng@...gle.com To: davem@…emloft.net Cc: edumazet@…gle.com, andrey.dmitrov@…etlabs.ru,ncardwell@…gle.com, netdev@…r.kernel.org,Yuchung Cheng ycheng@...gle.com Subject: [PATCH net-next] tcp: abort orphan sockets stalling on zero window probes

摘錄一段描述吧:

Currently we have two different policies for orphan sockets that repeatedly stall on zero window ACKs. If a socket gets a zero window ACK when it is transmitting data, the RTO is used to probe the window. The socket is aborted after roughly tcp_orphan_retries() retries (as in tcp_write_timeout()). . But if the socket was idle when it received the zero window ACK, and later wants to send more data, we use the probe timer to probe the window. If the receiver always returns zero window ACKs, icsk_probes keeps getting reset in tcp_ack() and the orphan socket can stall forever until the system reaches the orphan limit (as commented in tcp_probe_timer()). This opens up a simple attack to create lots of hanging orphan sockets to burn the memory and the CPU, as demonstrated in the recent netdev post “TCP connection will hang in FIN_WAIT1 after closing if zero window is advertised.” http://www.spinics.net/lists/netdev/msg296539.html

該鏈接最后面給出了patch:

... + max_probes = sysctl_tcp_retries2; if (sock_flag(sk, SOCK_DEAD)) { const int alive = inet_csk_rto_backoff(icsk, TCP_RTO_MAX) < TCP_RTO_MAX;max_probes = tcp_orphan_retries(sk, alive); - + if (!alive && icsk->icsk_backoff >= max_probes) + goto abort; if (tcp_out_of_resources(sk, alive || icsk->icsk_probes_out <= max_probes)) return;} if (icsk->icsk_probes_out > max_probes) { - tcp_write_err(sk); +abort: tcp_write_err(sk);} else { ...

簡單說一下這個patch的意義。

在實驗2中,我用kill -STOP信號故意憋死了nc接收進程,以重現現象,然而事實上在現實中,存在下面兩種不太友善情況:

  • 接收端進程出現異常,或者接收端內核存在缺陷,導致進程掛死而軟中斷上下文的協議棧處理正常運行;

  • 接收端就是一個惡意的DDoS進程,故意不接收數據以誘導發送端在FIN_WAIT2狀態(甚至ESTAB狀態)發送數據不成后發送零窗口探測而不休止。

無論哪種情況,最主動斷開的發送端來講,其后果都是消耗大量的資源,而orphan連接則占著茅坑不拉屎。這比較悲哀。

現在給出本文的第三個結論:

  • 如果主動斷開端調用了close關掉了進程,它會進入FIN_WAIT1狀態,如果接收端的接收窗口呈現關閉狀態(零窗口),此時它會不斷發送零窗口探測包。發送多少次呢?有兩種實現:

????

低版本內核(至少社區3.10及以下):永久嘗試,如果探測ACK每次都返回,則沒完沒了。

高版本內核(至少社區4.6及以上):限制嘗試tcp_orphan_retries次,不管是否收到探測ACK。

當然,其實還有關于非探測包的重傳限制,比如關于TCP_USER_TIMEOUT這個socket option的限制:

else if (icsk->icsk_user_timeout &&(s32)(tcp_time_stamp(tp) - start_ts) >jiffies_to_msecs(icsk->icsk_user_timeout)) goto?abort;

包括關于Keepalive的點點滴滴,本文就不多說了。

在此,先有個必要的總結。我老是說在學習網絡協議的時候讀碼無益并不是說不要去閱讀解析Linux內核源碼,而是一定要先有實驗設計的能力重現問題,然后再去核對RFC或者其它的協議標準,最后再去核對源碼到底是怎么實現的,這樣才能一氣呵成。否則將有可能陷入深淵。

以本文為例,我假設你手頭有3.10的源碼,當你面對“FIN_WAIT1狀態的TCP連接在持續退避的零窗口探測期間并不會如預期那般永久持續下去”這個問題的時候,你讀源碼是沒有任何用的,因為這個時候你只能靜靜地看著那些代碼,然后糾結自己是不是哪里理解錯了,很多人甚至很難能想到去對比不同版本的代碼,因為版本太多了。

源碼只是一種實現的方式,而已,真正重要的是協議的標準以及標準是實現的建議,此外,各個發行版廠商完全有自主的權力對社區源碼做任何的定制和重構,不光是Redhat,即便你去看OpenWRT的代碼,也是一樣,你會發現很多不一樣的東西。

我并不贊同幾乎每一個程序員都擁護的那種任何情況下源碼至上,the whole world is cheap,show me the code的觀點,當一個邏輯流程擺在那里沒有源碼的時候,當然那絕對是源碼至上,否則就是紙上談兵,邏輯至少要跑起來,而只有源碼編譯后才能跑起來,流程圖和設計圖是無法運行的,這個時候,你需要放棄討論,潛心編碼。然而,當一個網絡協議已經被以各種方式實現了而你只是為了排查一個問題或者確認一個邏輯的時候,代碼就退居二三線了,這時候,請“show me the standard!”。

本文原本是想解釋完FIN_WAIT1能持續多久就結束的,但是這樣顯得有點遺憾,因為我想本文的這個FIN_WAIT1的論題可以引出一個更大的論題,如果不繼續說一說,那便是不負責任的。

是什么的?嗯,是TCP假連接的問題。那么何謂TCP假連接?

所謂的TCP假連接就是TCP的一端已經逃逸出了TCP狀態機,而另一端卻不知道的連接

我們再看完美的TCP標準RFC793上的TCP狀態圖:

除了TIME_WAIT到CLOSED這唯一的出口,你是找不到其它出口的,也就是說,一個TCP端一旦發起了建立連接請求,暫不考慮同時打開同時關閉的情況,就一定要到其中一方的TIME_WAIT超時而結束。

然而,TCP的缺陷在于,TCP是一個端到端的協議,在協議層面上所有的端到端協議是需要底層的傳送協議作為其支撐的,一旦底層永久崩壞,端到端協議將會面臨狀態機僵住的場景,而狀態機僵住意味著對資源的永久消耗,因為連接再也釋放不掉了!

隨便舉一個例子,在兩端ESTAB狀態的時候,把IP動態路由協議停掉并把把網線剪斷,那么TCP兩端將永遠處在ESTAB狀態,直到機器重啟。為了解決這個問題,TCP引入了Keepalive機制,一旦超過一定時間沒有互通有無,那么就會主動銷毀這個連接,事實上,按照純粹的TCP狀態機而言,Keepalive機制是一種對TCP協議的污染。

是不是Keepalive就能完全避免假連接,死連接存在了呢?非也,Keepalive只是一種用戶態按照自己的業務邏輯去檢測并避免假連接的手段,而我們仔細觀察TCP狀態機,很多的步驟遠不是用戶態進程可是touch的,比如本文講的FIN_WAIT1,一旦連接成為orphan的,將沒有任何進程與之關聯,雖然用戶態設置的Keepalive也可以繼續起作用,但萬一用戶態沒有設置Keepalive呢??這時怎么辦?

我們執行下面的命令:

[root@localhost ~]# sysctl -a|grep retries net.ipv4.tcp_orphan_retries = 0 net.ipv4.tcp_retries1 = 3 net.ipv4.tcp_retries2 = 15 net.ipv4.tcp_syn_retries = 6 net.ipv4.tcp_synack_retries = 5 net.ipv6.idgen_retries = 3

嗯,這些就是避免TCP協議本身的狀態機轉換僵死所引入的控制層Keepalive機制,詳細情況就自己去查閱Linux內核文檔吧。

在具體實現上,防止狀態機僵死的方法分為兩類:

  • ESTABLISHED防止僵死的方法:使用用戶進程設置的Keepalive機制

  • 非ESTABLISHED防止僵死的方法:使用各種retries內核參數設置的timeout機制

- END -


看完一鍵三連在看轉發,點贊

是對文章最大的贊賞,極客重生感謝你

推薦閱讀

從流量控制算法談網絡優化-TCP核心原理理解

TCP協議疑難雜癥全景解析|硬核

一個奇葩的網絡問題

總結

以上是生活随笔為你收集整理的TCP的FIN_WAIT1状态理解|深入理解TCP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产1区2区3区在线 亚洲自拍偷拍色图 | 成人免费观看视频网站 | 色综合婷婷久久 | 久久五月天色综合 | 久久精品这里都是精品 | 免费黄在线观看 | 国产精品免费视频观看 | 国产97在线视频 | 日韩成人高清在线 | 久久久www成人免费毛片 | 五月天电影免费在线观看一区 | 精品久久久久久国产 | 激情婷婷久久 | 亚洲婷婷综合色高清在线 | 国产精品久久久久久吹潮天美传媒 | 黄色网址av | 少妇av片 | 一区二区三区四区五区在线 | 久草视频网 | 中文字幕在线不卡国产视频 | 五月开心六月伊人色婷婷 | 久久免费视频3 | 日韩免费精品 | 狠狠色丁香婷婷综合久小说久 | 91大片网站 | 91香蕉亚洲精品 | 亚洲天堂网在线视频 | 91黄色视屏| 亚洲免费精品一区二区 | 天天艹 | 亚洲精品大片www | 精品国产美女 | 日本中文字幕在线播放 | 欧美激情综合五月色丁香小说 | 91九色国产视频 | 在线观看一区二区视频 | 亚洲欧美日韩在线一区二区 | 欧美日韩国产在线精品 | 欧美激情第一区 | 国产专区在线播放 | a级国产乱理论片在线观看 特级毛片在线观看 | 亚洲国产精品久久久久婷婷884 | 操操操影院| 成人国产精品久久久久久亚洲 | 日本最新中文字幕 | 亚洲欧美日韩一二三区 | 狠狠狠干狠狠 | 亚洲国产免费看 | 久日精品 | 国产精品淫片 | 亚洲成年人在线播放 | 天天干夜夜夜操天 | 日韩日韩日韩日韩 | 五月激情五月激情 | 亚洲午夜av久久乱码 | 中文字幕综合在线 | 久久成人麻豆午夜电影 | 狠狠干网址 | 色播99| 人人藻人人澡人人爽 | 亚洲精品乱码白浆高清久久久久久 | 日日夜夜操操操操 | 久久一本综合 | 国产一级免费观看 | 中文字幕中文字幕在线中文字幕三区 | 中文字幕一区在线观看视频 | 久久久国产99久久国产一 | 92中文资源在线 | 精品一区二区三区四区在线 | 日韩婷婷 | 国产精品一区一区三区 | 人人超碰人人 | 另类五月激情 | 国产成人精品一区二区三区网站观看 | 久久久久久国产精品亚洲78 | 夜夜夜影院 | 91九色在线观看 | 玖玖精品在线 | 日韩免费在线观看 | 最新国产在线视频 | 丁香六月网| 中文字幕日韩有码 | 青草草在线视频 | 国产日韩在线播放 | 国产在线国偷精品产拍 | 久久久久观看 | 99视频免费观看 | 激情 一区二区 | 婷婷深爱网 | av网站在线观看免费 | 欧美一级性生活视频 | 波多野结衣在线观看一区二区三区 | 成人av电影免费观看 | 天天色综合久久 | 九九精品视频在线观看 | 五月婷婷中文网 | 99re久久资源最新地址 | 国产成人在线观看 | 日韩久久精品一区 | 日韩一区二区免费视频 | 国产精品视频久久久 | 亚洲欧美日韩国产一区二区三区 | 国产 日韩 在线 亚洲 字幕 中文 | 国产99久久九九精品免费 | av高清免费在线 | 免费成人av在线看 | 一区二区三区av在线 | 亚洲另类视频 | 日日综合网 | 天天射天天爱天天干 | av色综合| .国产精品成人自产拍在线观看6 | 天天操夜夜操国产精品 | 在线观看视频福利 | 国产直播av| 免费在线视频一区二区 | 国产尤物在线视频 | 激情av在线播放 | 麻豆av一区二区三区在线观看 | 国产精品一区久久久久 | 福利视频| 日韩精品一区二区三区视频播放 | 99久久精品国产一区 | 日韩在线一二三区 | 深爱五月网 | 黄色免费视频在线观看 | 久久精品区 | 欧美一区二区三区在线观看 | 中文字幕国产亚洲 | 精品美女国产在线 | 欧美另类色图 | 免费观看一级 | 热精品| 亚洲干 | 午夜精品电影 | 久久久久久久国产精品视频 | 99视频偷窥在线精品国自产拍 | 一级全黄毛片 | 精品国产aⅴ一区二区三区 在线直播av | 91中文字幕永久在线 | 中文字幕有码在线播放 | 美女黄濒| 国产一级h | 国产成人精品三级 | 久久国产精品视频 | 在线观看国产区 | 精品一区二区免费在线观看 | 五月天婷亚洲天综合网鲁鲁鲁 | 在线亚洲播放 | 日韩精品免费一区二区在线观看 | 超碰在线cao | 久久视频这里只有精品 | 首页中文字幕 | 欧美了一区在线观看 | 亚洲成人av片在线观看 | 最新国产福利 | 中文字幕资源网 | 91资源在线免费观看 | 在线91色 | 五月天久久久久 | 国产精品一区在线播放 | 啪啪午夜免费 | 亚洲精品中文字幕视频 | 久精品视频免费观看2 | 激情久久小说 | 黄色特一级 | 国产成人在线精品 | 国产精品久久久久aaaa九色 | 在线观看 国产 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 九九九免费视频 | av大片网址 | 毛片美女网站 | 天天干,天天射,天天操,天天摸 | 国产美女精品在线 | 亚洲第一区在线播放 | 日韩av播放在线 | 欧美在线99 | 粉嫩一二三区 | 亚洲免费观看在线视频 | 91在线蜜桃臀 | 欧美精品久久久久久久免费 | 狠狠gao| 天天操网| 在线观看黄网 | 亚洲国产视频直播 | 在线视频一二区 | 在线成人免费电影 | 人人狠 | 国产区免费 | 久久国内精品99久久6app | 国产精品日韩欧美一区二区 | 亚洲精品视频在线免费播放 | av软件在线观看 | 中文字幕在线观看国产 | 日韩电影中文字幕在线观看 | 中文字幕 第二区 | 婷婷色网视频在线播放 | 免费观看日韩 | 久久伦理电影 | 国产又黄又猛又粗 | 国产精品午夜久久久久久99热 | 成人在线视频免费 | 伊香蕉大综综综合久久啪 | 在线观看深夜视频 | 在线91播放 | 午夜久久久精品 | 在线视频精品播放 | 久久色视频 | 在线免费观看国产视频 | 精品视频123区在线观看 | 亚洲精品视频在线 | 99久久精品免费看国产一区二区三区 | av永久网址 | 久久成人国产精品一区二区 | 五月天天在线 | 黄色视屏免费在线观看 | 日本aaaa级毛片在线看 | 日本最新高清不卡中文字幕 | av在线一级 | 黄色特级毛片 | 日本精品在线视频 | 国产精品免费视频观看 | www.人人干 | 国产黄色片一级 | 日韩精品视频网站 | 亚洲精品日韩在线观看 | 免费91在线 | 国产精品第一视频 | 久久激情婷婷 | 国产精品永久久久久久久久久 | 免费在线播放视频 | 欧美一级片在线观看视频 | 激情偷乱人伦小说视频在线观看 | 天天综合导航 | 字幕网在线观看 | 在线视频中文字幕一区 | 欧美性色黄大片在线观看 | 日韩欧美综合视频 | 9在线观看免费高清完整 | 国产色一区| 国产视频日韩 | 欧美成年性 | 日韩精品一二三 | 中文字幕123区 | 一级片免费观看 | 日日夜夜网站 | 天天色天天爱天天射综合 | 日本三级在线观看中文字 | 欧美激情视频在线观看免费 | 亚洲欧美乱综合图片区小说区 | 成人18视频| 国产中文字幕一区 | 在线中文字幕电影 | 免费观看黄色av | 色视频在线观看 | 激情综合五月天 | 97碰碰精品嫩模在线播放 | 在线观看免费观看在线91 | 久久高清国产 | 成人avav| 日韩在线精品 | 在线观看日韩中文字幕 | 久久久国际精品 | 亚洲伦理一区二区 | 亚洲国产人午在线一二区 | 九九久久免费 | 国产成人福利 | 日本韩国中文字幕 | 日韩三级一区 | 亚洲精品一区二区三区高潮 | 久久久69| 国产美女主播精品一区二区三区 | 黄色毛片视频免费观看中文 | 欧美一区二视频在线免费观看 | 欧美激情视频久久 | 天天艹日日干 | 久久久久国产精品免费网站 | 国产精品免费视频一区二区 | 天天天天天天干 | 国产一区在线看 | 婷婷丁香色 | 亚洲综合色丁香婷婷六月图片 | 在线观看免费高清视频大全追剧 | 91色蜜桃| 成人免费在线视频 | 国产精品一区二区免费视频 | 狠狠色丁香婷婷综合视频 | 国产小视频免费观看 | 久久久久国产一区二区三区 | 婷婷www | 久久免费视频5 | 天天草天天色 | 亚洲国产成人久久综合 | av综合网址 | 91免费网站在线观看 | 日韩精品极品视频 | 日韩免费二区 | 丁香六月激情 | 日日干天夜夜 | 五月天婷婷在线视频 | 国产艹b视频 | 天天玩天天干天天操 | 国产精品久久久久久久午夜 | 91最新在线观看 | www.99热精品 | 欧美一区二区三区激情视频 | 亚洲美女在线国产 | 国产黑丝一区二区三区 | 91av在线免费视频 | 国产成人av电影在线观看 | 久久爱资源网 | 日女人免费视频 | 91网免费看 | 成人97人人超碰人人99 | 九九热精品国产 | 五月天色综合 | 国产精品99久久久久久武松影视 | 亚洲欧美成人综合 | 99色免费视频 | 国产成人精品一区二区三区在线 | 人人爽久久久噜噜噜电影 | 又大又硬又黄又爽视频在线观看 | 又色又爽又黄 | 亚洲欧美视屏 | 在线之家免费在线观看电影 | 超碰人人干人人 | 四虎影视欧美 | 日p在线观看 | 亚洲成人av片在线观看 | 午夜久久影视 | 欧美色综合天天久久综合精品 | 伊人久久精品久久亚洲一区 | 久久久久久久毛片 | 热久久免费国产视频 | av中文字幕免费在线观看 | 97色在线 | 免费在线观看成人小视频 | 婷婷久久亚洲 | 免费在线观看亚洲视频 | 国产精品一区二区在线免费观看 | 美女黄色网在线播放 | 91在线精品秘密一区二区 | 国产精品日韩久久久久 | 久久久久久麻豆 | www.av在线.com | 成人小电影在线看 | 欧美日韩免费观看一区=区三区 | 日韩区欠美精品av视频 | 韩国av一区二区三区 | 在线观看免费中文字幕 | 黄色福利网站 | 中文av在线播放 | 日韩理论片在线 | 久久五月天综合 | 亚洲九九精品 | 国产视频每日更新 | 天天做天天射 | 日韩在线不卡av | 国产黄免费在线观看 | 亚洲日本色 | 中文字幕日韩av | 日韩伦理一区二区三区av在线 | 欧美一级片免费 | 999久久久久 | 在线观看视频一区二区三区 | 久久99网| 日韩久久久久久 | 91av资源网| 久久夜色精品国产欧美乱极品 | 日韩激情在线视频 | 国产精品igao视频网网址 | 欧美伦理电影一区二区 | 国产成本人视频在线观看 | 在线观看黄色的网站 | 精品国产一区二区三区蜜臀 | 久久久久成人精品 | av资源在线看 | 精品视频专区 | 成人在线视频观看 | 91亚洲精品久久久蜜桃 | 麻豆免费精品视频 | 成在人线av | 免费黄a | 色综合天天做天天爱 | 久久免费视频1 | 国产永久免费观看 | 香蕉视频免费看 | 亚洲一级片在线观看 | 国产精品普通话 | 波多野结衣精品视频 | 欧美日韩在线网站 | 婷婷久久五月天 | 成人网444ppp| 国产一级免费观看 | 国产麻豆精品传媒av国产下载 | 日日夜夜天天久久 | 在线а√天堂中文官网 | 欧美一区二区精美视频 | 欧美一级免费黄色片 | 伊人中文字幕在线 | 国产一区二区播放 | 久久永久免费 | 国产最顶级的黄色片在线免费观看 | 偷拍区另类综合在线 | 久久综合给合久久狠狠色 | 黄色网址a| 免费观看性生交 | 草久草久 | 亚洲九九爱 | 最近日本韩国中文字幕 | 天天综合在线观看 | 在线观看一区二区视频 | 人人干天天射 | 国产黄色片一级三级 | 91在线看片 | 久久99久久99精品中文字幕 | a在线观看国产 | 国产自偷自拍 | 国产99久久久国产精品 | 亚洲欧美偷拍另类 | 欧美日韩在线视频观看 | 亚洲人xxx | 波多野结衣在线观看视频 | 婷婷色六月天 | 黄色免费高清视频 | 96国产在线 | 2019中文 | 激情五月激情综合网 | 91九色国产| 日韩在线高清免费视频 | 伊人网站 | 91九色综合 | 99热精品国产一区二区在线观看 | 久久免费在线观看 | 亚洲男男gaygay无套 | 丁香婷婷综合色啪 | 奇米影视8888在线观看大全免费 | 国内精品视频在线 | www.久久99| 中文一二区 | 色偷偷网站视频 | 久久成人免费 | 五月天亚洲精品 | 天天色 天天 | 99久久精品无免国产免费 | 五月婷婷综合在线观看 | 免费国产黄线在线观看视频 | 97福利社 | 久久视频这里有久久精品视频11 | 久久精品国产免费看久久精品 | 九九视频在线播放 | 在线99热| 欧美一级视频免费 | 91精品网站| 午夜骚影| 波多野结衣在线播放视频 | 成人午夜精品 | 77国产精品 | 久久久久成人精品 | 国产精品 中文在线 | 欧美伦理一区二区三区 | 粉嫩aⅴ一区二区三区 | 天天在线操 | 国产成人久久久久 | 免费视频黄| 色综合天天射 | 精品国产一区二区三区久久久蜜月 | 久久精品国产精品亚洲精品 | 天天做夜夜做 | 免费看的黄网站软件 | 亚洲小视频在线观看 | 亚洲黄色小说网址 | 九九精品视频在线 | 久久论理| 国产精品毛片久久久 | 亚洲激情中文 | 五月婷婷在线播放 | 五月激情av | 欧美国产日韩一区二区三区 | 在线观看视频免费播放 | 成人av网站在线播放 | 91精品国自产在线观看欧美 | 91看片淫黄大片在线播放 | 久久网站免费 | 欧美成人一区二区 | 四虎影视成人永久免费观看视频 | 99久久精品久久亚洲精品 | 中文字幕综合在线 | 免费观看完整版无人区 | 精品毛片一区二区免费看 | 欧美另类一二三四区 | 最近中文字幕视频网 | 在线观看国产日韩欧美 | 欧美性生交大片免网 | 日韩电影一区二区在线观看 | 日韩黄视频 | 国产日韩欧美综合在线 | 国产精品久久久久一区二区国产 | 国内久久久久 | 日韩精品五月天 | 特黄色大片 | 国产精品一区二区三区在线 | 国产亚洲情侣一区二区无 | 在线观看岛国 | 亚洲国产精品999 | 黄色av电影 | 国产在线超碰 | 99久热在线精品视频观看 | 日本久久免费电影 | 国产精品99久久久久久武松影视 | 九九九热精品免费视频观看 | 亚洲精品视频一 | 国产精品久久视频 | 丁香免费视频 | 亚洲精品日韩一区二区电影 | 日韩高清 一区 | 国产中文字幕视频在线观看 | 天天添夜夜操 | 日韩电影在线观看一区 | 九草在线视频 | 亚洲清纯国产 | 天天操天天干天天综合网 | 干狠狠 | 成人免费观看视频大全 | 国产一级特黄毛片在线毛片 | 欧美污污网站 | 亚洲国产欧洲综合997久久, | 亚洲国产婷婷 | 午夜免费电影院 | 在线观看成人小视频 | 国内精品久久久久国产 | 天天操天天干天天摸 | 九色精品在线 | 精品国产91亚洲一区二区三区www | 久久天天躁 | 日韩女同一区二区三区在线观看 | 国产一区二区中文字幕 | 日日夜夜免费精品视频 | 国产精品99久久久久久久久久久久 | 蜜桃av久久久亚洲精品 | 国产网红在线观看 | 色香com.| 美女网站在线观看 | 久久97精品 | 国产一级久久 | 精品国产成人 | 免费看污片 | www.黄色片网站| 中文字幕在线人 | 成片免费观看视频大全 | 成人永久视频 | 精品久久久一区二区 | 天天插一插 | 成人午夜av电影 | 日韩中文在线电影 | 狠狠久久综合 | 国产黄色美女 | 日韩免费三级 | 久久不射电影院 | 一区二区欧美在线观看 | 精品久久网| 97精品超碰一区二区三区 | 欧美一级视频在线观看 | 极品嫩模被强到高潮呻吟91 | 18国产精品白浆在线观看免费 | 91av在线视频免费观看 | 亚洲人xxx| 日韩精品一区二区三区中文字幕 | 亚洲激情久久 | 午夜10000 | 丁香 久久 综合 | 99精品在线免费在线观看 | 激情五月在线视频 | 在线97 | 亚洲激情电影在线 | 亚洲四虎影院 | 在线播放精品一区二区三区 | 免费看的黄色片 | 在线免费观看视频a | 欧美一区二区三区在线视频观看 | 人人爱爱人人 | 免费看的av片 | 日本精品在线 | 国产成人av在线影院 | 91精品国产91 | 久久精品视频在线 | 91丨porny丨九色 | 四虎影视成人精品国库在线观看 | 精品欧美在线视频 | www视频在线免费观看 | 中文字幕二区三区 | 欧美一进一出抽搐大尺度视频 | 亚洲作爱视频 | 成人久久久久 | 久久免费激情视频 | 久草在线视频中文 | 欧美日韩精品国产 | 国产生活一级片 | 国产高清不卡av | 狠狠的干狠狠的操 | 99精品一区 | 伊人狠狠色丁香婷婷综合 | 成片免费观看视频 | 91视频啊啊啊| 久久久久激情视频 | japanese黑人亚洲人4k | 色综合天天干 | 亚洲精品1区2区3区 超碰成人网 | 中文一区在线 | www黄免费 | 超碰公开在线 | 麻豆91在线看 | 亚洲一区二区三区四区在线视频 | 国产在线美女 | 亚洲国产成人高清精品 | 国内精品久久久久久中文字幕 | 亚洲精品视频在线观看免费视频 | 黄色的视频 | 午夜久久影院 | 国产一区二区不卡视频 | 色 免费观看 | 亚洲精选视频免费看 | 99久久久久成人国产免费 | 日本女人的性生活视频 | 日韩一二区在线 | 亚洲国内精品在线 | 亚洲毛片久久 | 97综合视频 | 欧美日韩免费观看一区=区三区 | 国产黄色一级片在线 | 中文日韩在线 | 久久精品视频网站 | 91精品爽啪蜜夜国产在线播放 | 中国美女一级看片 | 日韩一区二区三免费高清在线观看 | 免费在线看成人av | 亚洲日本欧美 | 播五月婷婷 | 97国产大学生情侣酒店的特点 | 在线国产中文字幕 | av在线免费播放网站 | 成年人免费av网站 | 欧美大码xxxx | 午夜影院一区 | 狠狠色伊人亚洲综合网站色 | 亚洲一片黄 | 国产xvideos免费视频播放 | 日韩理论电影在线 | 久久精品视频网 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 九九热精品视频在线观看 | 美女久久久久久久 | 精品一区欧美 | 国产精品96久久久久久吹潮 | 日韩aⅴ视频 | 久久精品视频播放 | 日日夜夜精品免费视频 | 激情 亚洲| 99热只有精品在线观看 | 久久优 | 国产精品网站一区二区三区 | 97色国产 | 最新午夜 | 99久久久国产精品免费99 | 国产无套一区二区三区久久 | 国产精品电影在线 | 五月婷婷综合网 | 亚洲理论影院 | 婷婷在线色 | 欧美中文字幕久久 | 亚洲影院天堂 | 国产亚洲欧洲 | 国产精品男女啪啪 | 最近乱久中文字幕 | 国产精品12 | 国产精品一区二区久久精品爱微奶 | 亚洲综合国产精品 | 麻豆精品传媒视频 | 中文字幕在线观看免费高清电影 | 成人网在线免费视频 | 在线91精品 | 色吊丝在线永久观看最新版本 | 国产精品视频在线观看 | avwww在线| 亚洲一二三区精品 | 中午字幕在线 | 国产在线97| 国产一区二区免费 | se视频网址 | 国产精品久久久久久久久久久久 | 懂色av一区二区在线播放 | 亚洲精品国产第一综合99久久 | 天天干 夜夜操 | 日韩视频中文字幕在线观看 | 免费福利在线 | 91在线播放视频 | 国产美女视频网站 | 久久久久www| 国产专区视频在线 | 国产精品综合久久久久久 | 国产精品综合久久久久久 | 黄色一级大片在线免费看产 | 日韩日韩日韩日韩 | 久久超碰网 | 久久久久欠精品国产毛片国产毛生 | 久久高清免费视频 | 久久久精品亚洲 | 久草在线看片 | 日韩www在线 | 美女免费视频网站 | 亚州欧美精品 | 亚洲精品播放 | 在线观看成人毛片 | 99精品视频免费观看 | 欧美亚洲一区二区在线 | 三级黄色在线 | 成年人免费在线观看网站 | 中文字幕中文字幕在线中文字幕三区 | 色先锋资源网 | 日本精品久久久久久 | 四虎国产视频 | 成人av免费在线看 | 综合网天天 | 国产黄在线 | 欧美精品一二 | 日韩欧美高清 | 这里只有精品视频在线 | 日韩欧美精品一区二区三区经典 | 久久麻豆精品 | 亚洲精品在线观看的 | 久久三级毛片 | 亚洲国内精品视频 | www.午夜视频 | 亚洲欧美成人综合 | 最新国产精品拍自在线播放 | 免费视频久久久久久久 | 在线观看完整版免费 | 正在播放一区 | 91亚色视频| 午夜三级在线 | 中文字幕在线字幕中文 | 激情五月激情综合网 | 在线看污网站 | 婷婷伊人五月天 | 久久久久久久久久久久久国产精品 | 国产又粗又猛又黄又爽 | 国产成人一区二区三区在线观看 | 视频一区二区在线观看 | 日韩在线在线 | 天天摸日日操 | 97操操| 日韩在线视频网站 | 欧美日韩网站 | 丁香视频 | av一级片在线观看 | 在线a人片免费观看视频 | 日韩激情综合 | 99热9| 精品色综合 | 久久99久久99精品免观看软件 | 五月婷婷在线观看 | 精品亚洲欧美无人区乱码 | 色吊丝在线永久观看最新版本 | 在线观看网站你懂的 | 亚洲综合激情小说 | 中文字幕av免费在线观看 | 亚洲男女精品 | 婷婷天天色 | 婷婷激情在线观看 | 中文字幕亚洲精品日韩 | 国产xvideos免费视频播放 | 久久第四色 | 久久99精品国产 | 久久免费99 | av线上免费观看 | 免费网站黄色 | 99麻豆久久久国产精品免费 | 国产手机视频 | 色久天 | 99久久精品无免国产免费 | 久草在线精品观看 | 日韩在线免费 | 激情欧美在线观看 | 玖草影院 | 国产成人黄色av | 午夜精品久久久 | 99电影456麻豆 | 午夜丁香视频在线观看 | 久久色视频 | 美女久久久久久久久久 | 香蕉影视app | 一级精品视频在线观看宜春院 | 国产资源 | 91麻豆高清视频 | 五月av在线| 丁香激情视频 | 久久久久高清毛片一级 | 国产精品久久久久影视 | 国产成人精品一区二区三区 | 久久久免费播放 | 97在线观看免费观看高清 | 国产成人精品999 | 99r精品视频在线观看 | 亚洲一区精品二人人爽久久 | 国产精品一区二区在线看 | 午夜精品视频一区 | 99热精品在线 | 国产网站在线免费观看 | 天堂在线一区二区 | 伊人天天综合 | 美女中文字幕 | 不卡av免费在线观看 | 在线看国产一区 | 国产综合精品一区二区三区 | 黄色小说网站在线 | 国产成人一区二区三区免费看 | 91九色在线 | 精品久久中文 | 亚洲清纯国产 | 亚洲精品乱码久久久久v最新版 | 婷婷色网视频在线播放 | 深爱开心激情 | 精品国产午夜 | 亚洲午夜av | 亚洲高清色综合 | 午夜影视一区 | 日韩电影在线看 | 欧美亚洲国产一卡 | 欧美日韩国产综合一区二区 | 亚洲午夜精品久久久久久久久 | 精品一区在线 | 五月婷激情 | 黄色影院在线观看 | 探花视频在线观看免费 | 免费午夜网站 | 丰满少妇久久久 | 免费在线成人av电影 | 午夜999| 国产精品永久免费 | 欧美在线视频a | 日韩免费一级a毛片在线播放一级 | 99精品欧美一区二区 | 婷婷色站| 在线观看激情av | 99久久99久久综合 | 人人插人人舔 | 成人网大片 | 五月天久久激情 | 日韩伦理片一区二区三区 | 久草精品视频在线播放 | 亚洲视频免费在线 | 日本不卡一区二区 | 日韩av一区二区三区四区 | 中文字幕免费成人 | 69av网| www日日 | 国产精品成人免费一区久久羞羞 | 91亚洲国产| 日本h在线播放 | 国产激情小视频在线观看 | 五月天亚洲综合小说网 | 国产在线观看一区 | 亚洲高清视频在线观看免费 | 91成人短视频在线观看 | 久久99国产精品免费网站 | 精品一区二区三区香蕉蜜桃 | 亚洲精品国产精品国自产观看浪潮 | 日本精品xxxx | 欧美激情h | 中文字幕的 | 亚洲区视频在线观看 | 亚洲视频在线播放 | 久久国产精品二国产精品中国洋人 | 亚洲人成在线电影 | 久久精品91久久久久久再现 | 久久久精品亚洲 | 99热最新地址 | 久久久www成人免费毛片麻豆 | 天天干天天做天天爱 | 日本性高潮视频 | 国产精品91一区 | 久久久av电影 | 91精品国产麻豆国产自产影视 | 日韩综合色 | 久久免费视频一区 | 久草在线免费看视频 | 中文字幕在线乱 | 最新在线你懂的 | 91视视频在线直接观看在线看网页在线看 | 999国产精品视频 | avhd高清在线谜片 | 在线一二区| 久久综合九色综合欧美就去吻 | 九九有精品 | 91.精品高清在线观看 | 日本精品午夜 | www.狠狠操| 国产精品igao视频网网址 | 天天操天天操天天爽 | a级国产乱理论片在线观看 伊人宗合网 | 欧美久草网| 麻豆视频一区 | 久久网页 | 天天av在线播放 | 18久久久久 | 免费手机黄色网址 | 婷婷播播网| 91中文字幕视频 | 日韩欧美一区二区在线观看 | 日韩高清三区 | 日韩www在线 | 亚洲精品av在线 | 成年人毛片在线观看 | 久久av影视| 免费精品人在线二线三线 | 99久久久国产精品免费观看 | 夜夜爱av| 久久成人国产精品免费软件 | 日本黄区免费视频观看 | 女人高潮特级毛片 | 免费人做人爱www的视 | 欧美日韩国产精品一区二区亚洲 | 高清av在线 | 免费黄色特级片 | 日韩伦理片一区二区三区 | 亚洲精品视频在线播放 | 在线观看av免费观看 | 91系列在线 | 精品国产一区二区久久 | 婷婷久久国产 | 亚洲精品乱码白浆高清久久久久久 | 久久免费视频在线观看30 | 久久九九国产精品 | 国产成人a亚洲精品v | 国产视频亚洲精品 | 精品国产中文字幕 | 狠狠做深爱婷婷综合一区 | 91av久久| 激情综合五月 | 天天干天天干天天干 | 久草新在线 | 亚洲综合在线视频 | 国语自产偷拍精品视频偷 | 亚洲综合婷婷 | 精品国产视频在线观看 | 久久综合九九 | 日韩免费区 | 亚洲国产美女久久久久 | 成人在线播放av | 五月天色丁香 | 四虎成人精品永久免费av九九 | 亚洲欧美日韩精品久久久 | 国内精品久久久久影院优 | 免费av在线网站 | 久久综合狠狠狠色97 | 国模吧一区 | 在线免费观看视频a | 白丝av免费观看 | 狠狠干激情 | 99精品一区二区三区 | 日日爱视频 | 欧美小视频在线 | 91福利区一区二区三区 | 国产精品你懂的在线观看 | 国产免费美女 | 国产香蕉久久 | 婷婷激情欧美 | 国内精自线一二区永久 | 97超级碰| 丁香激情综合 | 精品国产一区二区三区四 | 日韩黄色一级电影 | 中文字幕在线播放一区 | 国产精品久久一 | 欧美精品久久人人躁人人爽 | 日韩久久精品一区二区三区 | 成人免费xxxxxx视频 | 国产色 在线 | 亚洲免费在线观看视频 | 97日日碰人人模人人澡分享吧 | 国产伦精品一区二区三区免费 | 日韩免费三级 | 天堂网一区二区 | 一区二区三区国 | 国产成在线观看免费视频 | 免费亚洲视频 | 色香蕉视频 | 国产精品久久久久久久久久尿 | 在线免费观看视频一区二区三区 | 久久人人爽av | 九九亚洲视频 | 在线观看91视频 | 东方av在线免费观看 | 国产精品露脸在线 | 97在线资源 | 亚洲国产剧情av | av免费网站在线观看 |