CS

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

개발자 조이 2024. 8. 7. 23:09
728x90
반응형

 

 

23 전송 계층의 역할


전송 계층의 역할

  • 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요 → 물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있지만, 데이터가 손상되거나 유실될 경우의 대비책은 없음
  1. 오류를 점검하는 기능 (오류가 있을 경우 데이터를 재전송 하도록 요청)
  2. 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능

연결형 통신

  • 상대편과 확인해가면서 통신 → 신뢰성/정확성
  • TCP 프로토콜 사용 (Transmission Control Protocol : 전송 제어 프로토콜)

비연결형 통신

  • 상대편을 확인하지 않고 일방적으로 데이터를 전송 → 효율성
  • 효율성이 더 중요한 동영상 시청 시 사용 (데이터가 약간 유실되더라도 버벅이지 않고 원할하게 영상을 보는 것이 더 중요하기 때문)
  • UDP 프로토콜 사용 (User Datagram Protocol : 사용자 데이터그램 프로토콜)

 

24 TCP의 구조


TCP

  • 신뢰성정확성을 우선으로 하는 연결형 통신
  • TCP 헤더 : TCP로 전송할 때 붙이는 헤더
    • 출발지 포트 번호 (16비트)
    • 목적지 포트 번호 (16비트)
    • 일련번호 (32비트)
    • 확인 응답 번호 (32비트)
    • 헤더 길이 (4비트)
    • 예약 영역 (6비트)
    • 코드 비트 (6비트)
    • 윈도우 크기 (16비트)
    • 체크섬 (16비트)
    • 긴급 포인터 (16비트)
    • 옵션
  • 세그먼트 (segment) : TCP 헤더가 붙은 데이터 = [ TCP헤더 + 데이터 ]
  • 데이터 전송 전에 연결 (connection)이라는 가상의 독점 통신로를 확보해야함 → 연결 확립 후 데이터 전송
  • 코드비트
    • 연결의 제어 정보가 기록되는 곳 (각 1비트씩 총 6비트)
      • URG
      • ACK : 확인 응답
      • PSH
      • RST
      • SYN : 연결 요청
      • FIN
    • 초깃값은 0, 비트 활성화 시 1
    • 연결을 확립하기 위해서는 이 중 SYNACK 필요

3-way 핸드셰이크

  • 연결을 확립하기 위해 패킷 요청을 3번 교환하는 것, 컴퓨터 간에 연결을 맺기 위한 초기화 과정
    • 연결은 SYN과 ACK를 사용하여 확립
    • 신뢰할 수 있는 연결을 위해, 데이터를 전송하기 전 패킷 교환
    • 패킷 교환 과정
      1. C1 → 연결 확립 요청 SYN → C2
      2. C1 ← 연결 확립 응답 + 연결 확립 요청 SYN + ACK ← C2
      3. C1 → 연결 확립 응답 ACK → C2
    • 패킷 교환 과정 이후 코드비트의 SYN과 ACK가 1로 활성화
  • 데이터 전송 후에는 연결을 끊기 위한 요청 공유 필요
    • 연결 종료에는 FIN과 ACK를 사용
    • 연결 종료를 위한 과정
      1. C1 → 연결 종료 요청 FIN → C2
      2. C1 ← 연결 종료 응답 ACK ← C2
      3. C1 ← 연결 종료 요청 FIN ← C2
      4. C1 → 연결 종료 응답 ACK → C2
    • 연결 종료 후에는 코드비트의 FIN과 ACK가 1로 활성화

 

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


3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 TCP 헤더의 일련번호와 확인 응답 번호가 필요하다

일련번호

  • TCP는 데이터를 분할해서 보내는데 일련번호는 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할

확인 응답 번호

  • 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할
  • 다음 번호의 데이터를 요청할 때 사용

과정

  • 데이터 전송 전 단계인 3-way 핸드셰이크로 연결 수립이 이루어질 때, 통신에 사용하는 일련번호 3001과 확인응답번호 4001이 결정

ex. 200바이트의 데이터 송신

  1. C1 → [일련번호-3001][확인응답번호-4001] → C2
  2. C1 ← [일련번호-4001][확인응답번호-3201] ← C2 (3001 + 200바이트 = 3201)
  3. C1 → [일련번호-3201][확인응답번호-4001] → C2
  4. C1 ← [일련번호-4001][확인응답번호-3401] ← C2 (3201 + 200바이트 = 3401)
  • 위 과정을 데이터 전송이 완료될 때까지 반복

재전송 제어

  • 데이터가 항상 올바르게만 전달되는 것은 아니므로 일련번호와 확인 응답 번호를 사용해 데이터가 손상되거나 유실된 경우 데이터를 재전송
  • 데이터 전송 도중 오류 발생 시 일정 시간 동안 대기 후 재전송

윈도우 크기

: TCP헤더의 window size, 오버플로를 방지하기 위해 헤더에 버퍼의 한계 크기를 미리 알려줌
(얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타내는 것)

  • 3-way 핸드셰이크를 할 때 윈도우 크기를 판단
    1. C1 → SYN 연결 확립 요청, 윈도우크기 3000 → C2
    2. C1 ← ACK 연결 확립 응답, 윈도우크기 2000 ← C2
    3. C1 → ACK 연결 확립 응답 → C2
    • 서로의 윈도우 크기를 알게되어 오버플로 되지 않도록 세그먼트를 전송
  • 위와 같은 방식은 세그먼트(데이터)를 하나 보낼 때마다 확인 응답을 한번 반환하는 형식이라 효율이 높지 않음
  • 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높음
    • 수신 측에서 버퍼(buffer)에 세그먼트들을 일시적으로 보관하는 장소가 있음
    • 하지만, 버퍼에 대량으로 세그먼트가 쌓이면 오버플로(overflow)가 발생
    • 따라서, 오버플로가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 함
  • 연속으로 세그먼트를 전송하는 예시
    1. C1 → 세그먼트 송신 → C2
    2. C1 → 세그먼트 송신 → C2
    3. C1 → 세그먼트 송신 → C2 (C2의 윈도우 크기 이내라면 연속해서 전송 가능)
    4. C1 ← 확인 응답 ← C2
    5. C1 ← 확인 응답 ← C2
    6. C1 ← 확인 응답 ← C2 (연속해서 확인 응답 수신)
    7. C1 → 세그먼트 송신 → C2
    8. C1 → 세그먼트 송신 → C2
    9. C1 → 세그먼트 송신 → C2
    10. C1 ← 확인 응답 ← C2
    11. C1 ← 확인 응답 ← C2
    12. C1 ← 확인 응답 ← C2

 

26 포트 번호의 구조


포트 번호(port number)

  • 어플리케이션을 구분하기 위한 번호 → 전송된 데이터의 목적지를 구분하기 위해 TCP 헤더의 출발지 포트 번호와 목적지 포트 번호가 필요 (데이터를 전송할 때는 상대방의 IP 주소가 필요하지만, 어떤 애플리케이션이 사용되는지 구분하려면 TCP는 포트 번호 필요)
    • 0 ~ 65535번 사용 가능
    • 잘 알려진 포트(well-known-port) = 0 ~ 1023번은 주요 프로토콜이 사용하도록 예약
      (일반적으로 서버측 애플리케이션)
      • SSH - 22
      • SMTP - 25
      • DNS - 53
      • HTTP - 80
      • POP3 - 110
      • HTTPS - 443
    • 예약되어 있지만 사용하지 않는 포트 = 1024
    • 랜덤 포트 = 1025번 이상, 클라이언트 측의 송신 포트
  • 웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동 할당
    (서버와 다르게 클라이언트는 포트번호를 지정하지 않아도 됨)

 

 

27 UDP의 구조


UDP

  • 비연결형 통신, 데이터를 효율적으로 빠르게 보내는 장점
    → 스트리밍 방식으로 전송하는 동영상 서비스에서 사용
  • UDP 헤더 : UDP로 전송할 때 붙이는 헤더
    • 출발지 포트 번호 (16비트)
    • 목적지 포트 번호 (16비트)
    • 길이 (16비트)
    • 체크섬 (16비트)
  • UDP 데이터그램 : UDP헤더가 붙은 데이터 = [데이터 + UDP 헤더]
  • 컴퓨터나 네트워크 장비에 데이터를 일괄로 보내는 브로드캐스트(broadcast) 가능 (일괄 통신 가능)
    → 데이터를 전송할 때도 확인 응답을 보내야하는 TCP 통신으로는 불가능, 목적지를 지정해야하기 때문에 불가능

 

 

 

 

728x90
반응형