공부/네트워크
[네트워크] TCP 프로토콜 (상태,헤더,제어)
yjkim_97
2021. 12. 26. 18:21
TCP 프로토콜은 OSI 7계층이 전송계층에 속하는 프로토콜이다.
TCP (Transmission Control Protocal)
- 양방향 연결형 서비스를 제공한다.
- 가상 회선 연결 형태의 서비스를 제공한다.
- 스트림 위주의 전달(패킷 단위)을 한다.
- 신뢰성 있는 경로를 확립하고 메시지 전송을 감독한다.
- 순서 제어, 오류 제어, 흐름 제어 기능을 한다.
- 패킷의 분실, 손상, 지연이나 순서가 틀린 것 등이 발생할 때 투명성이 보장되는 통신을 제공한다
1. TCP 상태 전이
TCP 상태 전이도
TCP 상태전이 과정
- 클라이언트 측에서 먼저 서버에 연결 요청 메시지인 SYN 신호를 보낸다.
- 클라이언트는 SYN-SENT 상태로 서버의 응답을 대기한다.
- 서버는 처음 기동시 클라이언트 상태를 연결받기 위해 LISTEN 상태에서 클라이언트 연결을 대기한다.
- 서버가 클라이언트의 SYN 신호를 맏으면 서버는 클라이언트에게 SYN, ACK를 전송한다.
- 서버는 SYN-RECEIVED 상태로 바뀌고, 클라이언트의 연결을 대기한다.
- 클라이언트는 서버의 SYN, ACK 신호를 받으면 ACK 신호를 서버에 전송한다.
- 서버가 ACK신호를 받으면 클라이언트와 서버는 모두 ESTABLISHED상태로 연결 확립 상태가 된다.
2. TCP header
항목 | 내용 |
Source Port | 가상 선로의 송신 측 포트이다. |
Destination Port | 가상 선로의 수신 측 포트이다. |
Sequence Number | 송신자가 전송하는 데이터의 일련번호 |
Acknowledgement Number | 수신자가 응답받은 데이터의 수 |
Header Length | TCP 헤더의 길이 |
Reserved | 예약..? |
URG (Urgent) | 긴급 데이터를 의미한다. 1이면 순서 상관없이 우선처리 |
ACK (Acknowledgement) | 전송 확인 필요 여부 |
PSH (Push data now) | 버퍼가 가득 차지 않아도 수신 즉시 전달할지 말지 설정 |
RST (Reset) | 연결 회선 리셋 요청 |
SYN (Synchronization) | 연결 설정 요구. 송수신 간의 순서번호를 동기화 시킨다. |
FIN (Finish) | 연결 해제, 회선 종결을 요구 |
Window size | 수신측에서 수신할 수 있는 최대 바이트 |
Checksum | 체크썸. 신뢰성 검사시 사용되는 합계에 대한 1의 보수로 계산 |
Urgenet Pointer | URG와 같이 사용된다. 다음에 이어지는 데이터가 긴급 데이터를 의미하며, 인터럽트 메시지 대신 사용 |
Options & Data | 기타 옵션 및 데이터가 담긴다. |
ACK, SYN, FIN 패킷의 사용 방식 (연결, 종단시)
- 연결요청 -> SYN (1), ACK (0)
- 연결허락 -> SYN (1), ACK (1)
- 연결설정 -> ACK (1)
- 종결요청 -> FIN (1), ACK (0)
- 종령응답 -> FIN (1), ACK (1)
3. TCP 흐름제어 (Flow Control)
- 송수신측 사이의 전송 패킷의 양과 속도를 조절하여 네트워크를 효율적으로 사용한다.
- 송수신측 사이의 처리 속도와 버퍼 크기 차이에 의해 생길 수 있는 수신측 오버플로우를 방지한다.
슬라이딩 윈도우 (Sliding Window)
슬라이딩 윈도우는 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를 매번 받을 수 있지만 묶어서 받을 수 도 있기 때문에 불필요한 네트워크 부하를 최소화한다.
4. TCP 혼잡제어 (Congestion Control)
- 송신 단말의 전송률을 직접 제어하여 패킷 혼잡으로 인해 손실될 데이터를 최소화한다.
- Slow Start와 Congestion Avoidance(혼잡회피) 방식이 존재한다.
Slow Start
- TCP 통신이 시작될 때 초기값부터 지속적으로 올리는 방식이다.
- 그러다가 데이터를 제대로 수신 받지 못하면(Duplication ACK 값 수신) 송신 속도를 초기값으로 다시 낮춘다.
- Dupliation ACK 값 수신되기 전에 전송속도가 임계값에 도달하게 되면 임계값의 절반으로 낮춰서 다시 시작한다.
Congestion Avoidance (혼잡회피)
- 일정시간 동안 ACK 수신이 없거나 Duplicate ACK가 수신되면 송신자는 Congestion Avoidance 상태로 전환된다.
- 각 연결마다 상태를 제어하기 위한 Congestion Window(CWnd)와 Slow Start Threshold 두개의 변수를 유지한다.
2021.04.17 - [공부/정보처리기사] - [네트워크] OSI 7 - 전송계층 프로토콜