텍스트TCP와 UDP는 4계층 Transport Layer의 프로토콜이다.
2,3계층이 목적지를 정확히 찾아가지 위한 주소 제공이 목적이였다면 4계층은 단말 내부에서 동작하는 여러 애플리케이션 프로세스 중 통신해야 할 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않고 원본 데이터를 만들어 전달하는 것이 목적이다.
TCP (Transmission Control Protocal)는 OSI 7계층의 Transport Layer에 속하는 프로토콜이다.
신뢰할 수 없는 네트워크 망에서도 정보유실이 없는 통신을 보장하는 것이 TCP의 목적이다.
위 목적을 이루기 위해 TCP는 아래와 같은 기능이 존재한다.
- 양방향 연결형 서비스를 제공한다.
- 오류제어, 흐름제어, 순서제어 기능이 있다.
- 신뢰성 있는 데이터 전송을 위해 패킷이 분실 및 손상 또는 지연되었는지 감독한다.
TCP는 클라이언트와 서버간의 상태 관리를 통해 연결형 서비스를 제공하고, 어떻게 상태 관리를 하는지 나타낸 것을 TCP 상태 전이도라고 한다.
TCP는 신뢰성 있는 통신을 위해 통신 시작 전, 사전 연결 작업을 진행한다.
목적지가 데이터를 받을 준비가 되지 않은 상태에서 데이터를 전송하게 되면 유실 될 가능성이 높기 때문이다. 이런 상황을 예방하기 위해 TCP는 안전한 데이터 통신이 가능한 지 미리 확인하는 작업을 거친다.
아래는 클라이언트와 서버간의 연결을 확립하는 과정이다.
❓6. 단계에서 클라이언트가 ESTABLISHED 상태로 먼저 변경된다는 곳도 있다. 순서가 어떤것이 정확한 것인가?
💡 알아보아야한다.
3방향 핸드셰이크
TCP에서는 연결 확립 과정중 3번의 패킷을 주고받는다. 이를 '3방향 핸드셰이크'라고 한다.
'3방향 핸드셰이크' 과정이 생기다보니 기존 통신과 새로운 통신을 구분해야 한다.
어떤 패킷이 새로운 연결 시도이고 기존 통신에 대한 응답인지 구부 하기 위해 헤더에 Flag값을 넣어 통신한다.
항목 | 내용 |
---|---|
Source Port | 가상 선로의 송신 측 포트이다. |
Destination Port | 가상 선로의 수신 측 포트이다. |
Sequence Number | 송신자가 전송하는 데이터의 일련번호 |
Acknowledgement Number | 수신자가 응답받은 데이터의 수 |
Header Length | TCP 헤더의 길이 |
Reserved | 예약..? |
URG (Urgent) | 긴급 데이터를 의미한다. 1이면 순서 상관없이 우선처리 |
ACK (Acknowledgement) | 전송 확인 필요 여부. 초기 SYN이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 값이 1이다. |
PSH (Push data now) | 버퍼가 가득 차지 않아도 수신 즉시 전달할지 말지 설정 |
RST (Reset) | 연결 회선 리셋 요청 |
SYN (Synchronization) | 연결 설정 요구. 연결이 시작될 때 값은 1이다. 송수신 간의 순서번호를 동기화 시킨다. |
FIN (Finish) | 연결 해제, 회선 종결을 요구 |
Window size | 수신측에서 수신할 수 있는 최대 바이트 |
Checksum | 체크썸. 신뢰성 검사시 사용되는 합계에 대한 1의 보수로 계산 |
Urgenet Pointer | URG와 같이 사용된다. 다음에 이어지는 데이터가 긴급 데이터를 의미하며, 인터럽트 메시지 대신 사용 |
Options & Data | 기타 옵션 및 데이터가 담긴다. |
TCP header에 Flag는 총 6가지가 있고 통신의 성질을 나타낸다. (SYN, ACK, FIN, RDST, URG, PSH)
연결 및 종단시 ACK, SYN, FIN 플래그를 사용하는 방식은 아래와 같다.
- 연결요청 -> SYN (1), ACK (0)
- 연결허락 -> SYN (1), ACK (1)
- 연결설정 -> ACK (1)
- 종결요청 -> FIN (1), ACK (0)
- 종료응답 -> FIN (1), ACK (1)
슬라이딩 윈도우는 TCP가 흐름제어할때 사용하는 기법으로 수신자가 수신 받을 만큼만 데이터를 전송하는 방법이다.
Stop-and-Wait의 단점을 보완한 방식으로 수신 측의 확인 신호를 받지 않아도 우선 미리 정해진 프레임의 수 만큼 연속적으로 전송한다.
Stop-and-Wait
에러제어 방식 중 BEC(Backward Error Control) 기법 중 하나로 송신자가 데이터를 전송하고 수신응답이 오면 다음 데이터를 전송하는 기법이다.
Stop-and-Wait은 에러발생시 즉시 재전송하며 순차적으로 송신 후 수신한다. 그러나 수신응답을 기다려야하므로 대기시간이 존재해 전송 효율이 저하된다.
BEC(Backward Error Control)
BEC는 에러제어 기법중 하나로 Stop-and-Wait, Go-Back-N, Selective Repeat 방식이 존재한다.
슬라이딩 윈도우 기법은 송수신측 간의 네트워크 전송 효율을 극대화할 수 있다.
ACK를 매번 받을 수 있지만 묶어서 받을 수 도 있기 때문에 불필요한 네트워크 부하를 최소화한다.
TCP 통신이 시작될 때 초기값부터 지속적으로 올리는 방식이다.
그러다가 데이터를 제대로 수신 받지 못하면(Duplication ACK 값 수신) 송신 속도를 초기값으로 다시 낮춘다.
Dupliation ACK 값 수신되기 전에 전송속도가 임계값에 도달하게 되면 임계값의 절반으로 낮춰서 다시 시작한다.
일정시간 동안 ACK 수신이 없거나 Duplicate ACK가 수신되면 송신자는 Congestion Avoidance 상태로 전환된다.
각 연결마다 상태를 제어하기 위한 Congestion Window(CWnd)와 Slow Start Threshold 두개의 변수를 유지한다.
UDP는 비연결 프로토콜이다. 때문에 연결확립을 위한 작업도 없고 흐름제어, 오류제어, 순서제어 기능도 없다. 그저 상대방이 데이터 통신 준비가 되었든 말든 관심없고 그냥 무작정 보내는 것이다.
UDP는 데이터가 유실되었어도 전혀 책임을 지지 않는다.
UDP의 목적은 그저 데이터를 전송하는 것이다.
음성 데이터나 실시간 스트리밍과 같이 시간에 민감하나 프로토콜이나 애플리케이션을 사용하는 경우, 혹은 사내방속이나 증권 시세 데이터 전송에 사용하는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답 받기 어려운 환경에서 주로 사용된다.
UDP의 헤더는 송신 포트번호, 목적지 포트번호, 길이, 체크썸, 데이터가 끝이다.
연결을 확립할 필요도 없고 어떠한 제어 기능도 없기 때문이다.
TCP | UDP | |
---|---|---|
연결 | 연결 지향 | 비연결형 |
오류제어 | 수행함 | 안함 |
흐름제어 | 수행함 | 안함 |
순서제어 | 수행함 | 안함 |
통신방식 | 유니캐스트 | 유니캐스트, 멀티캐스트, 브로드캐스트 |
통신방향 | 전이중 | 반이중 |
주된 예시 | 데이터 전송 | 실시간 트래픽 전송 |