콘텐츠로 건너뛰기
Home » Blog » TCP/IP 4계층 모델, 3웨이-핸드셰이크, 4웨이-핸드셰이크

TCP/IP 4계층 모델, 3웨이-핸드셰이크, 4웨이-핸드셰이크

TCP/IP 4계층 모델

  • 장치들이 인터넷 상에서 데이터를 주고받을 때 쓰는 독립적인 프로토콜의 집합(4개)
    • 프로토콜 : 절차를 포함한 통신규약
  • TCP = Transmission Control Protocol
  • IP = Internet Protocol
  • 인터넷을 통해 데이터를 보낼 때 주로 TCP와 IP를 이용해서 보낸다.

계층 구조

  • 애플리케이션 계층 (application)
    • HTTP, SMTP, SSH, FTP가 대표적이다.
    • 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 계층이다.
  • 전송 계층(transport)
    • TCP, UDP가 대표적이다.
    • 애플리케이션 계층에서 받은 메세지를 기반으로 세그먼트 또는 데이터 그램으로 데이터를 쪼개고 데이터가 오류없이 순서대로 전달되도록 도움을 주는 계층이다.
  • 인터넷 계층(network)
    • IP, ICMP, ARP가 대표적이다.
    • 한 노드에서 다른 노드로 전송 계층에서 받은 세그먼트 또는 데이터 그램을 패킷화하여 목적지로 전송하는 역할을 담당한다.
  • 링크 계층(link)
    • 전선, 광섬유, 무선 등으로 데이터가 네트워크를 통해 물리적으로 전송되는 방식을 정의한다.

캡슐화와 비캡슐화

  • 캡슐화
    • 송신자가 수신자에게 데이터를 보낼 때 데이터가 각 계층을 지나며 각 계층의 특징들이 담긴 헤더들이 붙여지는 과정을 의미한다.
    • ex) 전송 계층 → TCP 헤더, 네트워크 계층 → IP 주소 헤더 추가
  • 비캡슐화
    • 캡슐화의 역과정
    • 하위 계층에서 상위계층으로 가며 각 계층의 헤더 부분을 제거하는 과정
    • 수신자 측에서는 이렇게 캡슐화된 데이터를 역순으로 제거하면서 응용계층까지 도달하는 것을 의미한다.

PDU

  • PDU(protocol data unit)란 TCP/IP 4계층을 기반으로 설명했을 때 각 계층의 데이터 단위를 의미한다.
  • 어떠한 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위
    • 애플리케이션 계층: 메시지
    • 전송 계층: 세그먼트(TCP), 데이터그램(UDP)
    • 인터넷 계층: 패킷
    • 링크 계층: 프레임(데이터 링크 계층), 비트(물리 계층)
  • 세그먼트 : 적절한 크기로 쪼갠 조각 (세그먼트와 데이터그램의 의미는 같다)
  • 패킷 : 세그먼트에 SP와 DP가 포함된 IP 헤더가 붙은 형태의 조각
  • 프레임 : MAC주소 헤더와 CRC/체크섬 트레일러가 붙은 조각

CRC/체크섬 트레일러

  • 데이터의 오류감지를 위한 수학적 함수가 적용된 값들이 있는 필드
  • 링크의 오류(과도한 트래픽 등) 로 인해 데이터 손상을 감지하는 역할을 한다.
  • 이 과정에서 CRC와 체크섬 두 가지의 과정을 기반으로 데이터 전송오류 및 데이터무결성을 방지하게 된다.
  • CRC : CRC-1, CRC-16 등의 알고리즘으로 나온 값을 통해 데이터 전송오류감지를 수행
  • 체크섬 : MD5, SHA-256 등의 알고리즘으로 나온 값을 통해 데이터 무결성을 방지

OSI 7 계층과 TCP/IP 4계층의 차이

  • TCP/IP 계층과 달리 OSI 계층은 애플리케이션 계층을 세 개로 쪼개고 링크 계층을 데이터 링크 계층, 물리 계층으로 나눠서 표현한다.
  • 인터넷 계층을 네트워크 계층으로 부른다.

MTU, MSS, PMTUD

MTU(Maximum Transmission Unit)

  • 네트워크에 연결된 장치가 받아들일 수 있는 최대 데이터 패킷의 크기
  • 이 크기를 기준으로 데이터는 쪼개져서 패킷화 된다.
  • 네트워크 경로 상에 있는 아무 장치나 MTU보다 패킷이 크면 그 패킷은 분할될 수 있다.
  • 패킷이 분할되지 않는 경우
    • 패킷을 분할 할 수 없어 네트워크 경로 상에 잇는 어떠한 라우터나 장치의 MTU를 초과할 때 분할해서 전달하는 것이 아니라 전달을 아예 하지 않을 수 도 있다.
    • IPv6 → 분할을 허용하지 않는다.
    • IPv4 → IPv4 헤더에는 flags라는 필드가 있는데 여기서 bit 가 1이 되면 “Dont’ Fragment” 플래그가 활성화 된다는 의미이다. 이 때 분할은 불가능 하다.

MTU와 MSS의 차이

  • MTU : IP헤더와 TCP헤더의 크기까지 합친다.
  • MSS(Maximum Segment Size) : 데이터의 크기(payload 크기)만을 가리킨다.
  • 일반적으로 MTU는 1500byte, MSS는 1460byte 이다.
    • 데이터를 보낼 때 MTU가 1500이라도 데이터는 보통 1460 이하의 크기로 보내야 전달이 된다.
    • (TCP를 쓰지 않는 등의 이유로 달라질 수 도 있다.)

PMTUD(Path MTU Discovery)

  • 수신자와 송신자의 경로 상에서 장치가 패킷을 누락한 경우 테스트 패킷의 크기를 낮추면서 MTU에 맞게끔 반복해서 보내는 과정

애플리케이션 계층

  • HTTP, SMTP, SSH, FTP가 대표적이다.
  • 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 계층

HTTP

  • HTTP(Hypertext Transfer Protocol)은 처음에는 서버와 브라우저간에 데이터를 주고 받기 위해 설계된 프로토콜이었다.
  • 현재는 브라우저 뿐만 아니라 서버와 서버간의 통신할 때도 많이 이용한다.
  • HTTP는 헤더를 통한 확장이 쉽다.
    • ex) 헤더값에다가 어떠한 값을 넣어서 HTTP요청을 할 때 쉽게 다른 값을 추가할 수 있다.
  • HTTP는 stateless하다.
    • 동일한 연결에서 연속적으로 수행되는 두 요청 사이에 연속적인 상태(state)값은 없다.
    • 서버가 상태를 저장하지 않는 상태

SSH

  • SSH(Secure Shell Protocol)은 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜

FTP

  • FTP(File Transfer Protocol)는 노드와 노드 간의 파일을 전송하는데 사용되는 프로토콜
  • 현재는 파일을 암호화해서 전송하는 FTPS 또는 SFTP로 대체되고 있다.

SMTP

  • SMTP(Simple Mail Transfer Protocol)는 인터넷을 통해 메일을 보낼 때 사용되는 프로토콜
  • 보통 서비스를 운영하면 메일링 서비스를 하게 되는데 node.js를 통해 메일을 보낸다면 HTTP가 아닌 SMTP를 통해 보내야 한다.

전송 계층

  • TCP와 UDP가 대표적
  • 애플리케이션 계층에서 받은 메세지를 기반으로 세그먼트 또는 데이터그램으로 데이터를 쪼개고 데이터가 오류 없이 순서대로 전달되도록 도움을 주는 계층

TCP

  • 가상회선 패킷 교환방식을 사용한다.
  • 오류검사 매커니즘이 다양하다.
    1. 재전송 보장 : 시간 초과 기간이 지나면 서버는 전달되지 않은 데이터에 대해 재전송을 시도
    2. 체크섬 시도 : 체크섬을 통해 무결성을 평가한다. 즉, 송신된 데이터의 체크섬과 수신된 데이터의 체크섬 값을 비교해서 올바르게 왔는지를 확인한다.
  • 헤더
    • 20 ~ 60바이트로 가변적

UDP

  • 데이터그램 패킷 교환방식을 사용한다.
    • 그냥 보낸다.
    • 순서가 보장되지 않는다.
  • 오류 검사는 단순한 체크섬만 지원한다.
  • 헤더
    • 32비트(8바이트)로 고정길이

TCP와 UDP의 차이

TCP(전송 제어 프로토콜)UDP(데이터그램 프로토콜)
패킷 교환 방식가상회선 패킷 교환방식데이터그램 패킷 교환방식
신뢰성OX
오류검사재전송, 체크섬체크섬
패킷의 순서보장OX
헤더 길이20~60 바이트 가변 길이8바이트 고정 길이
연결 보장연결을 보장한다.
3웨이-핸드셰이크로 연결을 맺고
4웨이-핸드셰이크로 연결을 해제하는 작업이 필요
연결을 보장하지 않는다.
데이터를 그냥 보낸다.
연결을 유지하고 해제하는데 드는 비용이 없다.
브로드 캐스트 지원XO
속도느림빠름

인터넷 계층

  • IP, ICMP, ARP가 대표적이며 한 노드에서 다른 노드로 전송 계층에서 받은 세그먼트 또는 데이터그램을 패킷화하여 전송한다.

ICMP

  • ICMP(Internet Control Message Protocol)는 노드와 노드 사이에서 통신이 잘 되나 확인할 때 쓰는 프로토콜이다.
  • 이는 데이터를 교환하는데 사용되지 않는 프로토콜이다. (단순 확인)
  • 일반적으로 테스팅에 사용된다. ex) ping test
  • IP와는 달리 TCP 또는 UDP와 같은 전송 계층 프로토콜과 연관되지 않는다.
    • 독립적인 비연결형 프로토콜로 비연결형 프로토콜 기반으로 구축된다.

3웨이 핸드셰이크

  1. SYN 단계 (synchronization 연결 요청 플래그)
    • 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보낸다.
  2. SYN + ACK 단계
    • 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인 번호로 클라이언트의 ISN + 1을 보낸다.
  3. ACK 단계 (acknowledgement 응답 플래그)
    • 클라이언트는 서버의 ISN + 1 값인 승인번호를 담아 ACK를 서버에 보낸다.

ISN

  • 여러 번 통신할 때마다 통신끼리 충돌되지 않게끔 하기 위해 부여하는 고유한 번호
  • TCP 기반 데이터 통신에서 각각의 새 연결에 할당 된 고유한 32 비트 시퀀스 번호를 나타낸다.
  • TCP 연결을 통해 전송되는 다른 데이터 바 이트와 충돌하지 않는 시퀀스 번호를 할당하는 데 도움이 된다.

클라이언트와 서버의 상태

  • TCP 연결 시
    • 클라이언트는 closed, syn-sent, established가 된다.
    • 서버는 closed, listen, syn_received, established 상태가 된다.
  • 이러한 서버와 클라이언트 간의 연결 설정 과정이 있기 때문에 “TCP는 신뢰성이 있다”라고 한다.
    • 이러한 과정이 없는 UDP는 신뢰성이 없다.

4웨이 핸드셰이크와 TIME_WAIT

  1. 먼저 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보낸다. 그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다린다.
  2. 서버는 클라이언트로 ACK라는 승인 세그먼트를 보내고 CLOSE_WAIT 상태에 들어간다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
  3. 서버는 LAST_ACK상태가 되며 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보낸다.
  4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED상태가 되며 이후 클라이언트는 어느 정도 시간(TIME_WAIT으로 설정된 시간)을 대기한 후 연결이 닫힌다.

TIME_WAIT의 필요성

  • 지연 패킷을 받기 위함 → 데이터의 무결성을 지킨다. (일관성, 정확성)
    • 기본적으로 MSL은 2분
  • 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태를 의미
  • 연결을 올바르게 닫았는지 보장하기 위함
    • CLOSED가 아닌 LAST_ACK로 되어있으면 그 다음 연결 때 오류가 나타난다.