UDP 통신 계층별 분석에 대해서 정리한다.
※ UDP
- 네트워크상에서 어떠한 일이 일어나는지?
- 눈에 보이지 않는 것들
4 -> 3 -> 2 -> 1: 확인(분석)
1 -> 2 -> 패킷 직접 제작(프로토콜)
* 스니핑(sniffing)
- 다른 사람의 패킷을 가로채는 기법
- 덤프 : 저장한다는 개념
메모리 덤프
* 로우 소켓 프로그래밍: 스니퍼(덤프) 프로그램
- 무엇을 덤프 할 것인가?
- NIC 장치로 들어오거나 나가는 것들(패킷)
! 패킷이 항상 두개가 아닐 수 있다
! 네트워크는 항상 실행을 보장할 수 없다
* 네트워크 엔지니어: 장비(라우터, 스위치, ... )
- 실력: 트러블 슈팅, 네트워크 설계, ...
- 실무 경험을 중시
udp server
data: b"\x00PV;%\xf8\x00\x05f#0\x19\x08\x00E\x00\x00!\x00\x00@\x00?\x11\xb7\xa9\xc0\xa8\x00\xba\xc0\xa8\x02\x18\x81\x07'\x10\x00\r\x8f\xc7hello\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
UDP 헤더: \x81\x07'\x10\x00\r\x8f\xc7 -> 0x8107(src port), 0x2710(dst port), 0x000D(세그먼트 크기), 0x8fc7(체크섬)
data: b"\x00\x05f#0\x19\x00PV;%\xf8\x08\x00E\x00\x00!\x00\x00@\x00@\x11\xb6\xa9\xc0\xa8\x02\x18\xc0\xa8\x00\xba'\x10\x81\x07\x00\r\x8f\xc7hello"
UDP 헤더: '\x10\x81\x07\x00\r\x8f\xc7 -> 0x2710(src port), 0x8107(dst port), 0x0027(세그먼트 크기), 0x8fc7(체크섬)
udp client
data: b"\x00\x05f#0\x19\x00PV;%\xf8\x08\x00E\x00\x00!\x00\x00@\x00@\x11\xb6\xa9\xc0\xa8\x02\x18\xc0\xa8\x00\xba'\x10\x81\x07\x00\r\x8f\xc7hello"
data: b"\x00PV;%\xf8\x00\x05f#0\x19\x08\x00E\x00\x00!\x00\x00@\x00?\x11\xb7\xa9\xc0\xa8\x00\xba\xc0\xa8\x02\x18\x81\x07'\x10\x00\r\x8f\xc7hello\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
- 헤더: 보내려는 데이터에 대한 정보를 표현
- 프로토콜 헤더: 계층별 정보를 표현
< 4계층 >
- 데이터의 전송을 담당
- 어떠한 통신 방식을 사용
- 누구에게 전달되야 되는지, 누구로부터 전송이 되었는지, ...
- 프로토콜
- UDP, TCP
- 주소체계: 포트(port) -> 서비스에 대한 식별
- PDU( Protocol Data Unit ): segment
* UDP( User DataGram Protocol )
- 신뢰할 수 없는 서비스(인증이 어려움)
- 빠른 통신이 가능(복잡하지 않다)
- 소규모 통신에 적합한 방식
* UDP 헤더: UDP로 데이터를 송/수신 하기위한 정보 ( 4개의 필드를 가지고 있다 )
- 8바이트의 고정 크기
1). 출발지의 포트번호: 2바이트
2). 도착지의 포트번호: 2바이트
3). UDP 세그먼트의 크기( 헤더를 포함한 데이터 전체의 크기 ): 2바이트
4). 체크섬: 2바이트
- 에러 체크 기능
- 모든 경우를 전부 체크할 수 없다, 대신에 매우 간편하다
- CRC, 패리티 부호, ...이 체크섬을 보완 할 수 있는 기능
포트번호 -> 서비스 -> 송/수신 되는 데이터가 어떤 서비스의 데이터다
예). 택배
물건(데이터) -> 포장(패키징) -> 송신자(포트), 수신자(포트)(위치, 정보, ... )
-> 택배아저씨(라우터, 스위치, 장비, ...) -> 도착지 -> 포장해체(언패키징) -> 물건(데이터)
< 3계층 >
- 전송 경로를 담당
- 목적지까지의 경로를 선정(라우터)
- PDU: Packet
- 주소체계: IPv4, IPv6
- IP, 라우팅 프로토콜(RIP, OSPF, ... ), IPSEC
IP 주소(IPv4)
- 4자리 숫자를 "."으로 구분해서 표현
- 네트워크상에서 호스트를 구별하는 주소 체계
- 1자리에 올 수 있는 숫자는 0 ~ 255까지 최대 256개를 표현
- 호스트의 최대 갯수는 256^4 = 대략 42억개 정도...
- 각 호스트마다 숫자가 정해지는데 아무렇게나 정하진 않았다 ( 어떠한 체계를 가지고 있다 )
- 그래야 관리가 쉽다
- IANA 관리 기구
- 숫자만을 이용해서 체계를 구성
- 4개의 숫자만을 사용해서 네트워크와 호스트를 구별
IP Class
사용할 수 없는 번호: 0.0.0.0 <- 대표 IP
255.255.255.255 <- Broadcasting IP
* 통신방식
1. 유니 캐스트(1:1)
2. 브로드 캐스트(1:n)
- 방송 시스템
3. 멀티 캐스트(1:n)
- 정해진 범위 내에서만 통신
- 일반 Class
A Class
- 첫번째 1자리의 숫자를 네트워크의 아이디로 사용
- 나머지 3개의 숫자를 호스트의 번호를 표현
- 네트워크 갯수: 254개
- 숫자를 전부 2진수로 변환했을 때 공통 비트가 0인 비트
- 0000 0000 ~ 0111 1111: 0 ~ 127, 1 ~ 126번이 실제 사용 가능한 범위
* 127: 내부 ip로 정해진 ip( localhost: 127.0.0.1 )
- 범위 : 1.0.0.0 ~ 126.255.255.255
ex). 1번 네트워크
1.0.0.0 ~ 1.255.255.255
* 호스트의 주소로 사용할 수 없는 번호: 0, 255
1.0.0.0: 1번 네트워크의 대표 IP
1.255.255.255: 1번 네트워크의 브로드캐스트 주소
- 사설ip: 10번
- 서브넷팅: 네트워크를 여러개의 더 작은 네트워크로 분할하는 작업
- 서브넷 마스크
B Class: 앞의 2자리 숫자를 네트워크 아이디로 사용
- 공통비트: 10, 10000000.000000000 ~ 10111111.11111111, 128.0 ~ 191.255
- 서브넷 마스크: 255.255.0.0
- 사설아이피: 172.16.0.0
ex). 130.15.0.0
- 130.15.0.0 ~ 13.15.255.255, 130.15.0.1 ~ 130.15.255.254(사용 가능한 IP)
C Class: 앞의 3자리 숫자를 네트워크 아이디로 사용
- 공통비트: 110, 11000000.00000000.00000000 ~ 11011111.11111111.11111111
-> 192.0.0 ~ 223.255.255.255
- 서브넷 마스크: 255.255.255.0
- 사설 아이피: 192.168.0.0
------------------------------
특수 Class
D Class: 멀티캐스트 용도로 예약
- 사용할 수 없다.(장비나 인터페이스에 설정할 수 없다)
- 서브넷이 없다.
- 공통비트: 1110, 11100000.0.0.0 ~ 11101111.255.255.255
-> 224.0.0.0 ~ 239.255.255.255
E Class: 그냥 사용할 수 없다.
- 사용할 수 없다.
- 공통비트: 1111, 11110000.0.0.0 ~ 11111111.255.255.255
-> 240.0.0.0 ~ 255.255.255.255
공인 IP( public ip ): IANA기관에서 관리, 중복될 수 없다.
- 공인망 -> 인터넷
- 중복될 수 없기 때문에 사용하다보니 ip 고갈 문제가 발생
사설 IP( private ip )
- 사설망 -> 인터넷(공인망)과 분리된 망
- 우리 학원 또한 사설 네트워크 구성되어 있다.
- NAT( Network Address Translation ): 라우터의 기능
예). 집 주소
- 집 주소마다 번호가 부여된다.
- 서울시청을 기준으로 1부터 시작해서 1씩 증가하면서 번호를 부여
- 땅끝마을까지 다 붙였더니 1000001번지에서 끝났다.
- 그런데 집이 새로 지어졌다. 1000001번지가 되었다.
- 349493번지는 어디에 있을까?
* IP ( Internet Protocol )
ip 헤더(20Byte): 라우터, ... ( 10개의 필드를 가지고 있다 )
IP헤더: E\x00\x00!\x00\x00@\x00?\x11\xb7\xa9\xc0\xa8\x00\xba\xc0\xa8\x02\x18
IP헤더: E\x00\x00!\x00\x00@\x00@\x11\xb6\xa9\xc0\xa8\x02\x18\xc0\xa8\x00\xba
1). version & header length: 1byte
-> 0x45 -> 0100 0101
----- -----
ver len
-> 실제 길이를 가져오려면 왼쪽으로 2칸 쉬프트 0101 -> 1010 -> 10100 -> 20byte
* 헤더의 길이를 가지고 있다는 건 가변적임을 뜻 -> 사실은 고정
2). service field: 1byte
- 지금은 사용하지 않는다.
- IPv6에서는 디테일하게 추가 됨
3). ip 패킷의 전체 크기(total legnth): 2byte
- \x00! -> 0x21 -> 33byte
- 패킷 전체의 크기와 ip 패킷 전체의 크기는 다르다.
- ip 패킷 전체 크기는 ip헤더 + udp 헤더 + 데이터
4). identification: 2byte
5). flag & fragment offset: 2byte
- \x00\x00@\x00 -> ip Fragmentation
6). TTL( Time To Live ): 최대 홉의 갯수 : 1byte
- unix: 254
- linux: 64
- windows: 128
? -> 63( 라우터 한개를 거쳐왔다는 의미, Looping을 방지하기 위해 라우터를 지날때마다 1씩 감소 )
7). 프로토콜 타입: 1byte
- ip 패킷이 전달하는 프로토콜의 타입
- tcp(6), udp(17/0x11), icmp(1), ...
( 구글: ip protocol type 검색후 wiki에서 참고 가능 )
8). 체크섬: 2byte
9). 출발지 아이피: 4byte
10). 도착지 아이피: 4byte
< 2계층 >
- 주소체계: MAC(Media Access Control) address, H/W address
- 16진수 6자리로 표현 ( 앞 3자리: 제조사(벤더), 뒤 3자리: 제조사별 주소 )
- 프로토콜: 터널링(PPTP, L2TP, ...), ARP
- PDU: Frame
- 이더넷 헤더 : 14바이트 고정 크기
이더넷 헤더: \x00PV;%\xf8 \x00\x05f#0\x19 \x08\x00
-> 도착지 MAC address: 0x00:0x50:0x56:0x3B:0x25:0xf8
-> 출발지 MAC address: 0x00:0x05:0x66:0x23:0x30:0x19
-> 이더넷 타입: 0x0800
이더넷 헤더: \x00\x05f#0\x19 \x00PV;%\xf8 \x08\x00
1). 도착지 MAC address: 6byte
2). 출발지 MAC address: 6byte
3). 이더넷 타입: 2byte
( 3계층 프로토콜 타입과 비슷, 구글: ethernet type 검색후 wiki에서 참고 가능)
* IPv4: 0x0800, ARP: 0x0806, IPv6: 0x86DD
< 1계층 >
- 모든 물리적인 내용
'프로그래밍 > NETWORK HACKING' 카테고리의 다른 글
[네트워크 보안] 파이썬3 클래스로 각 프로토콜 헤더를 정의( packet.py, eth.py, ip.py, sniffer.py ) (0) | 2017.06.20 |
---|---|
[네트워크 보안] 파이썬3 struct 모듈을 이용한 패킷 분석 (0) | 2017.06.17 |
[네트워크 보안] 파이썬 TCP 소켓 / TCP 에코 서버 & 클라이언트 (0) | 2017.06.15 |
[네트워크 보안] 파이썬 소켓 통신(UDP) / UDP 에코서버 실습 (0) | 2017.06.13 |
[네트워크 보안] OSI 7계층 / 파이썬 소켓 프로그래밍 / MAC 주소 변경 방법 (2) | 2017.06.12 |
댓글