Transport Layer

◾ Transport services and protocol

• 클라이언트가 크롬을 이용해 Application layer에서 받은 메시지를 transport layer에서 서버의 아파치로 전송

• transport layer는 application (프로세스)간에 논리적인 연결을 담당

• 서로 다른 host간에 작동하는 app process간에 논리적인 통신(logical communication)을제공

• transport protocol은 end system에서 작동

 - 송신측 : app message를 segment로 변환 network layer에 전달한다.
 - 수신측 : network layer로 부터 전달받은 segment로 부터 message를 추출 app layer에 전달한다.

• 네트워크 app는 하나이상의 transport protocol을 사용 할 수 있다.
- 인터넷 : TCP, UDP

   TCP : 신뢰성, 패킷 손상X

   UDP : 속도 빠름, 패킷이 손상을 입을 수 있음. (ex. DNS)

 

*TCP는 패킷을 보내고 난 뒤에도 패킷이 안깨지고 도착할 때까지 application layer에서 준 패킷을 가지고 있는다.

(버퍼에 저장)

 

Transport vs Network layer

• network layer : host(end system) 간에 logical communication을 제공 > protocol : IP
• transport layer : process간에 logical communication을 제공 > protocol : TCP, UDP
 - Network layer가 제공하지 못하는 신뢰적인 전송을 제공 할 수 있다.
 - 그러나 network layer의 제약을 받는 경우도 있다.

 - 지연이나 대역폭에 대한 보장은 불가능하다.

 

◾ TCP, UDP

• 신뢰적인 연결지향 서비스(TCP)
 - 혼잡제어 (송신자)
 - 흐름제어 (수신자) : 패킷을 전송할 수 있는 최대 양을 지정
 - 연결지향 : 송신자가 수신자에게 초기화하는 패킷을 송신, 송신자가 송신하는 것을 수신자에게 알려주고 데이터 송신

 

• 비신뢰적인 비연결지향 서비스(UDP)
- best-effort delivery service : IP
 : data 전달에 최선을 다하지만 어떠한 보장도 하지 않는다.


• 보장하지 않는것 (패킷망 사용)
- 최대 지연시간
- 전달 대역폭


Multiplexing/demultiplexing

• multiplexing (다중화) : 프로세스가 tcp에게 메시지를 보내기 위해서 socket를 연다.

• demultiplexing (역다중화) : tcp가 소켓을 통해 application에게 메시지를 추출해 보낸다. -> 어플리케이션에게 메시지 보냄

프로세스 P1과 P2를 구별하기 위해 포트넘버가 필요하다. (IP가 같을 수 있기 때문)

 

*서버 프로세스는 포트넘버는 다 같음

 

◾ Transport layer에서 demultiplexing 요구 사항

• 각 socket은 유일한 식별자를 갖는다.
• 각 segement는 segment가 전달될 적절한 socket을 가르키는 특별한 field를 갖는다.
• 이들 특별한 field는 source와 destination의 port 번호이다.

 (0~1023 까지의 port를 well-know port라고 한다 : RFC 1700에 명시되어있다.)


Segment가 host에 도착하면 T/L는 segment안에 목적지의 port #를 검사하고 이에 상응하는 socket으로 data를 전달한다.

 

◾ UDP 

Port #를 이용 socket을 생성한다.
DatagramSocket mysocket1=new
DatagramSocket(59111);
DatagramSocket mysocket1=new
DatagramSocket(59222);

*UDP socket은 목적지 IP와 목적지 port #로 구성된 두 요소로 된집합에 의해 식별된다.

 

◾ UDP segment 전달
• Segment의 dest port #를 검사한다.
• Segment를 적절한 socket으로전달한다.
• 두개의 UDP segment들이 출발지 IP나 port # 가 둘다 다르거나 둘중 하나가 다르더라도 동일한 목적지 IP와 port #를 갖는다면 동일한 socket을 통해 process에 전달된다.

 

◾ Connectionless demultiplexing 의 특징

DatagramSocket serverSocket = new DatagramSocket(6428);

 

프로세서가 하나밖에 안뜬다.

 

◾ TCP

• TCP socket는 4개의 요소로 구성된 집합에 의해 식별된다.

- source IP
- source port #
- dest IP
- dest port #

*소켓은 자신의 포트넘버, 목적지 포트 넘버, 목적지 IP와 송신 IP를 모두 알아야한다. 통신할때 구별해준다.

 

멀티 스레드 서버

프로세스 하나가 소켓을 여러개 사용해 보낸다.

멀티 스레드로 사용하면 메모리를 줄일 수 있다.


UDP (User Datagram Protocol) [RFC 768]

◾ UDP는 Transport layer에서 할 수 있는 최소한의 기능으로 동작한다.
• App가 거의 IP와 직접 통신하는 것이다.
• mulx/demulx 기능만을 제공


◾ “best effort” (보장하지 않는다.)
• 손실가능
• 전송순서가 바뀔 가능


◾ connectionless
• UDP sender와 receiver간에 handshaking하지 않는다.
• 각 UDP segment들은 서로 독립적으로 전달된다.

 

◾ UDP를 이용하는 이유
• 연결설정이 없다.
  예비동작 없이 전송함으로 설정에따른 어떠한 지연도 없다.(DNS)
• 연결상태가 없다.

  연결상태 유지를 위한 변수가 없음으로 TCP보다 많은 app를 수용할수 있다.
• header가 작다.
  8 byte (TCP : 20 byte)
• 혼잡제어하지 않는다. (혼잡제어 : 송진자가 네트워크가 혼잡하면 송신량을 줄인다.)

  네트워크의 혼잡도를 고려하지 않음으로 app가 요구하는 전송을 전송량을 제한없이 전송한다.(SNMP)

*검사합 : 패킷을 받은 후 패킷 손상시 버림

◾ often used for streaming multimedia apps
• 손실 허용
• Rate sensitive


◾ UDP를 사용하는 app
• DNS
• SNMP


◾ app가 신뢰성을 제공한다면 UDP상에서도 신뢰성있는 통신이 가능하다.
• app이 신뢰성있는 통신을 위해 확인응답이나 재전송등의 기능을 제공해야한다.


UDP checksum

: 전송된 segment에 “errors”를 검출

16bits = 2byte

 

◾ 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를 처리하는 방법이 다름. 과정은 다르지만 판단 결과는 동일)

* Checksum 은 Sum의 2의 보수 

 

'네트워크 공부 기록' 카테고리의 다른 글

Static routing + RIP 실습  (0) 2022.01.26
신뢰적 Data 전송 : rdt 1.0  (0) 2022.01.18
OSPF 실습  (0) 2022.01.18
OSPF  (0) 2022.01.18
RIP 라우팅 구현 실습  (0) 2022.01.17

+ Recent posts