[널널한 개발자 TV] 네트워크 기초 이론: 7 - 네트워크 데이터 단위 정리
이 글은 널널한 개발자 TV 님의 강의영상을 보고 작성한 글입니다.
1. 데이터 단위
이전에도 봤었을 때, packet이라는 단어가 종종 나왔었다.
packet은 데이터 덩어리로 볼 수 있다.
예를 들어서, 내가 어떤 파일을 생성한다고 가정하자.
메모장에 글자들을 적는데, 이 파일을 두 개를 만든다.
이는 txt 파일로 저장이 되고, 크기는 각각 10KB, 20MB 라고 치자.
이렇게 파일들을 User 영역에서 생성할 수 있다.
하지만, 만약에 User 영역에서 크기가 엄청나게 큰 파일을 생성했다고 치자.
그렇다면, 밑에 Kernel 영역에서의 TCP와 IP에서의 데이터들이 이를 받기가 쉬울까?
굉장히 무겁기 때문에 버거울 것이다.
이 때 User 영역에서 생성한 "파일"의 데이터 단위를
"Stream" 이라고 한다.
"Stream"의 길이는 굉장히 길어질 수 있다.
IP 수준에서의 권장하는 데이터 단위보다 길어질 수 있다.

각 계층마다 부르는 데이터의 단위가 다르다.
User level(Socket 수준)에서의 데이터 단위는 stream 이다.
TCP 계층에서의 데이터 단위는 Segment 이다.
IP 계층에서의 데이터 단위는 Packet 이다.
유저 모드(Application)에서의 Process가
어떤 파일에 Stream 데이터를 write를 한다고 하자.
그렇다면 user 에서 kernel로 내려가서 TCP를 만나면
그 때의 Stream 데이터는 segmentation(분해, 자르기)이 일어나서 segment가 된다.
이렇게 잘려진 데이터(segment)들은 이것들을 인터넷에서 전송가능한 형태로 또 포장을 하는데,
그것을 packet이라고 한다.
packet을 H/W 영역으로 옮길 때는 Frame 데이터로 넣는다.
무작정 막 자르냐? (Segmentation)
일정 길이로 자른다.
그 길이는 얼마일까?
자르는 길이의 최대 크기는 MSS(Maximum Segment Size) 라고 하는데,
MSS는 Packet(IP에서의 데이터 단위)의 최대 크기에 따라 달라진다.
Packet의 최대 크기는 MTU(Maximum Transport Unit)이라고 한다.
MTU는 1500bytes 이다.
그렇다면 당연히 MTU 보다 MSS는 작아야한다. (MSS < 1500bytes)
Reference