백엔드/네트워크

[네트워크기초이론]#14. 패킷의 생성 원리와 캡슐화

묘걍 2023. 9. 26. 15:26

 데이터 단위

* socket: TCP라는 요소가 user mode application Process에 접근할 수 있도록 추상화한 인터페이스, 본질 = file

- 모든 프로그램은 이 파일에 대고 Read나 Write를 한다.

Socket 수준에서의 데이터 단위

- Stream

- 시작은 있지만 언제 끝날지 모르는 쭉 늘어진 데이터

   ( 개발자 마음)

- socket과 TCP가 만나는 지점에서 분해가 일어난다

   = Stream 데이터를 일정 단위로 자름

TCP 수준에서의 데이터 단위

- Segment

Segment가 Encapsulation되면

- Packet

Packet이 Encapsulation 되면

- Frame

- Ethernet 네트워크면 Ethernet Frame

 

 

 

User mode 프로그램을 개발

→ socket 프로그래밍을 통해서 (Java, C, C++ ...)

Segment

이때 Stream 데이터를 네트워크에 보낸다고 send를 누르면 분해가 일어난다

- 택배에 들어 있는 내용물 (아래 설명 참고)

Packet

- 최대 길이(MTU): 1500bytes

- headerpayload로 나뉨

header

- header는 다시 IP헤더TCP헤더로 나뉨

     - 왼쪽에서 오른쪽으로 갈 수록 레이어가 올라간다

      - 특별한 이유가 없다면 보통 20bytes

payload

- 1460bytes

     - 특별한 이유가 없다면 이것이 MSS

- Stream 데이터에서 1460bytes씩 나눠서 payload에 넣고 그 앞에 header를 붙임

- segment가 payload로 감

택배

- 택배 상자 = packet

- 송장 = header

     - payload를 실어나르기 위한 정보들(meta data 등,,)

     - 택배의 송장은 어쩔 수 없이 노출된다. 해당 정보를 읽어야 배달을 할 수 있기 때문

DPI

- 보안 등의 이유로 packet을 조사할 수도 있다

- 조사할 때 payload 안을 들여다 봄, 이것이 DPI

- Deep Packet Inspection

- 이걸 들여다 보는 순간 도감청(?), 조심해야해!

Encapsulation

- Segment는 내용물

- 물건을 감싸서 상자 안에 넣는 것

 

Packet 생성 정리

- process가 socket에다 대고 I/O를 시도하면

- 이 때 메모리에 저장된 stream 형식의 기다란 데이터를 일정 단위로 끊어 segment화 한 후에

- Packet 형식으로 Encapsulation 해서 생성

 

 

- socket에서 무언가 데이터를 보낼 때의 함수 이름 = send

- send("~~~~~");

- send 시 2,000bytes를 보냈다면 패킷이 적어도 2개 감

     - MTU가 1,500이기 때문에

     - 하나의 패킷의 payload로 보낼 수는 없다

 

Frame

- 택배를 실어나를 때 '트럭'에 택배 넣음

- 이것도 Encapuslation

- segment(L4): 내용물

- packet(L3): 택배(상자)

- header: 송장

- payload: 내용물

- truck: Frame(L2)

 

 

 

 

 

출처: https://youtu.be/Bz-K-DPfioE?si=4y1bh1wkIazubXpV