참고
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 핸드 셰이크에 의한 연결 종료
•
데이터 전송/연결에는 SYN과 ACK 코드를 사용했지만 종료에는 FIN과 ACK를 사용한다.
1.
송신 호스트 → 수신 호스트 종료 요청을 보낸다.
2.
수신 호스트는 연결 종료 응답(ACK)를 반환하고, 동시에 송신 호스트로 연결 종료 요청을 보낸다.
3.
송신 호스트 → 수신 호스트 연결 종료 응답을 보낸다.
TCP 흐름 제어
NOTE
통신에서 신뢰성 만큼 중요한 것이 통신속도이기에 흐름 제어를 통해 전송 효율을 높인다!
패킷마다 응답하면 너무 동기적으로 활동한다.
•
신뢰성 확보를 위해 하나의 패킷을 전송할 때 마다 확인 응답을 거치면, 송신 호스트는 응답이 오는 기간동안 아무일도 하지 않아 작업이 지연된다.
•
확인 응답을 기다리지 않고 송신할 수 있는 데이터의 크기를 윈도우 사이즈라고 한다.
◦
윈도우 사이즈 ⇒ 데이터를 전송할 때 한번에 전송할 수 있는 패킷의 크기
•
윈도우 사이즈는 수신 호스트가 한 번에 받아낼 수 있는, 버퍼의 크기가 되어야 한다.
◦
버퍼 → 컴퓨터 메모리상에 위치하여 송수신하는 패킷을 일시적으로 저장하는 장소
•
수신 호스트의 컴퓨터 성능이나 동시에 동작하는 애플리케이션의 개수가 수신 호스트의 사정에 따라 송신 호스트가 보내는 데이터의 속도보다 수신하는 속도가 느려지는 경우 처리할 수 없는 데이터가 넘쳐 흐르는 오버플로 문제가 발생하기에 윈도 크기는 상황에 따라 변해야 한다.
◦
오버플로 → 수신한 데이터의 크기가 버퍼를 넘어서는 경우
•
윈도 사이즈는 3-way 핸드 셰이크에 의한 연결 확립시 수신 호스트가 초기값을 결정하며, 수신 호스트는 응답 TCP 헤더에 윈도우 사이즈를 지정하여 어느 정도까지 수신이 가능한지 수시로 알려준다.
윈도우 사이즈가 5000이다
- 1460 MMU의 패킷 3개를 보낸다.
- 보낸 데이터는 버퍼에 들어가고 처리되면 비워진다.
- 확인 응답에서 윈도우 사이즈에 다시 여유가 생기면 데이터를 보낸다.
TCP와 UDP를 사용하는 애플리케이션
NOTE
TCP
•
TCP의 제어 기능 덕분에 데이터의 신뢰성이 보장되고, 상위 계층에는 데이터의 제어를 신경 쓸 필요 없이 애플리케이션 본연의 기능을 구현하는데만 집중할 수 있다.
•
TCP의 복잡한 제어가 때로는 애플리케이션 기능을 구현하는데 문제를 일으키기도 하고, 전송 속도를 느리게 한다.
◦
ex) TCP 헤더에는 송신지 포트, 수신지 포트, 순서 번호, 응답 번호 확인 등 다양한 정보가 담긴다.
UDP
•
비연결 통신이기 때문에 위에서 설명한 데이터 제어에 관한 어떠한 기능도 없고 오직 전송 계층에서 애플리케이션에 데이터를 배분하는 역할만 한다.
•
UDP의 데이터 전송 효율이 TCP보다 뛰어나지만 데이터 제어가 없기에 도착했는지, 순서대로 도착했는지 알수가 없다..
◦
필요하다면 개발할 때 직접 기능을 만들어서 반영해야한다.