모두의 네트워크 정리 (6)

조민서·2021년 10월 7일
3

네트워크

목록 보기
7/7
post-thumbnail

🌏 6장 전송 계층: 신뢰할 수 있는 데이터 전송하기


OSI 모델 4계층인 전송 계층에 대해서 알아보자.

🚩 이 장의 목표

- 전송 계층의 역할을 이해한다.
- 연결형 통신과 비연결형 통신을 이해한다.
- TCP를 이해한다.
- UDP를 이해한다.


LESSON 23. 전송 계층의 역할

전송 계층의 역할에 대해 알아보자.


1. 전송 계층의 두 가지 역할

네트워크 계층에서 다른네트워크로 데이터를 전송하려면 라우터가 필요하고, 라우터의 라우팅 기능을 사용하여 전송할 수 있다고 했다. 근데 라우터의 라우팅 기능을 통해 데이터를 전송하더라도 목적지에 도착하지 못할 수도 있을까?

답) 그렇다 라우팅 정보가 잘못될 수도 있고 많은 라우터를 경유하는 도중에 라우터에 문제가 생기거나 패킷이 손상될수 있다.

물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있다. 하지만 데이터가 손상되거나 유실되더라도 이 3계층에서는 아무것도 할 수 없다.

전송 계층목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다.


그럼 전송 계층은 어떻게 신뢰할 수 있는 데이터를 전달할까?

우선 전송 계층에는 오류를 점검하는 기능이 있다. 오류가 발생하면 데이터를 재전송하도록 요청한다.

그리고 하나의 기능이 더 있다. 예를 들어 음악 프로그램과 메일 프로그램 두 개가 있는데, 메일 프로그램을 음악 애플리케이션에 전송하면 안된다. 이 처럼 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능도 있다.


2.연결형 통신과 비연결형 통신

전송 계칭의 특징을 간단히 설명하면 신뢰성/정확성효율성으로 구분 할 수 있다. 신뢰성/정확성은 데이터를 목적지에 문제없이 전달하는 것이고, 효율성은 데이터를 빠르고 효율적으로 전달하는 것이다. 여기서
신뢰할 수 있고 정확한 데이터를 전달하는 통신을 연결형 통신이라고 하고,
효율적으로 데이터를 전달하는 통신을 비연결형 통신이라고 한다.


위 사진을 보자 우선 TCP는 연결형 통신이고, UDP는 비연결형 통신이다.

연결형 통신은 클라이언트에서 메시지1을 서버로 보내고, 서버에서 메시지1을 받았다는 ACK를 클라이언트로 보내고, 클라이언트에서는 ACK를 받고 메시지2를 서버로 보낸다. (동기)

비연결형 통신은 메시지1을 보내고 서버에서 메시지를 받았다는 확인 없이 바로바로 메시지 2, 3을 보낸다. (비동기)


3. Lesson 23 정리

  • 전송 계층은 데이터를 제대로 전달하는 역할을 하며, 오류를 점검하는 기능도 한다.
  • 전송 계층은 전송된 데이터의 목적지가 어떤 애플리케이션인지 확인한다.
  • 연결형 통신은 신뢰할 수 있고 정확하게 데이터를 전송하는 통신 방식이다.
  • 비연결형 통신은 신뢰성을 보장하지 않지만 효율적으로 데이터를 전송하는 통신 방식이다.

LESSON 24. TCP의 구조

전송 계층에서 신뢰할 수 있는 정확한 통신을 제공하는 TCP 프로토콜의 구조에 대해 알아보자.


1. TCP란?

프로토콜 데이터 단위

물리 계층: 비트
데이터 링크 계층: 이더넷 헤더가 추가된 프레임
네트워크 계층: IP 헤더가 추가된 IP 패킷
전송 계층: TCP 헤더가 추가된 세그먼트
응용 계층: 데이터


2. 3-way 핸드셰이크란?

연결(connection)은 아래 사진과 같이 SYNACK를 사용하여 확립 할 수 있다.

  1. 통신을 하려면 서버에게 허가를 받아야 하므로, 먼저 클라이언트에서 서버로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.

  2. 서버는 클라이언트가 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보낸다. 동시에 서버도 클라이언트에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)를 보낸다.

  3. 서버의 요청을 받은 클라이언트는 서버로 허가한다는 응답으로 연결 확립 응답(ACK)를 보낸다.


SYN 과 ACK를 사용한 연결 확립 과정 (코드 비트)

  1. 연결 확립 요청(SYN)
URGACKPSHRSTSYNFIN
000010
  1. 연결 확립 응답(ACK) + 연결 확립 요청(SYN)
URGACKPSHRSTSYNFIN
010010
  1. 연결 확립 응답(ACK)
URGACKPSHRSTSYNFIN
010000

이처럼 데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세번 교환하는 것을 3-WAY 핸드셰이크(three-way handshake)라고 한다. '핸드셰이크'는 사람들이 상대방을 확인하고 악수를 하는 것처럼 데이터 통신에서도 확실하게 데이터가 전송되었는지 확인하면서 이루어지는 통신 수단이다.


데이터를 전송할 때뿐만 아니라 전송한 후에도 연결을 끊기 위한 요청을 교환해야 한다. 연결을 끊을 때는 FINACK를 사용한다. FIN은 연결 종료를 뜻한다.

  1. 클라이언트에서 서버로 FIN을 보낸다.
  2. 서버에서 클라이언트로 ACK를 반환한다.
  3. 서버에서 클라이언트로 FIN을 보낸다.
  4. 클라이언트에서 서버로 ACK를 반환한다.

위의 상황이 그림이 안그려진다면 위에 SYN, ACK 과정을 다시보자.

연결을 확립할 때는 SYN을 사용하고 연결을 종료할 때는 FIN을 사용한다.


3. Lesson 24 정리

  • 전송 계층에서는 TCP 헤더가 붙는다.
  • TCP 헤더가 붙은 데이터를 세그먼트라고 한다.
  • 연결(connection)을 확립하기 위해 TCP 헤더에 있는 코드 비트를 사용한다.
  • 코드 비트중 'SYN'은 연결 요청, 'ACK'는 연결 응답, 'FIN'은 연결 종료를 뜻한다.
  • 연결 확립을 위해 패킷 교환을 세 번 하는데 이를 3-way handshake라고한다.
  • 연결을 확립할 때는 'SYN'과 'ACK'를 사용하고, 연결을 종료할 때는 'FIN'과 'ACK'를 사용한다.

LESSON 25. 일련번호와 확인 응답 번호의 구조

3-way 핸드셰이크 이후 데이터 전송에 사용되는 TCP 헤더의 일련번호와 확인 응답 번호에 대해 알아보자.

1. 일련번호와 확인 응답 번호란?

3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 다음 사진과 같이 TCP 헤더의 일련 번호(sequence number)확인 응답 번호(acknowledgement number)를 사용한다.

TCP는 데이터를 분할해서 보내는데 일련번호는 송신 측에서 수신 측에 '이 데이터가 몇 번째 데이터인지' 알려 주는 역할을 한다. 전송된 데이터에 일련번호를 부여하면 수신자는 원래 데이터의 몇 번째 데이터를 받았는지 알 수 있다.

확인 응답 번호는 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할을 한다. 그래서 이 번호는 다음 번호의 데이터를 요청하는데도 사용한다. 예를 들어 10번 데이터를 수신하면 11번 데이터를 송신 측에 요청한다. 이것을 확인 응답이라고 한다.


또한 데이터가 항상 올바르게 전달되는 것은 아니다. 어떻게 할까?

일련번호확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송하게 되어있다. 이것을 재전송 제어라고 한다.


2. 윈도우 크기란?

TCP의 특징은 세그먼트(데이터) 하나를 보낼 때마다 확인 응답을 한 번 반환하는 통신이다.

이와 같은 통신은 한 번 보낼 때마다 한 번 응답을 반환하는 방식이어서 효율이 낮다. 어떻게 할까?

매번 확인 응답을 기다리는 대신 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아진다. 그리고 상대방에게 쌓인 세그먼트는 버퍼(buffer)라는 장소에 일시적으로 보관한다.

하지만 수신 측은 대량으로 데이터가 전송되면 보관하지 못하고 넘쳐 버리는 경우도 있다. 이것을 오버플로(overflow)라고 한다.

오버플로가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 한다. 그것이 TCP 헤더의 윈도우 크기(window size) 값에 해당한다.

윈도우 크기는 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타낸다. 즉, 확인 응답을 일일이 하지 않고 연속해서 송수신할 수 있는 데이터 크기다.
이 윈도우 크기의 초깃값은 3-way 핸드셰이크를 할 때 판단한다.
참고


3. Lesson 25 정리

  • 3-way 핸드셰이크 이후 데이터를 전송할 때는 TCP 헤더의 일련번호확인 응답 번호가 사용된다.
  • 데이터를 재전송하는 것을 재전송 제어라고 한다.
  • 수신한 세그먼트(데이터)를 일시적으로 저장하는 장소를 버퍼라고 한다.
  • 데이터 크기가 버퍼 크기를 넘어서는 것을 오버플로라고 한다.
  • 버퍼 용량의 크기를 윈도우 크기라고 한다.

LESSON 26. 포트 번호의 구조

데이터의 목적지가 어떤 프로그램인지 구분하는 역할을 하는 포트 번호에 대해 알아보자.

1. 포트 번호란?

이번 강의에서 연결 확립, 재전송 제어, 윈도우 제어에 대해 살펴보았다. 이러한 기능에 의해 TCP는 데이터를 정확하게 전달할 수 있다.

전송 계층에는 이외에도 한 가지 역할이 더 있었다. 전송된 데이터의 목적지가 어떤 애플리케이션(웹 브라우저나 메일 프로그램 등)인지 구분하는 역할이다.

예를 들어 목적지가 어떤 애플리케이션인지 구분하지 못하면 사용자가 홈페이지를 보기 위해 웹 브라우저를 사용하는 데도 메일 프로그램으로 데이터가 전송될 수 있다. 즉, 어느 애플리케이션의 데이터인지 알 수 없기 때문에 일어나는일이다.


그래서 위 사진처럼 TCP헤더의 발신지 포트 주소목적지 포트 주소가 필요하다. 이 TCP 헤더에 포트 번호가 있기 때문에 애플리케이션을 구분할 수 있게 된다.

포트 번호는 0~65535번을 사용할 수 있다.
0~1023번 포트는 주요 프로토콜이 사용하도록 예약되어 있다. 이러한 포트를 잘 알려진 포트(well-known ports)라고 한다. 1024번은 예약되어 있지만 사용되지는 안흔 포트고, 1025번 이상은 랜덤 포트라고 해서 클라이언트 측의 송신 포트로 사용한다.

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

이처럼 동작하는 애플리케이션은 각각 포트 번호가 있어서 다른 애플리케이션과 서로 구분된다. 데이터를 전송할 때는 상대방의 IP 주소가 필요하지만, 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP는 포트 번호가 필요하다.


위 사진과 같이 컴퓨터 1에서 컴퓨터 2까지 포트 번호를 붙여서 통신하면 원하는 애플리케이션까지 데이터를 보낼 수 있다.

컴퓨터 1의 웹브라우저로는 왜 1025번 포트 번호가 할당될까?

웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동으로 할당된다.
그래서 서버 측에서는 포트 번호를 정해 둬야 하지만 클라이언트 측은 정하지 않아도 자동으로 할당 된다.


2. Lesson 26 정리

  • 포트 번호는 어떤 애플리케이션인지 구분하는 역할을 한다.
  • 포트 번호는 0~65535번을 사용한다. 0~1023번은 잘 알려진 포트(well-known ports)라고 하고 1025번 이후는 랜덤 포트라고 한다.

LESSON 27. UDP의 구조

전송 계층에서 효율적으로 통신할 수 있도록 돕는 UDP 프로토콜의 구조에 대해 알아보자.

1. UDP란?

앞서 말한 TCP는 신뢰할 수 있는 데이터를 상대방에게 확실하게 전달하는 것이다.

UDP는 비연결형 통신이라서 데이터를 전송할 때 TCP처럼 시간이 걸리는 확인 작업을 일일이 하지 않는다. UDP는 TCP와 달리 효율성을 중요하게 여기는 프로토콜 이라 TCP와 같은 신뢰성과 정확성을 요구하게 되면 효율이 떨어진다.

UDP의 장점은 데이터를 효율적으로 빠르게 보내는 것이라서 스트리밍 방식으로 전송하는 동영상 서비스와 같은 곳에 사용된다. 동영상을 TCP 데이터 통신으로 전송하면 수신을 확인하는데 시간이 너무 오래 걸려서 동영상을 원할하게 볼 수 없다. 그래서 동영상 같은 건 대개 빠른 UDP를 사용한다.


2. UDP 헤더란?

아래 사진을 보자. UDP 에서는 UDP 헤더가 붙은 데이터를 UDP 데이터 그램이라고 한다.


TCP와 UDP 차이


위 사진을 보자. TCP는 번거롭게 여러 번 확인 응답을 보내면서 전송하지만, UDP는 효율성과 빠른 속도가 중요해서 상대방을 확인하지 않고 연속해도 데이터를 보낸다. 또한 UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있다. 이것을 브로드캐스트라고 한다.


TCP는 브로드캐스트 통신을 할 수 없나?

TCP는 3-way 핸드셰이크와 같이 데이터를 전송할 때도 확인 응답을 하나씩 보내야 하기 떄문에 브로드캐스트와 같이 불특정 다수에게 보내는 통신에는 적합하지 않다.

UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보내지만, TCP는 목적지를 지정하지 않으면 안되기 떄문에 일괄 통신을 할 수 없다.


3. Lesson 27 정리

  • UDP는 데이터를 효율적이고 빠르게 보낼 때 사용되는 프로토콜이다.
  • UDP는 UDP 헤더가 있지만 TCP 헤더에 비해 간단하다.
  • UDP 헤더가 있는 데이터를 UDP 데이터그램이라고 한다. > TCP 헤더가 있는 데이터는 세그먼트
  • UDP는 랜에서 불특정 다수에게 브로드캐스트로 데이터를 일괄 전송한다.

🎈 용어 정리

전송 계층(transport layer, 트랜스포트 계층) : 신뢰할 수 있는 데이터를 순차적으로 전달하는 역할을 하므로 상위 계층들이 데이터 전달의 유효성이나 효율성을 신경 쓰지 않도록 한다. 데이터가 중복되거나 누락되지 않고 오류 없이 순서에 맞게 전송되도록 관리한다.

연결형(connection-oriented) : 데이터를 교환하기 전에 연결을 맺고 데이터를 교환하는 동안 계속 연결을 관리하는 프로토콜의 한 형태다.

비연결형(connectionless) : 연결(connection)에 대한 초기화 과정이 없는 통신이다.

TCP(Transmission Control Protocol, 전송 제어 프로토콜) : 전송 계층의 프로토콜은 연결형(connection-oriented) 통신 방식이며 신뢰할 수 있는 데이터 전송을 보장한다.

대역폭(bandwidth) : 정해진 시간 동안 전송될 수 있는 데이터의 양(주로 속도를 의미한다)을 말한다. 대역폭은 제한적이다.

UDP(User Datagram Protocol) : 정보를 서로 주고받을 때 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜이다. 연결을 맺을 필요가 없고 정보를 보내거나 받는다는 신호도 필요하지 않다.

3-way 핸드셰이트(three-way handshake) : TCP 통신에서 사용하는 신뢰성을 제공하기 위한 통신 방식이다. 컴퓨터 간에 연결을 맺기 위한 초기화 과정으로 세 단계로 되어 있어서 three-way라고 부른다.

잘 알려진 포트(well-known ports) : 특정 애플리케이션이 사용할 수 있도록 예약되어 있는 포트로 1~1023번 포트를 말한다.

브로드캐스트(broadcast) : 네트워크의 모든 컴퓨터와 장비에 같은 패킷을 일괄 전송하는 방식이다.

일련번호(sequence number) : TCP에서는 데이터를 보낼 때마다 각 데이터에 고유한 번호를 부여해서 전송을 시도한다. 이 번호를 이용하여 TCP 패킷의 순서를 제어할 수 있다.

포트 번호(port number) : 컴퓨터가 데이터 통신을 할 때 통신하고자 하는 네트워크 서비스나 특정 프로세스를 식별하는 노리 단위다. 포트 번호는 0~65535번을 사용할 수 있다. 0~1023번은 잘 알려진 포트(well-known ports)로 특정 애플리케이션이 사용할 수 있도록 예약된 번호다.

profile
내 두뇌는 휘발성 메모리다. 😪

2개의 댓글

comment-user-thumbnail
2022년 3월 9일

도움 많이 받았습니다 감사합니다

1개의 답글