TUN을 통한 TCP: SYN/ACK가 수신되었지만 ACK가 생성되지 않았으며 소켓은 여전히 ​​SYN_SENT 상태입니다.

TUN을 통한 TCP: SYN/ACK가 수신되었지만 ACK가 생성되지 않았으며 소켓은 여전히 ​​SYN_SENT 상태입니다.

나는 내가 작성한 프로그램에 의해 설정된 TUN 인터페이스를 통해 나가는 TCP 연결을 만들고 있습니다. TUN 인터페이스는 기본적으로 최소한의 수정(소스/대상 IP/포트, TCP 체크섬)으로 프록시 서버와 패킷을 중계합니다.

이 TUN 인터페이스를 통해 라우팅된 IP에서 wget을 실행하면 패킷이 올바르게 전송되고 수신되는 것처럼 보이지만(추적 참조) 서버에서 반환된 SYN/ACK가 TCP 스택에 등록되지 않고 소켓이 여전히 SYN_SENT에 존재합니다. "netstat -t"에 상태를 입력합니다. 그런 다음 가짜 재전송이 양방향으로 계속 생성됩니다(시간 초과까지).

설정하는 데 사용한 명령은 다음과 같습니다.

ip link set dev tun0 up
ip addr add 10.0.0.1/24 dev tun0 
ip route add 216.58.197.100/32 dev tun0

이어서

wget http://216.58.197.100

이것은 Wireshark 추적입니다.여기 있어요:

wget Wireshark 추적

답변1

문제를 발견한 것 같습니다. 수신 패킷을 TUN 인터페이스에 쓰기 전에 IPv4 헤더 체크섬을 수정했기 때문에 이를 계산해야 합니다.

관련 정보