network - transport layer(1)

2020. 2. 11. 10:14카테고리 없음

* Transport Layer 서비스 개요

Transport services and protocol

- 서로 다른 host간 작동하는 application process의 논리적인 통신(logical communication) 제공 
- transport protocol은 end system에서 작동.
- 송신측은 application message를 segment로 변환해서 network layer에 전달

- 수신측은 network layer에게 전달받은 segment에서 message를 추출해서 application layer에 전달.
- 네트워크 application은 하나이상의 transport protocol을 사용 할 수 있음(TCP, UDP). 어떤 protocol을 사용할지는 application 개발 단계에서 결정.

 

전송 계층과 네트워크 계층의 비교

- 네트워크 계층은 host간 논리적 연결 제공

- 전송 계층은 procees간 논리적 연결 제공

- 전송 계층은 네트워크 계층이 제공하지 못하는 신뢰적인 전송을 제공

 

TCP

- 신뢰적인 연결 지향 서비스

- 혼잡 제어, 흐름 제어, 연결 지향

 

UDP

- best-effort delivery service : data 전달에 최선을 다하지만 보장되지는 않음

- 지연시간이나 대역폭에 대한 보장은 불가

 

* mutiplexing과 demultiplexing(다중화와 역다중화)

- multiplexing : socket들로부터 data를 모으고 각 data의 header정보로 캡슐화해 하위 layer로 전달하는 작업

- demultiplexing : segment의 data를 올바른 socket으로 전달하는 작업

Transport layer에서 demultiplexing을 위한 요구 사항
- 각 socket은 유일한 식별자를 가짐. 
- 각 segement는 segment가 전달 될 적절한 socket을 가르키는 특별한 field를 가짐.
- 이 특별한 field는 source와 destination의 port 번호이다.(0~1023 까지의 port를 well-known port라고 지칭)

- 전송 계층은 hots에 도착한 segment안에 목적지의 port number를 검사해 상응하는 socket으로 data 전달

 

connectionless demultiplexing(비연결형 역다중화)(UDP의 전송 방식)

- Port number를 이용 socket을 생성.
- UDP socket은 목적지의 IP와 port number만 알면 식별 가능 
- segment의 도착지 port number를 검사해서 적절한 socket으로 전달.
- UDP segment는 출발지 IP나 port number가 같지않아도 동일한 목적지 IP와 port number를 갖는다면 동일한 socket을 통해 process에 전달.

- 소켓이 줄어 들어서 시스템의 리소스 점유가 적음

- server의 제작자가 client도 배포 해야 함.(DP와 IP를 알아야 하기 때문에) ex) 게임이나 메신저등의 특정 프로그램

 

connection oriented demultiplexing(연결형 역다중화)(TCP의 전송 방식)

- TCP socket은 4개의 요소(source IP, source port number, destination IP, destination port number)로 식별.
- host는 도착한 segment를 적절한 socket으로 전송하기 위해 4개의 요소를 전부 사용 
- server host는 동시에 여러 개의 TCP socket을 지원하며 4개의 요소로 구별 
- web server는 각각의 client의 접속에 대해 서로 다른 socket을 이용.
- non-persistent HTTP의 경우 모든 요청마다 다른 socket을 이용.
- 각각의 object마다 새로운 TCP connection을 이용.

 

multi thread connection oriented demultiplexing(multi thread기반 연결형 역다중화)

- 최근에는 server의 부담을 줄이기위해 프로세스의 1:1 매칭이 아닌 socket만 늘려주는 방식으로 사용

 

* UDP(User Datagram Protocol)

- transport layer에서 할 수 있는 최소한의 기능으로 동작.
- application이 IP와 거의 직접 통신하는 것.
- multiplexing/demultiplexing 기능만을 제공
- packet의 손실 가능성, 전송 순서가 바뀔 가능성 존재(패킷의 경로가 결정되어 있지 않음) 
- UDP sender와 receiver간 handshaking하지 않음.(비연결형) 
- 각 UDP segment들은 서로 독립적으로 전달.(비연결형)

 

UDP를 이용하는 이유
- 연결 설정이 따로 없어 예비 동작이 없기때문에 그와 관련된 지연 문제가 없음(DNS)
- 연결상태가 없기때문에 연결 상태를 유지해야 하는 TCP보다 더 많은 application 수용 가능 
- header가 8byte로 20byte인 TCP에 비해서 작다. 
- 혼잡 제어를 하지 않아 applicaton이 요구하는 전송량을 제한없이 전송(SNMP)

 

UDP 패킷의 구조

- 손실 허용
- 속도에 민감한(rate sensitive) application이 주로 사용 
- UDP를 사용하는 application은 DNS와 SNMP(Simple Network Management Protocol)가 있다. 
- application이 신뢰성을 보장된다면 UDP상에서도 신뢰성이 보장. 이때는 application이 신뢰성있는 통신을 위해 확인응답이나 재전송등의 기능을 제공해야 함.

 

* UDP checksum

- 전송된 segment의 error를 검출하는 것이 목적

 

sender
- segment의 content는 순서에 따라 16bit integers로 간주.
- 모든 16bit(word)의 합을 가지고 1의 보수를 수행한다.(오버 플로우는 무시.)
- 결과는 UDP segment checksum field에 삽입.
- overflow bit를 wraparound로 이용하는 경우도 있음

 

receiver
- segment를 수신후 checksum을 포함한 모든 16bit word를 더한다.
- 값이 모두 1이면 에러가 없지만 하나라도 0이 나오면 오류가 발생한 것.
- checksum을 사용하는 방법과 bit sum에서 발생하는 overflow를 처리하는 방법이 다르지만 결과는 동일

 

- 2개의 16integer가 있다고 가정.

- integer를 더한 값을 wraparound라고 하는데 가장 앞에 1+1이라서 overflow가 발생할 경우 맨 뒤에 다시 1을 더해줌.

- wraparound의 오버 플로우를 해결한 값을 sum이라고 함.

- checksum은 sum의 1의 보수이다.

- checksum을 sum으로 더했을때 1이 나오지 않으면 깨진 것으로 간주