Search
Duplicate
📒

[쉽게 이해하는 네트워크] 04-4. TCP 프로토콜의 기능(3-way 핸드셰이크, 흐름제어)

상태
완료
수업
Network Study
주제
기본개념
4 more properties
참고

TCP 프로토콜의 기능과 특징

NOTE
데이터를 패킷으로 분할하여 전송한다
전송 과정을 연결형 방식으로 제어한다.
수신한 패킷들을 재조립하는 방식으로 데이터 전송의 정확성 & 신뢰성을 보장한다.

패킷 분할과 조립

NOTE
TCP에서는 응용 계층의 데이터 단위인 메시지를 받아 세그먼트로 분할하며 분할하는 단위를 MSS라고 한다
TCP 프로토콜의 데이터 단위 (MSS 단위로 잘린다)
MSS의 표준 크기는 1,460 바이트다.
분할된 데이터에 순서 번호를 부여하여 전송 과정에서 순서가 뒤바뀌더라도 수신지에서 데이터로 재조립할 수 있다.

TCP 통신 과정

NOTE
연결형 통신인 TCP 프로토콜은 데이터를 전송하기 전에 상대방이 먼저 데이터를 수신할 수 있는지 연결을 확립한 후 통신을 시작한다!
물어보고 확인하고 연결한다.

1. 연결확립 (3-way 핸드 셰이크)

3번 통신하니 3번 악수한다고 말한다
애플리케이션 사이의 통신은 전송 한 번으로 끝나지 않으며 대부분 연속해서 데이터가 전송된다.
애플리케이션마다 연속으로 전송되는 데이터를 가상의 이동 통로를 만들어 전송함으로써 데이터의 흐름을 관리할 수 있다.
1.
수신 호스트의 허락을 받기위해 송신 호스트에서 요청을 보낸다.
2.
송신 호스트가 연결 확립을 허가한다는 응답과, 데이터 전송 허가를 위한 요청을 보냄
3.
수신 호스트에게 데이터 전송을 허가한다고 응답한다.
3-way 핸드셰이크 과정에서 송신/수신 호스트의 상호합의 하에 MSS가 결졍되고, 이에따라서 패킷을 만들어 보낸다.

2. 데이터 전송

송신 호스트가 수신 호스트에 도착하면 수신 호스트가 응답(ACK)를 보낸다.
수신 호스트가 몇 번째 데이터를 수신했는지, 다음에 전송할 데이터는 몇 번째 데이터인지 알려주는 확인 응답 번호로 이루어진다.
연결 확립 - MSS(1460), 순서번호 0시작 8000 바이트의 데이터를 보내는 경우 6개의 패킷으로 데이터를 분할한다.
순서 번호와 응답 확인 번호
1.
송신 호스트 → 수신 호스트 순서 번호 0 데이터를 전송
2.
수신 호스트 → 송신 호스트 확인 응답의 의미로 데이터 번호와 다음 데이터를 요청
3.
확인 응답을 받은뒤 수신 호스트 → 송신 호스트 순서 번호 1460 데이터 전송
4.
계속해서 진행..

3. 연결 해제

3-way 핸드 셰이크에 의한 연결 종료
데이터 전송/연결에는 SYNACK 코드를 사용했지만 종료에는 FINACK를 사용한다.
1.
송신 호스트 → 수신 호스트 종료 요청을 보낸다.
2.
수신 호스트는 연결 종료 응답(ACK)를 반환하고, 동시에 송신 호스트로 연결 종료 요청을 보낸다.
3.
송신 호스트 → 수신 호스트 연결 종료 응답을 보낸다.

TCP 흐름 제어

NOTE
통신에서 신뢰성 만큼 중요한 것이 통신속도이기에 흐름 제어를 통해 전송 효율을 높인다!
패킷마다 응답하면 너무 동기적으로 활동한다.
신뢰성 확보를 위해 하나의 패킷을 전송할 때 마다 확인 응답을 거치면, 송신 호스트는 응답이 오는 기간동안 아무일도 하지 않아 작업이 지연된다.
확인 응답을 기다리지 않고 송신할 수 있는 데이터의 크기를 윈도우 사이즈라고 한다.
윈도우 사이즈데이터를 전송할 때 한번에 전송할 수 있는 패킷의 크기
윈도우 사이즈는 수신 호스트가 한 번에 받아낼 수 있는, 버퍼의 크기가 되어야 한다.
버퍼 → 컴퓨터 메모리상에 위치하여 송수신하는 패킷을 일시적으로 저장하는 장소
수신 호스트의 컴퓨터 성능이나 동시에 동작하는 애플리케이션의 개수가 수신 호스트의 사정에 따라 송신 호스트가 보내는 데이터의 속도보다 수신하는 속도가 느려지는 경우 처리할 수 없는 데이터가 넘쳐 흐르는 오버플로 문제가 발생하기에 윈도 크기는 상황에 따라 변해야 한다.
오버플로 → 수신한 데이터의 크기가 버퍼를 넘어서는 경우
윈도 사이즈는 3-way 핸드 셰이크에 의한 연결 확립시 수신 호스트가 초기값을 결정하며, 수신 호스트는 응답 TCP 헤더에 윈도우 사이즈를 지정하여 어느 정도까지 수신이 가능한지 수시로 알려준다.
윈도우 사이즈가 5000이다 - 1460 MMU의 패킷 3개를 보낸다. - 보낸 데이터는 버퍼에 들어가고 처리되면 비워진다. - 확인 응답에서 윈도우 사이즈에 다시 여유가 생기면 데이터를 보낸다.

TCP와 UDP를 사용하는 애플리케이션

NOTE

TCP

TCP의 제어 기능 덕분에 데이터의 신뢰성이 보장되고, 상위 계층에는 데이터의 제어를 신경 쓸 필요 없이 애플리케이션 본연의 기능을 구현하는데만 집중할 수 있다.
TCP의 복잡한 제어가 때로는 애플리케이션 기능을 구현하는데 문제를 일으키기도 하고, 전송 속도를 느리게 한다.
ex) TCP 헤더에는 송신지 포트, 수신지 포트, 순서 번호, 응답 번호 확인 등 다양한 정보가 담긴다.

UDP

비연결 통신이기 때문에 위에서 설명한 데이터 제어에 관한 어떠한 기능도 없고 오직 전송 계층에서 애플리케이션에 데이터를 배분하는 역할만 한다.
UDP의 데이터 전송 효율이 TCP보다 뛰어나지만 데이터 제어가 없기에 도착했는지, 순서대로 도착했는지 알수가 없다..
필요하다면 개발할 때 직접 기능을 만들어서 반영해야한다.