OSI 7계층 모델과 TCP/IP

moono·2023년 3월 2일
0

나는 OSI 7계층 모델을 먼저 이해하고 TCP/IP를 이해하는게 더 도움이 됐던 것 같아서 이 순서로 정리를 할 것ㅎ

OSI 7계층 모델TCP/IP통신 MODEL 이라고 부른다.
⇒ 네트워크가 연결해서 주고받는 통신 절차를 표현 하고 있는데
단계별로 무엇을 해야하는지에 대해 설명하고 있는 모델이다.

먼저 인터넷이란 전세계에 걸쳐 파일 전송 등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크 시스템으로, 우리는 사업자가 만들어 놓은 네트워크 인프라를 사용한다.(SK브로드밴드, KT 등)
⇒ 이런 인프라로 데이터를 디지털 신호로 바꿔서 전달하고
받은 디지털 신호를 다시 데이터로 바꿔가며 네트워크 통신이 이루어진다.

OSI 7계층 모델(표준 모델, 참조 모델)

⇒ 교육(학습)용, 장비 개발에 참조, 장애 처리

➰ 1계층 Physical Layer 물리계층

두 대의 컴퓨터가 통신하려면 전선을 연결해서 0과 1을 주고 받으면 되는데,
통과시킬 수 있는 주파수의 범위가 한정적이라 아날로그 신호로 바꿔서 전송시켜 주어야한다.

송신측에서 '0101 0101' 을 아날로그 신호로 바꿔 전송하면 수신측은 아날로그 신호를 해석해 '0101 0101'을 이해하는 구조

  • 0과 1의 나열을 아날로그 신호로 바꿔 전선에 흘려보내는 것 encoding
  • 아날로그 신호가 들어왔을 때 0과 1의 나열로 해석하는 것 decoding

물리적으로 연결된 두 대의 컴퓨터가 0과 1의 나열을 주고 받을 수 있게 해주는 모듈이며 하드웨어적으로 구현되어 있다. (PHY칩)

같은 네트워크에 있는 여러대의 컴퓨터들이 데이터를 주고 받기 위해 필요한 모듈로
여러대의 컴퓨터가 통신하기 위해 송신자는 데이터 앞 뒤에 특정한 비트열을 붙인다. (데이터 링크에 속하는 작업 중 하나)
이것 또한 하드웨어적으로 구현되어 있다. (랜카드)

➰ 3계층 Network Layer 네트워크계층

A에 있는 데이터가 B까지 가기 위해 데이터 앞에 목적지 주소(IP주소)를 붙이는데 이것을 패킷 이라고 부른다.
이건 운영체제 커널에 소프트웨어적으로 구현되어 있다.

➰ 4계층 Transport Layer 전송계층

여러곳에서 받은 데이터를 어떤 프로세스(실행중인 프로그램)에 나눠줘야 되는지 구분하기 위해서
⇒ 프로세스들은 포트번호를 가져야 하고, 송신자는 데이터를 보낼 때 수신자의 컴퓨터에 있는 프로세스의 포트번호를 붙여서 보냄

포트번호를 사용해 수신컴퓨터에 프로세스까지 데이터가 도달하게 하는 모듈

➰ 7계층 Application Layer 응용계층

최종적으로 사용자와의 인터페이스를 제공하는 계층으로 사용자가 실행하는 응용프로그램들이 속하는데, 서로 통신하기 위해 만나는 지점으로 갑자기 7계층이 된 이유는 실사용되는 TCP/IP계층은 Application만 있기 때문에 하나로 합쳐서 소개할 수 있다.
(5계층 Session 계층: 논리적 연결 ⇒ 누구에게 데이터 보내지?)
(6계층 Presentation 계층 ⇒ 데이터를 표현하는 방식)


TCP/IP(비표준모델 ⇒ 사실상 표준)

TCP/IP란 인터넷에서 데이터 통신을 위한 표준 프로토콜 세트
인터넷에서 데이터를 안정적으로 전송하기 위한 기본적인 프로토콜로
이메일, 파일 전송, 웹 브라우징 등 다양한 인터넷 서비스에서 사용된다.

  • TCP(Transmission Control Protocol) : 전송 제어 프로토콜
    ⇒ IP 위에서 동작하고, 데이터 전송의 신뢰성을 보장한다.

  • IP(Internet Protocol) : 인터넷 프로토콜
    ⇒ 인터넷 상에서 데이터를 전송하는데 사용되는데, IP는 데이터를 작은 패킷으로 나누어 인터넷 상에서 전송하며, 각 패킷은 출발지와 목적지 IP 주소를 포함한다.

➰ Application Layer

특정 서비스를 제공하기 위해 애플리케이션끼리 정보를 주고 받을 수 있게 해준다.
(브라우저와 웹서버가 HTTP요청, 응답을 통해 통신하는 것을 예로 들 수 있음)
(HTTP, FTP, DNS 등과 같은 프로토콜이 사용됨)

➰ Transport Layer

송신된 데이터를 수신측 애플리케이션에게 확실하게 전달해준다.
네트워크 통신하는 애플리케이션은 포트번호를 사용하게 되는데
Transport Layer는 포트번호를 사용해 애플리케이션을 찾아주는 역할을 한다.
(TCP, UDP 등과 같은 프로토콜이 사용됨)

➰ Internet Layer

수신측까지 데이터를 전달하기 위해 사용된다.
송신측, 수신측 모두 IP 주소를 가지고 있는데,
Internet Layer는 IP주소를 바탕으로 올바른 목적지로 찾아갈 수 있게 해준다.
(IP, ARP 등과 같은 프로토콜이 사용됨)

➰ Network Access Layer

네트워크에 직접 연결된 기기간의 데이터 전송을 도와준다.
여기서는 물리적 주소인 MAC 주소를 사용
(Ethernet, PPP, Token Ring 같은 프로토콜 사용)

TCP/IP의 흐름

웹 브라우저에 www.google.com을 입력하면 무슨일이 일어날까?

웹브라우저에 www.google.com 을 입력한다는 건 구글 웹서버에 80포트로 HTTP Request 메시지를 보내는 것
⇒ (http) www.google.com(:80) HTTP로 작성된 해당 요청 처리 부탁해요 너낌
⇒ 해당 요청을 인터넷을 통해 구글 서버로 전달하기 위해 우리는 패킷(각 계층에 필요한 정보가 담겨야 함) 을 만들어야 한다.

아래 이미지에서 필요한 데이터들을 살펴보자

Internet Layer 에서 목적지 IP주소를 알기 위해서는 DNS 프로토콜을 통해서 도메인 정보로 IP주소를 알아낼 수 있는데, 브라우저는 OS에게 도메인에 대한 IP 주소를 알고싶다고 요청하고, OS에서 DNS 서버로 요청을 보낸다.
DNS도 HTTP Request 와 비슷하게 도메인이 담긴 쿼리를 도메인 서버에 보내면 도메인 서버가 IP주소를 응답해준다.
⇒ DNS는 Transport Layer 의 UDP 라는 프로토콜을 사용하는데, UDP 와 TCP에 대한 차이는 아래에서 설명할 예정

마지막으로 Ethernet 프로토콜에 대한 Header를 만들어야 하는데 아직 MAC 주소를 모른다.
지금 필요한 MAC 주소는 물리적으로 연결된 우리집 공유기의 MAC 주소가 필요한데,
IP주소로 MAC 주소를 알아내기 위해 ARP(Address Resolution Protocol) 프로토콜을 사용한다.
ARP란 : IP 주소를 MAC 주소로 바꿔주는 주소해석 프로토콜이며, IP주소와 물리적인 MAC 주소간의 맵핑 정보 제공 프로토콜이다.

TCP 프로토콜의 3way HandShaking으로 데이터를 보내기 전에 송신, 수신측이 서로 연결되는 작업이 필요하다.
여기서는 SYN 과 ACK 플래그가 사용되는데 SYN은 요청, ACK은 수락 느낌이다.
⇒ 이렇게 하면 연결이 이루어지고, 데이터 오가는게 가능

구글서버까지 가기 위해 네트워크와 네트워크를 연결해주는 라우터들을 지나는 라우팅 과정을 거쳐서 구글 서버가 연결된 라우터에 도착하면 패킷의 IP헤더에 기록된 구글 IP주소를 통해 MAC 주소를 얻어와야 한다.

목적지 구글서버가 자신의 IP로 온 ARP 요청을 받고 MAC 주소를 응답해준다.

ARP로 IP주소를 통해 MAC 주소를 얻고, 목적지 구글서버에 데이터가 도착
⇒ Internet Layer의 IP주소와 Network Access Layer의 MAC주소를 사용해 목적지에 도착했고,
Transport Layer 의 목적지 포트번호는 80이 적혀있고 이것들을 보고 서버는 80 포트를 사용하는 애플리케이션에게 해당 데이터를 전달해줘야 하는걸 알고 있고
서버에서 응답을 돌려보내준다.

이렇게 다시 클라이언트에게 HTTP요청과 응답과정이 끝나면
서버와 클라이언트의 연결을 종료해야 하는데, 이때 4 Way HandShaking이 사용된다.
여기서 FIN은 연결 종료, ACK 은 수락 느낌
⇒ 하지만 서버가 보낸 데이터가 FIN 보다 늦게 도착 하는 경우가 있어서 FIN 전에 보낸 패킷을 클라이언트가 못받을 수도 있는데, 그래서 클라이언트는 FIN 요청을 받아도 소켓을 닫는데 시간을 두고 나머지 패킷을 기다린다.


TCP와 UDP의 차이

TCP (Transmission Control Protocol)

  • 신뢰성있는 데이터 통신을 가능하게 해주는 프로토콜
  • 연결지향형 프로토콜로 연결이 성립된 후 데이터를 전송한다.
  • 데이터 순차 전송을 보장
  • 흐름제어, 혼잡제어, 오류감지

TCP 프로토콜의 단위를 세그먼트라고 한다.
(프로토콜 안에서 내부적으로 자르고 TCP Header를 Data 앞에 붙인 것)

TCP는 전송의 신뢰성은 보장하지만 매번 Connection을 연결해야해서 시간 손실이 발생하고, 패킷을 조금만 손실해도 재전송 한다는 문제점이 있다.

UDP (User Datagram Protocol)

  • 비연결지향형 (3 way handshake 없움)
  • TCP 보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜
    (순차전송x, 흐름제어x, 혼잡제어x)
  • 비교적 데이터의 신뢰성이 중요하지 않은 때 사용하기 때문에 영상스트리밍에 사용된다.

TCP, UDP 비교

TCPUDP
연결지향형 프로토콜비연결지향형 프로토콜
전송 순서 보장전송 순서 보장 X
데이터 수신 여부 확인함데이터 수신 여부 확인하지 않음
신뢰성 높지만 속도 느림신뢰성 낮지만 속도 빠름

DNS 개념 알아보기(Domain Name System)

도메인 이름과 IP주소에 대한 정보를 관리하는 시스템으로 인터넷 사용자는 IP 주소를 몰라도 된다.
⇒ 우리에게 익숙한 도메인 이름을 DNS가 IP주소로 바꿔주는 기능을 제공한다.

DNS 동작과정

  1. 브라우저는 브라우저에 있는 캐시에서 IP가 있나 찾아본다.
  2. 없으면 컴퓨터에 저장된 host 파일과 캐시에서 또 찾는다.
  3. 없으면 이때 DNS에게 IP주소를 요청하고 DNS가 IP주소를 전달해준다.

www.naver.com .

  • 맨 뒤에 .은 루트 도메인
  • com 은 TLD(Top Level Domain)
  • naver 는 Second Level Domain
  • www 는 Third Level Domain
    naver 와 www 를 묶어서 Sub Domain 이라고 한다.

DNS 적용해보기

  • 원하는 도메인을 구매한다.
  • DNS 레코드를 추가해 도메인 이름에 IP 주소를 맵핑한다.
    ⇒ DNS 레코드가 업체 네임서버에 저장됨(가비아, cafe24 등)
  • 서브 도메인(호스트) (@(null), www, m, dev 등) 을 등 다양한 도메인을 생성한다.
    ⇒ m.naver.com, www.naver.com, naver.com, dev.naver.com 등
    • 레코드 타임: 도메인 이름에 어떤 값이 맵핑되는지 (A, CNAME 등)
      ⇒ A: IP 주소를 맵핑
      ⇒ CNAME : 도메인 이름에 대한 별칭 맵핑
      ⇒ NS : 도메인 이름에 대한 권한이 있는 네임서버를 맵핑해주며, 다른 NS에 도메인 이름에 대한 권한을 위임해줄 수 있다.

예) A 타입 ⇒ IP 주소가 변경 되었을 때, 두개 다 바꿔야 함

도메인타입
naver.comAIP 주소
www.naver.comAIP 주소

예) CNAME 타입 ⇒ IP 주소가 변경 되었을 때, 한개 만 바꾸면 됨

도메인타입
naver.comAIP 주소
www.naver.comCNAMEnaver.com

Reference

0개의 댓글