본문 바로가기
개인공부/모두의 네트워크

모두의 네트워크 6장 - 전송 계층 : 신뢰할 수 있는 데이터 전송하기

by 하고싶은건많은놈 2023. 2. 19.

Lesson 23 - 전송 계층의 역할

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

전송 계층에는 오류를 점검하는 기능과 전송된 데이터의 목적지가 어떤 어플리케이션인지 식별하는 기능이 존재

 

전송 계층의 특징 중 신뢰성/정확성을 확보한 통신을 연결형 통신, 효율성을 확보한 통신을 비연결형 통신이라고 함

연결형 통신은 전송 과정에서 데이터 확인 절차를 거치고, 비연결형 통신은 확인 절차 없이 일방적으로 보냄

연결형 통신 프로토콜에는 TCP / 비연결형 통신 프로토콜에는 UDP를 사용


Lesson 24 - TCP의 구조

연결형 통신 프로토콜인 TCP에서는 TCP 헤더를 붙임

TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 하며, 구조는 아래와 같음

  1. 출발지 포트 번호(16비트)
  2. 목적지 포트 번호(16비트)
  3. 일련번호(32비트)
  4. 확인 응답 번호(32비트)
  5. 헤더 길이(4비트)
  6. 예약 영역(6비트)
  7. 코드 비트(6비트) : 연결의 제어 정보 기록
    비트는 각각 URG / ACK / PSH / RST / SYN / FIN 으로 이루어져있으며, 초기값은 0이고 활성화시 1로 바뀜
  8. 윈도우 크기(16비트)
  9. 체크섬(16비트)
  10. 긴급 포인터(16비트)
  11. 옵션

TCP를 사용한 연결형 통신을 위해서는 먼저 연결(connection)이라는 가상의 독점 통신로를 확보해야함

연결 확립을 위해서는 코드 영역의 SYN(연결 요청)ACK(확인 응답)가 필요

이를 사용한 패킷 교환 과정을 3-way 핸드셰이크(three-way handshake)라고 함

  1. 컴퓨터 1에서 컴퓨터 2로 연결 확립 요청(SYN)을 보냄
  2. 컴퓨터 2는 받은 SYN에 대한 응답(ACK)을 보내고, 컴퓨터 2 역시 컴퓨터 1에 SYN을 보냄
  3. 컴퓨터 1이 받은 SYN에 대한 응답을 보냄

연결 종료시에는 FIN(연결 종료)와 ACK를 사용

  1. 컴퓨터 1에서 컴퓨터 2로 연결 종료 요청(FIN)을 보냄
  2. 컴퓨터 2에서 컴퓨터 1로 연결 종료 응답(ACK)을 반환
  3. 컴퓨터 2에서도 컴퓨터 1로 FIN을 보냄
  4. 컴퓨터 1에서 컴퓨터 2로 ACK을 반환

Lesson 25 - 일련번호와 확인 응답 번호의 구조

3-way 핸드셰이크로 연결이 된 이후 실제 데이터를 송수신할때는 TCP 헤더의 일련번호(sequence number)확인 응답 번호(acknowledgement number)를 사용

일련번호 : 송신측에서 수신측에 데이터가 몇번째 데이터인지 알려주기 위한 번호

확인 응답 번호 : 수신측이 몇번째 데이터를 수신했는지 송신측에 알려줌

데이터 전송 과정은 아래와 같음

  1. 컴퓨터 1에서 컴퓨터 2로 일련번호 3001번에 해당하는 200바이트 데이터를 전송
  2. 컴퓨터 2는 200바이트를 수신 후 확인 응답 번호로 3201번을 보냄
  3. 컴퓨터 1은 컴퓨터 2로 일련번호 3201번에 해당하는 200바이트의 데이터를 전송
  4. 컴퓨터 2는 200바이트를 수신 후 확인 응답 번호로 3401번을 보냄

1~4번 과정을 전송 완료까지 반복하며, 일련번호 및 확인 응답 번호가 올바르지 않을경우 데이터가 손상되거나 유실된 경우이기 때문에 재전송 제어가 발생함

재전송 제어가 발생한경우 일정시간동안 대기 후 데이터가 재전송됨

 

단, 세그먼트를 하나 보낼 때마다 응답을 반환할경우 효율이 낮기 때문에 세그먼트를 연속해서 보내고 난 뒤 확인 응답을 반환하여 효율을 높임

이 때 버퍼(buffer)에 전송된 세그먼트를 일시적으로 보관하여 수신측이 대응할 수 있도록 함

그러나 세그먼트가 버퍼의 크기 이상으로 전송될경우 오버플로우(overflow)가 발생할 수 있기 때문에 버퍼의 한계 크기에 해당하는 값을 TCP 헤더의 윈도우 크기(window size)에 입력함

윈도우 크기의 초기값은 3-way 핸드셰이크 과정에서 판단되며, 따라서 확인 응답을 받지 않고도 세그먼트를 연속적으로 전송할 수 있음


Lesson 26 - 포트 번호의 구조

전송된 데이터가 어떤 어플리케이션인지 구분하기 위해서 포트 번호(port number)를 사용

포트 번호로는 0 - 65535번을 사용할 수 있음

이중 0 - 1023번 포트는 잘 알려진 포트(well-known ports)로서 일반적으로 사용하는 서버측 어플리케이션에 사용됨

  • SSH - 22 / SMTP - 25 / DNS - 53 / HTTP - 80 / POP3 - 110 / HTTPS - 443

1024번은 예약되어있으나 잘 사용되지 않고, 1025번 이상은 랜덤 포트로서 클라이언트의 송신 포트로 사용됨

웹 브라우저 접속시 임의의 포트가 자동으로 할당되기 때문에 클라이언트측의 포트는 정할 필요가 없음


Lesson 27 - UDP의 구조

UDP는 비연결형 통신이기 때문에 데이터 전송시 확인 작업을 거치지 않아 신뢰성과 정확성이 떨어지지만, 효율성이 좋고 속도가 빠름

따라서 스트리밍 방식의 동영상 서비스와 같은 곳에 사용됨

 

UDP도 데이터 전송시 UDP 헤더가 붙으며, UDP 헤더가 붙은 데이터를 UDP 데이터그램이라고 함

UDP 데이터 그램의 구조는 아래와 같음

  1. 출발지 포트 번호(16비트)
  2. 목적지 포트 번호(16비트)
  3. 길이(16비트)
  4. 체크섬(16비트)

UDP 사용시 랜에 있는 컴퓨터나 장비에 데이터를 일괄적으로 보내는 브로드캐스트(broadcast)가 가능


 

연습문제

1. TCP는 연결형 통신이고 UDP는 비연결형 통신이다.

2. TCP 헤더가 있는 데이터를 세그먼트라고 하고 UDP 헤더가 있는 데이터를 UDP 데이터그램이라고 한다.

3. 연결 확립을 위해 사용하는 코드 비트는 SYNACK다.

4. 연결을 확립하기 위한 세 번의 통신 교환을 3-way 핸드셰이크라고 한다.

5. 연결을 종료하기 위해 사용하는 코드 비트는 FINACK다.

6. 데이터를 재전송하는 것을 재전송 제어라고 한다.

7. 받은 세그먼트(데이터)를 일시적으로 저장하는 장소를 버퍼라고 한다.

8. 데이터가 넘치는 것을 오버플로우라고 한다.

9. 포트는 목적지가 어떤 어플리케이션인지 구분하는 역할을 한다.

10. 포트 번호는 0부터 65535까지 사용할 수 있다.

용어정리

  • 전송 계층(transport layer, 트랜스포트 계층) : 신뢰할 수 있는 데이터를 순차적으로 전달하는 역할으로 데이터가 중복되거나 누락되지 않고 오류 없이 순서에 맞게 전송되도록 관리, 상위 계층들이 데이터 전달의 유효성 및 효율성을 신경쓰지 않도록 함 
  • 연결형(connection-oriented) : 데이터를 교환하기 전에 연결을 맺고 데이터를 교환하는동안 계속 연결을 관리하는 프로토콜의 한 형태
  • 비연결형(connectionless) : 연결에 대한 초기화 과정이 없는 통신
  • TCP(Transmission Control Protocol) : 연결형 통신 방식으로 신뢰할 수 있는 데이터 전송을 보장
  • UDP(User Datagram Protocol) : 비연결형 통신 방식으로 연결을 맺거나 정보 송수신의 신호 없이 일방적으로 데이터를 전달
  • 3-way 핸드셰이크(three-way handshake) : TCP 통신에서 사용하는 신뢰성을 제공하기 위한 통신 방식으로 컴퓨터간 연결을 맺기 위한 세 단계의 초기화 과정
  • 포트 번호(port number) : 컴퓨터가 데이터 통신을 할 때 통신하고자하는 네트워크 서비스 혹은 특정 프로세스를 식별하는 논리 단위
  • 잘 알려진 포트(well-known ports) : 특정 어플리케이션이 사용할 수 있도록 예약되어있는 1 - 1023번  포트
  • 브로드캐스트(broadcast) : 네트워크의 모든 컴퓨터 및 장비에 같은 패킷을 일괄적으로 전송하는 방식
  • 일련번호(sequence number) : TCP에서 패킷의 순서를 제어하기 위해 데이터에 부여하는 고유한 번호

댓글