해당 포스팅은 한양대학교 이석복 교수님의 컴퓨터네트워크 강의를 정리한 글입니다.
http://www.kocw.net/home/search/kemView.do?kemId=1169634
1. Socket
- application과 network 사이의 interface이다.
- 단순히 말하자면, 클라이언트와 서버 사이의 통신 방식이다.

1) Two essential types of sockes
- SOCK_STREAM
- a.k.a
TCP
- 신뢰도 있는 전달
- 순서의 보장
- connection-oriented
- 양방향 통신
- SOCK_DGRAM
- a.k.a
UDP
- 신뢰도 없는 전달
- 순서가 보장되지 않음.
- connection이 필요 없음
- 전달 또는 받기 가능
2) Socket의 순서 (TCP)
a) Client
- connection을 server측에 요청한다. (TCP three-way handshaking)
- write (data request)
- read (서버측에서 받은 data)
- close
b) Server
- socket 생성
- bind (소켓을 특정 port에 바인딩 하는 과정)
- listen
- accpet (준비 완료, 클라이언트부터 connect를 받기 전까지 block 상태)
- read (클라이언트 측에서 받은 data)
- write (서버측도 write 가능)
- read (클라이언트에서 보내온 close 신호)
- close
3) Socket의 순서 (UDP)
- handshake (connection 과정이 없다.)
a) Client
- socket 생성
- server측에 데이터 send
- server측에서 data receive
- close
b) Server
- socket 생성
- bind (port binding)
- client측에서 data receive
- client측에 data send
2. Multiplexing/demultiplextion
- receive 측에서는 segments (TCP의 payload)를 알맞은 socket에 보낸다 ->
Demultiplexing
- sender 측에서는 다양한 소켓에서 데이터를 모아 header로 감싼다 ->
Multiplexing

- TCP는 IP주소와 PORT를 통해서 다른 socket과 구별해서 옮긴다.
- UDP는 PORT만 보기에 다 같은 socket으로 들어가게 된다.
즉, TCP는 header에 IP주소 값도 포함되어야 한다.