TCP 클라이언트는 핸드 셰이 킹 중에 ACK를 보내지 않습니다.

user1411817

내 테스트 환경

고객

  • IP 192.168.0.2/24
  • 게이트웨이 192.168.0.1

섬기는 사람

  • IP 192.168.0.1/24
  • 포트 80에서 실행되는 http 서비스

웹 페이지를 서버에서 호스팅하려고하면 모든 것이 잘됩니다.

그런 다음 서버에서 netfilter를 사용하여 커널 모듈을 작성합니다.이 모듈은 원본 대상 IP가 192.168.1.1이면 대상 IP를 192.168.0.1로 변경하고 원본 원본 IP가 192.168.0.1이면 원본 IP를 192.168.1.1로 변경합니다. 클라이언트에 대해 서버를 192.168.1.1로 가장하고 있다는 것을 이해할 수 있다고 생각합니다. (IP 헤더 체크섬과 TCP 체크섬이 제대로 변경되었습니다)

클라이언트에서 웹 브라우저 (chrome, firefox ...)를 사용하여 192.168.1.1을 방문하고 클라이언트에서 패킷을 캡처하면 결과는 다음과 같습니다.

192.168.0.2:someport_1 -> 192.168.1.1:80 [SYN]
192.168.1.1:80 -> 192.168.0.2:someport_1 [SYN, ACK]
192.168.0.2:someport_2 -> 192.168.1.1:80 [SYN]
192.168.1.1:80 -> 192.168.0.2:someport_2 [SYN, ACK]
192.168.0.2:someport_3 -> 192.168.1.1:80 [SYN]
192.168.1.1:80 -> 192.168.0.2:someport_3 [SYN, ACK]

클라이언트가 TCP 핸드 셰이 킹의 마지막 ACK를 보내지 않는 이유를 모르겠습니다. 아이디어가 있습니까?

편집 1 :

이제 wireshark는 볼 수 있지만 브라우저는 서버에서 [SYN, ACK] 패킷을받지 못했다고 생각합니다. 그래서 아마도 OS (Windows7)가 서버에서 [SYN, ACK] 패킷을 떨어 뜨 렸기 때문일 것입니다. 이제 Windows가 올바른 [SYN, ACK] 패킷을 삭제하는 이유는 무엇입니까?

user1411817

세 가지 실수를했습니다.

첫 번째는 skb가 비선형수 있으므로 csum_partial ()에서 가져온 체크섬이 올바르지 않게됩니다.

두 번째는 체크섬을 얻기 위해 csum_tcpudp_magic ()을 사용하지만 skb-> ip_summed 를 변경하는 것을 잊었 기 때문에 NIC는 체크섬을 다시 계산하기 위해 tcp 의사 헤더의 부분 체크섬으로 올바른 체크섬을 사용하여 체크섬이 잘못되었습니다. 패킷.

세 번째 실수는 내 wireshark가 tcp 체크섬을 무시하도록 설정되어 있고 항상 잘못된 체크섬이있는 패킷을 좋은 것으로 표시하는 반면 tcpdump는 잘못된 체크섬을 알려준다는 것입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

HTTP 클라이언트가 3 방향 핸드 셰이크의 ACK 메시지에 빈 데이터를 보내는 이유는 무엇입니까?

분류에서Dev

Websocket 클라이언트는 핸드 셰이크 직후 [FIN, ACK]를 보냅니다.

분류에서Dev

SSL 핸드 셰이크 중에 클라이언트 인증서가 제공되지 않았습니다.

분류에서Dev

scapy를 사용하여 TCP 핸드 셰이크를 보내지 만 wireshark에서는 시퀀스 번호가 잘못 되었습니까?

분류에서Dev

Socket.io가 핸드 셰이크에서 쿠키를 보내지 않아 요청이 중단됨

분류에서Dev

성공적인 핸드 쉐이킹 후 클라이언트가 Close Notify를 보내는 이유는 무엇입니까?

분류에서Dev

클라이언트가 TCP SYN-ACK 패킷 이더넷 드라이버에 응답하지 않음

분류에서Dev

클라이언트가 핸드 셰이크를 닫지 않고 웹 소켓에서 연결을 끊습니다 (브라우저 탭 닫기). 이것을 올바르게 처리하는 방법?

분류에서Dev

모든 클라이언트에 메시지를 보내는 Python TCP 서버

분류에서Dev

봄 통합 tcp 서버는 tcp 클라이언트에 메시지를 보냅니다

분류에서Dev

라우터 모드에서 Cisco 무선 라우터가 전체 TCP 핸드 셰이크를 허용하지 않음

분류에서Dev

TCP 3 방향 핸드 셰이크-ACK 편승

분류에서Dev

서버에서 데이터를 검색하지 않는 TCP 클라이언트

분류에서Dev

WebSocket Server가 핸드 셰이크를 실행하지 않습니다.

분류에서Dev

서버와 성공적으로 연결되었지만 사전 로그인 핸드 셰이크 중에 오류가 발생했습니다. (provider : TCP Provider, error : 35)

분류에서Dev

TCP 서버는 [ACK] 다음에 [PSH, ACK]를 보냅니다.

분류에서Dev

TCP 소켓 프로그램에서 클라이언트는 일부 데이터를 보내지 만 서버는 여러 번 읽어야합니다. 왜?

분류에서Dev

Java TCP 서버는 둘 이상의 클라이언트에서 메시지를 수신 할 수 없습니다.

분류에서Dev

scapy에서 TCP 핸드 셰이크를 스푸핑하는 방법은 무엇입니까?

분류에서Dev

내 TCP 클라이언트가 내 TCP 서버에 연결되지 않습니다.

분류에서Dev

노드는 원격 클라이언트에 이미지를 제공하지 않습니다.

분류에서Dev

핸드 셰이크에서 "클라이언트 요청"이 전송되지 않은 경우 Chrome은 클라이언트 인증서 제공 여부를 어떻게 알 수 있나요?

분류에서Dev

Simple Rust TCP 서버와 클라이언트는 메시지를받지 않고 종료되지 않습니다.

분류에서Dev

OpenSSL에서 SSL 핸드 셰이크 후 클라이언트의 IP를 얻는 방법

분류에서Dev

iOS의 소켓 IO가 핸드 쉐이킹을 지나치지 않습니다.

분류에서Dev

Apache SSL 오류 : 재협상 핸드 셰이크 실패 : 클라이언트가 수락하지 않습니까?

분류에서Dev

Websocket 핸드 셰이크가 작동하지 않습니다.

분류에서Dev

연결된 클라이언트에 메시지를 보내지 않는 서버

분류에서Dev

socketio 브로드 캐스트가 모든 클라이언트를 제외한 모든 클라이언트에게 내보내는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    HTTP 클라이언트가 3 방향 핸드 셰이크의 ACK 메시지에 빈 데이터를 보내는 이유는 무엇입니까?

  2. 2

    Websocket 클라이언트는 핸드 셰이크 직후 [FIN, ACK]를 보냅니다.

  3. 3

    SSL 핸드 셰이크 중에 클라이언트 인증서가 제공되지 않았습니다.

  4. 4

    scapy를 사용하여 TCP 핸드 셰이크를 보내지 만 wireshark에서는 시퀀스 번호가 잘못 되었습니까?

  5. 5

    Socket.io가 핸드 셰이크에서 쿠키를 보내지 않아 요청이 중단됨

  6. 6

    성공적인 핸드 쉐이킹 후 클라이언트가 Close Notify를 보내는 이유는 무엇입니까?

  7. 7

    클라이언트가 TCP SYN-ACK 패킷 이더넷 드라이버에 응답하지 않음

  8. 8

    클라이언트가 핸드 셰이크를 닫지 않고 웹 소켓에서 연결을 끊습니다 (브라우저 탭 닫기). 이것을 올바르게 처리하는 방법?

  9. 9

    모든 클라이언트에 메시지를 보내는 Python TCP 서버

  10. 10

    봄 통합 tcp 서버는 tcp 클라이언트에 메시지를 보냅니다

  11. 11

    라우터 모드에서 Cisco 무선 라우터가 전체 TCP 핸드 셰이크를 허용하지 않음

  12. 12

    TCP 3 방향 핸드 셰이크-ACK 편승

  13. 13

    서버에서 데이터를 검색하지 않는 TCP 클라이언트

  14. 14

    WebSocket Server가 핸드 셰이크를 실행하지 않습니다.

  15. 15

    서버와 성공적으로 연결되었지만 사전 로그인 핸드 셰이크 중에 오류가 발생했습니다. (provider : TCP Provider, error : 35)

  16. 16

    TCP 서버는 [ACK] 다음에 [PSH, ACK]를 보냅니다.

  17. 17

    TCP 소켓 프로그램에서 클라이언트는 일부 데이터를 보내지 만 서버는 여러 번 읽어야합니다. 왜?

  18. 18

    Java TCP 서버는 둘 이상의 클라이언트에서 메시지를 수신 할 수 없습니다.

  19. 19

    scapy에서 TCP 핸드 셰이크를 스푸핑하는 방법은 무엇입니까?

  20. 20

    내 TCP 클라이언트가 내 TCP 서버에 연결되지 않습니다.

  21. 21

    노드는 원격 클라이언트에 이미지를 제공하지 않습니다.

  22. 22

    핸드 셰이크에서 "클라이언트 요청"이 전송되지 않은 경우 Chrome은 클라이언트 인증서 제공 여부를 어떻게 알 수 있나요?

  23. 23

    Simple Rust TCP 서버와 클라이언트는 메시지를받지 않고 종료되지 않습니다.

  24. 24

    OpenSSL에서 SSL 핸드 셰이크 후 클라이언트의 IP를 얻는 방법

  25. 25

    iOS의 소켓 IO가 핸드 쉐이킹을 지나치지 않습니다.

  26. 26

    Apache SSL 오류 : 재협상 핸드 셰이크 실패 : 클라이언트가 수락하지 않습니까?

  27. 27

    Websocket 핸드 셰이크가 작동하지 않습니다.

  28. 28

    연결된 클라이언트에 메시지를 보내지 않는 서버

  29. 29

    socketio 브로드 캐스트가 모든 클라이언트를 제외한 모든 클라이언트에게 내보내는 이유는 무엇입니까?

뜨겁다태그

보관