1 / 40

Chapter 3: Transport Layer

Chapter 3: Transport Layer. 2014-07-16 . 학습 목표 : 전송 계층 서비스의 원리 이해 : 다중화와 역다중화 신뢰적인 데이터 전송 흐름 제어 혼잡 제어. 인터넷에서 전송 계층 프로토콜에 대하여 배운다 . UDP: 비연결형 전송 TCP: 연결지향형 전송 TCP 혼잡 제어. Chapter 3: Transport Layer. 서로 다른 호스트에서 동작되는 app. 프로세스들 간의 논리적 통신 ( logical communication ) 을 제공한다 .

neka
Download Presentation

Chapter 3: Transport Layer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapter 3: Transport Layer 2014-07-16. Transport Layer

  2. 학습 목표: 전송 계층 서비스의 원리 이해: 다중화와 역다중화 신뢰적인 데이터 전송 흐름 제어 혼잡 제어 인터넷에서 전송 계층 프로토콜에 대하여 배운다. UDP: 비연결형 전송 TCP: 연결지향형 전송 TCP 혼잡 제어 Chapter 3: Transport Layer Transport Layer

  3. 서로 다른 호스트에서 동작되는 app. 프로세스들 간의 논리적 통신(logical communication) 을 제공한다. 전송 계층 프로토콜은 종단 시스템에서 구현된다. 송신 측: 송신 app.로 부터 수신한 메시지를 전송 계층 세그먼트인 패킷으로 변환하여 네트워크 계층으로 전달한다. 수신 측: 네트워크 계층의 데이터그램으로부터 세그먼트인 패킷을 추출하고 app. 계층으로 세그먼트를 보낸다. 인터넷은 전송 계층 프로토콜로 TCP and UDP를 가진다. application transport network data link physical application transport network data link physical network data link physical network data link physical network data link physical network data link physical network data link physical logical end-end transport 전송 계층 서비스 개요 Transport Layer

  4. 네트워크 계층:호스트 간의 논리적 통신 전송계층: 서로 다른 호스트에서 동작하는 프로세스간의 논리적 통신 전송 계층 프로토콜은 종단 시스템에서 존재한다. app. 프로세스에서 네트워크 경계(네트워크 계층)까지 메시지를 운반(반대 방향으로도) 하위 계층 프로토콜의 서비스 모델에 의해 제약을 받으며, 또한 향상된 서비스를 app.에게 제공한다. 두 집안에 대한 비유: 동부와 서부 두 집안의 사촌간의 각 12명의 아이들이 서로 간에 편지를 주고 받는다. processes = 사촌간인 두 집안의 24명의 아이들 app 메시지= 봉투 안의 편지 호스트= 집 전송 계층 프로토콜 = 앤 과 빌 네트워크 계층 프로토콜 = 우편 서비스 전송계층과 네트워크 계층 사이의 관계 Transport Layer

  5. 인터넷 프로토콜(IP): 최선형 전달(best-effort delivery) 서비스, 비신뢰적인 서비스. 세그먼트의 전달을 보장하지 않고 세그먼트가 순서대로 전달되지 않는다. 전송 계층 프로토콜 UDP, TCP의 기본 기능 전송 계층 다중화와 역다중화: “호스트 대 호스트”전달을 “프로세스 대 프로세스”전달로 확장 무결성 검사: 헤더에 오류 검출 필드 포함 이 두 가지가 UDP가 제공하는 서비스 신뢰적이고 연결지향적인 TCP: 기본기능에 다음과 같은 추가기능 제공 신뢰적인 데이터 전달의 위한 흐름제어, 순서번호, 확인응답, 타이머를 사용 혼잡 제어 application transport network data link physical application transport network data link physical network data link physical network data link physical network data link physical network data link physical network data link physical logical end-end transport 인터넷에서의 전송 계층의 개요 Transport Layer

  6. = 소켓 = 프로세스 application application application transport transport transport P1 P3 P2 P1 P4 network network network link link link physical physical physical 송신 측 호스트에서의 다중화: 수신 측 호스트에서의 역다중화: host 3 host 2 host 1 다중화와 역다중화 수신 받은 세그먼트 데이터를 올바른 소켓에게 전달하는 작업 호스트에서 소켓들로부터 데이터를 모으고,헤더 정보로 캡슐화하고, 네트워크 계층으로 전달하는 작업 Transport Layer

  7. 소켓은 유일한 식별자(포트번호)를 갖는다. 각 세그먼트는 적절한 소켓을 가리키는 특별한 필드를 가진다. 근원지 포트번호 필드, 목적지 포트번호 필드 포트번호: 16비트 정수 0-1023: 잘 알려진(well-known)포트번호로 잘 알려진 app. 프로토콜로 예약되어 있다. 새 app. 개발 시 포트번호 할당 역다중화 작업 과정 각 소켓은 포트번호 할당 전송 계층은 세그먼트 안의 목적지 포트번호를 검사하고 상응하는 소켓으로 세그먼트를 전달 세그먼트 데이터는 소켓을 통해 해당 프로세스로 전달 32 bits 근원지 포트번호 목적지 포트번호 기타 헤더 필드 app. 데이터 (message) TCP/UDP segment format 역다중화 작업 Transport Layer

  8. 포트번호를 갖는 소켓을 생성 DatagramSocket mySocket1 = new DatagramSocket(99111); DatagramSocket mySocket2 = new DatagramSocket(99222); UDP소켓 생성 후 호스트가 데이터 전송을 원하면: (다중화 과정) UDP 전송계층은 근원지, 목적지 포트번호를 포함한 전송계층 세그먼트를 생성하고, 만들어진 세그먼트를 네트워크 계층에 전달 UDP 소켓은 목적지 IP address와 목적지포트번호로 구성된 요소의 집합에 의해서 식별된다. 호스트가 UDP 세그먼트를 수신하면(역다중화 과정): UDP 전송계층은 세그먼트에서 목적지 포트번호를 확인한다. 포트번호를 갖는 소켓에게 UDP 세그먼트를 전달한다. 근원지 IP address나 근원지 포트번호가 다르더라도 목적지 IP address와 목적지 포트번호가 같으면 UDP 세그먼트는 동일한 프로세스로 향한다. 근원지 IP주소 및 포트번호의 용도 : 질의에 대한 응답 시 “복귀주소”로 사용. 비연결형 다중화와 역다중화 Transport Layer

  9. P2 P1 P1 P3 SP: 9157 client IP: A DP: 6428 Client IP:C server IP: B SP: 6428 SP: 6428 SP: 5775 DP: 6428 DP: 9157 DP: 5775 비연결형 다중화와 역다중화 • 클라이언트 A가 서버 B로 하나의 HTTP 세션을 초기화 • 클라이언트 C가 서버 B로 하나의 HTTP 세션을 초기화 • 역다중화 시 두개의 요소(목적지 IP address와 목적지 포트번호)를 • 사용하여 소켓식별 • 두 요소가 같기 때문에 세그먼트가 같은 소켓으로 전달. Transport Layer

  10. TCP 소켓은 4개의 요소로 된 집합으로 식별된다.: 근원지 IP address 근원지 port number 목적지 IP address 목적지 port number 수신 호스트는 적당한 소켓으로 세그먼트를 전달하기 위해(역다중화 과정에서) 4개 값을 모두 사용한다. 서버 호스트는 동시에 많은 TCP 소켓을 지원한다. 각 소켓은 자신의 4 요소에 의해서 식별된다. 웹 서버는 각각의 연결된 클라이언트마다 서로 다른 소켓을 생성한다. 비지속 HTTP는 각 응답마다 서로 다른 소켓을 갖는다. UDP와는 다르게 같은 목적지 IP address와 목적지 포트번호를 갖더라도 서로 다른 소켓으로 TCP 세그먼트가 전달된다. 연결지향형 다중화와 역다중화 Transport Layer

  11. S-IP: B D-IP:C SP: 9157 SP: 5775 SP: 9157 P1 P3 P6 P1 P5 P4 P2 client IP: A DP: 80 DP: 80 DP: 80 Client IP:C server IP: B S-IP: A S-IP: B D-IP:C D-IP:C 연결지향형 다중화와 역다중화 • 클라이언트 C가 서버 B로 두 개의 HTTP 세션을 초기화 • 클라이언트 A가 서버 B로 하나의 HTTP 세션을 초기화 • 역다중화 시 4개의 요소를 모두 사용하여 소켓식별 • 서버는 각각의 연결에 따라 새로운 프로세스를 생성 • 프로세스 마다 각자 서로 다른 연결 소켓을 갖는다. Transport Layer

  12. P4 S-IP: B D-IP:C SP: 9157 SP: 5775 SP: 9157 P2 P1 P3 P1 client IP: A DP: 80 DP: 80 DP: 80 Client IP:C server IP: B S-IP: A S-IP: B D-IP:C D-IP:C 연결지향형 다중화와 역다중화 : Threaded Web Server • Threaded 웹 서버는 하나의 프로세스에 첨부된 많은 연결 소켓이 동시에 존재 • 새로운 클라이언트 연결을 위해 새로운 소켓과 스레드(서브프로세서)들 생성 Transport Layer

  13. 전송계층 프로토콜이 할 수 있는 최소 기능으로 동작 다중화와 역다중화 간단한 오류 검사 기능 비연결형 : UDP 송신자와 수신자 사이에 핸드세이크를 사용하지 않는다. DNS의 UDP DNS 클라이언트가 질의 메시지를 작성 UDP에게 메시지를 넘겨준다. 핸드세이킹 없이 메시지에 헤더필드 추가 후 네트워크 계층으로 넘겨준다.(다중화) 네트워크 계층은 데이터그램으로 캡슐화하여 네임서버에 송신 질의에 대한 응답을 기다린다. 응답이 없으면 다른 네임 서버에 송신하거나, 응답수신불능을 통보. 왜 UDP인가? 연결설정이 없다. (which can add delay) 연결상태가 없다. 작은 패킷 헤더 오버헤드 혼잡제어가 없다.: 실기간 app.에 적당한 프로토콜이다. 신뢰성을 app. 자체에서 제공하고 UDP는 혼잡제어에 의한 전송률 억제를 강요당하지 않는다. 비연결형 트랜스포트: UDP[RFC 768] Transport Layer

  14. streaming multimedia apps에 자주 사용 손실 허용 최소 전송율 요구 세그먼트의 전송지연이 없어야 한다. 다른 UDP 사용 app. DNS SNMP UDP사용 시 신뢰적인 데이터 전송: 신뢰성에 대한 기능을 app. 자체에서 제공 UDP 32 bits 헤더를 포함하는 UDP 세그먼트의 길이(바이트 단위) 근원지 포트번호 목적지 포트번호 검사합 길이 Application data (message) UDP segment format Transport Layer

  15. 송신측: 검사합: 세그먼트 안의 모든 16비트 워드합을 1의 보수를 수행, 덧셈과정에서 발생하는 오버플로우는 결과값에 합산된다. 송신자는 겁사합 연산 결과를 UDP 세그먼트의 검사합 필드에 삽입하여 전송한다. 수신측: 수신 받은 세그먼트에서 겁사합을 포함한 모든 16비트 워드를 합산한다. 합산한 결과에서 0이 있으면 오류가 있는 걸로 검출된다. UDP 검사합(Checksum) 목적:전송된 세그먼트의 비트변경에 의한 오류를 검출 Transport Layer

  16. 검사합 예 • Note • 덧셈과정에서 발생하는 오버플로우는 결과값에 합산된다 • Example: add two 16-bit integers 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 1 1 wraparound sum checksum Transport Layer

  17. 신뢰적인 데이터 전송 프로토콜(reliable data transfer(rdt) protocol) 데이터가 변형되거나 손실되지 않고, 전송순서대로 전달된다. 하위 계층의 비신뢰적인 채널의 특성이 신뢰적인 데이터 전송 프로토콜의 복잡도를 결정한다. 신뢰성 있는 데이터 전송의 원리 Transport Layer

  18. deliver_data():상위 계층에 데이터를 전달하려고 할 때 호출 rdt_send():위 계층(app. 계층)에 의해서 호출 send side receive side udt_send():비 신뢰적인 채널을 통해 수신자에게 패킷을 전송할 때 호출 rdt_rcv():패킷이 채널의 수신 측으로부터 도착했을 때 호출 신뢰성 있는 데이터 전송 프로토콜:reliable data transfer(rdt) protocol Transport Layer

  19. 신뢰적인 데이터 전송(rdt) 프로토콜의 구축방법을 위한 가정 송신 측으로부터 수신 측까지의 데이터 전송인 단방향 데이터 전송의 경우만을 고려한다. (단.제어 패킷은 양방향으로 전송된다.) 송신자와 수신자를 정의하기 위해 유한 상태 머신(finite state machines: FSM)을 사용한다. 상태변화를 일으키는 이벤트 이벤트가 발생했을 때 취해지는 행동 event 상태1 상태2 actions 신뢰적인 데이터 전송 프로토콜의 구축 Transport Layer

  20. 하위 채널이 완전히 신뢰적인 가장 간단한 경우 데이터 변형이 없다.(비트 에러가 없다.) 패킷의 손실이 없다. 송신자와 수신자가 분리된 FSM: 송신 측 rdt_send(data) 이벤트: 상위계층으로부터 데이터를 받아들인다. 상위 계층에서 프로시저 호출 packet=make_pkt(data): 데이터를 포함한 패킷을 생성 udt_send(packet):패킷을 채널로 송신 수신 측 rdt_rcv(packet) 이벤트: 하위계층 채널로부터 패킷을 수신, 하위 계층에서 프로시저 호출. extract(packet, data): 패킷으로 부터 데이터를 추출. deliver_data(data): 데이터를 상위계층으로 전달. rdt_send(data) rdt_rcv(packet) 하위로부터 호출을 기다림 상위로부터 호출을 기다림 extract (packet,data) deliver_data(data) packet = make_pkt(data) udt_send(packet) sender receiver Rdt1.0: 오류없는 채널에서의 신뢰적인 데이터 전송 Transport Layer

  21. 패킷 안의 비트들이 하위 채널에서 변형되는 모델 검사 합으로 비트 오류를 검출 패킷은 모두 순서대로 수신된다고 가정. 오류 정정 방법: 자동재전송요구(Automatic Repeat reQuest: ARQ) acknowledgements (ACKs):송신자가 수신자에게 패킷이 정확하게 수신됐다는 것을 알린다. negative acknowledgements (NAKs):송신자가 수신자에게 패킷에 비트오류가 발생했음을 알린다. 송신자는 NAK를 수신하면 패킷을 재전송한다. rdt1.0과 비교한 rdt2.0의 새로운 기능: 오류 검출 : 검사합 필드 사용 수신자 피드백: 수신자로부터 송신자로 ACK와 NAK 패킷을 전송 재전송: NAK를 수신하면 송신자가 해당 패킷을 재전송 Rdt 2.0: 비트 오류가 있는 채널에서의 신뢰적인 데이터 전송 Transport Layer

  22. ACK 또는 NAK 응답을 기다림 rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) 하위로부터 호출을 기다림 Rdt 2.0 : FSM의 정의 rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) receiver rdt_rcv(rcvpkt) && isNAK(rcvpkt) 상위로부터 호출을 기다림 udt_send(sndpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) L sender rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Transport Layer

  23. ACK 또는 NAK 응답을 기다림 rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) 하위로부터 호출을 기다림 Rdt 2.0 : 오류 없을 때 동작 rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) receiver rdt_rcv(rcvpkt) && isNAK(rcvpkt) 상위로부터 호출을 기다림 udt_send(sndpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) L sender rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Transport Layer

  24. rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(NAK) Rdt 2.0 : 오류 있을 때 동작 rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) receiver rdt_rcv(rcvpkt) && isNAK(rcvpkt) 상위로부터 호출을 기다림 ACK 또는 NAK 응답을 기다림 udt_send(sndpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) 하위로부터 호출을 기다림 L sender rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Transport Layer

  25. rdt2.0: transition 오류검사하고 없으면 송신측 수신측 rdt_send(data) udt_send(data) rdt_rcv(data) deliver_data(data) 패킷을 만들고 udt_send(ACK) rdt_rcv(ACK) rdt_send(data) 오류검사하고 있으면 udt_send(data) rdt_rcv(data) 재전송 udt_send(NAK) rdt_rcv(NAK) 오류검사하고 없으면 udt_send(data) rdt_rcv(data) udt_send(ACK) deliver_data(data) rdt_rcv(ACK) Transport Layer

  26. ACK/NAK패킷이 전송 시 비트 오류 발생하면, 송신 측은 수신 측의 패킷 전송 오류 여부를 알 수 없다. 단순한 재전송은 중복 전송을 야기시킨다. 해결책 송신자가 ACK/NAK의 오류 검출 및 정정이 가능한 검사 합비트를 추가. -> 패킷 손실인 경우 문제. 송신자가 ACK/NAK의 오류 검출 후 재전송한다. ->중복 패킷을 전송할 수 있다.(송신 측에 ACK가 오류로 인하여 NAK로 수신되면) 따라서 수신 측은 전송된 패킷이 새로운 데이터의 패킷인지 재전송 패킷인지 식별할 수 없다. 중복 전송의 해결책: 송신자는 순서번호필드를 패킷에 추가. 만약 ACK/NAK에 오류가 검출 되면 송신자는 현재 패킷을 재전송한다. 수신자는 순서번호필드를 확인하여 최근에 수신한 패킷의 순서번호와 동일하면 재전송, 그렇지 않으면 새로운 패킷으로 간주하여 중복패킷을 상위 계층으로 전달하지 않는다. stop and wait Rdt 2.0의 결함 송신자는 패킷을 보내고 나서 수신자의 응답을 기다린다. Transport Layer

  27. Wait for ACK or NAK 0 Wait for call 1 from above Wait for ACK or NAK 1 Rdt 2.1 : 송신자 rdt_send(data) 1-1 sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) 2-1 Wait for call 0 from above udt_send(sndpkt) 2 1 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) 4-2 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) 2-2 L L 4 3 rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) 4-1 rdt_send(data) 3-1 sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) udt_send(sndpkt) Transport Layer

  28. Wait for 0 from below Wait for 1 from below Rdt 2.1: 수신자 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) 1-2 extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) 1-1 rdt_rcv(rcvpkt) && (corrupt(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) 2-1 sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) 1-1 1 2 rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) 2-1 sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) 2-2 extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) Transport Layer

  29. 송신자: 순서번호를 패킷에 추가 0,1 두 개의 순서번호로 문제 해결이 가능하다. ACK/NAK응답이 비트오류가 있는지를 확인 Rdt 2.0보다 두 배 많은 상태를 갖는다. 수신자: 수신된 패킷이 중복패킷인지 확인 최근에 수신한 패킷의 순서번호와 동일하면 재전송, 그렇지 않으면 새로운 패킷으로 간주 Rdt2.1: 검토 Transport Layer

  30. NAK를 사용하지 않고 ACK만 사용, 그 외는 Rdt2.1과 같은 기능 NAK대신에, 수신자는 최근에 정확하게 수신된 패킷의 ACK를 송신. 수신자는 이전에 정확하게 수신된 패킷의 순서번호를 포함시켜 ACK를 보내야 한다.-> Rdt2.1과 차이점 송신자는 두 번 ACK되고 있는 패킷의 다음 패킷을 정확하게 수신하지 못했다는 것을 알고 재전송한다. Rdt2.2: a NAK-free protocol Transport Layer

  31. Wait for ACK 0 Wait for call 0 from above Wait for call 1 from above Wait for ACK 1 Rdt2.2 : 송신자 rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) L L rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,0) ) udt_send(sndpkt) rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) Transport Layer

  32. Wait for 0 from below Wait for 1 from below Rdt2.2 : 수신자 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, 0, chksum) udt_send(sndpkt) oncethru=0 L oncethru=1 rdt_rcv(rcvpkt) && corrupt(rcvpkt) && has_seq1(rcvpkt) rdt_rcv(rcvpkt) && corrupt(rcvpkt) && has_seq0(rcvpkt) if(oncethru==1) udt_send(sndpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, 1, chksum) udt_send(sndpkt) Transport Layer

  33. 새로운 가정:하위 채널이 패킷 (data or ACKs)을 손실하는 경우 검사합, 순서번호, ACK 패킷, 재전송의 사용(Rdt2.2)은 패킷 손실이 발생했을 때 대안은 되나, 패킷 손실 검출이 불가능 하다. 접근 방법:송신자는 ACK 응답을 받기 위한 충분한 시간을 기다린다. 설정된 시간 안에 ACK 응답이 수신되지 않으면 패킷을 재전송 한다. 만일 데이터나 ACK 패킷이 손실된 게 아닌 큰 지연이 발생한 것이라면i: 중복 데이터 패킷이 재전송에 의해서 발생할 수 있으나, 순서 번호로써 중복 패킷의 문제점을 해결할 수 있다. 수신자는 Ack 패킷에 순서번호를 포함시켜 보낸다. 주어진 시간 경과 후 기다리는 송신자를 인터럽트 할 수 있는 카운트다운 타이머가 필요하다. Rdt3.0: 비트오류가 있는 손실 채널에서의 데이터 전송 Transport Layer

  34. Wait for ACK0 Wait for ACK1 Wait for call 1 from above Wait for call 0from above Rdt3.0 : 송신자 rdt_send(data) 1-1 rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer 2-1 rdt_rcv(rcvpkt) L L timeout udt_send(sndpkt) start_timer 2 1 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1) 4-2 rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) 2-2 stop_timer stop_timer 3 4 timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) L rdt_send(data) 3-1 rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,0) ) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer 4-1 L Transport Layer

  35. Rdt3.0 : 무손실 동작과 패킷 손실동작 Transport Layer

  36. Rdt3.0 : ACK 손실과 조급한 타임아웃 Transport Layer

  37. rdt3.0은 기능적으로는 우수하나, 오늘날 고속네트워크환경에서는 적당하지 않다. 1 Gbps 전송률(R)을 가진 채널, 15 ms의 종단간 전파지연, 1KB 패킷을 전송한다면: Rdt3.0의 성능 RTT(왕복전파지연) = 30ms L (패킷 크기, bit) 8kb/pkt T = 8 us = = transmit R (전송율, bps) 109 b/sec • U sender: 송신자 이용률 –송신자는 전체 전송소요시간의 0.00027동안만 채널이용. • 대략 30 ms마다 1KB 패킷이 전송 -> 1 Gbps link에서 267kbps 유효 처리량을 갖는다. • 네트워크 프로토콜들이 하위 네트워크 하드웨어가 제공하는 용량을 제한하게 된다. Transport Layer

  38. Rdt3.0: 전송 후 대기 프로토콜 송신자 수신자 송신되는 첫 번째 패킷의 첫 번째 비트, t = 0 송신되는 첫 번째 패킷의 마지막 비트, t = L / R 전송 지연 시간 첫 번째 패킷의 첫 번째 비트 도착 RTT 첫 번째 패킷의 마지막 비트 도착, ACK 전송 ACK 도착 후에 다음 패킷 전송, t = RTT + L / R Transport Layer

  39. 파이프라인된 전송: 송신자 이용률의 증가 확인응답을 기다리기 전에 송신자가 3개의 패킷을 전송하도록 허용한다면: 송신자 수신자 송신되는 첫 번째 패킷의 첫 번째 비트, t = 0 송신되는 첫 번째 패킷의 마지막 비트, t = L / R 전송 지연 시간 첫 번째 패킷의 첫 번째 비트 도착 RTT 첫 번째 패킷의 마지막 비트 도착, ACK 전송 두 번째 패킷의 마지막 비트 도착, ACK 전송 세 번째 패킷의 마지막 비트 도착, ACK 전송 ACK 도착 후에 다음 패킷 전송, t = RTT + L / R [송신자의 이용률이 3배 증가] Transport Layer

  40. 파이프라이닝:송신자는 확인 응답을 기다리지 않고 여러 패킷을 전송하도록 허용 순서번호의 범위가 증가되어야 한다. 각각의 전송 중인 패킷은 유일한 순서번호를 갖는다. 프로토콜의 송신 측과 수신 측은 한 패킷 이상을 버퍼링 해야 한다. 송신자는 전송되었으나 확인응답 되지 않은 패킷을, 수신자는 정확하게 수신 된 패킷들을 버퍼링해야 한다. 파이프라인된 프로토콜의 두 가지 접근방법: go-Back-N, selective repeat 파이프라인된 프로토콜 Transport Layer

More Related