본문으로 바로가기

[NW] 2. 전송 계층

category CS/Network 2019. 3. 25. 17:06
2_전송 계층

2. 전송 계층

  1. TCP / UDP
  2. Handshake
  3. 흐름 제어 / 오류 제어 / 혼잡 제어

 

1. TCP / UDP

TCP/IP 모델에서 전송 계층을 담당하는 프로토콜이다. UDP는 TCP에 비해 상대적으로 간단하며, TCP는 신뢰성 있는 데이터의 전송을 담당한다. 그런데 TCP가 데이터를 보낼 때, 기반이 되는 프로토콜이 IP이다. IP 계층은 문제가 발생하면 해결을 책임지지 않는 프로토콜이다. 그 문제를 해결해주는 것이 TCP이다. 데이터가 순서에 맞게 올바르게 전송이 갔는지 확인을 해주며 대화를 주고받는다. 확인절차를 걸쳐서 신뢰성 없는 IP에 신뢰성을 부여한 프로토콜이다.

 

1.1. TCP의 특징

  • 가상 회선 연결 방식, 연결형 서비스를 제공
  • 높은 신뢰성, UDP 보다 낮은 전송 속도
  • 연결의 설정(3-way handshaking)과 해제(4-way handshaking)
  • 데이터 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(네트워크 내 패킷 수가 과도하게 증가하는 현상 방지)
  • 전이중(Full-Duplex), 점대점(Point-to-Point) 서비스

 

1.2. UDP의 특징

  • 비연결형(port만 확인하여 소켓을 식별하고 송수신) 서비스 제공
  • 패킷 오버헤드가 적어 네트워크 부하 감소
  • 낮은 신뢰성, TCP 보다 높은 전송 속도
  • 오류 검출(헤더에 오류 검출 필드를 포함하여 무결성 검사)
  • TCP의 handshake 같은 연결 설저은 없음

 

 

2. Handshake

  • SYN (Synchronize Sequence Number, 연결 요청 플래그)
  • ACK (ACKnowledge, 응답)


2.1. 3-way Handshaking

Client와 Server의 전송을 위해 연결을 성립하는 과정

 

  1. 클라이언트는 서버에 접속을 요청하는 SYN(a) 패킷을 보낸다
  2. 서버는 클라이언트의 요청인 SYN(a) 를 받고, 클라이언트에게 요청을 수락한다는 ACK(a+1)SYN(b) 이 설정된 패킷을 발송한다
  3. 클라이언트는 서버의 수락 응답인 ACK(a+1) 과 SYN(b) 패킷을 받고, ACK(b+1) 을 서버로 보내면 연결이 성립(establish) 된다

 

2.2. 4-way Handshaking

3-way Handshaking이 TCP의 연결 성립을 위해 사용했다면, 이는 세션을 종료하기 위한 과정

 

  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그 를 전송한다

  2. 서버는 클라이언트의 요청(FIN) 을 받고 알겠다는 메시지로 ACK 을 보낸다

    2-1. 그리고 나서 데이터를 모두보낼 때까지 TIME_OUT 이 된다

  3. 데이터를 모두 보내고 통신이 끝났으면 클라이언트에게 연결이 종료되었다는 FIN 플래그를 전송한다

  4. 클라이언트는 FIN 을 확인했다는 ACK 을 보낸다

  5. 서버는 ACK 을 받은 뒤, 소켓 연결을 Close 한다

  6. 클라이언트는 아직 받지 못한 데이터를 대비해 일정 시간 동안 세션을 남겨놓고 잉여 패킷을 기다리는 TIME_WAIT 상태가 된다

 

 

3. 흐름 제어 / 오류 제어 / 혼잡 제어

3.1. 흐름 제어

송수신 호스트의 전송 과정의 속도 차이를 제어해주는 기능을 한다. 만약 송신측의 전송량이 수신측의 처리량보다 크다면, 전송된 패킷은 수신측의 큐를 넘어 손실될 수 있기 때문에 송신측의 패킷 전송량을 제어하게 된다.

 

정지-대기 (Stop-and-Wait)

  • 데이터를 존송하고 응답을 기다리는 방식
  • 순차적이기 때문에 비효율적임

슬라이딩 윈도우 (Sliding Window)

  • 윈도우는 전송,수신 스테이션 양쪽에 만들어진 버퍼의 크기
  • Stop-and-Wait 기법의 비효율성을 개선한 기법
  • ACK 프레임을 수신하지 않더라도, 여러개의 프레임을 연속적으로 전송 가능

 

3.2. 오류 제어

오류 제어 기법은 오류 검출(Error Detection)재전송(Retransmission) 을 포함한다. ARQ 기법을 사용하여 프레임이 손상되었거나 손실되었을 경우 재전송을 통해 오류를 복구한다.


ARQ (Automatic Repeat Request) : 신뢰성 있는 데이터 전달을 위해 재전송을 기반으로 한 에러 제어 방식

 

정지-대기 ARQ

  • 전송측은 수신측에 보내준 ACK를 받을 때 까지, 프레임의 복사본을 유지
  • 식별을 위해 데이터 프레임과 ACK 프레임은 각각 0,1 번호를 부여
  • 수신측이 데이터를 받지 못했을 경우, NAK를 보내고, 송신측은 데이터 재전송
  • 만약 데이터나 ACK가 분실되었을 경우, 일정간격의 시간을 두고 데이터 재전송

Go-Back-n ARQ

  • 전송된 프레임이 손상 또는 분실될 경우, 확인된 마지막 프레임 이후 모두 재전송하는 기법
  • 전송측은 모든 프레임의 복사본을 가지고 있어야 하며, ACK와 NAK를 각각 구별해야함

Selective-Reject ARQ

  • Go-Back-n 기법의 단점을 개선한 기법
  • Selective-Reject 기법은 손상 또는 분실 프레임만 재전송
  • 그렇기 때문에 별도의 데이터 재정렬 수행 및 별도의 버퍼가 필요

 

3.3. 혼잡 제어

혼잡 제어는 송신측과 네트워크의 데이터처리 속도 차이를 해결하기 위한 기법이다. 송신된 패킷이 네트워크 상의 라우터가 처리할 수 있는 양을 넘어서 혼잡하게 되면, 데이터가 손실될 수 있기 때문에 송신측의 전송량을 제어하게 된다.

 

합 증가/곱 감소(AIMD, Additive Increase/Multiplicative Decrease)

  • 처음 패킷을 하나씩 보내고 문제가 없다면 Window Size(단위 시간 내에 보내는 패킷의 수)를 1씩 증가시킴
  • 만일 패킷 전송에 실패하거나 일정 시간을 넘으면 속도를 절반으로 줄임
  • 네트워크가 혼잡해지는 상황을 미리 감지하지는 못함
  • 처음 전송 속도를 올리는 데 걸리는 시간이 길다는 단점이 있음

슬로우 스타트(Slow Start)

  • AIMD 기법과 마찬가지로 패킷을 하나씩 보내지만, ACK 패킷마다 Window Size를 1씩 증가시킴
  • 전송 속도는 지수 함수 꼴로 증가하게 됨
  • 대신 혼잡 현상이 발생하면 Window Size를 1로 떨어뜨림

혼잡 회피(Congestion Avoidance)

  • Window Size가 임계 값에 도달한 이후에 데이터의 손실이 발생할 확률이 높아짐
  • 따라서 데이터 전송에 있어서 조심하는 단계

빠른 회복(Fast Recovery)

  • 혼잡 상태가 되면 Window Size를 1로 줄이지 않고 반으로 줄이고 선형 증가시키는 방법
  • 빠른 회복까지 적용하여 혼잡 상태를 해결하고부터는 AIMD 방식으로 동작함


'CS > Network' 카테고리의 다른 글

[NW] 1. 네트워크 모델 (OSI, TCP/IP)  (0) 2019.03.04