게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
[Linux C Programming] RAW SOCKET에 대하여..
게시물ID : programmer_19621짧은주소 복사하기
작성자 : 진마유피
추천 : 0
조회수 : 1119회
댓글수 : 10개
등록시간 : 2017/01/19 21:54:03
옵션
  • 본인삭제금지

안녕하세요!!

오유 눈팅족 이지만.. 정말로 궁금한게 있어 질문 올립니다. ㅠ

쓰다보니 꽤 장문이 되었지만, C언어에 관심이 있으신 분, 혹은 unix socket을 잘 아시는 분들께 부탁 드립니다..


주제는, 제목과 같이 리눅스 환경에서 raw socket 사용 시 타 프로세스에 미치는 영향 입니다.

일단 수신되는 TCP패킷을 스니핑 하고자 아래 코드를 사용합니다. (중요하지 않은 부분은 생략..)


sock = socket(PF_INET, SOCK_RAW, IPPROTO_TCP)

while(1)

{

       recvfrom(sock, rxPacket, rxPacketSize, 0x0, (struct sockaddr *)&sockAddrR, &sockAddrLength)

       ....수신된 rxPacket 처리

}


위와 같이 수신되는 모든 tcp 패킷을 스니핑 하는데요,

recvfrom 함수가 패킷을 가져오는 로직에 대해 구글링을 열심히 해 보았지만 영알못이라... OTL

궁금한 부분을 아래와 같이 네 가지로 정리해 봤습니다.


[여러 프로세스가 떠 있고, 타 서버와 굉장히 많은 패킷들을 주고받는 서버환경이라 가정(disk io는 낮습니다)]


1. 스니핑 프로세스가 recvfrom 패킷 수신 후 아무것도 하지 않아도, raw 소켓을 listening 하는것 만으로 다른 프로세스들에 영향이 있을까요?

 ---> 영향이 없을것 같긴 한데..심지어 ping 프로그램도 raw 소켓을 listening 하고 있더라구요..

 ---> 그래도 커널단에서 원래의 LISTENING 프로세스에 더해 스니핑 프로세스에게 패킷을 전달하기 위해 복사할 것 같은데..

 ---> 그 과정에서 원래의 프로세스에 전달되는 속도가 지연될지 궁금합니다.


2. 평소 CPU 점유율이 50% 정도이고, 위의 스니핑 데몬을 실행시켰더니 점유율이 70%가 되었다면, 기존의 프로세스들의 통신 속도가 다운될까요?

  ---> 아니면 어차피 패킷복사의 영향은 크게 없고, cpu 점유율도 100%가 아니니 영향이 거의 없을까요?


3. 패킷 스니핑 후 처리하는 로직이 복잡하여 CPU에 부하가 걸린다면, 원래의 LISTENING 프로세스에 전달되는 패킷이 DROP될 가능성이 있을까요?

 ---> 이부분도 아닐 것 같긴 한데요..부하가 걸린다면, 스니핑 프로세스에서 모든 패킷을 다 보지 못하고 지나쳐버릴 것 같습니다.

 ---> 기존 프로세스는 흐름 제어를 하고 있을테니..


4. 마지막으로.. 이전에는 libpcap 라이브러리를 썼었는데요, libpcap 라이브러리도 내부 소스는 recvfrom 시스템콜을 사용하는지 궁금합니다.

 ---> "tcpdump tcp port 80" 명령어도 내부적으로는 recvfrom 으로 패킷 받은 뒤 헤더 까서 80번 포트인지 확인하는 방식이라면,

 ---> 궂이 libpcap 안써도 될 것 같아서요.. 간단한 로직이라면 오히려 직접 recvfrom 으로 코딩하는게 빠를 수 있을까요?



질문 글을 작성하다 보니까 궁금한게 좀 더 정리가 되는 것 같습니다.

의견 부탁 드립니다!



출처
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호