Socket Programming ⇒ 구멍, 연결
- Socket ⇒ 운영체제가 제공하는 API
- App — socket — Transport ⇒ TCP Socket, UDP Socket
- S/W — Shell + Kernel = OS — H/W
- 소켓과 소켓 연결 ⇒ 통신 목적 (IP와 Port 정보 알고 있어야 한다. ⇒ Port는 0 ~ 65535 사이)

- TCP Socket Programming
-
클라이언트
- Socket() ⇒ 소켓 생성
- Connect() ⇒ Connection Request, 연결 목적, 단단한 연결 고리 ⇒ SYN (동기화, 순서 설정)
- Send(), Recv() ⇒ 데이터 통신 ⇒ ACK (통신 시작)
- Close() ⇒ 연결 끊는 목적
-
서버
- Socket() ⇒ 소켓 생성
- Bind() ⇒ 포트 바인딩 (어떤 프로세스인지 알게 하기 위하여, 목적지 찾게 만들기 위하여)
- Listen() ⇒ 연결 요청 대기, 요청 올 때까지 Blocking
- Accept() ⇒ 연결 요청 받아서, 연결 수립 ⇒ SYN-ACK (서버가 통신할 준비 완료되었다는 의미)
위에서 노란색 밑줄 → TCP 3 Hand Shaking (Connection 목적 ⇒ UDP에서는 존재하지 않는다.)
Multiplexing, Demultiplexing
-
App (Message) — Transport (Segment) — Network (Packet) — Link (Frame) — Physical
-
계층 내려가면서 “캡슐화” 발생 ⇒ Header가 추가된다. (Multiplexing, Demultiplexing ⇒ 이용된다.)
-
Multiplexing : App ⇒ Transport

- Demultiplexing : Transport ⇒ App

- Demultiplexing
- TCP인 경우 ⇒ src port, src ip, dst port, dst ip → connection-oriented
- TCP Header → src port, dst port + 알파
- (예시) Naver 웹 서버 → 각각의 소켓 존재 ⇒ 자원이 많이 들고 (비용이 비쌈), 유실되지 않는다.
- UDP인 경우 ⇒ dst port, dst ip 이용 → not connection
- UDP Header → checksum, dst ip, dst port, length
- 에러 체크 + multiplexing, demultiplexing ⇒ 2가지 역할 수행
요약