- 네트워크 상에서 데이터를 교환하기 위한 프로토콜
- 데이터가 정확하게 전달될 것을 보장하지 않음
- 중복된 패킷을 전달하거나 패킷의 순서를 잘못 전달할 가능성도 있음
- 악의적으로 이용되면 Dos공격이 됨
- 데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜인 TCP에서 보장
- 20바이트 + 옵션이 붙을때마다 +4바이트 해서 총 60바이트 까지 가능
- 빨간색 두줄은 출발지 IP주소와 목적지 IP주소
- 버전은 무조건 4만 온다고 생각해라 버전6은 아예 구조가 다름
- IP Header Length는 20이 와야하는데
- 이진수 4개로 표현할수있는 최대숫자는 1111 --> 15라서 못쓴다.
- 나누기 4를 해서 IP Header Length를 써준다
- 20은 나누기 4를한 값 5를 이진수로 바꾸면 1010
- TOS는 옛날 개발할때 쓰던것, 지금은 사용X, 00으로 비워둠
- Total Length는 헤더의 길이가 아니라, 페이로드까지 합쳐진 길이
- 상위계층부터 인캡슐레이션되어 내려온 데이터의 길이 전부 합침
- Identification + IP Flags + Fragment Offset은 세트라고 생각
- 데이터가 큰것을 보낼때 최대전송단위가 있기 때문에 잘게 쪼개서 보내는데,
- 그 때 필요한 값들임
🌿 Identification
- 원래 하나의 데이터를 쪼개서 보내면, 받는입장에서는 다시 원래 데이터로 합쳐야 하는데, 하나였던걸 알아보기 위해 표시하는 것
🌿 IP Flags
- 3비트, 첫번째꺼는 안씀
- 두번째꺼는 패킷을 보내는사람이 데이터를 안쪼갠다고 명시하는 것
ex) 최대전송단위가 100메가인데 7개로 쪼개지 않고 700메가를 통으로 보낸다고 지정하는 것, 그렇게 지정하면 전송이 안됨, 그래서 거의 안씀- 세번째꺼는 뒤에 데이터가 더 온다고 알려주는 것 (쪼개서 보내면1, 안쪼개면0 )
🌿 Fragement Offset
- 데이터가 순서대로 오지는 않기 때문에 꼬일수 있다
- 순서를 알아볼수 있게 해주는 것
** 참고: offset : 어느기준으로부터 얼만큼 떨어져있다- 1번데이터는 시작점부터 0만큼 떨어져있다. 그래서 0으로 세팅 됨
- 2번데이터는 시작점으로부터 1번데이터 크기만큼 떨어져있다.
- 3번데이터는 1+2번데이터 크기만큼 떨어져있다.
- 4번데이터는 1+2+3번데이터 크기만큼 떨여저있다.
- 5번데이터는 1+2+3+4번데이터 크기만큼 떨어져있다.
- TTL은 시간설정? 횟수설정?
- 장비 라우터등을 하나 지날때마다 1이 줄어듬
- Protocol은 상위프로토콜을 알려주는 것
- IP프로토콜 입장에서 상위프로토콜을 올수잇는것은 ICMP, TCP, UDP
- ICMP ( 3계층 ) --> 01로 세팅
- TCP (4계층 )--> 06으로 세팅
- UDP (4계층 )--> 17로 세팅
- Header Checksum은 이 헤더가 오류가 있는지 없는지 확인하는 값
- 헤더에 있는 여러가지 필드를 가지고 값을 계산하여 보내면
- 받은쪽에서 세팅된 값들을 계산해보고 Header Checksum의 값과 비교