[CS] 네트워크 - TCP/IP 4계층과 주요 개념

팔랑이·2025년 1월 5일
0

CS

목록 보기
9/19

⛳️ 인프런 - cs 지식의 정석 강의를 듣고 학습한 내용입니다.


TCP/IP 4계층

개념

TCP/IP는 인터넷에서 데이터를 주고받을 때 사용하는 프로토콜 모음으로, 데이터를 올바르게 전송하기 위해 계층별로 책임을 분리한 구조를 가진다.

TCP/IP 4계층

  1. 애플리케이션 계층
  • HTTP, SMTP, SSH, FTP 등이 대표적
  • 사용자와 가장 가까운 인터페이스 계층
  • 웹 서비스, 이메일, 파일 전송 등의 애플리케이션 서비스를 처리
  1. 전송 계층
  • TCP, UDP가 대표적.
  • 데이터를 세그먼트(TCP)나 데이터그램(UDP)으로 나누고, 오류 없이 전달되도록 처리
  • TCP는 신뢰성을 보장하며, UDP는 신뢰성 대신 속도를 우선
  1. 인터넷 계층
  • IP, ICMP, ARP 등이 포함
  • 데이터 패킷화 및 경로 설정
  • 노드 간 데이터 전달을 담당
  1. 링크 계층
  • 데이터 링크 계층과 물리 계층을 합친 계층
  • 전선, 광섬유, 무선 등으로 데이터가 실제 네트워크를 통해 전송되는 방식을 정의

캡슐화와 비캡슐화

캡슐화

송신자가 데이터를 보낼 때, 각 계층에서 해당 계층의 헤더를 추가하는 과

  • ex: TCP 계층에서 TCP 헤더 추가 → IP 계층에서 IP 헤더 추가 → 전송

비캡슐화

수신자가 데이터를 받을 때, 계층별로 헤더를 제거하며 데이터의 원본 형태를 복원하는 과정


PDU (Protocol Data Unit)

각 계층별 데이터 단위를 의미한다.
모든 계층에 전달되는 데이터가 쪼개져서 패킷으로 전달된다고 하는 것도 대강 맞는 말이지만, PDU에 따라 부르는게 더 정확한 표현이다.

  • 애플리케이션 계층: 메시지
  • 전송 계층: 세그먼트(TCP), 데이터그램(UDP)
  • 인터넷 계층: 패킷 (세그먼트 + IP 헤더)
  • 링크 계층: 프레임(데이터 링크 계층) → 비트(물리 계층)

세그먼트 : 적절한 크기로 쪼갠 조각 (세그먼트와 데이터그램의 의미는 같음)
패킷 : 세그먼트에 SP와 DP가 포함된 IP 헤더가 붙은 형태의 조각
프레임 : MAC주소 헤더와 CRC/체크섬 트레일러가 붙은 조각

CRC/체크섬 트레일러

데이터의 오류감지 위한 수학적 함수가 적용된 값들이 있는 필드로, 과도한 트래픽 등으로 인한 링크의 오류가 데이터를 손상하는 것을 감지하는 역할을 한다.

  • CRC : CRC-1, CRC-16 등의 알고리즘으로 나온 값을 통해 데이터 전송 오류 감지
  • 체크섬 : MD5, SHA-256 등의 알고리즘으로 나온 값을 통해 데이터 무결성 보장

참고: IP Header

참고: OSI 7계층


MTU와 MSS

1. MTU (Maximum Transmission Unit)

네트워크가 한 번에 전송할 수 있는 최대 PDU 크기

  • ex: MTU가 1500일 때, 4000바이트 데이터를 보내려면 더 작게 분할 필요

보내려는 데이터가 MTU보다 크다면?

  • IPv6: 분할 비허용.
  • IPv4: 헤더의 Flag 필드에서 DF(Don't Fragment) 비트가 1로 설정되면 분할이 불가능

MTU 확인 방법

  • window cmd: netsh interface ipv4 show interfaces 입력
  • mac os 터미널: ifconfig 입력시 다음과 같이 확인해볼 수 있다.

2. MSS (Maximum Segment Size)

MTU는 IP헤더와 TCP헤더의 크기까지 합치지만, MSS는 데이터의 크기(payload의 크기)만을 나타냄.
즉 MSS = MTU - TCP/IP 헤더 크기

3. PMTUD (Path MTU Discovery)

  • 패킷이 MTU보다 클 때, 패킷 분할이 불가능한 경우 발생
  • 패킷이 목적지에 도달하지 못하면 경로 상의 MTU를 줄여가면서 다시 전송한다
  • IPv6 환경에서 특히 중요

애플리케이션 계층 프로토콜

1. HTTP (Hypertext Transfer Protocol)

서버와 클라이언트 간 데이터 전송을 위한 프로토콜이다. 처음에는 서버와 브라우저간 데이터를 주고받는데 설계되었지만, 지금은 서버와 서버간 통신에도 많이 이용한다.

  • 확장성: 표준화된 헤더 외에도 필요에 따라 추가적인 정보를 헤더에 포함시켜 요청이나 응답을 확장할 수 있다. HTTP가 다양한 상황에서 유연하게 동작할 수 있도록 만들어주는 핵심 장점 중 하나.
  • Stateless: 요청-응답 간 상태 정보를 저장하지 않음

2. SSH (Secure Shell Protocol)

보안되지 않은 네트워크에서 데이터를 암호화하여 안전하게 전송하기 위한 암호화 네트워크 프로토콜

  • ex: AWS 서버 인증에 사용되는 PEM 키

3. FTP (File Transfer Protocol)

노드 간 파일 전송하는 데에 사용되는 프로토콜이다. 현재는 보안이 강화된 FTPS, SFTP로 대체되고 있다.

4. SMTP (Simple Mail Transfer Protocol)

이메일 전송을 위한 표준 프로토콜로, 메일링 서비스를 직접 만든다면 smtp를 통해 보내야 함

예시 코드: JavaScript의 Nodemailer 라이브러리 내부 코드

코드를 보면 smtp를 사용하여 이메일을 보내는 것을 확인할 수 있다.

let transporter = nodemailer.createTransport({
    host: "smtp.ethereal.email",
    port: 587,
    secure: false,
    auth: {
        user: testAccount.user,
        pass: testAccount.pass,
    },
});

전송 계층

TCP (Transmission Control Protocol)

  • 특징:
    1. 신뢰성 있는 전송 (3-way handshake로 연결, 4-way handshake로 연결 해제)
    2. 가상회선 패킷 교환 방식으로, 패킷 순서가 보장된다.
    3. 오류 검사 방식이 다양하다.
      • 재전송: 시간이 초과되면 서버에서 재전송 시도
    • 체크섬: 송신된 데이터와 수신된 데이터의 체크섬 값을 비교해 무결성 평가
  • 헤더: 20~60바이트 (가변)

UDP (User Datagram Protocol)

  • 특징:
    1. 속도가 빠름 (단순 데이터그램 방식)
    2. 데이터그램 패킷 교환 방식으로, 순서 보장 없음
    3. 간단한 체크섬만 지원
  • 헤더: 고정 길이 8바이트

TCP vs UDP 비교

특성TCPUDP
패킷 교환방식가상회선 방식데이터그램 방식
신뢰성있음없음
오류검사재전송, 체크섬 지원체크섬만 지원
순서 보장있음없음
헤더 크기20~60바이트 (가변)8바이트 (고정)
연결 보장3-way/4-way handshake연결 없음
브로드캐스트지원하지 않음지원
속도상대적으로 느림빠름


3-way Handshake

TCP 연결 설정 과정:
1. SYN: 클라이언트 → 서버로 연결 요청
2. SYN/ACK: 서버 → 클라이언트로 연결 승인
3. ACK: 클라이언트 → 서버로 확인 응답

4-way handshake

  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이 필요한 이유

  1. 지연 패킷 처리: 연결 해제 과정에서도 어떤 패킷이 지연되어 올 수 있기 때문에 데이터 무결성을 보장하려면 대기시간이 필요함.
  2. 양쪽 연결 보장: 서버와 클라이언트 양쪽 모두가 CLOSED 상태가 되었는지 확인하는데, 이는 새 연결 시 중복 데이터 충돌을 방지하기 위함이다.

TIME_WAIT 시간
: 최대 세그먼트 생명값(MSL) * 2로, 운영체제(OS)에 따라 상이함

  • 우분투: 60초
  • 윈도우: 240초 (4분)
  • 맥OS: 특정 설정값에 따라 다름

인터넷 계층

이 부분은 너무 중요해서 뒤에서 자세히 다룰 예정!

ICMP (Internet Control Message Protocol)

  • 역할: 통신 상태 확인
  • 특징:
    • 데이터 교환용이 아닌 테스트용
    • 독립적인 비연결형 프로토콜
profile
정체되지 않는 성장

0개의 댓글