호우동의 개발일지

Today :

article thumbnail

전송 계층의 역할

  • 물리 계층, 데이터 링크 계층, 네트워크 계층만 있으면 목적지에 데이터를 보낼 수 있음
    → 하지만 데이터 손상 또는 유실 시 이 계층들에서는 아무것도 못함
    전송 계층의 존재 이유

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

 


전송 계층의 2가지 기능

  1. 오류를 점검하는 기능
    • 오류가 발생하면 데이터를 재전송하도록 요청
    • 데이터가 제대로 도착했는지 확인

      • cf. 네트워크 계층 → 목적지까지 데이터를 전달하는 것

  2. 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능
    • 컴퓨터가 데이터를 받아도 어떤 애플리케이션에 전달해야 하는지 모르면 안 됨
      • 예 : 홈페이지용 데이터인데 메일 프로그램에 전달하면 안 됨

 


연결혈 통신과 비연결형 통신

  • 전송 계층의 특징 → 신뢰성/정확성과 효율성
    • 신뢰성/정확성 : 데이터를 목적지에 문제없이 전달하는 것
    • 효율성 : 데이터를 빠르고 효율적으로 전달하는 것

  • 신뢰성/정확성을 가진 통신 → 연결형 통신
    • 신뢰할 수 있고 정확한 데이터를 전달하는 통신

  • 효율성을 가진 통신 → 비연결형 통신
    • 효율적으로 데이터를 전달하는 통신

 

연결형 통신과 비연결형 통신의 차이

  • 연결형 통신
    • 상대편과 확인해 가면서 통신하는 방식
    • 데이터를 보내도 되는지 요청을 하고, 상대방이 허락을 하면 데이터를 보냄
    • 전송 계층의 연결형 통신 프로토콜 → TCP

  • 비연결형 통신
    • 상대편을 확인하지 않고 일방적으로 데이터를 보내는 방식
    • 동영상을 볼 때 비연결형 통신 사용
      • 동영상은 빠른 전송이 필요 ← 데이터가 약간 유실되더라도 원활하게 보는 게 좋으니까

    • 전송 계층의 비연결형 통신 프로토콜 → UDP

 


TCP의 구조


TCP란?

  • 신뢰성과 정확성을 우선으로 하는 연결형 통신 프로토콜
  • 캡슐화할 때, TCP로 전송할 때 붙이는 헤더를 TCP 헤더라고 함
    • TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 부름

TCP 헤더 세부 구조
TCP 헤더 세부 구조

TCP 연결(Connection)

  • TCP 통신에서 데이터를 전송하려면 연결(connection)이라는 가상의 독점 통신로를 확보해야 함
    • 연결을 확립한 후에 데이터를 전송할 수 있음

  • 연결을 확립하는 방법
    • TCP 헤더의 코드 비트 부분에 저장
      • TCP 헤더 코드 비트
        코드 비트 부분
        코드 비트 부분

        • 헤더의 107번째 비트 ~ 112번째 비트까지의 6비트
        • 연결의 제어 정보가 기록되는 곳
        • 코드 비트는 각 비트별로 역할이 있음.(초기값 0, 활성화 시 1)
          • SYN : 연결 요청
          • ACK : 확인 응답

 


3-way 핸드셰이크란?

  • 연결은 SYN과 ACK을 사용하여 확립할 수 있음
  • 신뢰할 수 있는 연결을 하기 위해 데이터를 전송하기 전에 패킷을 3번 교환
    → 3-way 핸드셰이크(3-way handshake)

  • 3-way 핸드셰이크 : 데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것
    • 데이터 통신에서도 확실하게 데이터가 전송되었는지 확인하면서 이루어지는 통신수단

 

패킷 교환 과정

패킷 교환 과정

  1. 통신을 위해 A에서 B로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
    • 통신을 하기 위해서는 허가를 받아야 한다.
      SYN 활성화됨
      코드 비트 부분에서 SYN 활성화
  2. B는 A가 보낸 요청을 받은 후 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보냄
    동시에 B도 A에게 데이터 전송 허가를 받기 위한 SYN을 보낸다.
    코드비트부분에서 SYN과 ACK 활성화
    코드 비트 부분에서 ACK과 SYN 활성화
  3. B의 요청을 받은 A는 허가한다는 응답으로 ACK를 B로 보낸다.
    코드 비트 부분에서 ACK 활성화
    코드 비트 부분에서 ACK 활성화

데이터 전송 후 연결을 끊는 과정

데이터 전송 후 연결을 끊는 과정
데이터 전송 후 연결을 끊는 과정

  1. A에서 B로 연결 종료 요청(FIN)을 보낸다.
    FIN 활성화
    FIN 활성화
  2. B에서 A로 연결 종료 응답(ACK)을 반환한다.
    ACK 활성화
    ACK 활성화
  3. 또한 B에서 A로 연결 종료 요청(FIN)을 보낸다.
    FIN 활성화
    FIN 활성화
  4. A에서 B로 연결 종료 응답(ACK)을 반환한다.
    ACK 활성화
    ACK 활성화

 


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

일련번호와 확인 응답 번호 비트
일련번호와 확인 응답 번호의 위치

 

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

  • 3-way 핸드셰이크가 끝나고 실제 데이터를 주고받을 때 TCP 헤더의 일련번호와 확인 응답번호를 사용
    • 일련번호 : 송신 측에서 수신 측에 ‘해당 데이터가 몇 번째 데이터인지’ 알려 주는 역할
      • 전송 데이터에 일련번호를 부여하면 수신자는 원래 데이터의 몇 번째 데이터를 받았는지 인지 가능
      • 일련번호는 순서, 연속된 번호라는 뜻이 있음

    • 확인 응답 번호 : 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할
      • 확인 응답 번호는 다음 번호의 데이터를 요청하는데도 사용 → 확인 응답
        • 예 : 10번 데이터를 수신하면 11번 데이터를 송신 측에 요청

 

일련번호와 확인 응답 번호를 통한 데이터 송수신

일련번호와 확인응답 이용한 송수신
일련번호와 확인 응답 번호를 이용한 데이터 송수신

  • 3-way 핸드셰이크(데이터 전송 전)로 연결 수립이 이루어질 때 통신에 사용하는
    일련번호인 3001번과 확인 응답 번호인 4001번이 결정된 상황
  1. A는 B로 200바이트의 데이터를 전송한다.
  2. B는 200바이트 수신 후, 다음에 수신하고자 하는 데이터 번호를 확인응답 번호에 넣는다.
    다음에 수신하고자 하는 데이터는 3001+200 = 3201번을 요청
  3. A는 B로 3201번부터 200바이트의 데이터를 전송
  4. 2번과 같은 과정으로 200바이트 수신 후, 3201+200 = 3401번을 요청
  • 여기서 나오는 TCP의 특징 → 재전송 제어
    • 재전송 제어 : 일련번호와 확인 응답 번호를 사용해서 데이터 손상/유실 시 데이터를 재전송
      • 데이터를 전송하는 도중에 오류가 발생하면 일정 시간 대기 후 재전송

 


윈도우 크기

윈도우 크기 비트 위치
윈도우 크기 비트 위치

  • 세그먼트(데이터)를 하나씩 보낼 때마다 확인 응답을 반환하는 통신은 효율인 낮음
    세그먼트를 연속해서 보내고 난 다음 확인 응답을 반환하면 효율이 높아짐

  • 버퍼(buffer) : 세그먼트를 일시적으로 보관하는 장소
    • 버퍼 덕에 세그먼트를 연속해서 보내도 수신 측은 대응할 수 있음
      → 확인 응답의 효율이 높아짐

    • 오버플로가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 함
      • 오버플로 : 수신 측은 대량으로 데이터가 전송되면 보관하지 못하고 넘쳐버리는 것

 

윈도우 크기의 정의

  • 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타내는 것
  • 버퍼의 한계 크기
  • 윈도우 크기의 초깃값은 3-way 핸드셰이크를 할 때 판단
    • 3-way 핸드셰이크를 하는 동안 서로의 윈도우 크기를 확인함
    • 상대방 버퍼의 한계값을 인지하여 세그먼트(데이터)가 오버플로 되지 않도록 보내야 함

3-way 핸드셰이크를 할 때 윈도우 크기를 알게됨
3-way 핸드셰이크를 할 때 서로의 윈도우 크기를 알게 됨

 

버퍼를 이용하여 세그먼트를 보낼 때

버퍼를 이용한 TCP 통신
버퍼를 이용한 TCP 통신

  • 수신 측이 윈도우 크기를 가지고 있다면 확인 응답을 받지 않고도 세그먼트를 연속적으로 전송 가능

 


포트 번호란?

포트 번호 비트 위치
포트 번호 비트 위치

  • 출발지 포트 번호목적지 포트번호로 나뉨
  • 전송 계층의 역할인 ‘전송된 데이터의 목적지를 구분하는 역할’을 가능하게 함
    • TCP 헤더에 포트 번호가 있기 때문에 애플리케이션을 구분할 수 있다.
      • 동작하는 애플리케이션은 각각 포트 번호가 있어 다른 애플리케이션과 구분됨
      • 어떤 애플리케이션이 사용되고 있는지 구분하기 위해선 TCP는 포트 번호가 필요
        • 포트 번호를 붙이지 않고 통신을 하면 데이터가 도착해도 애플리케이션까지 도달 못함

 

포트 번호의 구분

  • 포트 번호는 0 ~ 65535번을 사용 가능
    • 0 ~ 1023번 포트 : 주요 프로토콜이 사용하도록 예약 → well-known port라고 부름
      • 일반적으로 서버 측 애플리케이션에서 사용됨

    • 1024번 포트 : 예약되어 있지만 잘 사용되지 않는 포트
    • 1025번 이상 ~ 65535번 : 클라이언트 측의 송신 포트로 사용 → 랜덤 포트라고 부름

 

포트번호를 붙여 통신하는 과정

포트번호를 붙여 통신
포트번호를 붙여 통신

  • 컴퓨터 A의 웹 브라우저가 접속할 때 임의의 포트가 자동으로 할당(여기서는 1025번)
    • 때문에 클라이언트 측에서는 포트 번호를 정할 필요가 없음
    • 서버 측은 포트 번호를 정해야 함

 


UDP의 구조

  • 비연결형 통신으로 효율성을 중요하게 여기는 프로토콜
    → 장점 : 데이터를 효율적으로 빠르게 보내는 것

  • 동영상 서비스 같은 곳에 사용

 


UDP 헤더

  • UDP 헤더가 붙은 데이터를 UDP 데이터그램이라고 함

확인하지 않고 데이터만 보냄
확인하지 않고 데이터만 보냄

  • UDP는 상대방을 확인하지 않고 연속해서 데이터를 보냄 → 전송 속도가 빠르다.
    • 확인 응답을 하지 않음

 


브로드캐스트

  • UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있음
    → 이를 브로드캐스트(broadcast)라고 함

  • TCP는 데이터를 전송할 때 확인 응답을 해야 하기 때문에 불특정 다수에게 보내는 통신에는 부적합
    • UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보냄
      But, TCP는 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신을 할 수 없음