OSI7Layer

OSI 7 Layer Model

💡

OSI 7 Layer Model: 1970s ~

하드웨어 모델 계층

Physical Layer

image

Physical Layer는 두 주체간 어떤 방식으로 데이터를 교환 할 것인가를 다루는 물리적인 내용 이며 위 그림 처럼 와이파이, 블루투스, 광섬유, 구리선, USB 등 다양한 매체로 데이터를 교환한다.

그러므로, Physical Layer는 물리적으로 어떻게 비트 스트림을 전달 할 것인가란 내용이 핵심이다.

💡

Hub

허브에서 만약 클라이언트 A,B,C,D 가 동시에 요청을 보내면 충돌이 발생한다. 하지만, 허브는 충돌을 막거나 방지할 방법이 없다. 왜냐면 허브는 받은 요청을 그대로 전달만 하는 장치이기 때문이다.

그리고, 허브는 누군가에게 직접적으로 데이터를 전송 할 수도 없다. 허브는 요청을 받으면 다른 모든 매체에게 받은 요청을 전달 하기 때문이다.

💡

Physical Layer에서 해결하지 못한 문제

💡

MAC(Media Access Control) Address

네트워크 인터페이스이 MAC Address는 고유의 값이며 변하지 않음 마치, MAC Address는 주민등록번호와 같고 IP는 주거지의 주소 정보와 같다.

💡

Data Link Layer - Frame

image

💡

CSMA/CD

이런식으로 충돌을 방지하는 것이 CSMA/CD 이다.

image

그렇다면 이런 불편함은 어떻게 해결할까?

💡

Switch(L2) -> Switch는 CSMA/CD를 이해하고있다.

image

Client A가 Client D에게 통신을 하려고 한다면?

Switch를 요약 하자면

  1. Client A가 통신하기 위해 다른 모든 디바이스를 신경 쓸 필요 없이 오로지 Client A와 Switch만 신경 쓰면 되도록 하는 것
  2. 전송해야 할 Frame을 저장 해뒀다가 제대로 전달 할 수 있는 것
💡

Data Link Layer의 BroadCast

image

💡

Data Link Layer에서 해결 하지 못한 문제

  1. Local Network 외부로 통신 불가능

    image

    • LocalNetwork1 -> LocalNetwork2로 통신을 할 수 없기 때문에 외부 통신을 가능하게 하기 위해서 다음 Layer인 Network Layer로 데이터를 전송해야한다.

Network Layer

💡

Network Layer

💡각 각의 Local Network 혹은 Network간의 통신을 하는 방법을 정의

👉 중간 중간 노드들을 거쳐 목적지까지 도달 할 수 있는지에 대한 내용을 정의 하는 계층이다

💡

IP(Internet Protocol) Address

IPv4

IPv6

💡

CIDR(Classless Inter Domain Routing)

  • IPv4를 표시 하는 여러 방법 중 하나
  • IP는 주소의 영역을 여러 네트워크 영역으로 나누기 위해 IP를 묶는 방식
    • 10.10.0.0/16 -> 10.10.(0255).(0255)
  • 여러 개의 사설망을 구축하기 위해 망을 나누는 방법
💡

CIDR Notation

💡

CIDR Block

💡

Subnet Mask

💡

라우터(Router)

💡

ARP(Addre ss Resolution Protocol)

💡

Network Layer Summary

  1. 라우터까지 데이터 전달하기

    • IP 대상(63.12.33.12)이 로컬이 아닌 것을 식별 함
      • 식별 기준은 네트워크 주소가 같은지 다른지를 판단
    • 같은 네트워크가 아니라면 라우터로 전달
      • 하지만 라우터의 IP는 알지만 MAC 주소를 모르는 상황
      • 이때, ARP를 호라용 하여 IP 주소로 MAC 주소를 찾는 과정을 거침
    • 이후 해당 MAC 주소로 Frame(Data Link Layer의 데이터 단위) 생성 후 전달

    image

  2. 라우터에서 패킷을 분석하고 최적화 된 경로로 전달하기

    • 대상이 로컬 네트워크가 아니라면 가장 잘 전달할 수 있는 노드로 전달 하는 과정
    • 라우터로 전달 된 Frame을 확인 함
      • Frame에는 Dest, Src, Packet이 존재
    • 패킷 분석
      • 패킷에 담겨있는 대상 IP의 주소를 확인 하여 로컬 네트워크인지 아닌지 판별
    • 최적화 된 경로로 Frame 전달
      • Route Table에 대상 IP 주소와 가장 정확하게 매칭 되는 Node의 MAC 주소 저장
      • 기존에 전달 받으 Frame을 폐기하고 새롭게 생성
        • 새로운 Frame은 현재 Router의 MAC 주소, 가장 정확하게 매칭 된 Node의 MAC 주소, 기존에 전달받은 패킷을 그대로 포함 하여 생성함
      • 가장 정확하게 매칭 된 Node로 전달

    image

  3. 최적의 경로로 전달한 라우터에서 목적지의 로컬 네트워크로 식별 될 때 까지 2번 과정을 반복 함

  4. 목적지에 도착 하여 데이터를 전달

    • 2번 과정을 거쳐 로컬 네트워크로 판별 되었을 때 더 이상 다른 경로로 전달 할 필요가 없기 때문에 Router로 보내는 것이 아닌 데이터링크 레이어의 Switch를 통해 보내게 됨
      • 이 때, 라우터 입장에서는 목적지의 MAC 주소를 알고 있기 때문에 Unicast 방식으로 어디로 보내야 하는지 알고 있음
    • 프레임을 새로 생성 하여 목적지 대상에게 데이터 전달
      • 라우터는 물리적인 신호로 Physical Layer를 통해 보내게 됨
      • 로컬 컴퓨터는 최초 Binary data(Physical Layer에서 변환 된 데이터)를 수신 함
      • Binary 데이터를 복원해서 확인 하면 Frame을 확인 할 수 있음
        • 대상 MAC 주소는 나 자신, 소스 주소는 전달 받은 라우터, 최초 데이터를 전달한 패킷이 들어있음
      • 패킷 내용 분석
        • 패킷은 맨 처음 보냈던 소스 IP와 대상인 나의 IP, Payload(데이터), 기타 내용이 있음
        • 패킷은 많은 노드를 거쳐 여행을 해왔지만 패킷은 변하지 않음
        • 반면 Frame은 노드를 거칠 때 마다 새롭게 생성 되었음

    image

💡 여기서 알 수 있는 사실

💡

Network Layer에서 해결하지 못한 문제

Transport Layer

네트워크 계층에서 해결하지 못한 문제를 해결하기 위해 나온 계층

💡

Transport Layer

💡

Transmission Control Protcol(TCP)

image

💡

Segment(세그먼트)

TCP에서 데이터의 순서 보장, 유실 방지 과정

  1. 세그먼트들에서 1번 세그먼트를 Client A -> Client B로 전송
  2. Client B는 1번 세그먼트를 잘 받았다는 의미로 Acknowledgement를 Client A에게 전달
  3. Client A는 1번을 잘 받았다는 것을 인지하고 Client B에게 전달 받은 데이터를 확인 하여 다음 보내야 할 데이터를 보낸다.
    • 이 때, Client B가 Client A에게 전달 할 때 다음 보내야 할 데이터를 미리 알려준다. 3-1. 만약, 세그먼트를 보낼 때 유실이 된 경우
    • 유실이 되었다면 Client B가 응답을 하지 않았기 때문에 Client A는 “아직 B가 데이터를 받지 못했나보다” 라며 다시 보내게 된다.
    • 다시 보낼 때 Client B가 정상적으로 수신 하여 Acknowledgement로 응답 값을 보냈다면 그 다음 보내야 할 데이터를 Client A는 보내게 되며 이 과정을 반복한다.

💡 TCP는 전달 하고 싶은 데이터가 잘 전달 되었는지 무결성을 확보함 - 받았는지 받지 못했는지를 체크하는 과정이 있음

image

💡

Port

image

각 Application 마다 임의의 포트 번호를 점유 하여 Source Port를 할당 하고 서버에서 사용 하고 있는 Port를 할당 하여 Segment 안에 Source Port, Destination Port로 대상을 지정하여 여러 한 번에 여러 개의 어플리케이션과 통신 할 수 있는 구조가 생성 된다.

image

만약, 위 그림에서 Chrome Browser에서 Server로 요청을 보냈다 라고 가정 한다면

💡 서로 통신 하는 아이피가 동일 하더라도 Packet 안에 Segment를 활용 할 수 있게 된다면 동일한 IP에서 여러 어플리케이션과 통신할 수 있게된다.

💡

TCP Handshake

TCP Handshake를 통해 통신하는 과정

image

  1. 클라이언트가 서버에게 요청을 보냄
    • 이 때 세그먼트 정보는 Source Port(클라이언트 자신), Destination Port(대상 서버), Sequence Number(클라이언트의 임의의 수), Acknowldegement Number(서버의 임의의 수), Flags(요청 목적)
    • 클라이언트의 Sequence Number 생성 “13”
    • Flags 할당 “SYN”: 클라이언트의 첫 요청이기 때문
  2. 서버가 요청을 받은 뒤 응답 함
    • 클라이언트의 Sequence Number에서 + 1: “14” -> 요청을 잘 받았다는 의미
    • 서버의 Sequence Number 생성 “4431”
    • 이 때 세그먼트는 Sequence Number는 “4431”, Acknowldegement Number는 “14”, Flags는 “SYN, ACK”
    • 생성된 세그먼트를 다시 클라이언트에게 응답
  3. 클라이언트가 응답을 확인 후 서버와 통신 종료 요청
    • 서버가 보내준 Acknowledege Number는 기존 “13” 이었지만 서버와 통신 후 응답을 받을 땐 “14”로 1이 증가 되어있음
    • 서버의 Sequence Number를 잘 받았다는 의미로 +1 -> “4432”
    • Flags를 ACK로 할당 하여 세그먼트를 생성 후 전달

💡 Sequence Number는 자기 자신이 보내야 할 임의의 수이며 Acknowledegement Number는 상대에게 다음 차례에 보내야 할 숫자를 가르키는 것과 같다.

💡

User Datagram Protocol(UDP)

UDP Segment vs TCP Segment

image

주요 프로토콜(TCP/UDP)

소프트웨어 모델 계층

Session Layer

💡

Session Layer

지하철 타고 가면서 유튜브를 볼 때를 떠올려보면 지하철 역이 바뀌어도 유튜브는 정상 송신이 되고 있다. 왜 그럴까?

image

💡 자신의 통신 환경이 달라져도 지속적인 통신을 유지 할 수 있는 이유는 세션이 연결 되어 있기 때문이다.

Presentation Layer

💡

Presentation Layer

어디까지가 Presentation Layer의 역할일까?

image

💡 결론적으로 Presentation Layer는 위 내용들이 개념적으로 구현이 되어있다

Application Layer

💡

Application Layer

실질적으로 AWS Application Load Balancer는 Layer 7을 이해 할 수 있는 로드 밸런서이며 HTTP의 여러가지 기능(헤더, 도메인명 등)을 이해 하고 있다.

이러한 어플리케이션 로드 밸런서는 레이어 1부터 7까지 거쳐 최종적인 결과물로 의사 결정을 할 수 있다.