※kocw에서 제공하는 이석복 교수님의 컴퓨터네트워크 수업을 듣고 필기한 내용입니다.
출처를 따로 밝히지 않는 한 전부 해당 수업에서 제공한 자료들이며 제가 작성한 부분에 있어 틀린 부분이 있을 수도 있다는 점 양해바랍니다.
프로세스간 통신 방법
1. 어플리케이션 계층에서 전송계층으로 message 를 전달한다
2. 전송계층은 받은 message를 segment(HEADER + DATA) 형태로 네트워크 계층에 전달한다
3. 네트워크 계층은 받은 segment를 pocket(HEADER + DATA) 형태로 데이터링크 계층에 전달한다
4. 데이터링크 계층은 받은 pocket을 frame(HEADER + DATA) 형태로 물리 계층에 전달한다
5. 물리계층에서 라우터를 타고 목적지의 물리계층에 도착한다
6. 물리계층은 받은 데이터를 frame 형태로 데이터링크 계층에 전달한다
7. 데이터링크 계층은 받은 frame을 pocket 형태로 네트워크 계층에 전달한다
8. 네트워크 계층은 받은 pocket을 segment 형태로 전송 계층에 전달한다
9. 전송 계층은 받은 segment를 message 형태로 어플리케이션 계층에 전달한다
Multiplexing and Demultiplexing
- 전송 계층이 기본적으로 제공하는 기능중 하나
Multiplexing at send host:
- gathering data from multiple sockets, enveloping data with header(later used for demultiplexing)
Demultiplexing at rcv host:
- delivering received segments to correct socket
- Multiplexing: sender의 전송계층에서 어플리케이션계층의 수많은 프로세스들이 보내는 message를 하나의 segment로 묶어서 아래 계층에게 전달하는 기능
- Demultiplexing: receiver의 전송계층에서 받은 segment를 어플리케이션 계층에 있는 수많은 프로세스 중 정확한 소켓에 전달하는 기능
- 이때 Receiver 측에서는 어떻게 segment의 데이터에 대한 부분을 정확히 목적지 프로세스의 소켓에게 전달해 줄수 있을까?
- 그것에 대한 정보가 segment HEADER 부분에 적혀있기 때문
segment는 header + data 형식으로 되어있음, header에는 여러가지 필드가 있는데, 필드 중 source port(16bit), destination port(16bit) 필드가 있어서 Demultiplexing(정확히 목적지의 소켓으로 전송)이 가능함
TCP/UDP Multiplexing and Demultiplexing
1) UDP일 경우
- soruce post 에는 본인의 포트번호가, dest port에는 목적지의 포트번호가 적혀있음(ip 주소는 segment의 헤더가 아닌 네트워크 계층의 pocket 헤더에 적혀있음)
- UDP의 경우 dest IP 와 dest port 만으로 어떤 소켓으로 올릴지 Demultiplexing이 이루어짐
- p3와 p4가 보낸 segment의 dest port는 6428로 동일함
2) TCP일 경우
- p4는 하나의 웹서버이고 쓰레드를 통해 여러 소켓을 관리함
- p1,p2,p3는 p4의 특정 소켓에게 연결해야됨, 그래서 dest IP와 dest port가 동일함
- udp는 dest IP와 dest port 만으로 Demultiplexing이 가능하지만, TCP의 경우 source IP, source port, dest IP, dest port 이 4가지의 튜플이 있어야지 Demultiplexing이 이루어짐
- 위 4개중 하나라도 다르면 다른 소켓으로 연결됨 p1와 p3 는 source port마저 동일하지만 source IP가 다르기 때문에 다른 소켓에 연결됨
- 그렇기 때문에 TCP가 Connection-oriented가 되는 것임, 여기서 p1은 전세계 수많은 프로세스 중에 p4 프로세스의 특정 소켓이랑만 연결이 가능함(tcp는 각각의 클라이언트 마다 소켓을 생성하고 관리 하기 때문에 자원을 많이 잡아먹음)
- 그에 반해 UDP는 특정 소켓이 아닌 모든 소켓이 찾아올 수 있음, 그래서 Conectionless 하다고 함
- 다른 프로토콜 헤더는 필요할 때 찾아보면 됨, 하지만 udp, tcp, ip(네트워크 계층)는 중요한 프로토콜이므로 헤더 정보를 잘 숙지하고 있어야됨(어떤 필드를 가지고 있고, 어떤 역할을 담당하는지)
- 헤더의 필드 정보를 알면 각각의 프로토콜이 어떠한 역할을 수행하는 지 알수있음
UDP segment의 헤더 살펴보기
udp 헤더에는 4개의 필드만이 존재(하나의 필드당 16비트의 정보를 저장할 수 있음)
1. source port
2. dest port
source port, dest port가 하는 역활:
- 한 컴퓨터 내에는 0~2^16-1(65,535)개의 포트를 가질 수 있음
- udp는 이 포트번호를 가지고 Multiplexing and Demultiplexing을 함
3. length: 데이터와 헤더를 포함한 udp segment의 총 바이트 수
4. checksum: segment에 담긴 데이터가 전송도중 에러가 발생 했는지 안했는지 판단해줌(rcv 전송계층에서 segment를 받아서 checksum을 확인, 에러가 발생했으면 전송하지 않고 드랍시킴, 그래서 udp로 전송했으면 에러는 없음)
udp가 제공하는 서비스 2개
1. Multiplexing and Demultiplexing(전세계 수많은 어플리케이션,프로세스,소켓 중 정확한 소켓에 전송)
2. 에러체크(전송계층을 통과한 데이터는 오류가 있어선 안된다)
전송계층에서 가장 기본적인 UDP도 저 두가지 기능이 있음, 이 두가지 기능은 전송계층에서 어플리케이션 계층에 서비스 하기 위해 무조건 있어야 하는 기능임
'[CS] > [컴퓨터네트워크]' 카테고리의 다른 글
전송계층3 - TCP Protocol (0) | 2021.03.11 |
---|---|
전송계층2 - Reliable한 데이터 전송을 위한 기능들 (0) | 2021.03.01 |
애플리케이션계층2 - 소켓프로그래밍 (0) | 2021.02.20 |
애플리케이션계층1 - 사용자계층 네트워크애플리케이션종류 (0) | 2021.02.16 |
컴퓨터 네트워크 기본1 - 컴퓨터네트워크 및 인터넷 역사 (0) | 2021.02.08 |