4회차 네트워크 | OSI 7계층 조사, TCP/IP 4계층, CORS 등 내용 정리

728x90
OSI 계층 조사(각 알려진 유명 프로토콜)
TCP/IP 4계층과 비교
CORS

OSI 7 계층과 TCP/IP 4계층은 모두 네트워크에서 사용되는 통신 프로토콜의 집합으로, 각 계층들은 프로토콜의 네트워킹 범위에 따라 추상화된 계층에 해당한다.

  • 각 계층은 독립적이므로 데이터 전달 동안 다른 계층의 영향을 받지 않도록 설계되어 있다.
  • 다른 계층끼리는 데이터의 전달 과정을 구체적으로 알 필요가 없기 때문에, 데이터의 캡슐화와 은닉이 가능합니다.

OSI 7 계층

  • 네트워크에서 통신 일어나는 과정을 7단계로 나눈 것
  • 국제 표준화 기구 (ISO)에서 네트워크 간의 호환을 위해 OSI 7계층 표준 네트워크 모델 만듬 (표준 = 4모델)

[한 눈에 정리하기]

  1. 응용 계층 (Application Layer): 최종 사용자와 직접 상호 작용하며, 네트워크 서비스에 접근하기 위한 인터페이스를 제공합니다.
  2. 표현 계층 (Presentation Layer): 상/하위 계층에서 상이한 데이터 형식의 호환성을 위해 데이터의 형식 변환, 암호화, 압축 등의 기능을 제공합니다.
  3. 세션 계층 (Session Layer): 데이터가 통신하기 위한 논리적인 연결을 활성화하고 관리하는 계층으로, 데이터 교환의 시작, 유지, 종료를 관리하여 통신을 활성화 및 관리합니다.
  4. 전송 계층 (Transport Layer): 데이터를 신뢰성 있게 전송하기 위한 프로세스 간 통신을 위한 계층입니다.
  5. 네트워크 계층 (Network Layer): 패킷을 목적지까지 전달하기 위해 라우팅으로 최적 경로 선택 및 논리적 주소 결정하고, 경로를 따라 패킷 전달하는 역할을 담당합니다.
  6. 데이터 링크 계층 (Data Link Layer): 물리적인 링크를 통해 안전한 프레임 전송을 보장하고 오류 검출 및 수정을 수행합니다.
  7. 물리 계층 (Physical Layer): 데이터 비트를 전기 신호로 변환하여 실제 장치들 간 연결을 위한 작업을 수행합니다.

⬛ (L7) | 응용 계층 | Application Layer

프로토콜 : HTTP, FTP, SMTP, POP3, IMAP, Telnet 등
데이터 단위 : Data/Message

응용 프로세스와 직접 관계하여 일반적인 응용 서비스 수행 역할 담당 계층

  • 최상위 계층으로 사용자에게 직접 보여지는 부분
  • 7 계층에서 작동하는 응용 프로그램은 사용자와 직접적으로 상호 작용한다.
💡 응용 계층의 프로토콜 종류
HTTP (Hypertext Transfer Protocol): 웹 브라우저와 웹 서버 간의 통신을 위한 프로토콜로, 웹 페이지의 전송에 사용됩니다.
HTTPS (Hypertext Transfer Protocol Secure): HTTP의 보안 버전으로, SSL 또는 TLS를 사용하여 암호화된 통신을 지원합니다.
FTP (File Transfer Protocol): 파일 전송을 위한 프로토콜로, 클라이언트와 서버 간의 파일 전송에 사용됩니다.
SMTP (Simple Mail Transfer Protocol): 전자 메일을 보내기 위한 프로토콜로, 이메일 서버 간의 통신에 사용됩니다.
POP3 (Post Office Protocol version 3): 이메일 수신을 위한 프로토콜로, 이메일 클라이언트가 서버에서 이메일을 가져오는 데 사용됩니다.
IMAP (Internet Message Access Protocol): 이메일 수신 및 관리를 위한 프로토콜로, 이메일 서버에 저장된 이메일에 접근하는 데 사용됩니다.
SNMP (Simple Network Management Protocol): 네트워크 장치 및 서버의 상태를 관리하기 위한 프로토콜로, 네트워크 관리 시스템과 통신합니다.

⬛ (L6) | 표현 계층 | Presentation Layer

예시 : JPEG, MPEG , GIF, ASCII 등
데이터 단위 : Data/Message

서로 다른 데이터 형식 간 상호 호환성 위해 데이터 형식 변환/압축/암호화 하는 계층

1) 애플리케이션(윗 계층)이 다루는 정보를 통신에 알맞는 형태로 만들거나

2) 하위 계층에서 오는 데이터를 사용자가 이해할 수 있는 형태로 만드는 역할 담당 계층

  • 다시 말해 이 계층은 응용 프로그램이나 네트워크를 위해 데이터를 ‘표현’하는 것이다.

ex. 인코딩된 문서 파일을 ASCII로 인코딩된 파일로 바꿔주는 것

ex. 해당 데이터기 TEXT인지, 그림인지, GIF인지, JPG인지 구분하는 것이 표현 계층의 몫

⬛ (L5) | 세션 계층 | Session Layer

데이터 단위 : Data/Message

데이터 교환의 (시작/유지/종료)등 데이터 통신을 위한 논리적 연결 담당 계층

  • TCP/IP의 세션 체결 (연결) , 포트번호를 기반으로 통신 세션 구성
  • 두 지점 간 프로세스 및 통신하는 호스트 간의 연결 유지
  • 데이터 교환을 관리하고 동기화를 유지하며 통신 세션의 설정/유지/종료 담당
[스터디 후 추가] 세션 계층의 '세션' 과 관련하여 헷갈리는 부분 정리
TCP의 세션 : 송신측-수신측 3-way 통한 논리적 연결
HTTP의 세션 : 웹 서버- 브라워 간 연결
세션 계층의 세션 : 두 시스템 통신 시 (데이터 교환을 위한) 논리적 연결

⬛ (L4) | 전송 계층 | Transport Layer

프로토콜 : TCP, UDP
전송 데이터 단위 : TCP (세그먼트), UDP (데이터그램)

데이터를 신뢰성 있게 전송하기 위한 프로세스 간 통신을 관리하는 계층

  • TCP, UDP 프로토콜을 통해 통신 활성화하고
  • 포트 열어서 응용 프로그램들이 신뢰할 수 있는 통신할 수 있게 하는 역할

⬛ (L3) | 네트워크 계층 | Network Layer

프로토콜 : ARP, IP (IGMP, ICMP)
전송 데이터 단위 : IP 패킷 (Packet)
장비 : 라우터

다른 네트워크와 통신하기 위한 [경로 설정 및 논리 주소 결정]

  • 패킷을 목적지까지 전달하기 위한 경로 선택 및 라우팅
  • 라우터를 통해 최적의 경로를 선택하고, 논리 주소를 결정하고, (IP) 경로 따라 패킷을 전달
라우터 : 네트워크끼리 연결하고 데이터 전송하는 기기
라우팅 : 라우터에 의한 네트워크 간의 전송
-> 이 라우터가 내부의 라우팅 테이블 (Routing Table)을 통해 경로 정보를 등록하여 데이터 전송을 위한 최적의 경로를 찾는다.
🎈 IP (IGMP와 ICMP), ARP 란?
1) IP (Internet Protocol)
인터넷에 연결된 모든 장치들 식별할 수 있도록 각 장비에게 부여되는 고유 주소
2) ARP (Address Resolution Protocol) : 주소 결정 프로토콜
IP 주소(논리 주소) → MAC 주소(물리 주소, LAN 카드 주소)ARP는 LAN 환경에서 논리 주소인 IP 주소를 물리 주소 MAC 주소로 변환해주는 네트워크 계층의 프로토콜즉, 3계층의 IP 주소를 2계층의 MAC 주소로 대응시킬 때 사용하는 프로토콜
3) ICMP (Internet Control Message Protocol)
IP 패킷 전송 중 에러 발생 시, 에러 발생 원인 알려주거나 네트워크 상태 진단해주는 기능IP 프로토콜은 전송 상태에 대한 관리가 이루어지지 않는 신뢰할 수 없는 프로토콜이다.이런 IP 프로토콜의 단점을 보완하고자 ICMP 프로토콜 등장
4) IGMP (Intenet Group Management Protocol)
TCP/IP 프로토콜 집합이 동적 멀티 태스킹 수행하기 위해 사용하는 표준 프로토콜
→ ICMP와 IGMP는 데이터 전송용 프로토콜 X
→ 이벤트 또는 변화 알리는데 사용되는 프로토콜 O

⬛ (L2) | 데이터 링크 계층 | Data Link Layer

프로토콜: 이더넷, HDLC, PPP 등
전송 데이터 단위 : 이더넷 프레임 (Ethernet Frame)
장비 : 브리지, 스위치 등

네트워크 기기 간의 [데이터 전송 및 물리 주소 결정]

[물리 주소] : MAC 주소 = 랜카드에 할당된 전 세계에서 유일한 번호로 물리 주소

  • 브릿지나 스위치 활용하여 MAC 주소를 부여하고 물리 계층에서 받은 정보 전달
  • 상위 계층에서 받은 패킷을 ‘프레임 Frame’으로 변환하여 물리계층으로 전송
  • Frame에 Mac 주소를 부여하고 에러 검출, 재전송, 흐름 제어 진행

⬛ (L1) | 물리 계층 | Physical Layer

장비 : 리피터, 허브, 케이블 등
비트 (Bit) → 전기 신호 변환
  • 주로 시스템 간의 물리적 연결과 전기 신호 변환 및 제어
  • OSI 계층을 타고 전달된 데이터를 전기 신호(Bit)로 변환시켜 통신 수행

TCP/IP 4계층

🎈TCP/IP 란 ?

  • TCP/IP는 IP(인터넷 프로토콜)과 TCP (전송 조절 프로토콜)의 묶음을 의미
  • 즉, 두 가지 프로토콜 방식 조합하여 인터넷 통신하는 것을 말함
  • 송신자가 수신자에게 IP 사용하여 최대한 빠르게 패킷 전송하면
  • TCP 활용하여 패킷을 정상적으로 수신 받는다.

[한 눈에 정리]

  1. 응용 계층 (Application Layer): 사용자와 컴퓨터 네트워크 간의 상호 작용을 지원하는 계층.
  2. 전송 계층 (Transport Layer): 데이터의 신뢰성과 효율적인 전송을 담당하는 계층.
  3. 인터넷 계층 (Internet Layer): 데이터의 송수신 경로를 결정하고 논리 주소(ip)를 할당하는 계층.
  4. 링크 계층 (Link Layer): 물리적인 네트워크 연결과 관련된 계층으로, 데이터 프레임의 전송을 처리함.

⬛ (L4) | 응용 계층 | Application Layer

  • 응용 프로그램이 사용되는 계층
  • 서비스를 실질적으로 사용자에게 제공하는 계층
데이터 단위 : 데이터(Data) / 메시지 (Message)
예시 : 파일 전송, 이메일
프로토콜 : FTP, HTTP, DNS, SMTP 등

⬛ (L3) | 전송 계층 | Transport Layer

  • 송, 수신자 연결하는 통신 서비스 제공
  • 역캡슐화 과정에서 포트 번호를 이용해 데이터를 정확한 목작지에 전달하는 역할
  • 전송 계층은 포트 번호를 사용해, 데이터를 목적지 기기 내 적절한 애플리케이션으로 전달
데이터 단위 : TCP (세그먼트), UDP(데이터그램)
전송 주소 : 포트 (Port)
프로토콜 : TCP, UDP

⬛ (L2) | 인터넷 계층 | Internet Layer

  • 네트워크 패킷을 목적지 IP 주소로 전송하기 위해 사용되는 계층
  • 서로 다른 네트워크 간 통신 가능하게 해주는 역할 (연결성 제공)을 수행
  • 단말 구분하기 위해 논리적 주소로 IP 주소를 할당하게 되고,
  • 이 IP주소로 네트워크 상의 컴퓨터를 식별하여 주소를 지정할 수 있게 해준다.
  • 패킷을 최종 목적지까지 라우팅하는 계층

→ 상대방이 제대로 받았는지 보장 X 비연결형적 특징

데이터 단위 : IP 패킷( Packet)
전송 주소 : IP
프로토콜 : IP, ARP, ICMP, RARP

⬛ (L1) | 네트워크 연결 계층 | Network Access Layer

  • 물리적 데이터 전송 담당 계층
  • 인터넷 계층과 달리 ‘같은 네트워크 안’에서 데이터가 전송된다.
  • 데이터를 전기 신호로 변환한 뒤, 물리주소 MAC주소를 활용해 알맞은 기기로 전달하는 계층
  • 논리적 주소가 아닌 ‘물리적 주소’ MAC을 참고하여 장비간 전송을 하고, 기본적인 에러 검출과 패킷의 Frame 화를 담당한다.
데이터 단위 : 프레임 (Frame)
전송 주소 : MAC
사용 예시 : Ethernet 이더넷

OSI 7계층과 TCP/IP 4계층 비교

4계층 vs 7계층

  • 두 계층 모두 데이터 통신을 표현한 계층이기는 하지만, OSI 7계층은 데이터 통신에 필요한 계층과 역할을 정확하게 정의하려고 한 모델이다.
  • 그에 비해 TCP/IP 4계층은 현재 인터넷에서 사용되는 프로토콜로, 좀 더 실무적이면서 프로토콜 중심으로 단순화된 모델이라고 볼 수 있다.

캡슐화/역캡슐화

  • 데이터를 상위/하위 계층으로 보내는 과정에서 캡슐화/역캡슐화 과정을 거친다.
  • 데이터를 상위/하위 계층으로 보낼 때마다 특정 계층이 필요한 정보들이 있기 때문에 그걸 헤더에 담아서 전달하는 것이다.

캡슐화

  • 캡슐화 : 데이터 전송 시, 데이터는 상위→하위 계층으로 이동하고, 각 계층 이동마다 필요한 정보(헤더) 붙이는 작업

역캡슐화

  • 역캡슐화 : 데이터 수신 시, 데이터는 하위→상위 계층으로 이동하고, 각 계층 이동마다 추가된 헤더를 읽고 알맞은 행동 취한 뒤, 헤더를 제거하는 작업

⬛ 네트워크의 전체 흐름 정리 | 캡슐화와 역캡슐화 과정

💡 웹 사이트에 방문했을 때 이뤄지는 전체적인 데이터 처리 과정에 대해 알아보자.

⬛ 데이터 송신 흐름 정리 = 캡슐화 과정

  1. 컴퓨터에서 웹 브라우저에 URL 입력 후 엔터 누르면 캡슐화 시작된다.
  2. 응용 계층에서 GET 명령어로 HTTP (프로토콜) 요청을 하기 위해 HTTP 메시지 전달

→ 웹 서버에 html 데이터를 얻어와야 하므로

  1. 전송 계층에서 출발지와 목적지 포트번호가 적힌 TCP 헤더 붙여서 세그먼트( UDP의 경우 데이터그램)이 된다. 
  2. 네트워크 계층에서 출발지와 목적지 IP주소가 적힌 IP 헤더 붙여서 IP 패킷이 된다.
  3. 데이터 링크 계층에서 이더넷 헤더 + 트레일러(FCS) 추가되어 이더넷 프레임이 된다.
  4. 물리 계층에서 랜카드 사용하여 데이터가 전기신호 (Bit)로 변환된다.
  5. 데이터가 전기신호로 변환된 상태에서 전송된다.
💡 응용 계층에서 데이터 전송 시,
캡슐화 시작 (HTTP 메시지) → TCP 헤더 붙임 (세그먼트) → IP 헤더 붙임 (IP 패킷) → 이더넷 헤더와 트레일러 붙임 (이더넷 프레임) → 전기 신호로 변환됨 (비트Bit)

⬛ 데이터 수신 흐름 정리 = 역캡슐화 과정

  1. 물리 계층에서 전기신호로 변환된 데이터를 전달 받는다.
  2. 데이터 링크 계층에서 (이더넷 프레임 목적지 MAC 주소와 자신의 MAC 주소가 같으면) 이더넷 헤더와 트레일러를 분리한다.
  3. 네트워크 계층에서 (목적지 IP주소와 웹 서버의 IP주소가 같으면) IP헤더를 분리한다.
  4. 전송 계층에서 (목적지 포트 번호를 확인하여 어떤 애플리케이션으로 전달해야 한는지 판단)하고 TCP 헤더를 분리한다.
  5. 응용 계층에서 HTTP 응답을 위해 알맞은 데이터를 반환한다.
💡 데이터 수신 시,
물리계층에서 전기신호→Bit로 변환하여 받음 → 링크 계층에서 목적지 MAC 주소가 자신의 것과 같다면 이더넷 헤더, 트레일러 분리 → 네트워크 계층에서 목적지 IP 주소가 자신의 것과 같다면 IP 헤더 분리 → 전송 계층에서 TCP 헤더 속 포트번호로 전송할 애플리케이션 구분 후 헤더 분리 → 애플리케이션에 전송

XSS와 CSRF

  • XSS는 사이트 변조나 백도어를 통해 클라이언트에 대한 악성 공격을 하고
  • CSRF는 요청을 위조하여 사용자 권한을 이용해 서버에 대한 악성 공격을 하고, 인증된 세션을 악용하여 특정 행동을 실행시키는 공격이다.

⬛ XSS (Corss-Site Scripting) | 크로스 사이트 간 스크립팅

XSS는 공격자가 클라이언트 코드에 악의적인 스크립트를 주입하는 공격이다

악성 스크립트가 클라이언트에서 실행됨
공격 대상 : 클라이언트
쿠키/세션 갈취, 웹 사이트 변조 등

⬛ CSRF (Cross-Site Request Forgery) | 크로스 사이트 요청 위조

CSRF는 공격자가 '사용자의 동의없이 / 사용자가 인지하지 못하는 상황에서' 브라우저로 하여금 서버에 어떤 요청을 보내도록 한다. XSS 공격으로 탈취한 정보를 이 때 사용할 수 있다.

사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹 사이트에 요청하게 하는 공격
1) 위조 요청을 전송하는 서비스에 희생자가 로그인 상태여야 함
2) 희생자는 공격자가 만든 피싱 사이트에 접속해야 함
권한 도용당한 클라이언트가 가짜 요청을 서버에 전송
공격 대상 : 서버
권한 도용
✅ CSRF와 XSS 뜻을 말하고 차이점을 설명해주세요.
XSS 는 공격자가 악의적인 스크립트를 이용하여 사용자의 민감한 정보를 탈취하는 것
CSRF 는 공격자가 (사용자의 동의없이) 브라우저로 하여금 서버에 어떤 요청을 보내도록 한다.
 [차이점] XSS: 클라이언트에서 발생/ CSRF: 서버에서 발생

✅ XSS 에는 어떤 종류가 있나요?
크로스 사이트 스크립팅에는 Reflected 와 Store로 나뉘는데,
Reflected는 스크립트를 URL에 포함하여 악의적인 공격을 수행하는 기법
Store는 악의적인 스크립트 포함한 게시글 포스팅하여 사용자가 접근할 경우 악의적 공격 수행하는 기법

SOP와 CORS

  • XSS와 CSRF와 같이 어플리케이션에서 사용자 정보 탈취하는 것 막기 위한 정책들
  • 브라우저 단에서 적용되는 정책이고, 서버 간 통신에는 적용되지 않는다.

⬛ 같은 출처 vs 다른 출처를 판단하는 기준 : Origin 판단 기준

Origin 판단 기준

  • Origin : 기본적으로 [프로토콜/호스트/포트번호] 동일하면 동일 출처 (원 서버)이다.
  • 일단 서버에서 응답을 받지만, 정책 위반 (CORS or SOP)시 브라우저에서 응답을 파기한다.

→ CORS를 이해하기 위해서는 SOP를 먼저 이해해야 한다.

⬛ SOP (Same-Origin Policy) | 동일 출처 정책

  • 같은 출처에서만 리소스 공유가 가능하도록 하는 정책
  • 다른 Origin으로 요청 보낼 수 없도록 금지하는 브라우저의 기본 보안 정책이다.
  • 즉, 동일한 Origin으로만 요청 보낼 수 있게 한다.

⬛ CORS (Cross-Origin Resource Sharing) | 교차 출처 정책

  • 쉽게 말하자면, 다른 출처에서 데이터를 공유할 수 있는 정책
  • 서로 다른 도메인 간 자원 공유가 가능
  • 기본적으로 SOP에 의해 막히게 될 요청을 풀어주는 정책

⬛ (1) 브라우저의 CORS 동작 원리 | 단순 요청

  • 클라이언트는 HTTP 프로토콜 요청 헤더에 본인 출처(Origin) 담아 서버에 전달한다.
  • 서버는 HTTP 프로토콜의 응답 헤더의 Access-Control-Allow-Origin 필드에 해당 서버에서 접근 허용된 출처 (Origin)를 보낸다.
  • 응답받은 브라우저는 요청할 때 보낸 Origin 과 응답으로 받은 Access-Control-Allow-Origin을 비교 후 유효한 응답인지 판단한다.

→ 비교 후 맞으면 그대로 응답 사용

→ 틀리면 에러 뱉고 응답 버림

→ 단, 이 경우 3가지 조건을 만족해야 한다고 한다.
1. 요청 메소드는 GET, HEAD, POST 중 하나여야 한다.
2. Accept, Accept-Language, Content-Language, Content-Type, DPR, Downlink, Save-data, Viewport-Width, Width 를 제외한 다른 헤더들은 사용할 수 없다.
3. 만약 Content-Type을 사용할 경우에는 application/x-www-form-urlencoded, multipart/form-data, text/plain 만 허용 가능하다.

 

⬛ (2) 예비 요청 | 프리 플라이트 (Preflight Request)

  • 바로 요청을 보내는 것이 아니라, 본 요청을 보내기 전 예비 요청을 보내 실제 요청을 전송하기에 안전한지 확인한다.
  • 여기서 예비 요청을 Preflight 라고 하며, 예비 요청에는 OPTIONS 메소드가 사용된다.
  1. OPTIONS 메소드 사용해 자신의 주소를 보낸다. 추가적으로 origin, access-control-request-method, access-control-request-header 정보를 보냄
  2. 서버의 응답으로 access-control-allow-origin, access-control-allow-method, access-control-allow-headers, access-control-max-age 받는다.
  3. 브라우저에서 서버의 응답 내용 안전하다고 판단되면 본 요청을 보낸다.
  4. 본 요청에 대한 서버의 응답을 자바스크립트에서 실행한다.

 

⬛ (3) 신용 요청 (Credentialed Request)

  • 사용자의 민감한 인증 정보(쿠키, HTTP 인증 및 클라이언트 SSL 인증서)를 포함하고 있는 요청을 말한다.
  • 다른 출처의 리소스에 접근할 때, 해당 리소스가 사용자의 인증 데이터를 필요로 할 때 사용한다.

1) 클라이언트에서 인증 정보를 보내도록 설정하기

  • 기본적으로 브라우저가 제공하는 요청 api 들은 별도 설정없이 쿠키와 같은 인증 관련 데이터를 요청 데이터에 담지 못하도록 되어 있다.
  • 이를 위해 요청에 credentials 옵션을 활성해줘야 한다. (axios 나 jOuery 라이브러리에 따라 옵션 문법이 다름)

2) 서버에서 인증된 요청에 대한 헤더 설정하기

  • 응답 헤더의 Access-Control-Allow-Credentials 항목을 true로 설정한다.
  • 응답 헤더의Access-Control-Allow-Origin 의 값에 와일드카드 문자("*")는 사용할 수 없다.
  • 헤더의Access-Control-Allow-Methods 의 값에 와일드카드 문자("*")는 사용할 수 없다.
  • 헤더의Access-Control-Allow-Headers 의 값에 와일드카드 문자("*")는 사용할 수 없다.
  • → 인증 정보는 민감하기 때문에 출처 정보를 정확히 설정해야 한다.
💡 CORS는 브라우저의 정책이다.
그래서 서버는 평소처럼 요청이 오면 응답을 해주는데,브라우저 딴에서 자신이 보낸 요청, 서버로부터 받은 응답 데이터가 CORS 정책을 지키는지 검사하여 안전한 요청인지 검사하는 거다.그래서 서버가 정상적으로 응답 주더라도, CORS에 위배되는 요청이었다면 해당 응답을 버린다.

 

728x90