Post

[모두의 네트워크]6장 전송 계층

전송 계층의 역할

  • 목적지에 신뢰할 수 있는 데이터를 순차적으로 전달
    • 상위 계층이 데이터 전달의 유효성이나 효율성을 신경 쓰지 않아도 된다.
  • 오류를 점검
    • 데이터의 중복이나 누락, 순서를 점검
  • 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능

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

  • 연결형 통신
    • 데이터를 교환하기 전 연결을 맺고, 데이터를 교환하는 동안 계속 연결을 관리
    • 신뢰성/정확성 우선
      • 데이터를 목적지에 문제없이 전달
      • 상대와 확인해 가면서 통신
    • TCP(Transmission Control Protocol, 전송 제어 프로토콜) 사용
  • 비연결형 통신
    • 연결에 대한 초기화 과정이 없는 통신
      • 일방적으로 데이터 전송
        • 예) 스트리밍 방식으로 전송하는 동영상 서비스
    • 효율성 우선
      • 데이터를 빠르고 효율적으로 전달
    • UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜) 사용

TCP

  • TCP 헤더
    • TCP로 전송할 때 붙이는 헤더
    • TCP 헤더가 붙은 데이터를 세그먼트라고 한다.
    • 출발지 포트 번호(16비트), 목적지 포트 번호(16비트), 일련번호(32비트), 확인 응답 번호(32비트), 헤더 길이(4비트), 예약 영역(6비트), 코드 비트(6비트), 윈도우 크기(16비트), 체크섬(16비트), 긴급 포인터(16비트), 옵션으로 구성
  • 연결(connection)
    • TCP 통신에서 정보를 전달하기 위해 사용하는 가상의 통신로
    • 연결을 확립한 뒤에 데이터를 전송할 수 있다.

연결 확립

  • 연결 확립을 위해 코드 비트 사용
    • TCP 헤더 107~112번째에 존재하는 6비트
    • 연결의 제어 정보 기록
    • 비트별로 역할이 있으며 초깃값은 0, 활성화되면 1
      • URG, ACK, PSH, RST, SYN, FIN
      • SYN: 연결 요청
      • ACK: 확인 응답
      • FIN: 연결 종료

3-way 핸드셰이크

데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것

  1. 통신을 위해 컴퓨터 1에서 컴퓨터 2로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
    1. 코드 비트의 SYN이 1로 활성화
  2. 컴퓨터 2는 컴퓨터 1이 보낸 요청을 받고, 허가를 위해 연결 확립 응답(ACK)을 보낸다.
    1. 동시에 컴퓨터 2도 컴퓨터 1에 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.
    2. 코드 비트의 ACK와 SYN이 1로 활성화
  3. 컴퓨터 2의 요청을 받은 컴퓨터 1은 컴퓨터 2로 허가를 위해 연결 확립 응답(ACK)을 보낸다.
    1. 코드 비트의 SYN이 1로 활성화

연결 종료

  1. 컴퓨터 1에서 2로 연결 종료 요청(FIN)을 보낸다.
    1. 코드 비트의 FIN이 1로 활성화
  2. 컴퓨터 2에서 1로 연결 종료 응답(ACK)을 반환한다.
    1. 코드 비트의 ACK이 1로 활성화
  3. 또한 컴퓨터 2에서 1로 연결 종료 요청(FIN)을 보낸다.
    1. 코드 비트의 SYN이 1로 활성화
  4. 컴퓨터 1에서 2로 연결 종료 응답(ACK)을 반환한다.
    1. 코드 비트의 ACK이 1로 활성화

데이터 송수신

3-way 핸드셰이크가 끝나고 실제 데이터를 송수신 할 때는 TCP 헤더의 일련번호, 확인 응답 번호를 사용한다.

  • 일련번호
    • TCP가 데이터를 분할해 보내면 수신 측에 데이터가 몇 번째 데이터인지 알려주는 역할
      • 데이터에 부여된 고유한 번호
    • 이를 이용해 TCP 패킷의 순서 제어 가능
  • 확인 응답 번호
    • 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알리는 역할
    • 요청하는 데이터의 첫 번째 바이트 번호
    • 다음 번호 데이터를 요청할 때 사용
      • 이를 확인 응답이라 한다.
  • 재전송 제어
    • 일련번호와 확인 응답 번호를 사용해 데이터가 손상되거나 유실된 경우 데이터를 재전송

윈도우 크기

왜 윈도우 크기가 필요한가?

  • 세그먼트 하나를 보낼 때마다 확인 응답을 반환하면 효율이 낮다.
  • 연속해서 세그먼트를 보내고 확인 응답을 반환하면 효율이 높아진다.
  • 버퍼에는 세그먼트를 일시적으로 보관할 수 있다.
  • 데이터 크기가 버퍼 크기를 넘어서면 오버플로가 발생한다.
  • 따라서 버퍼의 한계 크기, 즉 윈도우 크기를 알아야 한다.

윈도우 크기

  • 확인 응답 없이 연속해서 송수신할 수 있는 데이터의 크기
  • 3-way 핸드셰이크를 할 때 초깃값을 판단
    • 연결 확립 요청과 응답을 할 때 서로의 윈도우 크기를 함께 전달한다.
  • 윈도우 크기를 안다면 윈도우 크기 이내로 세그먼트를 연속적으로 보낼 수 있다.
    • 이후 확인 응답도 연속적으로 한꺼번에 온다.

포트 번호

  • 컴퓨터가 통신하고자 하는 네트워크 서비스나 특정 서비스를 식별하는 논리 단위
  • TCP 헤더의 출발지 포트 번호와 목적지 포트를 통해 데이터가 어느 애플리케이션의 데이터인지 알 수 있다.
  • 0~65535번을 사용 가능
    • 0~1023번: well-known ports
      • 주요 프로토콜이 사용하도록 예약
      • 일반적으로 사용하는 서버 측 애플리케이션에서 사용
    • 1024번: 예약되어 있지만 사용하지 않음
    • 1026~65535번: 랜덤 포트
      • 클라이언트 측의 송신 포트로 사용
  • 애플리케이션은 각각 포트 번호로 구분 할 수 있다.

    애플리케이션포트 번호
    SSH22
    SMTP25
    DNS53
    HTTP80
    POP3110
    HTTPS443
  • 웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동으로 할당된다.
    • 따라서 클라이언트 측은 포트 번호를 안 정해도 된다.

UDP

  • UDP 헤더
    • UDP 헤더가 붙은 데이터를 UDP 데이터그램이라고 한다.
    • 출발지 포트 번호(16비트), 목적지 포트 번호(16비트), 길이(16비트), 체크섬(16비트)으로 구성
  • 브로드캐스트를 통한 일괄 통신 가능
    • 랜에 있는 기기에 데이터를 일괄로 보낼 수 있는 기능
This post is licensed under CC BY 4.0 by the author.