TCP/IP Protocol

Michael Kim·2022년 7월 14일
1

0. TCP/IP 5계층

데이터는 네트워크 속에서 어떻게 요청하고 받는 것일까? 대부분의 네트워크는 TCP/IP 프로토콜을 따른다. 프로토콜(Protocol)이란 일종의 약속, 규약이다. 즉, 데이터가 어떻게 처리되고 어떤 형식으로 보내질 지에 대해 사회에서 정한 규칙이라고 봐도 될 것 같다.

TCP/IP는 5개의 계층으로 이루어져 있다.

  • Physical Layer
  • Data Link Layer
  • Network Layer
  • Transport Layer
  • Application Layer

각 계층에서 정해진 프로토콜 대로 데이터에 특정 정보가 담긴 header가 붙고 처리된다. 그렇다면 어떤 방식으로 데이터가 처리되는 것일까?

1. Physical Layer

  • 물리 계층이라고 불린다.
  • 파형의 아날로그 신호를 0과 1로 이루어진 디지털 신호로 바꾸거나(Decoding) 디지털 신호를 아날로그 신호로 바꾸는(Encoding) 역할을 한다.
  • 이는 하드웨어적(기계 내부의 회로)으로 구현되어 있다.

2. Data Link Layer

Frame 구조

  • Data Link 계층에서는 Frame이라는 단위의 데이터를 다룬다. 이는 Network Layer에서 받은 데이터에 여러 정보를 앞뒤에 붙여 만든다.

  • Ethernet, ARP와 같은 프로토콜이 Data Link 계층에 속하며, 각 프로토콜 마다 Frame은 다른 구조를 이루고 있다.

  • Preamble, FCS

    • 물리 계층에서 디지털 신호를 받더라도, 이는 연속된 신호이므로 Frame의 처음과 끝을 구별해내는 것이 필요하다. 프리앰블(preamble)을 앞에, 그리고 FCS 정보를 뒤에 붙여 디지털 신호에서 Frame의 처음과 끝을 알 수 있게 해준다.
  • MAC Address

    • Frame은 preamble, FCS 뿐만 아니라, 데이터를 보내는 곳의 송신 MAC 주소와 데이터를 받는 수신 MAC 주소 정보를 가지고 있다.

    • MAC 주소는 네트워크 어댑터(NIC)에 부여된 고유의 식별 번호다. MAC 주소는 어댑터 제조사와 제조사 제품끼리 중복되지 않도록 하는 번호가 붙어 있다.

    • 수신측의 MAC 주소는 어떻게 알아내는 것일까? Frame 내에는 Packet이라는 Network 계층에서 쓰는 단위의 데이터가 있는데, Packet에는 IP정보가 들어있다. 이 IP 정보를 이용하여 MAC 주소를 알아낼 수 있다.

      • ARP라는 프로토콜에서 IP 주소로 MAC 정보를 알 수 있게 하는 역할을 한다.
      • 먼저, 수신 측의 IP 정보를 담은 요청 패킷을 네트워크(로컬 네트워크 단위) 전체에 브로드케스트한다.
      • 수식 측에서 받은 요청 패킷을 확인하고, IP 정보가 자신의 IP주소와 같을 경우, 자신의 MAC 주소를 담아 응답 패킷을 보내게 된다.
      • 송신 측에서 응답 패킷을 확인하고 보내고 싶은 IP 주소에 해당하는 MAC 주소를 알 수 있게 된다.
  • 정리하자면, Data Link Layer에서는 Frame 단위의 데이터를 다루며, Frame에는 preamble, FCS를 이용하여 연속 디지털 신호에서 Frame을 구별해내고, Frame 내의 송수신 MAC 주소를 이용하여 수신자에게 해당 Frame 데이터를 전송할 수 있게 된다.

3. Network Layer

  • Network 계층에서는 Packet이라는 단위의 데이터를 다룬다. 이는 Transport Layer에서 넘어온 데이터 앞부분에 IP Header를 붙여서 만든다.
  • IP Header에는 송수신 IP 주소(Source Address, Destination Address)를 가지고 있다. 또한 Transport 프로토콜(TCP or UDP) 정보를 담아 보낸다.
  • IPv4의 경우 32비트 길이의 IP Address를 가지며, IP 주소량이 부족해짐에 따라 128비트 길이를 가진 IPv6이 등장하게 됐다.
  • IP 주소를 이용하여 라우터가 목적지에 데이터를 전달하게 된다.
  • 라우터(Router)란 데이터를 목적지 IP 주소까지 전달하기 위해, 라우팅 테이블을 이용하여 경로를 탐색하고 데이터를 전달해주는 역할을 한다.

4. Transport Layer

  • TCP, UDP 프로토콜이 Transport 계층에 속한다.
  • TCP에서 다루는 데이터 단위는 Segment이며, UDP는 Datagram이라는 단위의 데이터를 다룬다. 각 Header에는 송수신 Port 번호 정보가 담겨있다.
  • Port 번호
    • 기기에는 여러 Application이 실행되어 있을 수 있으며, 받은 데이터는 어느 Application에 전달해야하는지 알 필요가 있다.
    • IP 주소처럼 port 번호를 이용하여 어느 Application에 데이터가 전달할 지 알 수 있다.
  • TCP
    • 늦더라도 손실 없이, 정확한 순서로 데이터를 전달을 중시한다.
    • control bits(flags)는 통신 상태를 표현하는 플래그 역할을 한다.
    • TCP는 통신을 연결할 때 3-way handshake 방식을 사용하며, 통신 종료할 때는 4-way handshake 방식을 사용한다. control bits의 SYN(접속 ON), ACK(동작 확인), FIN(접속 OFF)를 사용한다.
    • 3-way handshake
      1. Client에서 Server로 SYN 비트를 1로 설정하여 보내어, 연결을 요청한다.
      2. Server에서 Client로 SYN와 ACK를 각각 1로 설정하여 보내어, 응답과 동시에 연결을 요청한다.
      3. Client Server로 ACK 1로 설정 및 전송하여 응답한다.
    • 4-way handshake
      1. Client에서 Server로 FIN을 1로 설정하여 보낸다. 연결 종료를 요청한다.
      2. Server에서 요청에 응답하기 위해 Client에 ACK 1로 설정하여 보낸다.
      3. Client로 덜 보낸 패킷이 있다면 모두 보낸 후에 Server에서 FIN을 1로 설정하여 보내어 연결 종료를 요청한다.
      4. Client에서 Server로 ACK 1로 설정하여 보낸다. 연결 종료 요청에 응답하고 Server와의 연결을 종료한다.
    • 통신 연결 시 SYN, ACK를 주고 받을 때, 최대 세크먼트 크기(MSS, Maximum Segment Size)를 서로 합의하고 조율하는 과정을 거친다.
    • 일련번호(Sequence Number)와 확인 응답 번호(Acknowledgment Number)를 이용하여, 주고 받은 데이터 크기와 순서를 확인할 수 있다. 이를 통해 데이터의 송신 실패 여부를 확인 가능하고, 데이터를 재전송하게 된다.
    • 흐름 제어(Flow Control): Window Size는 수신 측의 Buffer(아직 처리가 안 된 데이터를 보관하는 공간)의 여유 공간 정보를 담아 송신 측에 보내어, 데이터 송신 크기를 조절하게 된다.
    • 혼잡 제어(Congestion Control): 수식 측은 데이터를 처음 받을 때, Packet의 IP Header의 혼잡 정보를 통해 혼잡 여부를 알게된다. 그리고 송신 측에 네트워크가 혼잡함을 알리기 위해 ECE 플래그를 1로 설정하여 데이터를 보낸다. 송신 측은 이를 확인하고 통신 속도를 낮추어 CWR을 1로 설정한 상태로 데이터를 보내게 된다.
  • UDP
    • 전달 순서가 다르고, 정보 손실이 있더라도 빠르게 전달한다.
    • 음성, 동영상 스트리밍 서비스에 사용된다.
    • 일부 동영상, 음성 스트리밍 서비스에서는 응용 계층에서 흐름 제어, 혼잡 제어 기능을 구현한다고 한다.

5. Application Layer

  • Application 계층에서 사용하는 프로토콜은 다음과 같다.
    • HTTP: 웹 클라이언트와 웹 서버 사이에서 웹 페이지 데이터를 주고받는다.
    • HTTPS: SSL/TLS 프로토콜을 사용하여 웹 페이지 데이터를 주고 받는 과정을 암호화한 HTTP다.
    • FTP: 서버를 통해 파일을 주고받는다.
    • SSH: 보안 환경에서 원격으로 서버를 제어한다.
    • DNS: 도메인 이름과 IP Address를 서로 변환한다.
    • DHCP: LAN 내의 컴퓨터에 Private IP Address를 동적으로 할당한다.
    • SSL/TLS: 서버 인증서를 사용하여 서버와 클라이언트 간의 통신을 암호화한다.
  • 위의 프로토콜 외에도 많은 종류가 있으며, 다양한 구조로 이루어져 있다.
profile
정리하고 복습하고 일기도 쓰고

0개의 댓글