IPv4 프로토콜
IPv4가 하는일
네트워크 상에서 데이터를 교환하기 위한 프로토콜
데이터가 정확하게 전달될 것을 보장하지 않는다.
중복된 패킷을 전달하거나 패킷의 순서를 잘못 전달할 가능성도 있다.
(악의적으로 이용되면 Dos공격이 됨)
데이터의 정확하고 순차적인 전달은 그보다 상위 프로토콜인 TCP에서 보장한다.
IPv4는 20바이트이고 IP Option이 붙을 때마다 4바이트씩 붙는다.
이론상 최대 10개의 옵션이 붙을수도있다.
Version : 버전을 쓰는것인데 여기는 무조건 16진수인 4가온다.
IPv6는 모양 자체가 다르기 때문에 6은 못온다.
IHL(Header Length) : 헤더의 길이는 최소 20바이트라 여기에는 나누기 4가 들어와서 16진수인 5가 들어온다.
Type of Service (TOS) : 개발했을 때 쓰이는것인데 지금은 쓰이지않기 때문에 16진수 0으로 비워둔다.
Total Length : 헤더의 길이가 아닌 페이로드까지 합쳐진 전체의 길이를 말한다.
Identification과 Flags와 Fragment Offset은 하나의 세트로 생각하면 된다 : 데이터를 크게 보낼 때 최대 전송 단위가 있기 때문에 잘게잘게 잘라서 보내는데 그 때 사용하는 값이다. 쪼개진 애들을 알아볼 수 있게 하는것이다.
Identification : 쪼개진 애들에게 ID를 부여해 다시 붙였을 때 알아보려고 하는것.
Flags : 3비트로 이루어져 있다. 첫번째것은 안쓰고 두번째것은 DF로 패킷을 보내는 사람이 데이터를 안쪼개서 보내겠다고 명시하는것이다. 그렇기 때문에 거의 안쓴다. 세번째인 MF만 쓴다고 생각하면 된다. 조각화가 되어있으면 최대 전송단위보다 큰 데이터를 보내면 MF가 2진수 1로 세팅이된다. 작은걸 보내게 된다면 0으로 세팅이된다.
Fragment Offset : 조각화로 이루어진 애들을 전송이 될때는 순서대로 가지만 받는 쪽에서는 순서가 꼬일 수 있기 때문에 그 순서를 알아볼 수 있게 Offset을 지정한다. 일반적으로 IT에서 Offset은 어느 기준으로부터 얼마만큼 떨어져 있다라는걸 뜻한다.
Time To Live(TTL) : 직역하자면 패킷이 살아있을 수 있는시간을 지정한다는 뜻.
만약 오류로 패킷이 잘못 보내게 된다면 네트워크 세상에서 계속 있게되고 그러면 장비끼리는 Dos공격이 될수도있기 때문에 그것을 방지하고자 장비 하나를 지나갈때마다 깎이는 숫자를 설정해놓은 것이다.
보통 윈도우가 128이고 리눅스가 64로 설정된다.
Protocol : 상위 프로토콜이 무엇인지 알려주는 부분이다. ICMP가 세팅되면 01, TCP가오면 06, UDP가 오면 10진수로 17이고 16진수로 바꿔서 11이다.
Geader Checksum : 헤더의 오류가 있는지 없는지 확인하는 값이다. IPv4에서만 것은 아니다.
ICMP 프로토콜
ICMP(Internet Control Message Protocol, 인터넷 제어 메시지 프로토콜)
네트워크 컴퓨터 위에서 돌아가는 운영체제에서 오류 메시지를 전송 받는데 주로 쓰인다.
프로토콜 구조의 Type과 cod를 통해 오류 메시지를 전송 받는다.
Type : 대분류이고 여기서 알아둬야할것은 0번 Echo Reply와 8번 Echo은 가장 기본적인것으로 8번이 요청 0번이 응답이다. 3번 Destination Unreachable과11번 Time Exceded는 무언가 잘못되었을 때이다 보통 3번은 목적지를찾을 수 없다라고 뜨고 가는경로가 문제가 있는것, 11번은 페이지가 완료 되었습니다라고 하는 상대방이 문제인것이다 이럴 때 대표적으론 방화벽이 켜져있다. 그리고 5번 Redirect는 보안상 알아둬야한다. 원격지에 있는 상대방의 라우팅 테이블을 ICMP가지고 수정할 때 쓰인다. 남의것을 수정할 수 있기때문에 보안상 중요한 것이다.
Code : 소분류 라고 알면 된다.
라우팅 테이블
3계층의 대표적인 역할이 최적의 경로를 찾아가는것인데 그 경로를 지도처럼 가지고 있는게 라우팅 테이블이다.
라우팅 테이블은 CMD에서 netstat -r을 보면 확인 가능하다.
A라는 컴퓨터가 다른 네트워크 대역에 있는 B랑 통신을 하려고 할 때 과정을 알아보자
우선 A의 라우팅 테이블을 확인한다. B에 네트워크 대역이 본인한테 있어야만 통신을 할수있다.
우선 A가 프로토콜을 작성한다. ICMP 요청을 한다.
IPv4프로토콜도 작성.
이더넷 프로토콜도 작성.
그리고 스위치에서 2계층까지만 확인하고 C에게 가야한다는걸 확인후 C에게 보내준다.
2계층을 확인하고 본인에게 온것을 확인후 3계층을 확인해보니 목적지 IP주소가 본인이 아니기 때문에 목적지 IP주소를 보고 본인의 라우팅 테이블을 확인한다.
그리고 본인이 이더넷 프로토콜을 다시 만든다. 까보고 포장을 다르게 하는데 목적지 MAC주소랑 출발지 MAC주소를 자기의 네트워크 옆에 있는 통신하는것으로 바꾸고 보낸다.
그리고 받은곳에서 3계층까지 까보고 목적지 MAC주소를 확인후 본인의 라우팅 테이블을 확인한다.
그리고 이더넷 프로토콜을 다시 작성하게 된다. 그리고 목적지인 옆으로 이동하게 된다.
옆에서도 받게되고 안쪽 네트워크대역으로 보내기위해 이더넷 프로토콜을 다시 짜게된다.
2계층 장비인 스위치를 걸쳐서 B컴퓨터가 받게된다.
받게된 B컴퓨터는 요청을 받았으니 응답으로 다시 왔던 과정으로 보내게 된다.
그렇게 A가 B랑 통신이 되었네 라고 알게된다.
우리가 CMD에서 ping을 치게된다면 이것이 4번 이루어진다.
*만약 이 사이사이에 MAC주소를 모른다면 전에 배웠던 ARP를 하고 보내는것이다.
IPv4의 조각화
조각화란?
큰 IP 패킷들이 적은 MTU(Maximum Transmission Unit)를 갖는 링크를 통하여 전송되려면 여러 개의 작은 패킷으로 쪼개어/조각화 되어 전송돼야한다.
즉, 목적지까지 패킷을 전달하는 과정에 통과하는 각 라우터마다 전송에 적합한 프레임으로 변환이 필요하다.
일단 조각화되면, 최종 목적지에 도달할 때까지 재조립되지 않는 것이 일반적이다.
IPv4에서는 발신지 뿐만 아니라 중간 라우터에서도 IP 조각화가 가능
IPv6에서는 IP 단편화가 발신지에서 만 가능
재조립은 항상 최종 수신지에서만 가능함
총 11,980바이트를 보내야하는데 MTU가 3,300이라 3,300씩 쪼개는게 아니라 IPv4프로토콜을 붙여야하기 때문에 IPv4 프로토콜 크기만큼 뺀 3,280씩 쪼갠다.
*중요한것은 IPv4프로토콜 20바이트를 계산에 넣어줘야한다.
데이터 3,280은 각자 페이로드가 되는것이고 앞에 IPv4가 각각 붙는것이다.
하지만 ID값은 다 똑같다.
조각화의 과정
MTU가 1500이기때문에 2028이라 지나갈 수 없기에 이것을 조각화 한다.
IPv4값을 뺀 1480만큼 자르고 IPv4를 붙이고 최대전송 값이 되어서 전송이 가능해진다. 여기서 이더넷까지 붙여야 보내는게 가능하다.
MTU가 걸려지는 시점을 잘 봐야한다. IPv4가 붙고 MTU가 거르고 이더넷이 붙는것이다.
'네트워크 끄적끄적' 카테고리의 다른 글
2023/01/16 UDP,TCP (0) | 2023.01.16 |
---|---|
2023/01/13 4계층 프로토콜 (0) | 2023.01.13 |
2023/01/11 ARP 프로토콜 (0) | 2023.01.11 |
2023/01/10 OSI 7의 3계층 (0) | 2023.01.10 |
2023/01/09 OSI 7의 2계층 (0) | 2023.01.09 |