NIC(Network Interface Card)란?

2025. 12. 16. 22:55·Network

1. NIC(Network Interface Card)란?

NIC는 서버(또는 PC)가 네트워크와 통신하기 위한 물리적 인터페이스다.

  • 패킷이 외부로 나갈 때 반드시 거치는 마지막 관문
  • 외부 패킷이 처음으로 들어오는 입구
  • 각 NIC는 고유한 MAC 주소를 가진다

💡 핵심

“패킷이 나간다”의 기준은 NIC를 통과했는가다.


2. NIC는 어떻게 보일까?

macOS에서는 NIC가 enX 형태의 네트워크 인터페이스로 노출된다.

인터페이스 의미
en0 보통 Wi‑Fi (주 NIC)
en1 유선 Ethernet 또는 추가 NIC
lo0 Loopback (127.0.0.1)
bridge0 브리지 인터페이스
utunX VPN 터널

NIC 확인

ifconfig

MAC 주소 확인

ifconfig en0 | grep ether

3. ifconfig 출력 핵심 해석 (en0 기준)

en0: flags=<UP,RUNNING,BROADCAST,MULTICAST> mtu 1500
ether xx:xx:xx:xx:xx:xx
inet 192.168.0.16
status: active

중요한 포인트

  • UP / RUNNING → NIC 정상 활성
  • status: active → 실제 네트워크 연결됨
  • IP 존재 → 외부 통신 가능 상태

✔️ en0가 active + IP 있음
→ macOS의 실제 네트워크 출구


4. NIC Offloading이란?

한 줄 정의

CPU가 하던 네트워크 처리 작업을 NIC 하드웨어에게 맡기는 성능 최적화 기법

왜 필요할까?

  • TCP 패킷 분할
  • 체크섬 계산

이 작업들을 CPU가 모두 처리하면 부하가 매우 큼 → NIC에게 위임


5. 대표적인 Offloading 기능

기능 의미
TSO TCP Segmentation Offload (큰 TCP를 NIC가 분할)
CHECKSUM OFFLOAD 체크섬 계산을 NIC가 수행
GRO/LRO 수신 패킷 병합

macOS ifconfig 옵션 예시:

options=<TSO4,TSO6,PARTIAL_CSUM,...>

6. sudo tcpdump -i en0

tcpdump가 보는 위치

Application
 ↓
TCP/IP Stack (Kernel)
 ↓   ← tcpdump가 관찰
NIC Driver
 ↓
NIC Hardware (Offloading)
 ↓   ← TCP 분할 (TSO), 체크섬 계산
실제 네트워크

❗ tcpdump는 NIC 하드웨어에서 실제 전선으로 나간 패킷을 보지 않는다


7. tcpdump 패킷 vs 실제 네트워크 패킷

tcpdump가 보는 것

  • TCP/IP 스택 기준 논리적 패킷
  • TCP 분할 전
  • 체크섬 미완성 상태 가능

NIC가 실제로 보내는 것

  • MTU 기준으로 분할된 패킷
  • 체크섬 완성
  • 전선으로 송출

✔️ tcpdump 패킷 ≠ 실제 네트워크 패킷 (Offloading 때문)


8. 그래서 발생하는 흔한 오해

❓ MTU보다 큰 패킷이 보인다

  • 정상
  • TSO 적용 전 상태

❓ 체크섬 에러처럼 보인다

  • 정상
  • NIC가 나중에 계산

❓ tcpdump가 틀린 정보를 보여준다?

  • ❌ 아님
  • ✔️ OS 관점에서 정확한 정보

9. tcpdump로 알 수 있는 것 / 없는 것

알 수 있는 것

  • OS가 패킷을 생성했는지
  • NIC로 패킷을 넘겼는지
  • IP / 포트 / 프로토콜

알 수 없는 것

  • 실제 외부 서버 도달 여부
  • NIC 이후(스위치/방화벽) 드롭 여부

10. 트러블슈팅에서의 핵심 사고 흐름

tcpdump에 패킷 보임?
 ├─ YES → OS/NIC 이전 문제 아님
 │        → NIC 이후(라우터, 방화벽, 네트워크)
 └─ NO  → 애플리케이션 / OS 문제

이 흐름은:

  • macOS
  • Linux
  • Kubernetes Node

모두 동일하게 적용된다.


📌 이 글은 macOS 기준이지만, 개념은 Linux / Kubernetes 환경에서도 동일하게 적용된다.

'Network' 카테고리의 다른 글

회선 교환 방식/ 패킷 교환 방식  (0) 2025.11.08
Switch, Router? Mac 주소, IP 주소? ARP?  (0) 2024.11.30
TCP 빠른 재전송과 흐름제어 메커니즘  (0) 2024.11.21
파이프라이닝 프로토콜  (0) 2024.11.20
Forward Proxy, Reverse Proxy  (0) 2024.11.09
'Network' 카테고리의 다른 글
  • 회선 교환 방식/ 패킷 교환 방식
  • Switch, Router? Mac 주소, IP 주소? ARP?
  • TCP 빠른 재전송과 흐름제어 메커니즘
  • 파이프라이닝 프로토콜
사랑우주인
사랑우주인
  • 사랑우주인
    lovelyAlien
    사랑우주인
  • 전체
    오늘
    어제
  • 글쓰기
    관리
    • 분류 전체보기 (209)
      • Programming (4)
        • Spring (28)
        • Java (46)
        • JPA (2)
        • 디자인 패턴 (5)
        • 개발&아키텍처 (0)
      • Network (14)
      • OS (19)
      • Database (1)
      • Kubernetes (0)
      • Kafka (2)
      • Algorithm (49)
        • BaekJoon (1)
        • Programmers (19)
        • Algorithm (5)
        • Socar (2)
        • LeetCode (19)
      • Interview (2)
      • Issues (2)
      • DotJoin (1)
      • Git (4)
      • 독서 (3)
      • 끄적끄적 (1)
      • 외부활동 (26)
        • 항해플러스 (2)
        • JSCODE 네트워크 (19)
        • JSCODE 자바 (5)
      • SQL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • GitHub
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    lower bounded wildcards
    Generic
    운영체제
    Climbing Stairs
    RR
    Reorder List
    OS
    rotting oranges
    제네릭
    algorithm
    Process
    @JsonProperty
    준영속 엔티티
    runner 기법
    pacific atlantic water flow
    BFS
    추상화 클래스
    wildcards
    LinkedList
    fcfs
    디자인 패턴
    AuthenticationSuccessHandler
    Thread
    clone graph
    JSCode
    socar
    트랜잭션
    @JsonNaming
    minimum number of arrows to burst balloons
    Oauth2
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.1
사랑우주인
NIC(Network Interface Card)란?
상단으로

티스토리툴바