[널널한 개발자 TV] 네트워크 기초 이론: 14 - 패킷의 생성 원리와 캡슐화

이 글은 널널한 개발자 TV 님의 강의영상을 보고 작성한 글입니다.
패킷의 생성 원리

Socket에서의 데이터 단위를 Stream 이라고 했다.
이를 Kernel 영역의 TCP에 보낼 때,
Segmentation(분해)이 일어나는데, 즉, Stream을 일정 단위로 잘라서 보내는데,
이 때의, 잘라진 단위가 Segment이다.
Segment가 인캡슐레이션이 되어서 IP로 보내면, (포장해서)
Packet이 된다.
그리고 이 Pacet을 다시 인캡슐레이션 해서 H/W 영역에 보내면,
그 때의 단위가 Frame이다.
패킷의 생김새

Packet은 최대 1500 bytes의 데이터로 이뤄져 있다.
MTU(Maximum Transport Unit): 최대 1500 bytes
Packet은 다시 두개로 나뉜다.
TCP와 IP 부분으로 나뉘고, 각각 20bytes를 지닌다.
Payload 부분(1460bytes)
1460bytes는 MSS(Maximum Segment Size)
Packet은 약간 택배 같다.
그 안에 내용물이 Payload로 보면 된다.
TCP에서 Segment가 인캡슐레이션이 되어서, 즉, 캡슐화가 되어서
Payload로 보내지고,

중요한 용어의 등장!
보안 때문이든 어떤 경우든 간에
Packet안의 Payload 를 조사하는 경우가 있다.
DPI(Deep Packet Inspection)
DPI로 Payload를 살펴볼 수 있는데, 이는 잘못하는 경우 도청 혹은 감청으로 쓰일 수 있다.(조심)
다시 택배 예를 들면,
Segment는 택배의 내용물 같은 것이다.
이 내용물을 택배 상자 안에 넣는 것인데,
이를 인캡슐레이션, 캡슐화 한다고 한다.
즉, 감싸서서 박스 안에 넣었다 라고 보면된다.

궁금증
Payload = Segment 일까?
Payload는 상대적인 개념이다.
Segment는 Stream 데이터를 TCP 전송을 목적으로 자른 조각을 의미한다.
이 조각(TCP 헤더 포함)을 IP Packet의 Payload에 담아 전송한다.
그러면, Segment는 IP Packet의 Payload에 담는 "내용물 중에 하나"라고 생각한다.
Payload에는 다른 것들이 들어가기 때문이다.
또 다른 궁금증
socket은 Syscall의 일종일까?
아니다!
socket은 API(Application Programming Interface)의 일종이다.
일반적인 API들이 User mode에서 Kernel 모드로 전환될 때,
그 접점에서 System call이 이뤄진다.
socket API 자체는 System call이 아니지만,
내부 연산과정에서 System call이 이뤄진다.
참고!
System call은 로우레벨 함수로 구현되어 있다.
Reference