반응형
Jake Seo
제이크서 위키 블로그
Jake Seo
전체 방문자
오늘
어제
  • 분류 전체보기 (715)
    • 일상, 일기 (0)
    • 백준 문제풀이 (1)
    • 릿코드 문제풀이 (2)
    • 알고리즘 이론 (10)
      • 기본 이론 (2)
      • 배열과 문자열 (8)
    • 데이터베이스 (15)
      • Planet Scale (1)
      • MSSQL (9)
      • 디비 기본 개념 (1)
      • SQLite 직접 만들어보기 (4)
    • 보안 (7)
    • 설계 (1)
    • 네트워크 (17)
      • HTTP (9)
      • OSI Layers (5)
    • 회고 (31)
      • 연간 회고 (2)
      • 주간 회고 (29)
    • 인프라 (52)
      • 도커 (12)
      • AWS (9)
      • 용어 (21)
      • 웹 성능 (1)
      • 대규모 서비스를 지탱하는 기술 (9)
    • 깃 (7)
    • 빌드 도구 (7)
      • 메이븐 (6)
      • 그레이들 (0)
    • Java (135)
      • 이펙티브 자바 (73)
      • 자바 API (4)
      • 자바 잡지식 (30)
      • 자바 디자인 패턴 (21)
      • 톰캣 (Tomcat) (7)
    • 프레임워크 (64)
      • next.js (14)
      • 스프링 프레임워크 (28)
      • 토비의 스프링 (6)
      • 스프링 부트 (3)
      • JPA (Java Persistence API) (5)
      • Nest.js (8)
    • 프론트엔드 (48)
      • 다크모드 (1)
      • 노드 패키지 관리 매니저 (3)
      • CSS (19)
      • Web API (11)
      • tailwind-css (1)
      • React (5)
      • React 새 공식문서 요약 (1)
      • HTML (Markup Language) (5)
    • 자바스크립트 (108)
      • 모던 자바스크립트 (31)
      • 개념 (31)
      • 정규표현식 (5)
      • 코드 스니펫 (1)
      • 라이브러리 (6)
      • 인터뷰 (24)
      • 웹개발자를 위한 자바스크립트의 모든 것 (6)
      • 팁 (2)
    • Typescript (49)
    • 리눅스와 유닉스 (10)
    • Computer Science (1)
      • Compiler (1)
    • IDE (3)
      • VSCODE (1)
      • IntelliJ (2)
    • 세미나 & 컨퍼런스 (1)
    • 용어 (개발용어) (16)
      • 함수형 프로그래밍 용어들 (1)
    • ORM (2)
      • Prisma (2)
    • NODEJS (2)
    • cypress (1)
    • 리액트 네이티브 (React Native) (31)
    • 러스트 (Rust) (15)
    • 코틀린 (Kotlin) (4)
      • 자바에서 코틀린으로 (4)
    • 정규표현식 (3)
    • 구글 애널리틱스 (GA) (1)
    • SEO (2)
    • UML (2)
    • 맛탐험 (2)
    • 리팩토링 (1)
    • 서평 (2)
    • 소프트웨어 공학 (18)
      • 테스팅 (16)
      • 개발 프로세스 (1)
    • 교육학 (1)
    • 삶의 지혜, 통찰 (1)
    • Chat GPT (2)
    • 쉘스크립트 (1)
    • 컴파일 (2)
    • Dart (12)
    • 코드팩토리의 플러터 프로그래밍 (4)
    • 플러터 (17)
    • 안드로이드 스튜디오 (1)
    • 윈도우즈 (1)
    • 잡다한 백엔드 지식 (1)
    • 디자인 패턴 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 싱글톤 패턴
  • try-with-resources
  • 작업기억공간
  • Next.js
  • Java
  • prerendering
  • 자바
  • 객체복사
  • 추상 팩터리 패턴
  • 느린 쿼리
  • 빈 검증
  • 이펙티브 자바 item9
  • 자바스크립트
  • NEXT JS
  • 이펙티브자바
  • serverless computing
  • pnpm
  • 토비의 스프링
  • 자료구조
  • 자바스크립트 인터뷰
  • 디자인패턴
  • item9
  • 싱글톤
  • 자바스크립트 면접
  • 자바 디자인패턴
  • 메이븐 골
  • 팩터리 메서드 패턴
  • 이펙티브 자바
  • 참조 해제
  • rust
  • 자바 검증
  • 슬로우 쿼리
  • 러스트
  • bean Validation
  • next js app
  • 메이븐 페이즈
  • Pre-rendering
  • 플라이웨이트패턴
  • Javadoc 자바독 자바주석 주석 Comment
  • 스프링 검증
  • item7
  • 싱글턴
  • 서버리스 컴퓨팅
  • MSSQL
  • 메이븐 라이프사이클
  • item8
  • 도커공식문서
  • 외래키 제약조건
  • 알고리즘
  • 프로그래머의 뇌

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Jake Seo

제이크서 위키 블로그

OSI 4계층 전송 계층 (Transport Layer) 알아보기
네트워크/OSI Layers

OSI 4계층 전송 계층 (Transport Layer) 알아보기

2023. 2. 21. 00:02

전송 계층

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

4계층을 배우기 전에 이전까지의 흐름을 알아보자.

1계층: 물리 계층

  • 아날로그 신호를 받아 디지털 신호로 만들어 주거나 디지털 신호를 받아 아날로그 신호로 만들어준다.
  • 더미 허브라는 통신 기기가 사용되었다.
  • 더미 허브를 통해 브로드 캐스팅 방식으로 통신할 수 있다.
  • 네트워크의 물리적인 특성을 정의하는 계층이다.
    • 어떤 케이블 타입을 쓰는지, 커넥터 타입은 어떤지, 데이터 전송 속도는 얼마로 맞출건지에 대한 결정도 한다.

2계층: 데이터 링크 계층

  • 네트워크 내 두 장치의 연결을 담당하는 계층이다.
  • 스위치라는 MAC 주소를 저장할 수 있는 기기가 사용되었다.
  • MAC 주소란 것이 도입되어 MAC 주소를 통해 네트워크상 원하는 컴퓨터와 통신을 할 수 있다.
  • 처음엔 flooding 이라는 기법으로 모든 컴퓨터에 신호를 보내고, 모든 컴퓨터에서 온 신호를 통해 각각 컴퓨터의 MAC 주소를 등록했다.
  • 여전히 허브에서 여러 신호가 충돌하지만, CSMA/CD 기법으로 충돌이 있을 시에 잠시 대기하여 해결했다.

3계층: 전송 계층

  • 다른 네트워크에 있는 목적지로 데이터를 전송할 수 있게 해준다.
  • 라우터라는 기기가 사용되었다.
  • 스위치에 아무리 많은 컴퓨터를 연결해도 '같은 네트워크' 로 보는 반면, 라우터에 연결된 여러개의 스위치는 각각 '다른 네트워크' 로 본다.
  • 내가 속한 스위치가 아닌 다른 스위치에 속한 컴퓨터로 신호를 보낼 수 있다.
  • IP 주소를 안다면, 라우팅을 통해서 해당 주소까지 도착할 수 있게 됐다.

전송 계층의 필요성

  • 오류 점검
    • 데이터를 주고 받는 것 까지는 3계층 네트워크 계층까지만 이용하면 충분하다. 하지만, 신뢰성을 확보하기 위해 전송 계층이 필요하다.
  • 포트 이용
    • 이 데이터가 해당 컴퓨터의 어떤 애플리케이션에 전달되어야 하는지 알기 위해 전송 계층이 필요하다.

전송 계층에서의 선택지: 연결형 통신과 비연결형 통신

연결형 통신 (TCP)

  • 신뢰성/정확성을 강조한 통신이다.
  • TCP 통신이 이에 속한다.
  • 확인 절차가 필요하다.
  • HTTP 1.1 등에 이용된다.

비연결형 통신 (UDP)

  • 효율성을 강조한 통신이다.
  • UDP 통신이 이에 속한다.
  • 확인 절차 없이 보낸다.
  • 동영상 등에 이용된다.

연결형 통신: TCP 알아보기

4계층에서 TCP를 선택하면, 데이터에 TCP 헤더라는 것이 붙어 캡슐화된다.

TCP 헤더 알아보기

TCP 헤더는 위와 같은 구성으로 이루어져있다. 검증 절차를 가져야 하므로 그에 필요한 정보 때문에 UDP보다 상대적으로 복잡한 헤더를 갖는다.

TCP의 코드 비트

6비트로 이루어진 코드 비트는 위와 같은 플래그로 이루어져있는데, 여기서 주로 사용되는 것은 ACK, SYN, FIN이다.

  • SYN: 연결 요청
  • ACK: 확인 응답
  • FIN: 종료 요청

TCP의 3way 핸드쉐이크

  • 요청 컴퓨터 A는 SYN 요청을 상대 컴퓨터 B에 보낸다.
  • 상대 컴퓨터 B는 ACK 확인 응답을 하고 SYN 요청을 보낸다.
  • 요청 컴퓨터 A는 ACK 확인 응답을 한다.

위와 같은 3가지 절차를 3way 핸드쉐이크라 한다.

위와 같은 절차가 끝나면 CONNECTION 이 확립된다.

TCP 연결 종료 플래그

연결 종료 시에는 FIN -> ACK -> FIN -> ACK의 4단계 절차가 일어난다.

일련 번호와 확인 응답 번호의 의미

TCP 헤더의 일련 번호(Sequence Number)와 확인 응답 번호(Acknowledgement Number)는 데이터의 시작과 끝을 구분하기 위해 존재한다. 각 32비트를 차지하는 큰 공간이다. 일련번호와 확인 응답 번호가 갖는 의미는 송신측과 수신측에 따라 다르다.

  • 송신측
    • 일련 번호: 현재 보내는 데이터의 시작 번호
    • 확인 응답 번호: 전체 데이터의 끝 번호
  • 수신측
    • 일련 번호: 전체 데이터의 끝 번호
    • 확인 응답 번호: 현재까지 받은 데이터의 끝 번호

위와 같은 형식으로 이용된다. 위는 한 번에 데이터를 50바이트만큼 전송하는 예시이다. 50바이트와 같이 한번에 전송되는 데이터의 단위를 세그먼트라고 한다.

만일, 일련 번호나 확인 응답 번호가 어긋난 경우와 같이 데이터가 손상 혹은 유실되면 일정 시간 대기한 후에 데이터를 재전송하며 이를 재전송 제어라고 한다.

윈도우 크기의 의미

윈도우 크기는 세그먼트를 일시적으로 저장하는 버퍼의 한계 크기를 말한다. 즉, 얼마나 많은 용량의 데이터를 저장해둘 수 있는지를 나타내는 크기이다.

TCP 통신에서는 이 버퍼 크기에 들어갈만큼 최대한의 데이터 세그먼트를 수신측에 보낸다. 송신측은 다회의 세그먼트 송신을 버퍼크기만큼 한번에 하고, 수신측은 송신된만큼 다회의 확인 응답을 한번에 한다.

포트 번호 알아보기

  • 포트 번호는 0~65535 (16비트) 까지 사용할 수 있다.
  • 0~1023 (0000 0001 1111 1111) 까지는 예약된 포트번호이다.
    • 이를 well-known port라고 한다.
  • 1024번 포트는 예약되어있지만 잘 사용되지 않는다고 한다.

통신 애플리케이션의 주요 포트번호

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

웹 브라우저의 송신 포트

  • 웹 브라우저의 포트는 임의의 포트가 자동으로 할당된다.
  • 서버 측은 포트번호를 명확히 정해두어야 하지만 클라이언트 측은 정하지 않아도 괜찮다.

비연결형 통신: UDP 통신 알아보기

  • TCP와 반대로 신뢰성보다는 효율성을 중시한다.
  • 영상과 같이 끊기면 안되는 스트리밍 서비스에 자주 이용된다.

데이터에 위와 같은 헤더를 씌워진 데이터를 UDP 데이터그램이라 한다.

UDP의 장점: 브로드 캐스트가 가능하다.

  • 응답을 확인하지 않는 이점을 이용해서 할 수 있는 대표적 기능이다.
    • 다수의 컴퓨터에 송신을 해도 확인 응답을 받지 않는다.
    • TCP는 다수의 컴퓨터에 송신을 하면 일일이 확인 응답을 받고 CONNECTION을 확립해야 한다.

전송 계층 정리

데이터를 받아서 TCP Segment 혹은 UDP Datagram 중 하나의 전송 계층 헤더를 데이터에 붙여 캡슐화한다. 혹은 TCP Segment 혹은 UDP Datagram 중 하나의 헤더가 붙은 데이터를 비캡슐화 한다.

레퍼런스

[10분 테코톡] 히히의 OSI 7 Layer > 모두의 네트워크

반응형
저작자표시 비영리

'네트워크 > OSI Layers' 카테고리의 다른 글

OSI 5, 6, 7 (세션, 표현, 응용) 계층과 Updated TCP/IP Model  (0) 2023.03.23
OSI 3 계층 네트워크 계층 (Network Layer) 알아보기  (2) 2022.09.05
OSI 2계층 데이터 링크 (Data Link Layer) 계층 알아보기  (2) 2022.09.04
OSI 1계층 물리 계층 (Physical Layer) 알아보기  (1) 2022.09.04
    '네트워크/OSI Layers' 카테고리의 다른 글
    • OSI 5, 6, 7 (세션, 표현, 응용) 계층과 Updated TCP/IP Model
    • OSI 3 계층 네트워크 계층 (Network Layer) 알아보기
    • OSI 2계층 데이터 링크 (Data Link Layer) 계층 알아보기
    • OSI 1계층 물리 계층 (Physical Layer) 알아보기
    Jake Seo
    Jake Seo
    ✔ 잘 보셨다면 광고 한번 클릭해주시면 큰 힘이 됩니다. ✔ 댓글로 틀린 부분을 지적해주시면 기분 나빠하지 않고 수정합니다. ✔ 많은 퇴고를 거친 글이 좋은 글이 된다고 생각합니다. ✔ 간결하고 명료하게 사람들을 이해 시키는 것을 목표로 합니다.

    티스토리툴바