[TIL 2023.03.26] TCP / IP 계층 모델

김헤일리·2023년 3월 26일
0

TIL

목록 보기
43/46

저번에 OSI 7 계층 모델에 대해서 정리해봤는데, 현재 인터넷은 OSI 모델이 아니라 TCP/IP 모델을 사용한다고 한다.
사실 OSI 7계층의 4번째 계층이었던 Transport Layer 계층에서 사용하는 프로토콜이 TCP (Transmission Control Protocol) 이다.

OSI 모델보다 단계가 단순해진 것이 TCP/IP 모델이라고 볼 수 있고, 동일한 구성이지만 OSI 계층의 특정 부분을 통합해서 7계층 모델을 4계층 모델로 구성하였다.


1. TCP / IP Layer의 구성

네트워크 시스템을 추상화한 모델이 TCP/IP Layer인만큼, 인터넷에 대해 간단히 정의해보자!

  • 인터넷은 "전세계에 걸쳐 파일 전송등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크의 시스템"을 의미한다.

우리는 인터넷에 가입하여 통신비를 지불함으로서 인터넷을 사용할 수 있다.
우리가 사용하는 인터넷은 특정 사업자가 만들어놓은 인프라로 인해 연결되어있고, SK 브로드밴드 등 다양한 사업체들은 국내에 자가망을 갖고 있고, 해외와는 해저 케이블을 통해 연결되어 있다.

네트워크 통신은 데이터를 디지털 신호로 바꾸어 케이블을 통해 전달하고, 다시 디지털 신호를 데이터로 해석하며 이뤄진다.


📡 4계층 : Application Layer

Application Layer는 특정 서비스를 제공하기 위해 어플리케이션끼리 정보를 주고받을 수 있게 한다.
브라우저와 웹서버가 HTTP 요청/응답을 통해 통신하는 것이 Application Layer에 해당한다.

Application Layer에는 FTP, DNS와 같은 여러종류의 프로토콜리 사용된다.

프로토콜 종류:


📡 3계층 : Transport Layer

전송계층에선 송신된 데이터를 수신측 어플리케이션에 확실하게 전달하는 역할을 담당한다. 여기서 말 하는 확실함이란 데이터의 전달을 보증하고 보낸 순서대로 받게 하는 것을 의미한다.

네트워크 통신을 하는 어플리케이션은 포트번호를 사용하게 되는데, Transport Layer는 이 포트번호를 사용해서 수신자 컴퓨터를 찾는 역할을 담당하고 있다. 또한 데이터의 순서가 알맞게 도착하였는지, 누락된 부분은 없는지 점검하는 과정도 포함되어 있다.

프로토콜 종류:


📡 2계층 : Internet Layer

Internet Layer는 수신 측 까지 데이터를 전달하기 위해 사용된다. 송신 측 /수신 측 컴퓨터는 모두 IP 주소를 갖고있고, 이 주소를 통해 올바른 목적지에 데이터가 도착할 수 있다.

IP는 복잡한 네트워크 망을 통하여 가장 효율적은 방법으로 데이터의 작은 조각들을 되도록 빨리 보내는 일을 한다. 따라서 IP는 패킷 전달 여부를 보증하지 않고, 경로를 설정하여 어떻게든 빨리 보내도록 한다.

그렇기 때문에 3계층에서 데이터가 "제대로" 도착하는지 추가적인 검증 과정이 진행되는 것이다.

프로토콜 종류:


📡 1계층 : Network Layer

Network Layer는 네트워크에 직접 연결된 기기 간의 데이터 전송을 도와준다. 이때 사용되는 주소는 물리적 주소인 MAC 주소이다.

OSI7 계층의 물리 계층과 데이터링크 계층의 역할을 바로 이 계층이 담당하는 것으로 볼 수 있다.
네트워크 계층에선 데이터 패킷을 전기 신호로 변환하여 케이블을 통해 신호 (데이터) 를 전달한다. 이때 사용되는 주소가 MAC 주소인데, 알맞은 하드웨어(컴퓨터)에 데이터가 전달되도록 MAC주소를 핸들링한다.

그 외의 Network Layer에서 사용되는 프로토콜은 Ethernet, PPP, Token Ring이 있다.



2. TCP / IP 의 흐름

📡   www.google.com을 웹브라우저에 입력하면 일어나는 일

도메인 주소를 브라우저에 입력한다는 것은, 구글 웹서버의 80 포트로 HTTP 요청을 보내는 것이다.
해당 요청을 인터넷을 통해 구글 서버에 전달하기 위해 송신자 컴퓨터는 데이터 패킷을 만든다.

데이터 패킷엔 각 계층에 필요한 정보들이 담겨있고, 계층별로 특정 Protocol을 사용해서 패킷을 전달한다.

Application Layer에서 일어나는 일:

  1. 웹브라우저에 google.com을 입력한다.
  1. 데이터를 전달하기 위해선 데이터에 IP 패킷을 추가해서 다음 계층으로 전송해야한다.
    • 이때 우리는 시작지 IP (나의 주소)는 알고 있지만, 목적지의 IP 주소는 아직 알지 못 한다.
    • 우리가 아는 것은 IP 주소가 아니라 도메인 (google.com)이다.
  1. 목적지의 IP 주소를 알아내기 위해 브라우저는 컴퓨터의 OS에게 도메인에 대한 IP 주소를 알고싶다는 요청을 전달한다.
    • 송신측 클라이언트의 애플리케이션 계층은 DNS 서버로 "어느 웹 페이지를 보고 싶다"라는 HTTP 요청을 지시한다.
    • DNS 서버는 컴퓨터 OS에 이미 등록되어있다.
    • DNS 서버는 53번 포트를 사용한다.

Transport Layer와 Internet Layer에서 일어나는 일:

  1. DNS가 도메인이 담긴 쿼리를 도메인 서버로 보내면, 도메인 서버는 IP 서버를 응답으로 내려준다.
    • DNS는 Transport Layer에서 UDP라는 프로토콜을 사용한다.
  1. 애플리케이션 계층에서 받은 데이터(HTTP 메시지)를 통신하기 쉽게 조각내어 안내 번호와 포트 번호(TCP 패킷)를 붙여 네트워크 계층에 전달한다.
  1. 네트워크 계층은 DNS가 전달해준 IP주소를 패킹한다.
    • 이때 IP 주소는 출발지와 도착지 두 개의 IP 주소를 의미한다.
  1. IP 주소까지 포함된 데이터 패킷은 마지막 레이어로 전달된다.

Network Layer에서 일어나는 일:

  1. Ethernet 프로토콜에 대한 헤더를 생성하기 위해 MAC 주소를 가져와야한다.
    • 여기서 MAC 주소는 물리적으로 연결된 라우터의 MAC 주소를 의미한다.
    • 라우터는 일반적으로 사용자가 연결된 공유기를 뜻하고, 이 공유기를 통해 다른 네트워크와 연결이 가능하기 때문에 이 공유기를 "게이트웨이"라고도 한다.
  1. IP 주소를 이용해 MAC 주소를 알아내려면 ARP 프로토콜을 사용한다.
    • ARP 프로토콜은 IP 주소를 MAC 주소로 바꾸어주는 주소해석 프로토콜이다.
    • 이 단계에서 MAC 주소까지 패킷에 추가하면 데이터는 네트워크망을 통해 이동할 준비가 완료되었다고 할 수 있다.
  1. 데이터가 전달되기 위해선 송신측과 수신측이 연결되어야 한다.
    • 이 연결 작업을 "3 Way Handshaking"이라고 한다.
  1. 3 Way Handshaking을 통해 연결이 성립되면 데이터가 전송된다.
    • 데이터가 전송되기 전 거치는 단계는 NAT (Network Address Translation)이 있다.
    • 사용자의 IP는 private IP이기 때문에 외부 환경에서 IP를 찾을 수 없다.
    • 그래서 공유기를 통해 데이터가 나갈 땐 IP를 public으로 변경하는데, private IP를 public으로 변경하는 작업이 NAT이다.
  1. 공유기를 거쳐 google 서버에 도착하기 위해 데이터는 여러 라우터를 거친다.
    • 라우터는 네트워크와 네트워크를 연결해주기 때문에 목적지 경로를 찾아가는 과정을 "라우팅"이라고 한다.
    • 라우팅을 거쳐 구글 서버가 연결된 라우터까지 데이터가 도착하면 패킷 IP 헤더에 기록된 구글 서버 아이피 주소를 통해 MAC 주소를 얻어온다.
  1. 목적지 구글 서버가 자신의 IP로 요청온 ARP 요청을 받고 MAC 주소를 응답한다.
    • MAC 주소를 얻은 시점에서 데이터는 비로소 목적지에 물리적으로 전달된다.
  1. 수신측 서버는 네트워크 계층에서 데이터를 받아들여 순서대로 위의 계층에 전달하여 애플리케이션 계층까지 도달한다.
    • 수신측 애플리케이션 계층에 도달하게 되면 클라이언트가 발신했던 HTTP 리퀘스트를 수신하고, 요청에 맞는 응답을 다시 돌려준다.
    • 이때 요청에 대한 응답으로 브라우저에 google.com이 표시되는 것.


3. TCP 3-Way-Handshaking / 4-Way-Handshaking

위의 TCP / IP 모델 흐름을 보면, 송신자와 수신자가 연결이 되어있는지 확인하는 절차가 있다.
해당 절차를 3-Way-Handshaking이라고 하고, 본격적으로 상대 클라이언트와 연결되기 전에 가상 연결을 해서 패킷으로 보내서 확인하는 동작이다.

그 이후 수신측이 올바른 응답을 보낸다면 두 컴퓨터 사이의 연결을 무사히 끊어야 하는데, 연결을 해제하는 과정을 4-Way-Handshaking 이라고 한다.

Handshaking 과정에서 신호가 오가는데, 전달되는 신호 중 SYN은 'synchronize sequence numbers', ACK는 'acknowledgment', 그리고 FIN은 'Finish' 의 약자, 줄임말이다.


📡 3-Way-Handshaking

3-Way-Handshaking은 데이터 전송 전에 송신자와 수신자 사이에 세션을 수립하는 과정이다.

  1. 클라이언트는 서버에 연결을 요청하는 SYN 패킷을 보낸 후 서버의 응답을 기다리며 SYN_SENT 상태를 유지하고, 서버는 클라이언트의 요청을 받기 전엔 Wait for Cleint 상태를 유지한다.
    • SYN 패킷은 연결 확인을 위해 보내는 무작위의 숫자값이다.
  1. 서버는 클라이언트가 보낸 SYN 패킷을 받고 SYN_RECEIVED 상태가 되고 SYN+ACK(요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷) 를 보내 응답한다.
    • 서버는 클라이언트로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK 신호를 보낸다.
  1. 서버의 응답을 받은 클라이언트는 다시 서버에 ACK 패킷으로 응답하고 이를 서버가 받은 후 부터 세션이 생성되어 (Established) 연결이 완료 되고, 데이터를 교환할 수 있다.

3 단계를 거치면서 클라이언트와 서버 모두 데이터를 전송하고 받을 준비가 되었다는 것을 보장하여 안전한 데이터 전송이 이루어 지게 된다.


📡 4-Way-Handshaking

3-Way-Handshaking을 통해 안전하게 세션을 생성하고, 데이터를 주고 받은 뒤 연결을 해제 하고자 할 때, 4-Way-Handshaking 과정이 이루어 지게 된다.

  1. 클라이언트는 연결을 종료하고자 서버에 FIN 플래그를 보내고 FIN_WAIT 상태에 들어간다.
  1. 서버는 클라이언트로 부터 FIN 플래그를 받은 뒤 ACK 패킷을 보낸 후 데이터를 모두 보낼 때 까지 잠시 TIME_OUT 이 된다. 이 때 서버는 ClOSE_WAIT 상태이다.
  1. 서버가 연결을 종료할 준비가 되면, 연결을 해제할 준비가 되었다는 FIN 플래그를 클라이언트에 전송하고, 서버는 LAST_ACK 상태가 된다.
  1. 클라이언트는 서버에 ACK를 보내 응답하고 클라이언트의 상태는 FIN_WAIT 에서 TIME-WAIT 으로 변경된다.

    • 클라이언트의 ACK 응답을 받은 서버는 연결을 해제한다.
    • 이 때, 클라이언트는 ACK 를 보낸 이후 일정 시간동안 기다리게 되는데, 아직 서버에서 받지 못한 데이터가 연결이 해제되어 유실되는 경우를 대비해 잉여 패킷을 기다리는 TIME_WAIT 상태를 일정 시간 유지하게 된다.
  2. TIME_WAIT 시간이 끝나면 클라이언트도 소켓을 닫게되고, 연결은 이 시점에서 완전히 종료된다.



출처:

profile
공부하느라 녹는 중... 밖에 안 나가서 버섯 피는 중... 🍄

0개의 댓글