[TIL] OSI 7계층과 TCP / IP 5계층

김은혁·2023년 1월 12일
0

OSI 7 Layer

(Open systems Interconnection)

배경

1980년대 컴퓨터 통신망이 확산되면서 여러 통신망이 공존하는 상황이었다.

통신규격 통일의 필요성을 느낀 ISO (국제 표준화기구)에서는 1984년 OSI 참조 모델을 발표한다.

이 모델은 서로 다른 컴퓨터 기기 간에 네트워크를 형성할 수 있도록 규정한 네트워크 모델 표준안이다.

계층화

모듈들이 계층을 이루도록 역할과 책임을 세분화 하는 것

ex) 항공 (매표소 - 수하물 - 게이트 - 활주로 - 비행기)

why? ⇒

복잡한 시스템의 구조를 분리해서 명확하게 한다.

모듈화로 시스템의 관리와 갱신을 용이하게 한다.

너무 세부화된 계층은 오히려 기능을 복잡하게 만들 수 있다.

각 계층은 ( ) 서비스를 구현한다.

  • 계층 자체의 내부 동작을 통해
  • 하위 계층에서 제공되는 서비스에 의존하여

너무 세부화된 계층은 기능을 복잡하게 만듦 ⇒ OSI 7 계층은 이론적으로만 남게 됨.

실제로는 TCP/IP 프로토콜 계층을 사용함.

OSI : 서로 다른 컴퓨터 기기 간에 네트워크를 형성할 수 있도록 규정한 네트워크 모델 표준안

TCP/IP : 인터넷 프로토콜을 사용해서 인터네트워킹을 가능하게 하는 프로토콜의 suit


응용 계층 (Application Layer) - 7 계층

사용자와 가장 밀접한 계층으로 인터페이스 역할

응용 프로세스 간의 정보 교환을 담당

예 : 전자메일, 웹, 문자 메시지, p2p파일 공유, 네트워크 게임, 비디오 스트리밍, 실시간 화상회의, SNS, 검색, …

서로 다른 종단 시스템에서 실행됨

프로세스 : 호스트에서 실행되는 프로그램

  • 한 호스트 내에서 두 프로세스는 IPC(Inter-process-communication)을 통해 통신
  • 다른 호스트에 있는 프로세스들은 메시지를 교환함으로써 통신

소켓 : 어플리케이션 프로세스를 그 밑에 있는 tcp/ip 프로토콜과 연결해주는 부분

  • 프로세스는 소켓을 통해 메시지를 주고 받는다.

메시지를 받기 위해 프로세스는 식별자가 필요하다.

호스트는 고유의 32-bit IP 주소를 가짐

(IP 주소만으로는 호스트 내에서 실행되는 프로세스를 식별할 수 없음)

⇒ 식별자 : port number

서버의 port number와 클라이언트의 port number는 별개다.

애플리케이션마다 중요하게 생각하는 것이 다름

  • 데이터 신뢰성
    • 어떤 응용은 100% 신뢰성 있는 데이터 전송을 요구한다. (파일전송)
    • 다른 응용은 약간의 손실을 허용한다. (오디오)
  • 시간(timing)
    • 어떤 응용은 낮은 지연시간에서만 효과적
  • 처리율 (throughput)
    • bps
    • 어떤 응용은 최소한의 처리율이 충족되어야 함.
    • 어떤 응용은 탄력적 응용 (이메일 : 1초 후에 도착하든지 2초 후에 도착하든지 상관없음)
  • security
    • 암호화, 데이터 무결성 …

이러한 성격에 따라 소켓은 TCP 소켓 ? UDP 소켓 ? 어떤 걸 만들어야할지 제일 먼저 고민해야 함.

ㅁ 표현 계층 (Presentation Layer) - 6계층

데이터를 어떻게 표현할지 결정하는 역할 (데이터의 형식 결정)

송신자에게서 온 데이터를 해석하기 위한 데이터 부호화, 변화 담당

데이터 암호화 복호화

ㅁ 세션 계층 (Session Layer) - 5계층

통신 장치 간 상호작용 및 동기화 제공


전송 계층 (Transport Layer) - 4계층

전송 계층의 주소 : IP + Port number

서로 다른 호스트의 프로세스들 간에 논리적 통신을 제공한다.

전송계층 프로토콜은 종단시스템에서 수행된다.

  • 송신측 : 메시지를 세그먼트로 쪼개서 네트워크 계층에 전달

  • 수신측 : 세그먼트를 메시지로 재조립해서 애플리케이션 계층에 전달

  • UDP (User Datagram Protocol)

    • best-effort service

      • 사라지거나 순서가 바뀌어 전달될 수 있다.
    • 비연결형

      • 송수신측 사이에 handshaking 없음
    • 스트리밍 멀티미디어 서비스, DNS, …

      • 손실을 허용하고 전송률에 민감함
    • UDP segment header

      • source port #, destination port #
      • length : 헤더를 포함한 UDP segment의 바이트 단위 길이
      • checksum : 에러가 있는지 없는지 체크하기 위한 정보
    • 송수신 프로세스 간의 비신뢰적 전송 (에러가 있다는 사실만 알려줌 ⇒ 응용 계층에서 알아서 해결)

    • 제공하지 않는 것 : 신뢰성, 흐름 제어, 혼잡 제어, 시간보장, 처리율보장, 보안, 연결 설정

    • 사용하는 이유 ? 단순하기 때문. 최대한 빨리빨리 !

      대부분의 서비스에서 TCP를 사용. DNS 등 UDP 사용

      예전에는 스트리밍 서비스에서 유실을 어느 정도 허용했기에 UDP를 사용했지만 요새는 TCP 사용 (버퍼 이용)

신뢰있게 데이터를 전송하는 원리 (Reliable Data Transfer)

  • ACK
    • acknowledgements (ACK) : 수신측이 받은 패킷이 OK라고 송신측에게 알림
    • negative acknowledgements (NAKs): 그 반대
  • timeout

  • ACK / NAK가 손상되면 ?

  • 송신측은 수신측에서 일어나는 일을 알 수 없다. 무작정 재전송하는 것도 불가 (중복 가능성)

  • ⇒ 중복 처리 : 패킷에 순서번호를 추가

  • 파이프라인 기법

- in-flight로 전송하는 것을 허용
- 순서 번호의 범위 증가
- go-back-n : 오류 난 곳부터 다시 받음
- selective repeat : 오류난 부분만 다시 받음

  • TCP (Transmission Control Protocol)
    • 송수신 프로세스 간의 신뢰성 있는 전송 (재전송)
    • 흐름제어 : 수신측이 처리할 수 있는 속도에 맞춰 송신
    • 혼잡제어 : 망이 혼잡해지면 송신측 속도를 낮춤
      • AIMD : 처음에 패킷을 하나씩 보내고 문제 없다면 window 크기(단위 시간 내에 보내는 패킷의 수)를 점차 늘림
      • 패킷 전송에 실패하거나 일정 시간이 넘으면 패킷의 보내는 속도를 줄임
    • 제공하지 않는 것 : 시간보장, 처리율 보장, 보안
    • 연결지향형 서비스 : client-server 간 연결 설정 필요
    • guaranteed service
    • TCP segment
      • source port #, destination port #
      • sequence number : 세그먼트 내 데이터의 첫 바이트의 번호
      • acknowledgement number : 상대로부터 기대하는 다음 바이트의 번호
      • checksum
    • TCP Timeout 설정
      • RoundTripTime을 고려(이것보다 길게)

네트워크 계층 (Network Layer) - 3계층

네트워크 계층의 주소 : IP Address

라우팅 기능을 맡고 있는 계층

목적지까지 가장 안전하고 빠르게 데이터를 보낼 최적의 경로를 설정

송신 호스트에서 수신 호스트로 segment 전달

송신측에서는 segment를 datagram으로 캡슐화함

수신측은 트랜스포트 계층에 segment 전달

네트워크 계층의 두 가지 주요 기능

  • routing
    • 패킷이 출발지에서 목적지까지 거칠 경로를 결정
  • forwarding
    • 라우터의 입력으로 들어오는 패킷을 적절한 출력으로 보냄

네트워크 계층의 두 가지 영역

  • 제어 영역
    • 네트워크 전반의 로직
    • 어떤 경로를 거칠지 결정
  • 데이터 영역
    • 개개의 라우터마다의 지역적 기능
    • 라우터의 입력 포트에 도착한 datagram이 출력포트에 전달될 방법을 결정
    • forwarding 기능

각각의 라우터는 forwarding table을 가짐.

IP datagram 형식

  • version, 헤더길이, 데이터 타입, time to live (남아있는 최대 hop수), upper layer(payload를 전달할 상위 계층 프로토콜), 전체 데이터그램 길이, (fragment offset, 16-bit identifier, flags)(단편화와 재결합을 위해 사용), checksum(헤더에 대해서만 오류확인), 출발지 IP 주소, 목적지 IP 주소, 옵션(타임스탬프, 거쳐간 경로 기록, 경유할 라우터 목록)

단편화와 재결합

  • 네트워크 링크에는 MTU(max transfer size) 즉 frame의 최대 크기가 존재
  • 큰 IP datagram은 네트워크 내에서 쪼개진다 (단편화)
  • 쪼개진 datagram은 목적지에서 재결합된다.

데이터링크 계층의 주소 : MAC Address

물리적인 연결을 통해 인접한 두 장치 간의 신뢰성 있는 정보 전송을 담당

주요 역할 : 프레이밍, 흐름 제어, 오류 제어, 접근 제어, 동기화

  • 흐름 제어 : 인접한 송수신 노드 간의 보조 맞추기
  • 오류 검출
    • 신호 감쇄나 노이즈 등으로 인해 오류가 발생한다
    • 수신측에서 오류의 존재를 검출한다 ⇒ 송신측에 재전송을 요구하거나 frame을 버린다
  • 오류 정정 : 수신 측이 비트 오류를 인식하면 재전송 없이 오류를 정정한다

링크 계층은 랜카드에 상당 부분 구현됨. (모든 호스트에 각각 구현)


물리 계층 (Physical Layer) - 1계층

전기적, 기계적, 기능적인 특성을 이용해 데이터를 전송

데이터를 전송하는 역할을 할 뿐, 알고리즘이나 오류제어의 기능이 없음

profile
back-end engineer

0개의 댓글