반응형
Raw Socket, 날소켓
Network Layers/Protocol Stack
Raw Socket
-
기존의 소켓 프로그래밍 방식
- Application layer에서 프로그래밍
- 사용할 transport layer protocol을 TCP, UDP 중 선택
-
TCP/UDP이외의 transport protocol의 사용 또는 수현하는 방법은?
- raw socket 을 이용
-
Raw Socket의 기능
- Transport 또는 IP(Internet) layer 에서의 프로그래밍 허용
- ICMP, IGMP 패킷 송수신
- 커널이 처리하지 않는 프로토콜 번호를 갖는 IP datagram의 송수신
- IP header의 사용자 직접 작성 허용
IP Header
Raw Socket의 생성
- sockfd = socket(AF_INET, SOCK_RAW, protocol);
- //IP header의 직접 작성
setsockopt(sockfd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));
Raw Socket으로 수신 가능한 패킷
- UDP, TCP 패킷은 raw socket으로 수신 불가
- 대부분의 ICMP 패킷 수신 가능
- 모든 IGMP 패킷의 수신 가능
- 커널이 처리하지 않는 프로토콜 번호를 가진 IP datagram은 모두 수신 가능
Raw Socket으로 수신 가능한 패킷
-
다음 조건들에 해당할 때 수신된 패킷이 특정 raw socket으로 전달됨
- raw socket이 생성되었을 때 0이 아닌 프로토콜번호가 주어졌으면 수신된 패킷의 프로토콜 필드는 이 값과 일치해야 함
- bind함수에 의해 raw socket이 특정 IP 주소와 연계되었을 경우 수신된 패킷의 목적지 IP주소는 이 주소와 일치해야 함
- 외부 IP주소가 connect 함수에 의해 raw socket과 연계되었을 경우 수신된 데이타그램의 출발지IP주소는 이 연결된 주소와 일치해야 함
Raw Socket의 전송
- sendto 또는 sendmsg의 호출, 호출 시 목적지 IP주소를 지정
- IP_HDRINCL option이 설정되어 있지 않으면 커널이 IP헤더를 자동으로 생성
- IP_HDRINCL option이 설정되어 있으면 사용자가 IP헤더를 포함한 패킷을 작성
- 커널은 output interface MTU를 초과하는 패킷들을 작은 조각으로 만듦
ping 프로그램
- ICMP Echo-request/reply message를 이용 특정 컴퓨터와의 연결 여부 확인
- ICMP message의 전송과 수신을 위하여 raw socket 사용
General format of ICMP messages
반응형
'Network' 카테고리의 다른 글
Dijkstra 알고리즘 (다익스트라, 딕스트라 알고리즘) (0) | 2009.08.01 |
---|---|
IMS - IP Multimedia Subsystem (0) | 2009.05.20 |
TCP-IP 강좌 (1) | 2008.12.27 |
IP 주소와 MAC 주소 둘 다 사용하는 이유 (0) | 2008.12.25 |
네트워크 소켓 프로그래밍 FAQ (0) | 2008.08.22 |