네트워크 전송 계층

Yeji·2023년 10월 2일
0

네트워크

목록 보기
6/9
post-thumbnail

물리 계층, 데이터 링크 계층, 네트워크 계층만 있으면 목적지에 데이터를 보낼 수 있지만, 보내는 과정에서 데이터가 손상되었을 때를 책임지지 않는다. 데이터를 안정적이게 전달하는 역할은 전송 계층에서 담당한다.

1. 전송 계층

목적지에 안정적으로 데이터를 전달하는 역할을 한다.

전송 계층의 역할은 크게 두 가지가 있다.

1. 오류 점검 : 데이터가 제대로 전달 되었는지 확인한다.
2. 포트 번호로 데이터 목적지 식별 : 어떤 애플리케이션에 데이터를 보내야하는지 식별한다.

1-1. 연결형 통신과 비연결형 통신

전송 계층의 특징은 크게 두 가지로 구분할 수 있다.

1. 신뢰성/정확성 지향 : 데이터를 목적지에 문제 없이 전달한다.
2. 효율성 지향 : 데이터를 빠르고 효율적으로 전달한다.

신뢰성/정확성을 지향하는 통신을 연결형 통신이라하고, 효율성을 지향하는 통신을 비연결형 통신이라 한다.

일반적으로 메일과 같이 데이터가 손상되지 않아야 하는 통신에는 연결형 통신을, 동영상과 같이 데이터가 유실되더라도 버벅거리지 않는 것이 중요한 통신에는 비연결형 통신을 사용한다.

연결형 통신에는 TCP 프로토콜이 사용되고, 비연결형 통신에는 UDP 프로토콜이 사용된다.

2. TCP

TCP는 신뢰성과 정확성을 지향하는 연결형 통신 프로토콜이다.

데이터를 보낼 때 전송 계층에서는 응용 계층에서 건내준 데이터에 전송 계층의 헤더를 붙여 캡슐화를 진행한다.

2-1. TCP 헤더

TCP로 전송할 때는 TCP 헤더를 붙이는데, 구조는 다음과 같다. TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 한다.

2-2. 3-way-handshake

데이터 전송하기 전에 안정적으로 연결을 수립하기 위해 패킷을 세 번 교환하는 과정을 3-way-handshake라고 한다.

TCP 연결을 안정적으로 수립하기 위해 코드 비트를 이용하며, 초기값은 모두 0이다.

URGACKPSHRSTSYNFIN
000000

연결 수립은 SYNACK를 통해 진행한다.

이 때 코드 비트의 SYNACK가 1로 활성화된다.

  1. SYN : 연결 확립 요청

    URGACKPSHRSTSYNFIN
    000010
  2. SYN + ACK : 연결 확립 응답 + 연결 확립 요청

    URGACKPSHRSTSYNFIN
    010010
  3. ACK : 연결 확립 응답

    URGACKPSHRSTSYNFIN
    010000

2-4. 4-way-handshake

TCP 연결을 끊기 위한 요청을 교환하는 것이다.

연결을 끊을 때는 코드 비트의 FINACK를 사용한다.

  1. FIN : 연결 종료 요청

    URGACKPSHRSTSYNFIN
    000001
  2. ACK : 연결 종료 응답

    URGACKPSHRSTSYNFIN
    010000
  3. FIN : 연결 종료 요청

    URGACKPSHRSTSYNFIN
    000001
  4. ACK : 연결 종료 응답

    URGACKPSHRSTSYNFIN
    010000

2-5. 일련 번호와 확인 응답 번호

TCP 연결이 수립되었으면 본격적으로 데이터를 전송할 수 있다. 송신측과 수신측은 데이터를 손실 없이 주고 받기 위해 일련 번호와 확인 응답 번호를 이용한다.

일련번호 (sequence number)

송신측에서 보내는 데이터가 몇 번째 데이터인지 나타낸다.

확인 응답 번호(acknowledgement number)

수신측에서 몇 번째 데이터를 받았는지 나타낸다.

확인 응답 번호는 몇 번째 데이터를 받았는지 알려주는 동시에, 다음 데이터는 어떤 것을 보내야 하는지 요청하는 정보를 담고 있다. 확인 응답 번호가 3201이라면 이전에 3200까지 데이터를 받았고, 다음 데이터는 3201부터 보내달라는 의미다.

일련번호 3001과 확인 응답 번호 4001은 3-way-handshake 연결 수립 과정에서 결정된다.
  1. 200바이트 데이터 송신

    일련번호확인 응답 번호
    30014001
  2. 3001번 데이터 잘 받았음 + 다음 3201번 데이터 요청

    일련번호확인 응답 번호
    40013201
  3. 200바이트 데이터 송신

    일련번호확인 응답 번호
    32014001
  4. 3201번 데이터 잘 받았음 + 다음 3401번 데이터 요청

    일련번호확인 응답 번호
    40013401

만약 데이터 전송 과정에서 데이터가 손상되거나 유실되었다면, 일정 시간 동안 대기한 후에 데이터를 재전송한다.

2-6. 윈도우 크기

TCP 통신 방식에서는 세그먼트 하나를 보낼 때마다 확인 응답을 하나씩 반환하는데, 주고 받는 데이터의 양이 많아질 수록 이는 매우 비효율적이다. 매번 확인 응답을 반환하는 대신 여러 개의 세그먼트를 한꺼번에 받고 응답을 반환할 수 있다.

수신측에서는 받은 세그먼트를 일시적으로 버퍼(buffer)에 저장한다. 그런데 대량의 세그먼트를 처리할 수 없는 경우 저장하지 못하고 넘쳐버리는 오버플로우가 발생할 수 있다. 이 때 TCP 헤더의 윈도우 크기 값을 통해 버퍼의 한계 크기에 따라 세그먼트를 보낸다.

TCP 헤더의 윈도우 크기는 얼마나 많은 용량의 데이터를 저장할 수 있는지 나타낸다.

3-way-handshake 과정에서 윈도우 크기를 판별한다.

1. 연결 확립 요청 (송신 측 윈도우 크기 보냄)
2. 연결 확립 응답 + 연결 확립 요청 (수신 측 윈도우 크기 보냄)
3. 연결 확립 응답

2-7. 포트 번호

포트 번호를 사용해 어떤 애플리케이션으로 데이터를 전송하는지 명시한다.

TCP 헤더의 목적지 포트 번호(Destination Port)의 16비트에는 데이터의 목적지가 어떤 애플리케이션으로 향하는지 알려주는 포트 번호를 담고 있다.

포트번호는 0~65535번을 사용할 수 있다. 그 중 0~1023번은 주요 프로토콜이 사용하도록 예약되어 있다. 이러한 포트를 well-known ports라고 한다.

애플리케이션포트 번호
SSH22
SMTP25
DNS53
HTTP80
HTTPS443

1024 번은 예약되어 있지 않지만 사용하지 않는 포트고, 1025번 이상은 랜덤 포트로 클라이언트의 송신 포트로 사용된다. 포트 번호를 붙이지 않고 통신을 하게 되면 컴퓨터에 데이터가 도착하더라도 애플리케이션까지 도달할 수 없다.

3. UDP

UDP는 효율성을 지향하는 비연결형 통신 프로토콜이다.

UDP는 비연결형 통신이기 때문에 TCP와 같이 3-way-handshake를 통해 연결을 확인하지 않는다. 데이터를 빠르게, 효율적으로 보내는 것이 목표라 확인 작업을 일일이 거치지 않는다.

3-1. UDP 헤더

UDP 프로토콜로 전송하는 데이터를 데이터그램(datagram)이라고 한다.
신뢰성과 정확성이 보장되지 않기 때문에 TCP 헤더와 비교해 매우 간단한 구조다.

3-2. 브로드캐스트(broadcast)

UDP 프로토콜을 사용하면 LAN에 속하는 모든 기기에 데이터를 일괄적으로 보낼 수 있다.

TCP는 목적지를 지정해 보내고, 데이터가 잘 전송되었는지 전부 확인하기 때문에 브로드캐스트와 같이 불특정 다수에게 데이터를 보내는 통신에는 적합하지 않다. 반면 UDP는 목적지에 관계 없이 LAN에서 데이터를 일괄 전송하며, 전송 확인도 하지 않기 때문에 데이터를 다수에게 일괄적으로 보낼 수 있다.

profile
채워나가는 과정

0개의 댓글