10.Raw Socket
2008/04/29 23:05 in 컴퓨터/프로그래밍

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
이 글은 스프링노트에서 작성되었습니다.
'컴퓨터 > 프로그래밍' 카테고리의 다른 글
| MVC Pattern (1) | 2008/07/21 |
|---|---|
| 내가 보아야 할 Ruby 관련 책들 (2) | 2008/05/14 |
| Ruby를 맛봅시다. (2) | 2008/04/30 |
| 10.Raw Socket (0) | 2008/04/29 |
이올린에 북마크하기
현재, 홍익대학교 컴퓨터공학과에 재학중인 대학생입니다. 초등학교 3학년때 역삼동 아부지 회사에서 접해보았던 Netscape Browser를 보고 인터넷에 빠져들었습니다. Web에 대해 관심이 많으며 일본 애니메이션과 여러 음악을 좋아합니다. 지금은 Collaborative Computing 연구실에 적을 두고 대학원 진학할 예정입니다.
Prev
Rss Feed