'rdt 1.0'에 해당되는 글 1건

* 개요 


트랜스포트 계층 프로토콜은 서로 다른 호스트에서 동작하는 애플리케이션 프로세스들 간의 논리적 통신을 제공한다.


송신 측의 트랜스포트 계층은 송신 애플리케이션 프로세스로부터 수신한 메시지를 인터넷 용어로는 트랜스포트 계층 세그먼트인 트랜스포트 계층 패킷으로 변환한다. 이러한 변환은 애플리케이션 메시지를 트랜스포트 계층 세그먼트로 만들기 위해 작은 조각으로 분할하고, 각각의 조각에 트랜스포트 계층 헤더를 추가함으로써 수행된다. 그런 후에 트랜스포트 계층은 송신 종단 시스템에 있는 네트워크 계층으로 세그먼트를 전달하고 여기서 세그먼트가 네트워크 계층 패킷안에 캡슐화되어 목적지로 전달된다.


* 트랜스포트 계층과 네트워크 계층 사이의 관계 


트랜스포트 계층은 서로 다른 호스트에서 동작하는 프로세스들 사이의 논리적통신을 제공하지만, 네트워크 계층 프로토콜은 호스트들 사이의 논리적 통신을 제공한다. 미묘하지만 이러한 차이점은 중요하다. 


* 인터넷 트랜스포트 계층의 개요 


인터넷에서 트랜스포트 계층 패킷을 세그먼트로 일컫는다. 


인터넷, TCP/IP 네트워크는 애플리케이션 계층에게 두가지 구별되는 트랜스포트 계층 프로토콜들을 제공한다.



하나는 비연결형 서비스를 제공하는 UDP이고, 다른 하나는 애플리케이션에게 신뢰적이고 연결지향형 서비스를 제공하는 TCP이다.


인터넷의 네트워크 계층 프로토콜은 '인터넷 프로토콜' 줄여서 IP라고 부른다. IP 서비스 모델은 호스트들 간에 논리적 통신을 제공하는 '최선형' 전달 서비스이다. 이것은 IP가 통신하는 호스트들 간에 세그먼트를 전달하기 위해서 최대한 노력하지만, 어떠한 보장도 하지 않는다는 것을 의미한다. 



 

 UDP

 TCP

 공통점

1. 종단 시스템 사이의 IP 전달 서비스를 종단 시스템에서 동작하는 두 프로세스 간의 전달서비스로 확장하는 것, 두 프로세스 간의 전달 서비스. 트랜스포트 계층 다중화 & 역다중화


2. 헤더에 오류 검출 필드를 포함함으로써 무결성 검사를 제공한다. 

 TCP의 추가적인 기능

 x

1. 신뢰적인 데이터전달


Flow Control, 순서번호, 확인응답, 타이머등을 사용해서 송신하는 프로세스로부터 수신하는 프로세스에게 데이터가 순서대로 정확하게 전달되도록 한다.


2. 혼잡제어(Congestion Control)


TCP연결이 과도한 양의 트래픽으로 통신하는 모든 호스트들 사이의 스위치와 링크를 폭주되게 하는 것을 방지하는 것이 TCP 혼잡제어이다. TCP는 혼잡한 네트워크 링크에서 각 TCP 연결이 링크의 대역폭을 공평하게 공유하여 통과하도록 해준다.



* 다중화와 역다중화 



네트워크 계층이 제공하는 호스트 대 호스트 전달 서비스에서 호스트에서 동작하는 애플리케이션에 대한 프로세스 대 프로세스 전달 서비스로 확장하는 것.


네트워크 어플리케이션의 한 부분으로서 프로세스가 소켓을 가지고 있다. 이를 통해 네트워크에서 프로세스로 데이터를 전달하며 또한 프로세스로 부터 네트워크로 데이터를 전달하는 출입구 역할을 한다. 그러므로 수신측 호스트의 트랜스포트 계층은 실제로 데이터를 직접 프로세스로 전달하지 않고, 중간에 매개자인 소켓에게 전달한다. 


이때, 트랜스포트 계층 세그먼트의 데이터를 올바른 소켓으로 전달하는 작업을 역다중화라고 한다. 출발지 호스트에서 소켓으로부터 데이터를 모으고, 이에 대한 세그먼트를 생성하기 위해서 각 데이터에 헤더 정보로 캡슐화하고 세그먼트들을 네트워크 계층으로 전달하는 작업을 다중화라고 한다.


호스트의 각 소켓은 포트번호를 할당받는다. 그리고 세그먼트가 호스트에 도착하면, 트랜스포트 계층은 세그먼트 안의 목적지 포트번호를 검사하고 상응하는 소켓으로 세그먼트를 보내게 된다. 그러면 세그먼트의 데이터는 소켓을 통해 해당되는 프로세스로 전달된다. 



다중화 역다중화 방식 

 UDP

TCP 

세그먼트 헤더 정보

출발지 포트번호, 목적지 포트번호, 길이, 체크섬

 출발지 포트번호, 목적지 포트번호, 출발지 IP 목적지 IP, 길이, 체크섬

동작

UDP 소켓 19157을 가진 호스트A의 프로세스가 호스트 B의 UDP 소켓 46428을 가진 프로세스에게 애플리케이션 데이터 전송.


각 포트번호와 길이, 체크섬을 포함하는 헤더를 가지는 세그먼트를 생성하고 네트워크 계층으로 전달한다. 네트워크 계층은 세그먼트를 IP데이터 그램으로 캡슐화하고 최선형 전달 서비스로 세그먼트를 수신호스토 전달한다. 수신호스트는 세그먼트 헤더의 목적지 포트번호를 검사하고 그 세그먼트를 포트 46428로 식별되는 소켓에 전달한다. 호스트 B에 여러 프로세스가 수행될 수 있다는 것에 유의.


UDP 소켓은 목적지 IP주소와 목적지 포트번호로 구성된 두요소로 된 집합에 의해 구별, 

 TCP 서버 어플리케이션은 TCP 클라이언트로 부터 연결설정 요청을 기다린다


연결 설정요청은 목적지 포트 번호와 TCP 헤더에 특별한 연결설정 비트를 가진 TCP 세그먼트에 지나지 않는다. 이 출발지 포트 번호는 클라이언트에 의해서 선택된 번호이다. 


서버 프로세스로 동작하는 컴퓨터의 호스트 운영체제가 목적지 포트를 포함하는 연결 요청 세그먼트를 수신하면 이 세그먼트를 포트너머로 연결수락을 기다리는 서버 프로세스로 보낸다.


서버는 연결요청 세그먼트의 다음과 같은 네 가지 값을 주목한다 (1) 출발지 포트넘버 (2) 출발지 IP주소 (3) 목적지 포트번호 (4) 목적지 IP주소, 새롭게 생선된 연결 소켓은 이들 네가지 값에 의해서 식별된다. 




* 신뢰성 있는 데이터 전송의 원리(rdt) 


신뢰적인 채널에서는 전송된 데이터가 손상되거나 손실되지 않고 순서대로 전달된다.


데이터 전송 프로토콜의 송신 측은 rdt_send() 호출에 의해서 위쪽으로부터 호출될 것이다. 수신 측에서는 상위 계층으로 전달될 데이터를 넘길 것이다.


rdt_rcv()는 패킷의 채널의 수신 측으로부터 도착했을 때 호출된다. rdt 프로토콜이 상위 계층에 데이터를 전달하려고 할 때 deliver_data()를 호출한다. 



* 완벽하게 신뢰적인 채널 상에서의 신뢰적인 데이터 전송 : rdt 1.0



rdt의 송신측은 rdt_send 이벤트에 의해 상위 계층으로 부터 데이터를 받아들이고 데이터를 포함한 패킷을 생성한다. 그리고 패킷을 채널로 송신한다. 

수신측에서는 rdt는 rdt_rcv(packet) 이벤트에 의해 하위의 채널로 부터 패킷을 수신하고, 패킷으로부터(extract) 데이터를 추출한 후 데이터를 상위계층으로 전달한다 (deliver_data(data)) rdt_rcv(packet)는 하위 계층 프로토콜 프시저의 호출에 의해서 발생한다.


* 비트 오류가 있는 채널 상에서의 신뢰적 데이터 전송 rdt 2.0 


패킷 안의 비트들이 하위 채널에서 손상되는 모델이다. 


ACK, NAK 둘다사용한다. 재전송을 기반으로 하는 신뢰적인 데이터 전송 프로토콜은 ARQ(자동재전송요구) 프로토콜로 알려져 있다.


송신자 프로토콜은 수신자로부터 ACK 또는 NAK 패킷을 기다린다. ACK 패킷이 수신된다면 송신자는 가장 최근에 전송된 패킷이 정확하게 수신되었다는 것을 알게된다. 만약 NAK가 수신되면 프로토콜은 마지막 패킷을 재전송하고 재전송된 데이터 패킷에 대한 응답으로 수신자에 의해 응답되는 ACk, NAK를 기다린다.


ACK 또는 NAK를 기다리는 상태에 있을 때 application layer 로 부터 더이상의 데이터를 전달받을 수 없다는 것에 유의한다. 즉 rdt_send() 이벤트는 발생할 수 없다. 오직 송신자가 ACK를 수신하고 이 상태를 떠난 후에만 발생한다. 


이러한 행동 때문에 rdt2.0과 같은 프로토콜은 전송-후-대기(stop and wait) 프로토콜로 알려져있다.


rdt2.0은 ACK또는 NAK 패킷이 손상될 수 있다는 가능성을 고려하지 않았다.


* 순서번호를 반영하는 신뢰적인 데이터 전송 rdt 2.1 


rdt 2.1에서는 ack및 nak의 손실은 없고 손상은 있다.


순서가 바뀐 패킷이 수신되면 수신자는 이미 전에 수신한 패킷에 대한 긍정 확인 응답을 전송한다. 손상된 패킷이 수신되면 수신자는 부정 확인응답을 전송한다.


같은 패킷에 대해 2개의 ACK를 수신한 송신자는 수신자가 두 번 ACK한 패킷의 다음 패킷을 정확하게 수신하지 못했다는 것을 안다. 






* rdt 2.2 


rdt 2.2는 nak가 없고 ack에 순서번호를 포함한다. 


rdt 2.1과 rdt 2.2 사이의 미묘한 차이는 수신자가 반드시 ACK 메시지에 의해서 확인응답하는 패킷의 순서번호를 포함해야 한다는 것이다. 







* 비트 오류와 손실이 있는 채널 상에서의 신뢰적 데이터 전송 : rdt 3.0 


패킷 손실을 어떻게 검출? -> 타임아웃 


송신자가 어떤 패킷을 손실했다는 것을 확신하기 위해 얼마나 오랫동안 기다려야 할까? 송신자는 적어도 송신자와 수신자 사이의 왕복시간 지연에 수신 측에서 패킷을 처리하는 데 필요한 시간을 더한 만큼 기다린다.



'

이렇게 Stop&Wait 프로토콜 rdt 1.0, 2.0~2.2, 3.0을 다루어 보았다. 하지만 Stop&Wait 프로토콜의 문제점은 링크 이용률이 낮다는 것이다. 이러한 성능 문제대한 해결책은 전송 후 대기방법으로 동작하는 대신에 송신자에게 확인응답을 기다리지 않고 여러 패킷을 전송하도록 허용하는 것이다. 이것을 파이프라이닝 이라고 한다. 


파이프라이닝을 쓰는 프로토콜을 슬라이딩 윈도우 프로토콜이라하며 슬라이딩 윈도우 프로토콜에는 Go-Back-N과 Selective-AND-Repeat 방식이 있다. 




확인 응답이 안된 가장 오래된 패킷의 순서번호를 base로 정의하고 사용되지 않은 가장 작은 순서번호를 nextseqnum으로 정의한다면, 순서번호의 범위에서 4개의 간격을 식별한다.


[0,base-1] 에서 순서번호는 이미 전송되고 확인 응답이 된 패킷에 대응된다.

[base, nextseqnum-1]은 송신은 되었지만 아직 확인응답되지 않은 패킷에 대응된다.

[nextseqnum,base+N-1]은 상위 계층으로부터 데이터가 도착하면 바로 전송될 수 있는 패킷을 위하여 사용.

[base+N] 이상의 순서번호는 파이프라인에서 확인응답이 안 된 패킷의 확인응답이 도착될 때까지 사용될 수 없다. 


* 슬라이딩 윈도우 프로토콜 - Go-Back-N(N부터 반복)


상위로부터 호출 : rdt_send()가 어플리케이션 레이어로 부터 호출되면, 송신자는 첫째로 윈도우가 가득찼는지, 즉 N개의 아직 확인응답되지 않은 패킷이 있는지 확인한다. 만약 윈도우가 가득 차 있다면, 송신자는 윈도우가 가득 차 있다는 것을 가리키는 함축적인 의미로 단지 데이터를 상위 계층으로 반환한다. 상위 계층은 나중에 다시 시도할 것이다. 실제적인 구현에서 송신자는 이 데이터를 버퍼링한다.


ACK의 수신 : GBN 프로토콜에서 순서번호 n을 가진 패킷에 대한 확인응답은 누적확인 응답으로 인식된다.sliding 윈도우가 한꺼번에 한칸이상 밀려갈 수 있다. 프레임이 0,1,2 를 전송한 후 ack3가 온 경우 프레임 2까지 잘 전송된 것으로 판단하여 sliding window가 세간 이동.



타임아웃 이벤트 : GBN 프로토콜의 이름은 손실이 있거나 아주 긴 지연된 패킷이 있을 때의 송신자의 동작으로부터 유래되었다. 전송 후-대기 프로토콜에서와 같이, 타이머는 손실된 데이터 또는 손실된 확인응답 패킷으로부터 회복하는 데 사용된다. Go-Back-N에서의 타이머는 한개뿐이다. 만약 타임아웃이 발생한다면 송신자는 이전에 전송되었지만 아직 확인응답되지 않은 모든 패킷을 다시 송신한다. 예를들어 6번 프레임을 보냈는데 3번 프레임의 타이머가 만료된 경우 3,4,5,6을 다시 전송.


수신측 : 수신측의 슬라이딩 윈도우 크기는 1이다. 받고자 하는 프레임의 번호만 가리키고 있는다. 기다리고 있는 프레임의 번호에 해당하는 패킷이 아닌경우 패킷들을 버린다.



* 슬라이딩 윈도우 프로토콜 - Selective-and-Repeat



GBN은 패킷 하나의 오류 때문에 많은 패킷을 재전송하므로, 많은 패킷을 불필요하게 재전송하는 경우가 발생한다. 


- Timer는 각 프레임당 한개씩 동작한다. 


- 송신자와 수신자의 윈도우 사이즈가 동일하다.(수신자의 윈도우 사이즈가 1이 아니다)


-중요한건 수신자가 sliding window 범위 안의 프레임이 순서가 뒤바뀌어 온경우 버리지 않고 저장하고 ack를 보낸다.


- 송신자는 타임 아웃이 발생한 패킷에 대해서만 다시 보낸다. 









 








































'이론 > 컴퓨터통신' 카테고리의 다른 글

Network Layer(L3)  (0) 2015.10.17
Transport Layer(L4)  (0) 2015.10.17
Application Layer(L7)  (0) 2015.10.14
컴퓨터 네트워크 개론  (0) 2015.10.13
블로그 이미지

종환 Revolutionist-JongHwan

github.com/alciakng 항상 겸손하자.

댓글을 달아 주세요