Zettelkasten

Socket - 프로세스가 네트워크에 접근하는 인터페이스

·수정 2026.04.23·수정 2
  • **- 커널의 네트워크 프로토콜 스택에 접근하기 위한 추상화된 endpoint
  • 생성 시 domain/type/protocol을 지정한다: socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)
  • Unix/Linux에서 socket은 파일의 일종이나, 장치 파일(device file)과는 별도의 파일 타입이다
    • Linux 파일 타입: regular file, directory, symlink, device file(block/char), pipe, socket
    • /dev/console은 장치 파일, socket은 장치 파일이 아님
  • fd를 얻는 방법이 일반 파일과 다르다: fopen()이 아니라 socket() syscall

Socket 프로그래밍

  • TCP 스택을 추상화한 endpoint(fd)를 조작하는 프로그래밍
  • 일반 파일 연산과의 대응:
    • open()socket() + connect()/bind()+listen()+accept()
    • write()send()
    • read()recv()
    • close()close() (동일)
    • delete → 해당 없음 (fd 해제로 종료)

데이터 단위와 계층별 PDU

  • Stream: TCP가 application에 제공하는 추상화. 경계 없는 연속된 바이트 흐름. 하나의 긴 편지.
  • Segment (L4): stream을 잘라 TCP header를 붙인 것. 편지를 자른 조각.
  • Packet (L3): segment에 IP header를 씌운 캡슐화 결과물. 조각을 봉투에 넣은 것.
  • Frame (L2): packet에 Ethernet header/trailer를 씌운 것. 봉투를 택배 상자에 넣은 것.