wget使用ipv6地址,耗时太长无法完成

x-y*_*uri 7 wget ipv6 curl ipv4

在服务器上wget-1.16需要 8 分钟才能完成:

$ wget http://http.debian.net/debian/dists/stable/Release -O -
--2017-06-12 23:44:40--  http://http.debian.net/debian/dists/stable/Release         [4693/5569]
Resolving http.debian.net (http.debian.net)... 2001:4f8:1:c::15, 2605:bc80:3010:b00:0:deb:166:202, 2001:610:1908:b000::148:14, ...                                                            
Connecting to http.debian.net (http.debian.net)|2001:4f8:1:c::15|:80... failed: Connection timed out.                 
Connecting to http.debian.net (http.debian.net)|2605:bc80:3010:b00:0:deb:166:202|:80... failed: Connection timed out. 
Connecting to http.debian.net (http.debian.net)|2001:610:1908:b000::148:14|:80... failed: Connection timed out.       
Connecting to http.debian.net (http.debian.net)|140.211.166.202|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://cdn-fastly.deb.debian.org/debian/dists/stable/Release [following]
--2017-06-12 23:51:02--  http://cdn-fastly.deb.debian.org/debian/dists/stable/Release
Resolving cdn-fastly.deb.debian.org (cdn-fastly.deb.debian.org)... 2a04:4e42:3::204, 151.101.12.204                   
Connecting to cdn-fastly.deb.debian.org (cdn-fastly.deb.debian.org)|2a04:4e42:3::204|:80... failed: Connection timed out.
Connecting to cdn-fastly.deb.debian.org (cdn-fastly.deb.debian.org)|151.101.12.204|:80... connected.
...
Run Code Online (Sandbox Code Playgroud)

因为它正在尝试使用 IPv6 地址进行连接。curl-7.38.0在同一台机器上立即响应。因为它使用 IPv4 地址。他们是否以不同的方式解析域?他们是怎么做到的呢?如何wget使用 IPv4 地址?

UPD

$ ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether d8:cb:8a:37:cf:57 brd ff:ff:ff:ff:ff:ff
    inet 188.40.99.4/26 brd 188.40.99.63 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 2a01:4f8:100:738b::2/64 scope global 
       valid_lft forever preferred_lft forever 
    inet6 fe80::dacb:8aff:fe37:cf57/64 scope link                                                     valid_lft forever preferred_lft forever 

$ ip route
default via 188.40.99.1 dev eth0 
10.0.0.0/24 dev br0  proto kernel  scope link  src 10.0.0.1 
188.40.99.0/26 via 188.40.99.1 dev eth0 
188.40.99.0/26 dev eth0  proto kernel  scope link  src 188.40.99.4 
Run Code Online (Sandbox Code Playgroud)

use*_*931 13

curl并且wget不要使用不同的机制来解析域(他们正在使用getaddrinfo())。但是,curl在 IPv6 连接性不佳的情况下,实施了快速回退算法以改善用户体验。

该算法在 RFC 6555(Happy Eyeballs)中有详细描述:https : //tools.ietf.org/html/rfc6555

根据curl/lib/connect.h这个超时设置为200ms:https : //github.com/curl/curl/blob/a8e523f086c12e7bb9acb18d1ac84d92dde0605b/lib/connect.h#L43

curlwget支撑-4/-6选项,这将迫使分别IPv4或IPv6的连接。