일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Spring MVC
- stack overflow
- 운영체제
- Spring Framework
- Pwnable.kr
- OS
- 정보보안기사 실기
- Payload
- 정보보안기사
- Spring
- Buffer Overflow
- Operating System
- pwnable
- webhacking
- LOB
- hacking
- webhacking.kr
- 해킹
- 웹해킹
- SQL
- 워게임
- system hacking
- Lord of BOF
- wargame
- System
- 네트워크
- Shell code
- BOF
- 정보처리기사 실기
- PWN
- Today
- Total
DongDD's IT
Internet Protocol Version4(IPv4) - IP Datagram, Header, Fragmentation, IP Option 본문
Internet Protocol Version4(IPv4) - IP Datagram, Header, Fragmentation, IP Option
DongDD 2017. 9. 3. 14:47Internet Protocol Version4(IPv4)
IP Protocol
IP : Netwrok Layer에 존재하는 프로토콜
현재 많이 쓰이는 TCP/IP에 사용되는 프로토콜
IP Header
IP Header는 기본적으로 20bytes를 사용하고 Option을 추가하면 최대 60bytes까지 사용된다.
1) VER : IP프로토콜의 version을 나타냄. (IPv4, IPv6)
2) HLEN : header길이를 나타내 Option이 사용된 여부를 알 수 있다. TCP와 마찬가지로 4로 나눈 값을 넣음
3) Service type : service type을 나타내는데 거의 쓰이지 않음
4) Total length : Header+Data 길이를 나타냄. padding 사용 정도를 알 수 있음
5) Identification : Fragmentation에서 동일한 패킷이 분할된 것인지 알기 위해 사용
6) Flags : 여러가지 상태를 조절할 수 있음
7) Fragmentation offset : Fragmentation시 offset을 통하여 순서를 알 수 있음
8) Time to live(TTL) : Routing이 잘못될 경우 loop가 생길 수 있는 데 이 루프를 빠져나올 수 있게 해줌
최대 hop수를 적고 router가 받을 때마다 1씩 감소시키고 0이 될 경우 버림
9) Protocol : 어떤 protocol type인지 나타냄(Multiplexing)
10) Header checksum : TCP와 달리 Header만 checksum하여 header에 에러가 있는 지 알아냄
11) Source IP Address, Destination IP Address : source와 destination의 IP주소를 넣어줌
12) Option 및 Padding
Protocol type : 상위 Layer로 보내줄 때 demultiplexing 하기위해 사용
Flags
- 1bit는 사용하지 않고 나머지 2bit는 D,M으로 나타냄
- D bit
1) 1 - MTU를 초과하더라도 분할을 못하게 함
- M bit
1) 1 - 뒤에 packet이 더 있음을 나타냄
2) 2 - packet의 끝을 나타냄
Fragmentation
- 네트워크로 전송할 때 통과할 수 있는 data량이 다르기 때문에 분할을 해주어야 함.
- MTU(Maximum Transfer Unit) : 네트워크를 통과할 수 있는 Maximum 값
1) Header+Data <= MTU : 분할안해도 됨
2) Header+Data > MTU : 분할해서 전송
- Framentation option은 13bit이기 때문에 실제 offset을 8로 나눈 값을 넣어줌
위와 같이 offest을 8로 나눈 값을 fragmentation offset필드에 넣어줌
ex) MTU가 1420인 경우, Header가 20bytes라고 가정
4000bytes의 data를 분할해야 함
1400+20, 1400+20, 1200+20으로 분할할 수 있음
첫 번째 분할된 fragment는 끝이 아니므로 Mbit가 1이고 offset은 0을 나타냄
두 번째 분할된 fragment도 끝이 아니므로 Mbit가 1이고 1400/8을 하여 offset:175
세 번째 분할된 fragment는 끝이므로 Mbit가 0이고 2800/8을 하여 offset:350
Option
- 여러가지 Option을 사용할 수 있음
- Type은 8bit로 이루어져 있음
- 1bit : fragment시 option copy 여부(0 : 첫 번째 fragmentation에만 복사, 1 : 모든 fragmentation에 복사)
- 2bit : 00 - 네트워크 제어 옵션, 10 : 디버깅 용
- 5bit : Option의 Type을 나타냄
- Option은 크게 single-byte와 multiple-byte로 나눠짐
1. Single byte
1) No operation
- 아무 동작도 하지 않고 단순히 Padding 용
2) End-of-option
- Option의 끝을 나타냄
2. Multiple-byte
1) Record-route option (Type 7)
- 지나온 Router의 주소를 넣어줌(나가는 쪽 Network Router 주소)
- Router를 지날때마다 지나온 router의 IP주소를 기록함
- 4-8-12-16(Pointer) : IP주소를 기록할 위치를 나타냄
2) Strict-source-route option
- 거쳐서 가야할 router의 IP 주소를 적어 놓음
-> 해당 순서대로 갈 수 없게 되면 이 packet을 버림
-> 보통 관리 목적으로 해당 경로를 확인하기 위해 사용
- 처음 destination은 나가는 쪽 router의 IP주소로 되어있음
- Option에는 거쳐가야 할 router의 들어가는 쪽 주소가 적혀 있음
- 해당 Destination에 도착할 때마다 Pointer에 있는 주소와 Destination 주소를 바꿈
- 해당 경로로 끝까지 도달할 수 없을 경우 패킷을 버림
3) Loose-source-route option
- Strict-source-route option과 비슷하게 가야할 주소를 적어 놓음
- 대신 좀더 flexibility가 있음. 다른 곳을 거쳐도 상관 없고 적혀 있는 주소에 들르기만 하면 됨
4) Time-stamp option
- flag를 이용하여 3가지 상태를 사용할 수 있음
-> 0 : router를 거칠 때의 시간을 기록함
-> 1 : router를 거칠 때 router의 주소와 시간을 기록함
-> 2 : 미리 주소를 명시해놓고 해당 주소를 가진 router를 지날 때의 시간을 기록함