인프런 커뮤니티 질문&답변

김주영님의 프로필 이미지
김주영

작성한 질문수

외워서 끝내는 네트워크 핵심이론 - 기초

TCP 연결과정

TCP의 segmentation

해결된 질문

작성

·

595

0

이전 강의 중 Stream에 대해 설명해주셨을때 크기가 큰 Stream을 TCP에 넘겨줄때 MSS에 따라 segmentation이 된다라고 이해했습니다.

그런데 "TCP 연결 과정"에서도 Client와 Server의 MSS가 다를 때에도 낮은 MSS에 맞춘다고 이해했습니다. 강의 예시처럼 Client의 MSS가 1460, Server의 MSS가 1400일때 Server의 MSS에 맞춰버린다고 하면 이때 어느 부분에서 일어나는 건가요?

SYN+ACK를 통해 server의 MSS를 받고 L2->L3->L4(TCP)로 가서 한번 더 segmentation이 일어나는 건가요?

3-way handshaking을 할때에도 en/decapsulation이 일어나는게 맞는가요?

답변 3

1

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

1차적으로 L4 TCP 프로그램이 세그먼트화를 실시한 후 L3 IP 프로그램에게 결과를 넘긴다고 생각해보면 되겠습니다. 그런데 L4 TCP는 L3 IP가 어떤 방식으로 패킷화 할 지 이미 알고 있기 때문에 수고를 덜어주는 차원에서 패킷화 하기 좋게 세그먼트 크기를 줄여서 넘겨주는 것입니다.

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

MSS가 커지면 세그먼트를 캡슐화 해야 하는 패킷의 크기도 함께 들어날 수 밖에 없습니다. 문제는 MTU를 넘는 크기로 MSS가 정해진다면 패킷으로 인캡슐레이션 하는 과정에서 세그먼트를 n개 패킷으로 자를 수 밖에 없습니다. 이런 이유로 OS는 보통 세그먼트 크기를 MTU보다 작게 책정합니다. 참고하시기 바랍니다.

김주영님의 프로필 이미지
김주영
질문자

정리하면 "크기가 stream > MSS일 때 MSS에 맞게 자르고 MSS > MTU일 때도 MTU에 맞게 자른다" 라고 이해했습니다.

그리고 client와 server의 TCP 연결시 초기 handshaking 단계에서 서버로부터의 응답인 SYN+ACK에 서버의 MSS가 포함되어 이 값을 통해 client 자신의 MSS를 결정한다 라고 이해해도 될까요?

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

TCP 연결 절차는 3-way hand shake 입니다. 이 때, TCP 옵션 중 MSS 값을 서로 교환합니다. 즉, 연결이 되면서 서로의 MSS 값을 Client/Server 모두 알게 된다는 것입니다. 결국 단편화를 피하기 위해 송신측은 MSS를 줄여서 보내주게 됩니다. 참고하시기 바랍니다.

김주영님의 프로필 이미지
김주영
질문자

답변 감사합니다!

단편화를 피하기 위해 송신측이 MSS를 줄여서 보내준다는 것은 이해가 갑니다. 하지만 "socket으로 stream을 TCP에 넘겨줄때 TSS에 맞게 segmentation을 해주는 것"과 "단편화를 피하기위해 줄여준다는 것"의 차이가 무엇인지 모르겠습니다.

김주영님의 프로필 이미지
김주영

작성한 질문수

질문하기