IPv4 프로토콜
IPv4가 하는일
- 네트워크 상에서 데이터를 교환하기 위한 프로토콜
- 데이터가 정확하게 전달될 것을 보장하지 않는다. (데이터가 깨지거나 누락 될 수 있다.)
- 중복된 패킷을 전달하거나 패킷의 순서를 잘못 전달할 가능성도 있다. (악의적으로 이용되면 DoS공격이 됨)
- 데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜은 4계층에서 한다.
IPv4 프로토콜의 구조

- Version : IP 헤더의 버전을 나타내며 4가 온다. 6이오는 경우는 없다. (구조자체가 다르다)
- IHL : ip헤더의 길이. 4비트로 표현된다. ip헤더의 길이를 4로 나눈 값을 쓴다. 최소값은 5이고, 최대값은 15이다.
- Type of Service : 이 패킷의 우선순위를 나타내는 값이다. 이 값에 따라 패킷이 먼저 전송되거나 나중에 전송된다. 하지만 지금은 쓰이지 않는다. 0으로 비워둔다
- Total Length : Payload(데이터)까지 합쳐진 길이. 상위계층에서부터 캡슐화된 내려온 데이터와 합친 전체의 길이.
- idetification : 단편화/재조합 관련필드
- IP 데이터그램을 여러 조각으로 분할하는 것을 단편화, 단편화 한것을 재조합이라한다.
- 단편화 전 원본 IP데이터 그램을 식별하기 위한 ID값이다.
- IP Flags : 단편화/재조합 관련필드
- 3bit으로이루어져 잇다.
- 첫번째 'x'는 사용하지 않는다.
- 두번째 Dont fragmentation. 단편화하지않고 데이터를 전송하곘다는 의미이다. 하지만 최대 단위보다 크면 전송되지 않기에 쓰지 않는다.
- 세번째 More fragmentation. 패킷을 쪼개서 보낼때 뒤에 패킷이 더 있다고 알려주는것. 단편화가 되어 단편이 남아 있으면 1로 명시된다. 없다면 0.
- Fragment Offset : 단편화/재조합 관련필드.
- 13bit로 이루어져있다.
- 단편화 된 데이터들이 순서대로 오지 않기 때문에 현재 단편들의 상대위치(Offset)를 저장한 필드이다.
Offset이라는 단어는 IT에선 '어느기준으로부터 얼마만큼 떨어져있다.'라는 뜻이다.
- Time To Live(TTL) : 패킷이 존재할 시간을 지정한다.
- 오류가 나서 특정 네트워크 대역에서 영원히 머물게되는 것을 방지한다.
- 라우터/L3 스위치를 통과할때마다 1씩 줄어든다. 0이 되면 폐기된다.
- protocol : 상위 타입이 뭔지 알려준다.
- icmp (1), tcp (6), udp (17) 가 대표적이다.
- Header Checksum : 헤더가 오류가 있는지 없는지 확인하는 값.
- Source IP Address : 출발지 IP주소. (4byte)
- Destination IP Address : 목적지 IP주소. (4byte)
- Ip Option
- 옵션은 붙을수도 있고 안 붙을 수도있다. 옵션이 붙으면 하나당 4바이트씩 붙는다.
- 최대 10개 옵션이 붙을 수 있다.
실질적으로 5줄 20byte라고 생각하면된다.
ICMP
ICMP가 하는일
ICMP(Internet Control MEssage Protocol, 인터넷 제어메시지 프로토콜)
- 네트워크 장치에서 네트워크 통신 문제를 진단하는 데 사용하는 네트워크 계층 프로토콜
- 네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메시지를 전송받는데 주로 쓰인다.
- 프로토콜의 구조의 Type과 Code를 통해 오류 메시지를 전송받는다.
예를 들어 메시지가 너무 길거나 데이터 패킷이 순서에 맞지 않게 도착하여 수신자가 메시지를 조합하지 못할 수 있습니다. 이러한 경우 수신자는 ICMP를 사용하여 발신자에게 오류 메시지를 알리고 메시지 재전송을 요청합니다.
https://aws.amazon.com/ko/what-is/icmp/
ICMP 프로토콜의 구조
특정 대상과 내가 통신이 잘되는지 확인한다.

- Type : ICMP 의 메세지를 구별할 수 있는 값. 대분류라고 볼 수있다.
- Echo Reply(0) : 응답.
- Echo(8) : 요청
- Destination Unreachable (3) : 대상에 연결할 수 없음. 코드는 수신기 디바이스가 네트워크에 존재하지 않음을 나타냄
- Time Exceded (11) : 대상에 도달했지만 응답을 못받는 경우. 대상에게 문제가 있다.(예. 상대방이 방화벽을 켰을 떄)
- Redirect(5) : 코드는 대상에 연결하기 위한 더 나은 경로를 나타내는 메시지를 다른 라우터로 보냅니다. 원격지에 있는 상대방의 라우팅 테이블을 수정할 때 쓰인다. 상대방의 라우팅 테이블을 수정할 수있기 때문에 보안상 중요하다.

- Code : 메세지 내용에 대한 추가 정보 (즉, ICMP TYPE에 대한 상세 정보)
- Cehcksum : ICMP의 값이 변조 여부를 확인
Wireshark로 실습

cmd명령어로 ping 8.8.8.8 (구글 dns) 동작한 뒤 Wireshark로 확인해보았다.

- version : 역시나 4가 나온다.
- Header Length : 20byte지만 4로 나눈값인 5가 입력됐다.
- Type Of Service : 여기서는 Differentited Services Field로 쓰여있지만 역시 사용하지 않는다.
- IP Flags : 첫번째 bit 사용하지 않는다. 두번째 Dont fragment도 사용하지 않는다. 세번째 More fragment. 0으로 되어있다. 단편이 없음을 알 수 있다.
- Time to Live : 존재 시간이 128인 것을 알 수 있다. (128은 윈도우, 64는 리눅스이다.)
- Protocol : ICMP이므로 1

- Type : 요청을 했으므로 8이 왔다.
- 나머지 뒤의 a~i까지는 쓸데 없는 값이 붙어서 온다.
참고
https://ddarahakit.tistory.com/20
https://luckyking.tistory.com/entry/IPIPv4-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C%EC%9D%98-%EA%B5%AC%EC%A1%B0-%EC%9D%B4%ED%95%B4