RST 패킷의 구성
글쓴이: Lightstar / 작성시간: 목, 2015/01/29 - 8:57오전
네트워크에서 rst 패킷은 구성이 어떻게 되나요?
서버 pc a에게 b가 접속을 시도하려고 syn을 날린 상태에서 c가 a에게 b와 접속을 끊으라고 rst를 날리려고 한다면, c가 날리는 rst 패킷의 목적 ip와 port는 b가 접속을 시도하려고 한 그것이 될 것이고, 출발 ip와 port는 마찬가지고 b의 첫 syn 패킷과 동일해야하나요?
이부분이 좀 애매해요.
출발 ip와 port도 syn 패킷과 같아야 되는데 ip만 같아도 되는지...
Forums:
gilgil.net
src ip, src port, dst ip, dst port, seq, ack를 맞춰 줘야 합니다(그 외에도 많은 필드를 고려해야 하지만).
www.gilgil.net
https://github.com/snoopspy/s
https://github.com/snoopspy/snoop91/blob/master/include/process/snooptcpblock.cpp 파일에서
SnoopTcpBlock::sendForwardBlock 함수를 참고해 보시기 바랍니다.
www.gilgil.net
seqnumber
http://jvmblog.tistory.com/180
여기 이미지에서 a가 b에게 3번 패킷을 보내지 않았다고 할 때 다른 pc가 b에게 RST를 보내 이 연결을 끊으려고 한다면 rst패킷의 seq number랑 ack number는 3번 패킷과 같아야 하나요?
gilgil.net
네, 그렇습니다.
아래 코드를 보시면 이해가 될 것입니다.
sequence number는 "TCP Data의 크기만큼 증가 / SYN, FIN이 setting되어 있을 때 1 증가"라는 공식을 가집니다.
따라서 RST 패킷을 보낼 때에는 이전 패킷의 정보를 이용해서 다음 seq값을 얼마로 해야 할지를 결정해야 합니다.
acknowledge number는 역방향의 sequence number로 보시면 되구요.
www.gilgil.net
댓글 달기