Segmentation과 Fragmentation

Seung·2022년 5월 9일
0

메모

목록 보기
2/2

호스트에서 네트워크로 데이터를 보낼때 언제 어떻게 데이터를 쪼개는지 헷갈려서 작성한다.

Segmentation

process의 socket에서는 stream 형태로 데이터를 넘긴다.
이 때, stream 형태의 데이터가 segment 단위로 쪼개진다.
이후 layer3(TCP)에서 TCP header + segment되고
layer4(IP)에서 IP header + TCP header + segment 되어 Packet이 된다.

참고로 Segment는 TCP에서만 사용하며, UDP에서는 datagram이라고 한다.

Fragmentation

layer 3에서 만들어진 ip 패킷은 원하는 호스트까지 전송되기 위해 MTU 값을 고려해서 만들어진다.
만약 패킷의 크기가 MTU 값보다 크다면, 패킷은 단편화(Fragmentation)되고, 마지막 호스트에서 재조립(Reassemble) 된다.
단편화되고 재조립되는 과정에서 비용이 들고 이는 효율을 떨어 뜨린다.
단편화는 가능한 발생하지 않는게 제일 좋으며,
2022년 현재 단편화는 거의 발생하지 않는다고 한다.

발생하는 경우는 VPN IPsec 때문에 발생한다고 한다.
(IP header가 하나 더 붙으면서 MTU를 초과하기 때문에)

단편화가 발생하는 예시)
pc1: 1500 MTU
router: 1400 MTU
pc2: 1500 MTU

pc1이 router를 거쳐서 pc2로 1500 byte의 IP 패킷을 보낼때 단편화가 발생한다.

단편화로 생기는 비효율성은 하향 평준화를 통해서 해결할 수 있다.
pc1과 pc2의 MTU를 1400으로 낮춤으로써 MSS 또한 줄이면 단편화가 발생하지 않는다.

MTU와 MSS

기본적으로 MTU(Maximum transfer unit) 값은 1500 byte이다. 하지만 항상 그렇지는 않다.

MSS는 최대 세그먼트 사이즈로 MTU에서 TCP/IP 헤더(TCP/IP의 경우)를 제거한 것이다.
주로 1500byte - 최소 20byte - 최소 20byte = 1460byte의 사이즈를 갖는다.

참고

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=coffsje76&logNo=220199132164

profile
인프라 마스터가 되고 싶어요

0개의 댓글