在查看有時候檔案上傳到cdn比較慢的情況。
使用strace查看到以下系統調用。
我有一些疑問:
查詢dns的時候,connect了一次之後,為何會有兩次sendto。看樣子兩次都發送了同個網域名稱過去。
串連cdn的時候出現了多次connect,我很不理解這個過程,可否幫我講解下,發生了什麼,為什麼這樣。
futex(0x7fbfc9b9ff04, FUTEX_WAKE_PRIVATE, 2147483647) = 0socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 6connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("221.181.196.155")}, 16) = 0getsockname(6, {sa_family=AF_INET, sin_port=htons(44696), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0connect(6, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 0connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("211.142.193.60")}, 16) = 0getsockname(6, {sa_family=AF_INET, sin_port=htons(45965), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0connect(6, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 0connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("183.203.25.158")}, 16) = 0getsockname(6, {sa_family=AF_INET, sin_port=htons(59516), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0close(6) = 0gettimeofday({1464771775, 191396}, NULL) = 0alarm(0) = 30rt_sigaction(SIGALRM, {SIG_DFL, [], SA_RESTORER, 0x7fbfc98419a0}, NULL, 8) = 0clock_gettime(CLOCK_MONOTONIC, {11494888, 559945294}) = 0clock_gettime(CLOCK_MONOTONIC, {11494888, 560020269}) = 0socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 6fcntl(6, F_GETFL) = 0x2 (flags O_RDWR)fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("221.181.196.155")}, 16) = -1 EINPROGRESS (Operation now in progress)
回複內容:
在查看有時候檔案上傳到cdn比較慢的情況。
使用strace查看到以下系統調用。
我有一些疑問:
查詢dns的時候,connect了一次之後,為何會有兩次sendto。看樣子兩次都發送了同個網域名稱過去。
串連cdn的時候出現了多次connect,我很不理解這個過程,可否幫我講解下,發生了什麼,為什麼這樣。
futex(0x7fbfc9b9ff04, FUTEX_WAKE_PRIVATE, 2147483647) = 0socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 6connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("221.181.196.155")}, 16) = 0getsockname(6, {sa_family=AF_INET, sin_port=htons(44696), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0connect(6, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 0connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("211.142.193.60")}, 16) = 0getsockname(6, {sa_family=AF_INET, sin_port=htons(45965), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0connect(6, {sa_family=AF_UNSPEC, sa_data="\0\0\0\0\0\0\0\0\0\0\0\0\0\0"}, 16) = 0connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("183.203.25.158")}, 16) = 0getsockname(6, {sa_family=AF_INET, sin_port=htons(59516), sin_addr=inet_addr("10.250.1.110")}, [16]) = 0close(6) = 0gettimeofday({1464771775, 191396}, NULL) = 0alarm(0) = 30rt_sigaction(SIGALRM, {SIG_DFL, [], SA_RESTORER, 0x7fbfc98419a0}, NULL, 8) = 0clock_gettime(CLOCK_MONOTONIC, {11494888, 559945294}) = 0clock_gettime(CLOCK_MONOTONIC, {11494888, 560020269}) = 0socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 6fcntl(6, F_GETFL) = 0x2 (flags O_RDWR)fcntl(6, F_SETFL, O_RDWR|O_NONBLOCK) = 0connect(6, {sa_family=AF_INET, sin_port=htons(80), sin_addr=inet_addr("221.181.196.155")}, 16) = -1 EINPROGRESS (Operation now in progress)
tcp 三向交握
cdn 會串連到多個節點
第一個問題我不知道。
第二個,解析DNS之後會有多個A記錄,看樣子先進行了測速之類的任務,然後選擇最優伺服器上傳資料。