본문 바로가기
Things I was curious about

[TCP/IP] 개념 및 계층 구조 이해

by 갈릭 deep잉 소스좋아 2024. 3. 25.

오늘은 개발자라면 반드시 알고 있어야하는 상식이자 면접 단골 질문인 TCP/IP에 대해서 글을 써보려고 한다!

1. TCP/IP 개념 및 계층 구조

 

TCP/IP는 인터넷 프로토콜 슈트(Internet Protocol Suite)의 일종으로, 인터넷에서 데이터를 전송하기 위한 표준 프로토콜이다. TCP/IP는 데이터를 작은 패킷으로 나누어 보내며, 이를 받은 컴퓨터에서는 패킷을 다시 조립하여 데이터를 전송받는다.

 

캡슐화 : 데이터를 송신할 때, 계층간의 이동을 위해 필요한 정보를 담고있는 헤더가 추가되는 과정.

역캡슐화 : 데이터를 수신할 때, 계층이동마다 추가된 헤더를 읽고 그에 맞는 행동을 취한 후 헤더를 제거하는 과정.

TCP/IP는 4개의 계층으로 이루어져 있고 각 계층은 다음과 같은 역할을 수행한다.

 

4계층 : 응용 계층 (Application Layer)

  • 응용 프로그램 간의 데이터 송수신 담당
  • 프로토콜 : HTTP, SSH, DNS 등등
  • 전송단위 : Message

3계층 : 전송 계층 (Transport Layer)

  • 데이터를 패킷으로 분할 → 각 패킷에 시퀀스 넘버 부여 → 데이터의 추적, 관리가 용이해짐 → 신뢰성 증가
  • 프로토콜 : TCP, UDP
  • 전송단위 : Segment
💡 시퀀스 넘버(Squence Number)란?

TCP Segment의 연속된 데이터 번호
패킷을 올바른 순서로 수신하는데 사용된다.
또한, 패킷의 순서가 뒤바뀌거나 손실된 경우 재전송하는데에도 쓰인다.

 

2계층 : 인터넷 계층 (Internet Layer)

  • 분할된 패킷에 IP주소를 부여하고 라우팅 경로 설정 → ARP 프로토콜을 통해 네트워크 카드의 물리적 주소(MAC)로 변환
  • 프로토콜 : IP, ARP
  • 전송단위 : Packet

1계층 : 네트워크 액세스 계층 (Network Access Layer)

  • 인터넷 계층에서 넘겨받은 MAC 주소를 사용하여 두 노드 연결 → 네트워크를 통해 데이터 전송
  • 프로토콜 : 이더넷, Wi-Fi 등등
  • 전송단위 : Frame

 

2. 프로토콜 개념

 [1] HTTP (Hypertext Transfer Protocol)

  • 데이터를 전송하기 위한 프로토콜 중 하나
  • 클라이언트(요청)과 서버(응답)으로 이루어짐.

[2] TCP (Transmission Control Protocol)

  • 연결지향 프로토콜
  • 3-way-handshaking 절차를 통해 연결 설정.
  • 클라이언트와 서버간에 신뢰성 있는 연결을 설정하고, 데이터를 안전하게 전송할 수 있게하는 절차. 

  1. 클라이언트가 서버에게 SYN 패킷을 보낸다.
  2. 서버는 SYN 패킷을 받고, 클라이언트에게 ACK와 SYN 패킷을 보낸다.
  3. 클라이언트는 ACK 패킷을 보내고, 이로써 연결이 설정된다.
  4. 이후 라우팅을 통해 패킷을 목적지 서버로 전송.

 

 

  • 4-way-handshaking 절차를 통해 연결 해제.
  • 클라이언트와 서버간의 연결을 안전하게 해제하는 절차.

  1. 클라이언트가 서버에게 FIN 패킷을 보낸다.
  2. 서버는 FIN 패킷을 받고, 클라이언트에게 ACK 패킷을 보낸다.
  3. 서버가 자신의 데이터를 모두 전송하고, 전송이 완료되면 클라이언트에게 FIN 패킷을 보낸다.
  4. 클라이언트는 FIN 패킷을 받고, 서버에게 ACK 패킷을 보내고, 연결이 해제된다.
  5. 그러나, 일부 ACK 패킷이 FIN패킷보다 늦게 와서 서버의 일부 응답을 받지 못하는 경우를 방지하고자 소켓을 닫지 않고 잉여 패킷을 기다리는 Time-Wait 상태에 돌입.

 

  • 데이터의 신뢰성을 보장하기 위해 흐름제어, 혼잡제어, 오류 제어를 수행한다.
    • 오류 제어 : 데이터를 전송하다가 오류가 발생하면 그 오류를 찾아내고 고치는 기능.
      송신측에서 패킷을 보내면 수신측에서 확인 응답 메시지를 보내고, 송신측은 이를 확인하여 오류가 생긴 패킷을 다시 보낸다.
    • 흐름 제어 : 데이터 처리 속도 차이로 인한 문제 발생을 방지하기 위한 기능.
      이를 위해 송신 측에서는 수신 측에서 처리할 수 있는 양의 데이터만 전송하며, 수신 측에서는 처리할 수 있는 양의 데이터만 수신.
    • 혼잡 제어 : 네트워크 혼잡을 막기 위해 데이터 전송 속도를 제어하는 기능.
      송신 측에서 네트워크 상황을 모니터링하며, 혼잡한 경우 데이터 전송 속도를 줄인다.

[3] IP (Internet Protocol)

  • 패킷을 전송하기 위한 주소를 설정하고 라우팅을 하기 위한 프로토콜
  • IP주소를 통해 패킷의 출발과 목적지의 주소를 설정 → 다른 네트워크로의 전송을 위한 경로 찾기

[4] ARP (Address Resolution Protocol)

  • IP주소를 MAC주소로 매핑하는 프로토콜
  • LAN에서 사용되며 서로 다른 호스트 간 통신을 위해 사용된다.
  • 인터넷 계층과 네트워크 액세스 계층 사이에서 동작한다.
  • ARP는 중간자 공격 등의 보안 문제가 있을 수 있으므로, 보안에 대한 고려가 필요하다.
💡 ARP는 다음과 같은 과정으로 이루어진다.

1.IP패킷 생성
2.호스트 A는 ARP 캐시를 확인하여 호스트 B의 MAC 주소를 알고 있는지 확인 (ARP 캐시 : 이전에 통신했던 호스트의 IP 주소와 MAC 주소를 저장하는 캐시)
3.ARP 캐시에 호스트 B의 MAC 주소가 없는 경우, 호스트 A는 ARP 요청 패킷을 브로드캐스트한다. ARP 요청 패킷에는 호스트 A의 IP 주소와 MAC 주소가 포함되어 있다.
4.호스트 B는 ARP 요청 패킷을 수신하면, 자신의 MAC 주소를 ARP 응답 패킷에 담아 호스트 A에게 전송한다.
5.호스트 A는 ARP 응답 패킷을 수신하면, 호스트 B의 MAC 주소를 ARP 캐시에 저장한다.
6.호스트 A와 호스트 B의 통신 연결 성공.

[5] MAC (Media Access Control)

  • 컴퓨터 간에 데이터를 전송하기 위한 하드웨어적인 주소(물리적 주소)
  • 네트워크 인터페이스 카드에 할당되어 고유 식별자로 사용.

 

(번외) TCP와 UDP의 공통점과 차이점

공통점

  • 전송계층에서 사용된다.
  • 패킷을 이용하여 데이터를 전송한다.
  • 데이터를 소스→목적지까지 전송한다.
  • 포트 번호를 사용하여 소스와 목적지를 식별한다.

차이점

  • TCP는 전송속도가 느리고 UDP는 상대적으로 빠르다.
  • TCP는 신뢰성 있는 데이터 전송을 보장하지만, UDP는 신뢰성이 떨어진다.
  • TCP는 오류가 발생한 경우 다시 전송하며, UDP는 그렇지 않다.
  • TCP는 연결지향 프로토콜이며, UDP는 비연결지향 프로토콜이다.
  • TCP는 데이터의 순서를 보장하지만, UDP는 그렇지 않다.

댓글