sequence 값 초기화 (by raw socket)
글쓴이: macros / 작성시간: 금, 2008/01/25 - 3:52오후
raw 소켙으로 tcp 패킷을 만드는데
send_tcp.tcp.seq = htonl(1111); send_tcp.tcp.ack_seq = htonl(0);
와 같이 sequence 를 초기화 시켰습니다.
헌데 이더리얼에서 확인하면 저 값이 적용되지 않고 항상 0으로 나옵니다.
웹을 뒤져보니 이전 패킷의 실제 sequence 를 이용하라고 하는데,
정확히 무슨말인지 모르겠습니다.
설령 이용하지 않고 곧 바로 초기화 할수 있는 방법은 없습니까?
Forums:
초기화하고자 하시는
초기화하고자 하시는 이유를 먼저 알아야 할 것 같습니다.
일반적으로 초기화할 수 있는 방법은 없습니다.
물론 아무 값이나 넣는 방법이야 있지만, 애써 보내봤자 상대편 tcp/ip스택 단에서 버려질테니까요.
(이전 seq no보다 약간 큰 값이면 버퍼에 저장해 둘테고, 엄한 값이면 바로 버리겠지요.)
특정 data(http) 를
특정 data(http) 를 전송하고 fin 을 보내면 받는쪽에서 응답이 없습니다.
강제로 http 를 끊으면 약 30분 후에 게시판에 정상적으로 올라가긴 하는데,
해서 이쪽에서 data 전송을 완료한 후에 강제로 rst 를 날려 끊어보려고 합니다.
그럴려면 일단 시퀀스 번호를 맞추어서 rst 를 날려야하는데,
data 전송 후 한참을 block 되어 있으므로, 시퀀스번호를 보고
직접 입력하여 테스트 할까 합니다.
(언제 데이터가 끝나는 확실치 않으므로, 이 부분을 자동으로 하기가 쉽지 않더군요)
더 나은 방법이 있을까요?
FIN에 응답이 없는
FIN에 응답이 없는 경우는 저도 잘 모르겠네요.
굳이 몇글자 주제넘게 적어보자면,
1. RST패킷을 직접 만들어서 보내는 방법보다는 socket의 옵션으로 SO_LINGER를 줘서 close할 때 FIN대신 RST가 날아가게 한번 해보심이.
2. 일반론이지만, 이런식으로 빙 돌아가는 방법보다는 정상적인 실행 경로가 잘 동작하도록 연구해보시는게 단기적으로나 장기적으로나 편하실 듯 합니다.
댓글 달기