IPv4 주소의 구조
IP는 L3 레이어(네트워크 계층)
IP 주소는 기본적으로 32비트로 구성되며, 해당 비트를 8비트씩 4개로 나눕니다.
8비트는 으로 구성되며,
만약 이진 비트가 1111111로 구성되면, Broadcast일 수 있습니다.
IP주소란 무엇인가?
기본적으로 host에 대한 식별자입니다.
IP(인터넷 프로토콜)를 사용하는 인터넷망에서 인터넷에 연결된 컴퓨터 한 대를 식별하기 위해 부여하는 고유 번호입니다.
Network 계층인 L3 계층의 IP는 IPv4로 가정했을 때, 32비트 주소 체계를 갖습니다.
32비트 = 8비트 * 4입니다.
8비트는 이며, 총 256가지(0~255)의 경우의 수를 가집니다. 이때, 255는 11111111이므로 이는 broadcast일 수 있음을 고민해야 합니다.
32비트 주소 체계를 어떤 구성에 따라 쪼개서 관리를 하는데, 이 구성은 다음과 같습니다.
ipconfig(ifconfig)
8개의 비트씩 쪼갠 후, dot(.)을 통해 구분합니다.
.으로 구분되는 하나의 숫자 단위는 8비트이므로, 0~255까지의 숫자 범위를 갖습니다.
IP 주소는 기본적으로 총 32비트 중 24비트를 잘라서 이를 Network ID로 구분하고, 마지막 8비트를 Host ID로 구분합니다.
이를 우리 실생활에 빗대어 이해하면 서울시 강남구 역삼동 ~번지라는 주소가 있을 때, 읍면동까지의 주소가 Network ID가 되고 마지막 번지수가 Host ID가 되는 것입니다.
주소를 통한 IP 구분
networkID
•
서울시 강남구 역삼동
•
택배를 보낼 때, 보낼 트럭을 구분
•
어느 네트워크로 보낼지 구분
HostID
•
번지
•
정확히 어디로 보낼 지 구분
•
네트워크에 속한 호스트 구분
L3 Packet
L3 패킷
•
패킷은 단위 데이터로 구성됩니다. (무엇인가를 감싸서 단위 데이터로 만듦)
•
16진수 덩어리로 구성됩니다.
•
L2에서는 프레임으로 불립니다.
◦
프레임에서는 크기가 중요하지 않지만 패킷은 다릅니다.
•
패킷이라는 말은 L3 IP 패킷으로 외우는 것이 좋습니다.
패킷의 구조
•
헤더(header)와 페이로드(payload)로 나뉘며, 이는 상대적인 분류입니다.
◦
헤더의 비유 : 송장
▪
Src (출발지) : 출발지
▪
Dst (목적지) : 목적지
◦
페이로드 : 택배 상자
▪
HTTP 메시지의 시작 줄과 HTTP 헤더를 묶어서 요청 헤드(head)라고 부르며,이와 반대로 HTTP 메시지의 페이로드는 본문(body)이라고 합니다.
•
패킷의 최대 크기는 MTU(Maximum Transmission Unit)
◦
이는 1500byte
◦
굉장히 작다.
•
Wireshark를 통해 네트워크를 읽어보기
분석 결과
Encapsulation, Decapsulation
Encapsulation(캡슐화)
•
러시아 목각 인형과 택배를 떠올리면
◦
택배의 경우, 박스를 구해와서 내용물을 담고 박스 안에 넣은 후 포장을 합니다. 이 과정이 결국 캡슐화입니다.
•
단위화 : 포장해서 보이지 않게 함
◦
어떤 단위화가 이루어지려면 포장이 필요하다. (이 경우 박스 단위로 바뀌었다.)
◦
박스에 내용물을 넣으면 안의 내용물을 알 수 없다는 특징으로 보안적인 의미도 가진다.
IP(L3) 패킷은 모두 L2 프레임의 Payload가 됩니다.
L4 패킷은 L3 패킷(IP 패킷)의 Payload가 됩니다.
L4 패킷의 Payload, 즉 TCP 세그먼트 안에는 또 다른 것들이 포함됩니다.
TCP 안에서는 Stream이라는 것이 포함됩니다.
Decapsulation
•
외부(L2 Frame)의 Header을 제거해서 내부 L3의 IP packet을 드러낸다
패킷의 생성, 전달, 소멸
•
패킷의 생성, 전달, 소멸의 과정은 택배 전송 과정에 비유할 수 있다
port 번호 : 이름
host : 집
packet : 택배
header : 송장
만약 인터넷을 통해 어떤 데이터를 송신해야 할 프로세스가 있다면, 데이터를 패킷(Packet)으로 만들어 게이트웨이에 전달해야 합니다.
게이트웨이는 분류 체계에 따라 라우팅을 하고, IPv4의 목적지로 패킷을 전달한 후 포트 번호에 패킷을 전송합니다.
어떤 데이터가 있다고 가정할 때, 이 데이터를 TCP 소켓에 Write(Send)합니다. (소켓은 파일의 일종입니다)
이제 데이터가 하위 계층으로 내려가며 L4 - TCP를 만나게 되면 TCP(Header) + Data(Payload)의 덩어리가 되는데 이 한 덩어리를 '세그먼트(Segment)'라고 부릅니다.
이 세그먼트가 한 층 더 내려가면 앞단에 L3-IP 헤더가 추가되고, 한 계층 더 내려가면 L2 - 이더넷 프레임 헤더가 추가됩니다.
소켓 → L4 세그먼트 → L3 패킷 → L2 프레임
이더넷 프레임의 채로 타고 나가서 L2 Access Switch 등을 만난 후 라우트 게이트웨이를 만나 인터넷망으로 나가게 됩니다.
계층별 데이터 단위
•
Socket = File
•
User mode- Stream
◦
연속적으로 이어진 크기를 정확히 알 수 없는 큰 데이터. 이 Stream을 Socket에 Write하는 것.
•
Kernel mode 단위
◦
TCP - Segment
▪
TCP(Header) + Data(Payload)
▪
최대 단위 - MSS(Maximum Segment Size)
▪
1460Bytes
◦
IP - Packet
▪
IP 헤더 + [TCP(Header) + Data(Payload)] - payload
▪
최대 단위 - MTU(Maximum Transmission Unit)
▪
1500Bytes
•
L1 ~ L2 수준의 단위 - Frame
Segmentation
•
Segment, Packet의 최대 단위는 약 1500 바이트 수준입니다.
그러나 Stream에서 전송하려는 데이터의 크기가 4MB라면 처리할 수 있는 최대 단위의 용량을 초과하게 됩니다. 이런 경우에는 TCP와 맞닿는 지점에서 분할이 이루어지며, 이를 Segmentation이라고 합니다.
•
즉, Stream으로 연속적으로 긴 데이터를 MSS 크기로 자른 후, 인터넷이라는 환경에서 유통되는 MTU 사이즈에 맞추는 구조입니다.