環境: os: centos サーバー: apache 2.2.22
問題は、サーバーがスリーウェイ ハンドシェイクを達成できないことです。クライアントは SYN-ACK パケットと応答 ACK を受信できますが、サーバーは取得できません。
クライアントコード:
int main() {
struct sockaddr_in srvaddr;
srvaddr.sin_family = AF_INET;
srvaddr.sin_port = htons(80);
int32_t sockfd;
srvaddr.sin_addr.s_addr = inet_addr("10.200.33.201");//httpd ip
sockfd = socket(AF_INET,SOCK_STREAM,0);
if(connect(sockfd,(struct sockaddr*) &srvaddr,sizeof(struct sockaddr)) < 0)
printf("connect error!\n");
//close(sockfd);
pause();
return 0;
}
クライアントを実行した後、'netstat -natp' を使用し、接続ソケットが SYN_RECV 状態であることを確認します。Wireshark を使用してパケットをキャプチャすると、クライアントが ACK を何度も再送信することがわかります。なぜ?