TCP프로토콜과 UDP프로토콜은 모두 전송계층인 4계층에서 이용되는 프로토콜입니다.
TCP 프로토콜은 주로 신뢰성이 중요한 애플리케이션에서 사용되며, UDP프로토콜은 간단한 데이터를 빠른 속도로 전송해야할 경우 주로 이용됩니다.
TCP
3-way-handshake
TCP프로토콜은 3 way handshake기법을 통해 연결이 이루어집니다. SYN → SYN+ACK → ACK순으로 패킷을 주고받아 연결을 확인하죠.
세션종료는 4way handshake입니다
또한 슬라이딩 윈도우 기법을 통해 수신측에서 설정한 윈도우 크기만큼 확인응답없이 세그먼트를 전송하게 됩니다. 즉, 데이터 흐름을 동적으로 조절하는 제어기법을 통해 보다 안정적이고 신뢰성 있는 통신이 가능합니다. 이외에도 훼손된 패킷을 감지하고 손실된 패킷은 재전송하는 작업을 거치는 오류제어 특징도 갖고있습니다.
TCP의 흐름제어
- Stop and Wait
→ 매번 전송한 패킷에 대한 확인응답을 받고, 그 다음 패킷을 전송하는 방법
→ 비효율적입니다.
- Sliding Window(슬라이딩 윈도우)
- 수신측에서 설정한 윈도우 크기만큼 송신측에서 확인 응답없이 세그먼트를 전송할 수 있게 하여, 데이터 흐름을 동적으로 조절하는 방법
- Stop and Wait의 비효율성을 개선한 기법입니다.
TCP의 오류제어
- 오류검출과 제전송을 포함합니다.
- ARQ기법을 사용해 프레임이 손상되거나 손실되었을 경우 재전송을 통해 오류를 복구합니다.
- 송신측에서 1개의 프레임을 송신하고, 수신측에서 수신된 프레임의 에러 유무 판단에 따라 ACK or NAK(Negative Acknowledgement)를 보내는 방식이다
- 식별을 위해 데이터 프레임과 ACK 프레임은 각각 0,1 번호를 번갈아가며 부여한다.
- 수신측이 데이터를 받지 못했을 경우, NAK를 보내고 NAK를 받은 송신측은 데이터를 재전송한다.
- 만약, 데이터나 ACK가 분실되었을 경우 일정 간격의 시간을 두고 타임아웃이 되면, 송신측은 데이터를 재전송한다.
참고
[네트워크] - TCP (흐름제어/혼잡제어)
UDP