www.kocw.net/home/cview.do?mty=p&kemId=1169634
전송 단위
- Message : Application Layer에서 만들어진 데이터 단위
- Segment : message가 Transport Layer으로 내려왔을 때 부르는 전송단위
- Packet : Transport Layer에서 Network Layer로 내려왔을 때 부르는 전송단위
소켓이란?
- Socket?
- 네트워크상 동작하는 프로그램 사이 통신의 종착점이다.
- API의 일종이라고 봐도 된다.
- 데이터를 통신하는 것이기에 client, server 모두 소켓이 있어야 한다. (프로세스 간의 통신)
- TCP socket과 UDP socket은 다르다. (방식의 차이)
TCP Socket Functions
Server ~ Client
1. server에서 소켓 생성
2. bind (특정 포트에 바인드 시킨다)
3. listen(서버니까 받는 용도기에)
4. accept(요청 받을 준비)
> client로 부터 커넥션이 들어올때 까지 서버는 block이 됨,
5. 소켓을 열어준다
6. 원하는 서버와 커넥트(3-way-handshaking)
7. write (데이터를 쓴다)
> 클라는 아무 포트나 써도 되서 굳이 bind 하지 않는 것, 서버는 꼭 정해서 해야하기에 bind 하는 것
8. read 서버에서 읽을 수 있다
9. write 서버에서 응답을 작성해서
10. read client단에서도 읽을 수 있다.
데이터 교환이 끝나게 되면 다른 프로세스가 접근할 수 있도록 close를 통해 소켓을 release(해제)한다.
Multiplexing / Demultiplexing
- Multiplexing :
- 하나의 통신 채널에서 두 개 이상의 데이터를 전송하는데 사용되는 것
- 여러개를 하나로 묶어 다중화 해준다.(=패키징)
- 하나의 세그먼트로 받아준다.
- Demultiplexing
- 반대로 하나의 인풋이 여러 개의 아웃풋으로 나타나는 형태.
- 세그먼트를 받아서 내부 메세지를 꺼낸다.
- 어떤 소켓으로 보낼지 정해준다.
Sender측에서 여러 개의 프로세스가 각자의 소켓을 가지고 메세지를 보내게 되면, (주로) TCP를 통해 이 때 멀티플렉싱이 일어나고, 리시버 측에서 디멀티플렉싱이 일어난다.
Demultiplexing
세그먼트는 헤더 + 데이터로 구성되어있다.
헤더 내에 부가적인 정보를 갖고 있는 필드들이 여러 개있는데, 이 필드를 가지고 디멀티플렉싱을 하는 것이다.
TCP는 4개의 튜플(source IP Address, source Port #, dest IP Address, dest Port #)을 갖고 있어, 이를 파악하여 소켓에게 디멀티플렉싱 해준다.
특정 프로세스에서 접근 하능한 1:1 대응이라는 점에서 connection oriented 라고 불린다.
반면에 UDP는 아무나 보낼 수 있기에 커넥션 개념이 아니다.
각 전송 단위들이 갖고 있는 "헤더"가 중요한 역할을 한다.
우편 배달부가 편지 내용이 아닌 봉투에 적힌 내용을 기반으로 분류하는 것 처럼 네트워크도 마찬가지이다.
즉 헤더에 어떤 필드들이 들어가있는지 이해한다면 해당 프로토콜이 어떤 동작을 하는지 간접적인 이해가 가능하다는 것이다!
- UDP segment header
- 총 4개로 이루어져 있다. (source port #, dest port #, length, check sum)
- sp #, dp # : 16비트, 0 ~ 2^16-1개의 포트넘버. 두 가지 #를 통해 멀티플렉싱/디멀티 해준다.
- check sum : 에러 판단을 해준다. 데이터 전송단 에러 발생시 올리지 않고 드랍시킨다.
- 이처럼 UDP도 최소한의 멀티플렉싱/디멀티플렉싱 + 에러체킹은 해준다.
- 총 4개로 이루어져 있다. (source port #, dest port #, length, check sum)