- **- 커널의 네트워크 프로토콜 스택에 접근하기 위한 추상화된 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를 씌운 것. 봉투를 택배 상자에 넣은 것.