[네트워크] TCP/UDP

yjkim97·2022년 1월 29일
0

네트워크

목록 보기
7/10

텍스트TCP와 UDP는 4계층 Transport Layer의 프로토콜이다.

2,3계층이 목적지를 정확히 찾아가지 위한 주소 제공이 목적이였다면 4계층은 단말 내부에서 동작하는 여러 애플리케이션 프로세스 중 통신해야 할 프로세스를 정확히 찾아가고 패킷 순서가 바뀌지 않고 원본 데이터를 만들어 전달하는 것이 목적이다.


⭐️ TCP

TCP (Transmission Control Protocal)는 OSI 7계층의 Transport Layer에 속하는 프로토콜이다.

1. 목적

신뢰할 수 없는 네트워크 망에서도 정보유실이 없는 통신을 보장하는 것이 TCP의 목적이다.

위 목적을 이루기 위해 TCP는 아래와 같은 기능이 존재한다.

  • 양방향 연결형 서비스를 제공한다.
  • 오류제어, 흐름제어, 순서제어 기능이 있다.
  • 신뢰성 있는 데이터 전송을 위해 패킷이 분실 및 손상 또는 지연되었는지 감독한다.

2. 연결형 서비스

TCP는 클라이언트와 서버간의 상태 관리를 통해 연결형 서비스를 제공하고, 어떻게 상태 관리를 하는지 나타낸 것을 TCP 상태 전이도라고 한다.

TCP 상태 전이도

TCP 상태전이 과정

TCP는 신뢰성 있는 통신을 위해 통신 시작 전, 사전 연결 작업을 진행한다.
목적지가 데이터를 받을 준비가 되지 않은 상태에서 데이터를 전송하게 되면 유실 될 가능성이 높기 때문이다. 이런 상황을 예방하기 위해 TCP는 안전한 데이터 통신이 가능한 지 미리 확인하는 작업을 거친다.

아래는 클라이언트와 서버간의 연결을 확립하는 과정이다.

  1. 서버는 처음 기동시 클라이언트 상태를 연결 받기 위해 LISTEN 상태에서 클라이언트의 연결 요청 신호를 대기한다.
  2. 클라이언트 측에서 먼저 서버에 연결 요청 메시지인 SYN 신호를 보낸다.
  3. 클라이언트는 SYN_SENT 상태로 서버의 응답을 대기한다.
  4. 서버가 클라이언트의 SYN 신호를 받으면 서버는 클라이언트에게 SYN, ACK 신호를 전송한다.
  5. 서버는 SYN-RECEIVED 상태로 바뀌고, 클라이언트의 연결을 대기한다.
  6. 클라이언트는 서버의 SYN, ACK 신호를 받으면 ACK 신호를 서버에 전송한다.
  7. 서버가 ACK 신호를 받으면 클라이언트와 서버는 모두 ESTABLISHED 상태로 연결 확립 상태가 된다.

❓6. 단계에서 클라이언트가 ESTABLISHED 상태로 먼저 변경된다는 곳도 있다. 순서가 어떤것이 정확한 것인가?
💡 알아보아야한다.

3방향 핸드셰이크
TCP에서는 연결 확립 과정중 3번의 패킷을 주고받는다. 이를 '3방향 핸드셰이크'라고 한다.

'3방향 핸드셰이크' 과정이 생기다보니 기존 통신과 새로운 통신을 구분해야 한다.
어떤 패킷이 새로운 연결 시도이고 기존 통신에 대한 응답인지 구부 하기 위해 헤더에 Flag값을 넣어 통신한다.

3. TCP 헤더

항목내용
Source Port가상 선로의 송신 측 포트이다.
Destination Port가상 선로의 수신 측 포트이다.
Sequence Number송신자가 전송하는 데이터의 일련번호
Acknowledgement Number수신자가 응답받은 데이터의 수
Header LengthTCP 헤더의 길이
Reserved예약..?
URG (Urgent)긴급 데이터를 의미한다. 1이면 순서 상관없이 우선처리
ACK (Acknowledgement)전송 확인 필요 여부. 초기 SYN이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 값이 1이다.
PSH (Push data now)버퍼가 가득 차지 않아도 수신 즉시 전달할지 말지 설정
RST (Reset)연결 회선 리셋 요청
SYN (Synchronization)연결 설정 요구. 연결이 시작될 때 값은 1이다. 송수신 간의 순서번호를 동기화 시킨다.
FIN (Finish)연결 해제, 회선 종결을 요구
Window size수신측에서 수신할 수 있는 최대 바이트
Checksum체크썸. 신뢰성 검사시 사용되는 합계에 대한 1의 보수로 계산
Urgenet PointerURG와 같이 사용된다. 다음에 이어지는 데이터가 긴급 데이터를 의미하며, 인터럽트 메시지 대신 사용
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)

4. 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를 매번 받을 수 있지만 묶어서 받을 수 도 있기 때문에 불필요한 네트워크 부하를 최소화한다.

5. 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 두개의 변수를 유지한다.


⭐️ UDP

UDP는 비연결 프로토콜이다. 때문에 연결확립을 위한 작업도 없고 흐름제어, 오류제어, 순서제어 기능도 없다. 그저 상대방이 데이터 통신 준비가 되었든 말든 관심없고 그냥 무작정 보내는 것이다.

UDP는 데이터가 유실되었어도 전혀 책임을 지지 않는다.

1. 목적

UDP의 목적은 그저 데이터를 전송하는 것이다.

음성 데이터나 실시간 스트리밍과 같이 시간에 민감하나 프로토콜이나 애플리케이션을 사용하는 경우, 혹은 사내방속이나 증권 시세 데이터 전송에 사용하는 멀티캐스트처럼 단방향으로 다수의 단말과 통신해 응답 받기 어려운 환경에서 주로 사용된다.

2. UDP header

UDP의 헤더는 송신 포트번호, 목적지 포트번호, 길이, 체크썸, 데이터가 끝이다.
연결을 확립할 필요도 없고 어떠한 제어 기능도 없기 때문이다.


TCP vs UDP

TCPUDP
연결연결 지향비연결형
오류제어수행함안함
흐름제어수행함안함
순서제어수행함안함
통신방식유니캐스트유니캐스트, 멀티캐스트, 브로드캐스트
통신방향전이중반이중
주된 예시데이터 전송실시간 트래픽 전송
profile
어제는 🐸두꺼비 오늘은 😄YJ

0개의 댓글