raw socket으로 tcp 패킷을 단순히 보기만 하실 건가요?
아시겠지만 raw socket은 커널은 커널대로 패킷을 처리하고, 똑같은 패킷을 원하는 사용자 프로그램(raw socket을 연)에게 보내주는 것입니다.
하고자 하시는 일이 단순히 수신한 TCP 패킷을 보려는 것이라면 일이 간단합니다. TCP가 특별히 복잡한 포맷을 가진 것이 아니므로 정해진 규칙에 따라 패킷을 파싱하면 됩니다.
다만 TCP 스택을 유저레벨에서 처리하겠다고 하면 좀 복잡해 집니다. TCP의 경우 UDP등과는 달리 background job처럼 해야 할 일이 많습니다. 커널의 TCP 스택을 보시면 알겠지만 하나의 TCP connection을 열고, 유지하고, 닫기 위해 많은 정보들을 관리합니다.
그냥 패킷만 보실려구요?
raw socket으로 tcp 패킷을 단순히 보기만 하실 건가요?
아시겠지만 raw socket은 커널은 커널대로 패킷을 처리하고, 똑같은 패킷을 원하는 사용자 프로그램(raw socket을 연)에게 보내주는 것입니다.
하고자 하시는 일이 단순히 수신한 TCP 패킷을 보려는 것이라면 일이 간단합니다. TCP가 특별히 복잡한 포맷을 가진 것이 아니므로 정해진 규칙에 따라 패킷을 파싱하면 됩니다.
다만 TCP 스택을 유저레벨에서 처리하겠다고 하면 좀 복잡해 집니다. TCP의 경우 UDP등과는 달리 background job처럼 해야 할 일이 많습니다. 커널의 TCP 스택을 보시면 알겠지만 하나의 TCP connection을 열고, 유지하고, 닫기 위해 많은 정보들을 관리합니다.
어느 쪽 이신지?
Life with fun...
댓글 달기