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 |