Download presentation
Presentation is loading. Please wait.
1
3장 트랜스포트 계층 Transport Layer
2
3장: 트랜스포트 계층 목표: 트랜스포트 계층 서비스 지원 원리의 이해: 인터넷의 트랜스포트 프로토콜들을 학습:
다중화/역다중화 신뢰적인 데이터전송 흐름 제어 혼잡 제어 인터넷의 트랜스포트 프로토콜들을 학습: UDP: 비연결 트랜스포트 TCP: 연결형 트랜스포트 TCP 혼잡제어 Transport Layer
3
3장 트랜스포트 계층 3.1 트랜스포트 계층 서비스 3.2 다중화와 역다중화 3.3 비연결형 트랜스포트: UDP
3.4 신뢰적인 대이터 전송의 원리 3.5 연결형 트랜스포트: TCP 세그먼트 구조 신뢰적인 데이터 전송 흐름 제어 연결 관리 3.6 혼잡 제어의 원리 3.7 TCP 혼잡제어 Transport Layer
4
logical end-end transport
3.1 트랜스포트 계층 서비스 상이한 호스트상에 동작하는 응용 프로세스간의 논리적 통신을 제공 트랜스포트 프로토콜은 종단 시스템에서 동작 송신측: 메시지를 세그먼트들로 나누어 네트워크 계층으로 넘겨준다. 수신측: 세그먼트들을 메시지로 재결합하여 응용계층으로 넘겨준다. 응용계층에 하나이상의 트랜스포트 프로토콜이 있다. 인터넷: TCP 와 UDP OSI: CLTP와 CMTP application transport network data link physical network data link physical network data link physical network data link physical network data link physical logical end-end transport network data link physical application transport network data link physical Transport Layer
5
3.1.1 트랜스포트 계층과 네트워크계층 사이의 관계 어느 가정의 비유: 네트워크 계층: 호스트간의 논리적인 통신 제공
3.1.1 트랜스포트 계층과 네트워크계층 사이의 관계 어느 가정의 비유: 12 아이들이 다른 집의 12아이들에게 각자 편지를 쓴다고 가정. 프로세스 = 각 편지를 쓰는 아이들 응용 메세지 = 편지봉투안의 편지 호스트 = 집 트랜스포트 프로토콜 = 각 집에서 우편 담당자 네트워크 계층 프로토콜 = 우편 서비스 네트워크 계층: 호스트간의 논리적인 통신 제공 트랜스포트 계층: 프로세스간의 논리적인 통신 제공 네트워크 계층 서비스에 의존하되, 서비스를 강화 Transport Layer
6
logical end-end transport
3.1.2 인터넷에서의 트랜스포트 계층의 개요 신뢰적이고, 순차적인(in-order) 전달 (TCP) 혼잡 제어 흐름 제어 연결 설정 비신뢰적이고, 무순의 전달: UDP IP의 “최선형”의 확장으로 장식 없음 데이터전달과 오류검출만 가용하지 않는 서비스: 지연 보장 밴드폭 보장 application transport network data link physical network data link physical network data link physical network data link physical logical end-end transport network data link physical network data link physical application transport network data link physical Transport Layer
7
3장 트랜스포트 계층 3.1 트랜스포트 계층 서비스 3.2 다중화와 역다중화 3.3 비연결형 트랜스포트: UDP
3.4 신뢰적인 대이터 전송의 원리 3.5 연결형 트랜스포트: TCP 세그먼트 구조 신뢰적인 데이터 전송 흐름 제어 연결 관리 3.6 혼잡 제어의 원리 3.7 TCP 혼잡제어 Transport Layer
8
3.2 다중화/역다중화 송신측 호스트에서의 다중화: 수신측 호스트에서의 역다중화: 여러 소켓으로 부터 데이터를
수신된 세그멘트를 정확한 소켓에 전달 여러 소켓으로 부터 데이터를 모아, 헤더를 부쳐 데이터를 캡슐화 (후에 역다중화된다.) = 소켓 = 프로세스 application transport network link physical P1 P2 P3 P4 host 1 host 2 host 3 Transport Layer
9
어떻게 역다중화 하는가? 호스트가 IP 데이터 그램을 수신 각 데이타그램에는 근원지 IP 주소와 목적지 IP 주소를 갖음
각 데이타그램은 하나의 트랜스포트 계층 세그먼트 각 세그먼트는 근원지 포트번호와 목적지 포트번호를 갖음 (주: 잘 알려진(well-known) 포트 번호는 특정 응용을 위함) 수신 호스트는 수신 세그먼트의 IP주소와 포트번호를 적절한 소켓으로 그 세그먼트를 보내는데 사용한다. 32 비트 근원지 포트 # 목적지 포트 # 다른 헤더 필드 응용 대이터 (메시지) TCP/UDP 세그먼트 형식 Transport Layer
10
비연결형 다중화와 역다중화(1) 원하는 포트번호를 갖는 소켓을 생성: UDP 소켓은 다음의 두요소에 의해 구별된다:
세그먼트내의 목적지 포트번호를 찾아서 UDP 세그먼트를 그 포트번호에 연관된 소켓으로 보낸다. 다른 근원지 IP 주소와 근원지 포트번호를 갖는 IP 데이터그램도 같은 소켓으로 보내진다. 원하는 포트번호를 갖는 소켓을 생성: ServAddr.sin_family=AF_INE; ServAddr.sin_port=htons(9876); ServAddr.sin_addr.s_addr=inet_addr(" "); UDP 소켓은 다음의 두요소에 의해 구별된다: (목적지 IP 주소, 목적지 포트번호) Transport Layer
11
비연결형 다중화와 역다중화(2) DatagramSocket serverSocket = new DatagramSocket(6428); 클라이언트 IP:B P2 IP: A P1 P3 서버 IP: C SP: 6428 DP: 9157 SP: 9157 DP: 6428 DP: 5775 SP: 5775 9157 6428 5775 SP provides “return address” Transport Layer
12
비연결형 다중화와 역다중화(3) 응용 서버 응용(클라이언트1) A 9157 P3 응용 P2 msg ladr lpt radr
rpt s radr ladr lpt rpt s C 6428 9157 A 복사 일치 복사 C 6428 1 lpt=6428 1 2 lpt=9157 UDP C,6428,A,9157 UDP C,6428,A,9157 IP(ladr=C) IP(ladr=A) NIF NIF UDP C,6428,A,9157 Transport Layer
13
비연결형 다중화와 역다중화(4) 응용 서버 응용(클라이언트2) A 9157 응용 P3 B 5775 P1 msg ladr lpt
radr rpt s radr ladr lpt rpt s C 6428 5775 B 복사 일치 복사 C 6428 1 lpt=6428 1 2 lpt=5775 UDP C,6428,B,5775 UDP C,6428,B,5775 IP(ladr=C) IP(ladr=B) NIF NIF UDP C,6428,B,5775 Transport Layer
14
연결형 다중화와 역다중화(1) TCP 소켓은 4요소에 의개 식별:
근원지 IP 주소 근원지 포트번호 목적지 IP 주소 목적지 포트번호 수신 호스트는 4 요소 모두를 사용하여 적절한 소켓으로 포트를 보낸다. 서버 호스트는 많은 TCP 소켓을 동시에 지원할수 있다: 각 소켓은 자신의 4요소로 구별된다. 웹서버는 각 연결 클라이언트에 대해 다른 소켓을 갖는다. 비지속적인(non-persistent) HTTP 는 각 요구에 대해 다른 소켓을 갖는다. Transport Layer
15
연결형 다중화와 역다중화(2) client Client server IP: A IP: C P1 P4 P5 P6 P2 P1 P3
SP: 5775 DP: 80 S-IP: B D-IP:C SP: 9157 SP: 9157 DP: 80 DP: 80 Client IP:B server IP: C S-IP: A S-IP: B D-IP:C D-IP:C Transport Layer
16
연결형 다중화와 역다중화(3) 응용 P4 radr rpt ladr lpt ns C 80 A 9157 P1 ladr lpt
2 Lpt=9157 TCP C,80,A,9157 TCP IP(ladr=C) IP(ladr=A) NIF NIF TCP연결요청 A,a,B,b TCP연결수락 Transport Layer
17
연결형 다중화와 역다중화(4) 응용 P4 복사 P1 ladr lpt radr rpt s radr rpt ladr lpt s1
C 80 A 9157 radr ladr lpt rpt s 복사 C 80 9157 A C 80 1 lpt=80 일치 1 2 lpt=9157 TCP C,80,A,9157 TCP C,80,A,9157 IP(ladr=C) IP(ladr=A) NIF NIF C,80,A,9157 A,9157,C,80 Transport Layer
18
연결형 다중화와 역다중화(5) 응용 P4 P5 P6 ladr lpt radr rpt s radr rpt ladr lpt s1
C 80 A 9157 radr rpt ladr lpt s2 C 80 B 9157 radr rpt ladr lpt s3 C 80 B 5775 C 80 복사 1 lpt=80 일치 TCP C,80,B,5775 IP(ladr=C) NIF C,80,B,5775 Transport Layer
19
연결형 다중화와 역다중화(6) 응용 P4 P5 P6 ladr lpt radr rpt s radr rpt ladr lpt s1
C 80 A 9157 radr rpt ladr lpt s2 C 80 B 9157 radr rpt ladr lpt s3 C 80 B 5775 C 80 복사 1 lpt=80 일치 TCP C,80,B,9157 IP(ladr=C) NIF C,80,B,9157 Transport Layer
20
연결형 역다중화: 스레드 웹서버 client Client server IP: A IP: C P1 P4 P2 P1 P3
SP: 5775 DP: 80 S-IP: B D-IP:C SP: 9157 SP: 9157 DP: 80 DP: 80 Client IP:B server IP: C S-IP: A S-IP: B D-IP:C D-IP:C Transport Layer
21
3장 트랜스포트 계층 3.1 트랜스포트 계층 서비스 3.2 다중화와 역다중화 3.3 비연결형 트랜스포트: UDP
3.4 신뢰적인 대이터 전송의 원리 3.5 연결형 트랜스포트: TCP 세그먼트 구조 신뢰적인 데이터 전송 흐름 제어 연결 관리 3.6 혼잡 제어의 원리 3.7 TCP 혼잡제어 Transport Layer
22
UDP: User Datagram Protocol [RFC 768]
“무장식” “기본기능”만의 인터넷 트랜스포트 프로토콜 “best effort” 서비스, UDP 세그먼트들은: 손실되거나 응용에게 순서가 바뀌어 전달될수 있다. 비연결 UDP 송신자와 수신자사이에 핸드셰이킹이 없음 각 UDP 세그먼트는 독립적으로 다루어 진다. UDP를 쓰는 이유는? 연결설정이 없음 (연결은 설정지연을 초래) 단순성: 송수신자에 연결 상태를 유지할 필요없다. 작은 세그먼트 헤더 혼잡제어 없음: UDP는 최대한 빨리 밀어낼수 있다. Transport Layer
23
UDP(2) 기타 UDP 사용 종종 스트리밍 멀티미디어 응용에 사용 손실 허용 전송속도 민감 DNS SNMP
응용-자체의 오류 복구! Transport Layer
24
3.3.1 UDP 세그먼트 구조 응용 데이터 (메시지) UDP segment format 32비트 근원지포트번호 목적지포트번호
예. 길이=20 이라는 것은,] 헤더 8바이트 + 데이터 12 바이트 길이 검사합 응용 데이터 (메시지) UDP segment format Transport Layer
25
3.3.2 UDP 검사합(checksum) 목표: 전송 세그먼트내의 “오류” (예, 비트 오류)를 검출 송신자: 수신자:
세그먼트의 내용을 16 비트 정수의 열로 간주 검사합: 세그먼트 내용을 더하고 (1’s complement 합)으로 더함 송신자는 이 검사합 값을 검사합 필드에 기록 수신자: 수신된 세그먼트의 검사합을 계산 계산된 검사합값이 검사합 필드값과 같은지 검사: 다르면 - 오류검출됨 같으면 – 오류는 검출되지 않음. 그러나 오류가 있을수도 있음 실제로는 모든 세그먼트를 다 더하면 정상 Transport Layer
26
인터넷 검사합의 예 주 숫자를 더할때, 가장 큰자리수에서의 올림은 결과에 더해져야 된다. 예: 두 16비트 정수의 합
X Y wraparound Kurose and Ross forgot to say anything about wrapping the carry and adding it to low order bit sum checksum X+Y+checksum Transport Layer
27
3장 트랜스포트 계층 3.1 트랜스포트 계층 서비스 3.2 다중화와 역다중화 3.3 비연결형 트랜스포트: UDP
3.4 신뢰적인 데이터 전송의 원리 3.5 연결형 트랜스포트: TCP 세그먼트 구조 신뢰적인 데이터 전송 흐름 제어 연결 관리 3.6 혼잡 제어의 원리 3.7 TCP 혼잡제어 Transport Layer
28
신뢰적인 데이터 전송의 원리 응용계층, 트랜스포트계층, 링크계층에서 매우 중요 네트워킹에서 상위 10개 내의 중요한 문제!
비신뢰적인 채널의 성격은 신뢰적인 데이터 전송 프로토콜(rdt)의 복잡성을 결정한다. Transport Layer
29
신뢰적인 데이터 전송: 시작(1) send receive side side
rdt_send(): 상위에서 호출, (예, 응용계층). 데이터를 수신측의 상위계층에게 전달하기 위함 deliver_data(): 상위계층에 전달하기 위하여 rdt에 의하여 호출 send side receive side rdt_rcv(): 패킷이 채널의 수신측에 도착했을때 호출 udt_send(): 수신측으로 비신뢰적인 채널상으로 패킷을 전송하기 위하여 rdt에 의하여 호출, Transport Layer
30
3.4.1 신뢰적인 데이터 전송 프로토콜(rdt)의 구축
우리는: 신뢰적인 데이터 전송 프로토콜 (rdt)의 송신측과 수신측을 점차적으로 개발 단지 단방향 데이터 전송만을 고려하되, 제어정보는 양방향으로 흐름! 송신과 수신을 나타내기 위하여 유한상태머신 (FSM) 을 사용 사건(event)은 상태변이를 야기 상태변이에서 취해지는 행위(action) state 1 state: 이 “상태” 에 있을때, 다음 상태는 다음 사건(event)에 의하여 유일하게 결정 state 2 사건(event) 행위(actions) Transport Layer
31
Rdt1.0: 오류없는 채널에서의 신뢰적인 데이터전송
하위 채널은 완벽하게 신뢰적 비트오류 없음 패킷손실 없음 송신자와 수신자에 대한 분리된 FSM: 송신자는 하위 채널로 데이터를 보낸다. 수신자는 하위 채널로부터 데이터를 읽는다. 상위로 부터 호출을 기다림 rdt_send(data) 하위로 부터 호출을 기다림 rdt_rcv(packet) packet = make_pkt(data) udt_send(packet) extract (packet,data) deliver_data(data) 송신측 수신측 rdt_send() udt_send() rdt_rcv() deliver_data() Transport Layer
32
Rdt2.0: 비트오류가 있는 채널 하위 채널은 패킷내의 비트 변형 질문: 오류복구방법:
비트 오류를 검출하기 위하여 검사합 질문: 오류복구방법: 확인응답 (ACKs): 수신자는 송신자에게 패킷 수신 OK를 명시적으로 알려줌 부정확인응답 (NAKs): 수신자는 송신자에게 수신패킷에 오류가 있음을 명시적으로 알려줌 송신자는 NAK을 수신하면, 패킷을 재전송 rdt2.0 에서의새로운 메카니즘 ( rdt1.0에 추가): 오류 검출 수신자 피드백: 제어메시지 (ACK,NAK) 수신자 -> 송신자 Transport Layer
33
rdt2.0: FSM 명세서 sender receiver udt_send(NAK) rdt_rcv(rcvpkt) &&
corrupt(rcvpkt) rdt_send(data) snkpkt = make_pkt(data, checksum) udt_send(sndpkt) Wait for call from below rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for call from above Wait for ACK or NAK udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) rdt_rcv(rcvpkt) && isACK(rcvpkt) L sender receiver Transport Layer
34
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
35
rdt2.0: 오류 없을 때의 동작 rdt_send(data) snkpkt = make_pkt(data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for ACK or NAK Wait for call from above udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) Wait for call from below L rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Transport Layer
36
rdt2.0: 오류가 있을 때의 동작 rdt_send(data) snkpkt = make_pkt(data, checksum)
udt_send(sndpkt) rdt_rcv(rcvpkt) && isNAK(rcvpkt) Wait for ACK or NAK Wait for call from above udt_send(NAK) rdt_rcv(rcvpkt) && corrupt(rcvpkt) udt_send(sndpkt) rdt_rcv(rcvpkt) && isACK(rcvpkt) Wait for call from below L rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) extract(rcvpkt,data) deliver_data(data) udt_send(ACK) Transport Layer
37
rdt2.0 가 갖고 있는 치명적 결함! ACK/NAK 이 손상되면? 중복패킷 처리:
송신자는 수신자에게 무엇이 발생하였는지 알지 못함! 재전송을 할수 없음: 중복패킷 구분할수 없음 중복패킷 처리: 송신자는 각 패킷에 순서번호(sequence number) 삽입 송신자는 ACK/NAK이 왜곡시 현재 패킷을 재전송한다. 수신자는 중복패킷을 버린다.(위로 전달않는다.) 전송후대기 (stop and wait) 송신자는 한 패킷을 보내고, 수신자 응답을 기다린다. Transport Layer
38
rdt2.1: 송신자, 왜곡된 ACK/NAKs 처리
rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) Wait for ACK or NAK 0 Wait for call 0 from above udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt) L L Wait for ACK or NAK 1 Wait for call 1 from above rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isNAK(rcvpkt) ) rdt_send(data) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) udt_send(sndpkt) Transport Layer
39
rdt2.1: 수신자, 왜곡된 ACK/NAKs 처리
rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq0(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) sndpkt = make_pkt(NAK, chksum) udt_send(sndpkt) Wait for 0 from below Wait for 1 from below rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq1(rcvpkt) rdt_rcv(rcvpkt) && not corrupt(rcvpkt) && has_seq0(rcvpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK, chksum) udt_send(sndpkt) Transport Layer
40
rdt2.1: transition -NAK오류
송신측 수신측 rdt_send(data0) udt_send(data0) rdt_rcv(data0) deliver_data(data0) udt_send(ACK) rdt_rcv(ACK) rdt_send(data1) udt_send(data1) rdt_rcv(data1) 비트오류 재전송 비트오류 udt_send(NAK) rdt_rcv(NAK) udt_send(data1) rdt_rcv(data1) udt_send(ACK) deliver_data(data1) rdt_rcv(ACK) Transport Layer
41
rdt2.1: transition - duplicate
송신측 수신측 rdt_send(data0) udt_send(data0) rdt_rcv(data0) deliver_data(data0) udt_send(ACK) rdt_rcv(ACK) rdt_send(data1) udt_send(data1) rdt_rcv(data1) deliver_data(data1) 재전송 비트오류 udt_send(ACK) rdt_rcv(NAK) udt_send(data1) rdt_rcv(data1) 중복검색, 다시 data1에 대한ACK udt_send(ACK) rdt_rcv(ACK) Transport Layer
42
rdt2.1: 토론 송신자: 순서번호를 패킷에 삽입 두 순서번호 (0,1) 이면 충분하다. 왜일까?
수신된 ACK/NAK 이 손상되었는지를 검사하여야 한다. 상태가 두배로 많아짐 상태는 “현재의” 패킷이 순서번호가 0인지 1인지를 “기억하여야 한다.” 수신자: 수신 패킷이 중복패킷인지를 검사하여야 한다. 상태는 기대되는 패킷 순서 번호가 0 인지 1인를 나타낸다. 주: 송신자에서 최근의 ACK/NAK가 제대로 수신되었는지를 수신자는 알수 없다. Transport Layer
43
rdt2.2: NAK 없는 protocol rdt2.1과 같은 기능이되, ACK만을 사용
NAK 대신에, 수신자는 성공적으로 수신된 마지막 패킷에 대해 ACK 전송 수신자는 ACK 되는 패킷의 순서번호를 명시적으로 포함하여야 한다. 송신측에서의 중복 ACK는 NAK와 같은 효과 : 현재의 패킷을 재전송 Transport Layer
44
Wait for call 0 from above
rdt2.2: 송신측,수신측 일부 rdt_send(data) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,1) ) Wait for call 0 from above Wait for ACK udt_send(sndpkt) sender FSM fragment rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) rdt_rcv(rcvpkt) && (corrupt(rcvpkt) || has_seq1(rcvpkt)) L Wait for 0 from below receiver FSM fragment udt_send(sndpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && has_seq1(rcvpkt) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(ACK1, chksum) udt_send(sndpkt) Transport Layer
45
rdt2.2: transition –NAK 없음
송신측 수신측 rdt_send(data0) udt_send(data0) rdt_rcv(data0) deliver_data(data0) udt_send(ACK0) rdt_rcv(ACK0) rdt_send(data1) udt_send(data1) rdt_rcv(data1) 비트오류 재전송 비트오류 udt_send(ACK0) rdt_rcv(ACK0) udt_send(data1) rdt_rcv(data1) udt_send(ACK1) deliver_data(data1) rdt_rcv(ACK1) Transport Layer
46
rdt3.0: 비트오류와 손실이 있는 채널 추가 가정: 하위채널에서 패킷(데이터 또는 ACK)이 손실될수 있다.
검사합, 순서번호, ACKs, 재전송등은 도움이 될것이나, 충분치 않다. 접근법: 송신측은 ACK에 대해 “적당한” 시간 을 기다린다. 이 시간내에 ACK를 수신하지 못하면 재전송 만약 패킷(또는 ACK)가 단지 지연된다면(손실되지 않고): 재전송은 중복될것이나, 순서번호가 이미 이것을 다룬다. 수신자는 ACK되는 패킷의 순서번호를 나타내야 한다. 카운트다운 타이머(countdown timer)가 필요 Transport Layer
47
rdt3.0 송신측 L L L L rdt_send(data) rdt_rcv(rcvpkt) &&
( corrupt(rcvpkt) || isACK(rcvpkt,1) ) sndpkt = make_pkt(0, data, checksum) udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) L L Wait for call 0from above Wait for ACK0 timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,1) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) && isACK(rcvpkt,0) stop_timer stop_timer Wait for ACK1 Wait for call 1 from above timeout udt_send(sndpkt) start_timer rdt_rcv(rcvpkt) L rdt_send(data) rdt_rcv(rcvpkt) && ( corrupt(rcvpkt) || isACK(rcvpkt,0) ) sndpkt = make_pkt(1, data, checksum) udt_send(sndpkt) start_timer L Transport Layer
48
rdt3.0 동작(1) Transport Layer
49
rdt3.0 동작(2) Transport Layer
50
rdt3.0 성능분석 rdt3.0은 동작한다., 그러나 성능은 별로다.
예: 1 Gbps 링크속도, 15 ms 종단간 전파지연, 1KB 패킷크기: L (packet length in bits) 8kb/pkt T = = = 8 microsec transmit R (transmission rate, bps) 10**9 b/sec U sender: utilization – fraction of time sender busy sending 1KB pkt every 30 msec -> 33kB/sec thruput over 1 Gbps link network protocol limits use of physical resources! Transport Layer
51
rdt3.0: 전송후 대기(stop-and-wait) 동작
sender receiver first packet bit transmitted, t = 0 last packet bit transmitted, t = L / R first packet bit arrives RTT last packet bit arrives, send ACK ACK arrives, send next packet, t = RTT + L / R Transport Layer
52
3.4.2 파이프라인된 신뢰적 데이터 전송 프로토콜 파이프라이닝: 송신자는 여러개의, “전송되고있는”, 확인 응답되지 않은 패킷들을 허용 순서번호 범위가 커져야 한다. 송신자와 수신자에서 버퍼링 파이프라인된 프로토콜의 두가지 전형적인 형태: go-Back-N, 선택적반복(selective repeat) Transport Layer
53
파이프라이닝: 효율증대 Increase utilization by a factor of 3! sender receiver
first packet bit transmitted, t = 0 last bit transmitted, t = L / R first packet bit arrives RTT last packet bit arrives, send ACK last bit of 2nd packet arrives, send ACK last bit of 3rd packet arrives, send ACK ACK arrives, send next packet, t = RTT + L / R Increase utilization by a factor of 3! Transport Layer
54
3.4.3 Go-Back-N 송신자: 패킷 헤더에 k-bit 순서번호
ACK(n): 순서번호 n 까지의의 모든 패킷들에 대하여 - “ 누적확인응답(cumulative ACK)” may deceive 중복ACKs (see receiver) timer for each in-flight pkt timeout(n): retransmit pkt n and all higher seq # pkts in window Transport Layer
55
GBN: 송신자 확장 FSM L Wait rdt_send(data) if (nextseqnum < base+N) {
sndpkt[nextseqnum] = make_pkt(nextseqnum,data,chksum) udt_send(sndpkt[nextseqnum]) if (base == nextseqnum) start_timer nextseqnum++ } else refuse_data(data) L base=1 nextseqnum=1 timeout Wait start_timer udt_send(sndpkt[base]) udt_send(sndpkt[base+1]) … udt_send(sndpkt[nextseqnum-1]) rdt_rcv(rcvpkt) && corrupt(rcvpkt) rdt_rcv(rcvpkt) && notcorrupt(rcvpkt) base = getacknum(rcvpkt)+1 If (base == nextseqnum) stop_timer else start_timer Transport Layer
56
GBN: 수신자 확장 FSM ACK-only: 항상 순서대로 정확하게 수신된 가장 순서번호 가 큰 패킷에 대하여 확인응답
default udt_send(sndpkt) rdt_rcv(rcvpkt) && notcurrupt(rcvpkt) && hasseqnum(rcvpkt,expectedseqnum) L Wait expectedseqnum=1 sndpkt = make_pkt(expectedseqnum,ACK,chksum) extract(rcvpkt,data) deliver_data(data) sndpkt = make_pkt(expectedseqnum,ACK,chksum) udt_send(sndpkt) expectedseqnum++ ACK-only: 항상 순서대로 정확하게 수신된 가장 순서번호 가 큰 패킷에 대하여 확인응답 중복 ACK를 발생 할수 있다. 단지 expectedseqnum 만을 기억 순서가 바뀐(out-of-order) pkt: 폐기한다. (버퍼링안함) -> 수신자는 버퍼링 안함! 가장 큰 순서대로의 순서번호의 패킷에 대해 재 화인응답 Transport Layer
57
GBN 동작(1) Transport Layer
58
GBN: 딜레마 예: 순서번호필드: k =2 비트 순서번호: 0, 1, 2, 3 window size=3
ACK0 1 2 3 예: 순서번호필드: k =2 비트 순서번호: 0, 1, 2, 3 window size=3 receiver sees no difference in two scenarios! incorrectly passes duplicate data as new in (a) Q: what relationship between seq # size and window size? A: W = 2k-1 ACK0 1 ACK0 1 2 3 ACK0 1 Transport Layer
59
3.4.4 선택적 반복(Selective Repeat)
수신자는 모든 정확하게 수신된 패킷들에 대하여 개별적으로 확인응답 패킷들은 버퍼링하여 상위계층으로 궁국적으로는 순서대로 전달 송신자는 확인응답이 제대로 수신되지 않은 패킷에 대하여만 재전송 각 unACK된 패킷에 대하여 송신자 타이머 송신자 윈도우 N 연속적인 순서번호 마찬가지로 송신된 순서번호 제한 Transport Layer
60
Selective repeat: sender, receiver windows
Transport Layer
61
선택적 반복 수신자 송신자 상위로 부터의 데이타 : 타임아웃(n): ACK(n) in [sendbase,sendbase+N]:
만약 윈도우에 여유분이 있으면, 패킷을 송신 타임아웃(n): pkt n을 재전송,타이머 재가동 ACK(n) in [sendbase,sendbase+N]: 수신된 패킷 n을 표기 만약 가장작은 unACK 패킷을 수신하면, 윈도우 base를 다음의 unACKed 순서번호로 전진 [rcvbase, rcvbase+N-1]내의 패킷에 대하여 ACK(n) 송신 out-of-order: 버퍼링 in-order: (버퍼된 in-order 패킷을 포함하여)전달, 윈도우를 아직 수신되지 않은 패킷으로 전진 [rcvbase-N,rcvbase-1]내의 패킷에 대하여 ACK(n) 아니면 무시 Transport Layer
62
선택적 반복 동작 Transport Layer
63
SR: 딜레마 Example: 순서번호필드: k =2 비트 순서번호: 0, 1, 2, 3 window size=3
receiver sees no difference in two scenarios! incorrectly passes duplicate data as new in (a) Q: what relationship between seq # size and window size? A: W = 2k-1 Transport Layer
64
3장 트랜스포트 계층 3.1 트랜스포트 계층 서비스 3.2 다중화와 역다중화 3.3 비연결형 트랜스포트: UDP
3.4 신뢰적인 데이터 전송의 원리 3.5 연결형 트랜스포트: TCP 세그먼트 구조 신뢰적인 데이터 전송 흐름 제어 연결 관리 3.6 혼잡 제어의 원리 3.7 TCP 혼잡제어 Transport Layer
65
3.5.1 TCP 연결 RFCs: 793, 1122, 1323, 2018, 2581 점-대-점: 전이중 데이터:
한 송신자, 한 수신자 신뢰적이고, 순서적인 바이트 스트림: “메시지 경계”가 없음 파이프라인: TCP 혼잡제어와 흐름제어가 윈도우 크기를 결정 송신 버퍼와 수신버퍼 전이중 데이터: 한 연결에 양방향 데이터 흐름 MSS: maximum segment size 최대 세그먼트 크기 연결형: 핸드셰이킹 (제어 메시지의 교환)이 데이터 교환전에 송신자와 수신자의 상태(state)를 초기화 흐름제어: 송신자는 수신자의 능력을 초과하지 않음 Transport Layer
66
3.5.2 TCP 세그먼트 구조 근원지 포트 # 목적지 포트 # 응용 데이터 (가변길이) 순서번호 확인응답번호
32 bits 응용 데이터 (가변길이) 순서번호 확인응답번호 수신윈도우 긴급데이터 포인터 검사합 F S R P A U 헤더 길이 not used 옵션 (가변 길이) 데이터의 바이트로 계산 (세그먼트가 아님!) URG: 긴급데이터 (통상 사용안함) ACK: ACK #의 유효함을 표시 PSH: push 데이터 있음 표시(통상 사용안함) 수신자가 수신할 바이트 번호 RST, SYN, FIN: 연결설정에 사용 (설정, 해지 명령) 인터넷 검사합 (UDP와 같음) Transport Layer
67
TCP 순서번호와 확인응답번호 순서번호: 세그먼트 테이터의 첫번째 바이트의 바이트 스트림 “번호” 확인응답번호:
상태편으로 부터 예상되는 다음 바이트의 순서번호 누적확인응답 Q: 수신자는 순서가 바뀐 세그먼트를 어떻게 처리하나? A: TCP 명세서는 언급없음, - 구현자에게 달림 호스트 A 호스트 B 사용자가 ‘C’를 치면 Seq=42, ACK=79, data = ‘C’ 호스틈는 ‘C’를 확인 응답. ‘c’를 에코 Seq=79, ACK=43, data = ‘C’ 호스트는 ‘C’의 에코를 확인응답 Seq=43, ACK=80 time 간단한 텔넷 시나리오 Transport Layer
68
3.5.3 TCP 왕복시간(Round Trip Time, RTT) 와 타임아웃(1)
Q: 어떻게 TCP 타임아웃 값을 정하나? RTT값보다는 크다 그러나 RTT 가 변한다. 너무 짧으면: 성급한 타임아웃 불필요한 재전송 너무 길면: 세그먼트 손실에 대하여 늦게 대처 Q: RTT값을 어떻게 추정하나? SampleRTT: 세그먼트 전송후 ACK 될때까지의 시간을 측정 재전송은 무시 SampleRTT 는 네트워크 부하에 따라 매 세그먼트마다 변하므로, 예측 RTT 값이 “완만하길” 원한다. 현재 SampleRTT 값만으로 정하지 않고, 최근 몇 측정을 평균낸다. Transport Layer
69
TCP RTT와 타임아웃(2) EstimatedRTT = (1- )*EstimatedRTT + *SampleRTT
지수적 가중 (변동) 평균(Exponential weighted moving average, EWMA) 과거 샘플값은 지수적으로 빠르게 감소 전형적인 값: = 0.125 Timeout = β*EstiamatedRTT β = 2 타이머 백어프 – 타이머가 만료되고 재전송마다 타이머 증가 New_Timeout = γ * timeout γ =2 Transport Layer
70
RTT 추정 예: Transport Layer
71
TimeoutInterval = EstimatedRTT + 4*DevRTT
TCP RTT와 타임아웃(3) 타임아웃값 설정 EstimtedRTT 에다가 “안전 여유분”을 더함 EstimatedRTT의 변동이 크면 -> 큰 안전 여유분이 필요 먼저 얼마나 SampleRTT가 EstimatedRTT에서 분산되는가: DevRTT = (1-)*DevRTT + *|SampleRTT-EstimatedRTT| (전형적으로, = 0.25) 그리고나서 타임아웃 간격을 설정: TimeoutInterval = EstimatedRTT + 4*DevRTT Transport Layer
72
칸 알고리즘 정확한 RTT 계산의 문제 - 재전송될 경우 오리지날 세그먼트의 응답인지 재전송의 응답인지가 모호 칸의 알고리즘
Transport Layer
73
3장 트랜스포트 계층 3.1 트랜스포트 계층 서비스 3.2 다중화와 역다중화 3.3 비연결형 트랜스포트: UDP
3.4 신뢰적인 데이터 전송의 원리 3.5 연결형 트랜스포트: TCP 세그먼트 구조 신뢰적인 데이터 전송 흐름 제어 연결 관리 3.6 혼잡 제어의 원리 3.7 TCP 혼잡제어 Transport Layer
74
3.5.4 TCP 신뢰적인 데이터 전송 TCP는 IP의 비신뢰적인 서비스 위에 신뢰적인 서비스를 만든다. 파이프라인된 세그먼트
누적확인응답 TCP는 하나의 재전송 타이머를 사용한다. 재전송은 다음에 의해 야기된다: 타임아웃발생 중복 ACK 발생 일단 단순화단 TCP를 고려한다.: 중복 ACK 없고 흐름제어, 혼잡제어 없음 Transport Layer
75
TCP 송신측 사건: 응용으로부터 데이터를 수신: 순서번호를 갖는 세그먼트 생성
순서번호는 세그먼트의 첫번째 데이터 바이트의 바이트 스트림 번호 이미 동작하고 있지 않다면 타이머를 시작 타이머종료 간격: TimeOutInterval 타임아웃: 타임아웃을 야기시킨 세그먼트를 재전송 타이머 재가동 Ack 수신: 만약 전에 확인 응답되지 않은 세그먼트들이 확인응답되면 어디까지 확인 응답 되었는지를 갱신 다른 확인응답안된 세그먼트가 있으면 타이머 개동 Transport Layer
76
TCP sender (단순버전) Comment: SendBase-1: last cumulatively ack’ed byte
NextSeqNum = InitialSeqNum SendBase = InitialSeqNum loop (forever) { switch(event) event: data received from application above create TCP segment with sequence number NextSeqNum if (timer currently not running) start timer pass segment to IP NextSeqNum = NextSeqNum + length(data) event: timer timeout retransmit not-yet-acknowledged segment with smallest sequence number event: ACK received, with ACK field value of y if (y > SendBase) { SendBase = y if (there are currently not-yet-acknowledged segments) } } /* end of loop forever */ TCP sender (단순버전) Comment: SendBase-1: last cumulatively ack’ed byte Example: SendBase-1 = 71; y= 73, so the rcvr wants 73+ ; y > SendBase, so that new data is acked Transport Layer
77
TCP: 재전송 시나리오(1) X loss premature timeout time time lost ACK scenario
Host A Seq=92, 8 bytes data ACK=100 loss timeout lost ACK scenario Host B X time Host A Host B Seq=92 timeout Seq=92, 8 bytes data Seq=100, 20 bytes data ACK=100 ACK=120 Sendbase = 100 Seq=92, 8 bytes data SendBase = 120 Seq=92 timeout ACK=120 SendBase = 100 SendBase = 120 premature timeout time Transport Layer
78
Cumulative ACK scenario
TCP: 재전송 시나리오(2) Host A Seq=92, 8 bytes data ACK=100 loss timeout Cumulative ACK scenario Host B X Seq=100, 20 bytes data ACK=120 time SendBase = 120 Transport Layer
79
TCP ACK 생성 [RFC 1122, RFC 2581] 수신자에서의 사건 TCP 수신자 동작 예상 순서번호의 순서에 맞는
세그먼트 도착. 예상 순서번호 까지의 모든 데이터 모두 이미 확인응답 세그먼트 도착. 다른 순서에 맞는 ACK전송 기다리는 세그먼트 예상 순서번호 보다 큰, 순서 바뀐 세그먼트 도착. 간격 발견 수신데이터에서 부분적으로 또는 완전히 간격채우는 세그먼트 도착 TCP 수신자 동작 ACK를 지연. 다음 세그먼트를 500ms 까지 기다림. 안 오면 ACK전송 즉시 단일 누적ACK 송신함으로 두 세그먼트를 확인응답 다음 기다리는 바이트의 순서번호를 나타내는 중복 ACK를 즉시 송신 간격의 작은 쪽에서 시작하도록 하는 ACK를 송신 Transport Layer
80
TCP ACK생성 500ms 간격 = [20,29] Seq=10, 10 bytes data ACK=20
Transport Layer
81
빠른 재전송 타임 아웃 주기가 때때로 비교적 길다: 중복 ACK를 통해 손실 세그멘트를 검출.
손신 페킷을 재전송 하기전에 긴 지연 중복 ACK를 통해 손실 세그멘트를 검출. 송신자는 종종 세그먼트를 줄줄이 송신 만약 세그먼트가 손실되면, 많은 중복 ACK가 예상. 만약 송신자가 같은 데이터에 대하여 세개의 ACK를 수신하면, 전의 ACK된 데이터 이후가 손실되었다고 가정 : 빠른 재전송: 타이머 종료전 세그먼트를 재전송 Transport Layer
82
빠른 재전송 알고리즘: if (y > SendBase) { SendBase = y
event: ACK received, with ACK field value of y if (y > SendBase) { SendBase = y if (there are currently not-yet-acknowledged segments) start timer } else { increment count of dup ACKs received for y if (count of dup ACKs received for y = 3) { resend segment with sequence number y a duplicate ACK for already ACKed segment fast retransmit Transport Layer
83
3장 트랜스포트 계층 3.1 트랜스포트 계층 서비스 3.2 다중화와 역다중화 3.3 비연결형 트랜스포트: UDP
3.4 신뢰적인 데이터 전송의 원리 3.5 연결형 트랜스포트: TCP 세그먼트 구조 신뢰적인 데이터 전송 흐름 제어 연결 관리 3.6 혼잡 제어의 원리 3.7 TCP 혼잡제어 Transport Layer
84
송신자는 수신자의 버퍼를 너무 많이나 너무 빨리 보내서 넘치는 일이 없도록 한다.
3.5.5 TCP 흐름제어 flow control 송신자는 수신자의 버퍼를 너무 많이나 너무 빨리 보내서 넘치는 일이 없도록 한다. TCP 연결의 수신측은 수신 버퍼를 갖는다: 속도-마춤 서비스: 송신 속도를 수신 응용의 처리 속도에 마춤 응용 처리가 버퍼에서 읽는데 늦을 수 있다. Transport Layer
85
TCP 흐름제어: 동작 수신자는 세그먼트내의 RcvWindow 값으로 여유공간을 알린다.
송시자는 ACK되지 않은 데이터를 RcvWindow로 제한 수신자 버퍼가 오버플로우 되지 않게 보장 (TCP수신자가 순서바뀐 세그먼트를 버린다고 가정) 버퍼에 여유공간 = RcvWindow = RcvBuffer-[LastByteRcvd - LastByteRead] Transport Layer
86
Silly Window Syndrome 초기 TCP 구현에서, 각 확인 응답이 사용 가능한 작은 공간을 알리고, 각 세그먼트를 작은 양의 데이터만을 운송하는 silly window syndrome의 문제를 보여준다. 지연 ACK Transport Layer
87
수신측 실리윈도우 회피: 0 윈도우 알림후에 갱신된 윈도우 알림을 보내기전에, 이용 가능한 버퍼 공간이 전체 버퍼 크기의 최소 50%가 되거나 최대 크기 세그먼트(maximum segment size, mss)와 동일하게 될때 까지 기다린다. Transport Layer
88
송신측 실리 윈도우 회피 클럼핑(Clumping) Self clocking Nagle algorithm
송신하는 응용이 전에 데이타들이 송신되었던 연결상에서 송신되었으나 확인응답이 안된 추가적 데이터를 생성하면, 새로운 데이터를 일반적으로 사용하는 출력버퍼에 놓고 최대 크기 세그먼트로 찰때까지 추가적 세그먼트를 전송하지 않는다. 만약 확인응답이 도착할때에도 아직 송신을 기다린다면 버퍼에 누적된 모든 데이터를 전송한다. 사용자가 푸쉬동작을 요구할때조차도 이 규칙을 적용한다. Transport Layer
89
3장 트랜스포트 계층 3.1 트랜스포트 계층 서비스 3.2 다중화와 역다중화 3.3 비연결형 트랜스포트: UDP
3.4 신뢰적인 데이터 전송의 원리 3.5 연결형 트랜스포트: TCP 세그먼트 구조 신뢰적인 데이터 전송 흐름 제어 연결 관리 3.6 혼잡 제어의 원리 3.7 TCP 혼잡제어 Transport Layer
90
3.5.6 TCP 연결관리 기억사항: TCP 송신자와 수신자는 데이터 세그먼트 교환전에 “연결”을 설정한다.
순서번호 버퍼, 흐름제어 정보 (예. RcvWindow) 클라이언트: 연결 야기자 Socket clientSocket = new Socket("hostname","port number"); 서버: 클라이언트에 의해 야기 Socket connectionSocket = welcomeSocket.accept(); Transport Layer
91
세방향 핸드셰이크 1 단계: 클라이언트 호스트가 TCP SYN 세그먼트를 서버로 송신 초기 순서번호 명시 데이터 없음
client 1 단계: 클라이언트 호스트가 TCP SYN 세그먼트를 서버로 송신 초기 순서번호 명시 데이터 없음 2 단계: 서버 호스트 SYN 세그먼트 수신하고, SYNACK 세그먼트로 응답 서버 버퍼를 할당 서버의 초기 순서번호 명시 3단계: 송시자는 SYNACK 세그먼트 수신하고, ACK세그먼트로 응답하되, 데이터를 포함시킬수 있다. server 연결요청 SYN=1, seq=100 연결 허락 SYN=1, seq=200, ack=101 ACK SYN=0, seq=101, ack=201 (데이터) Transport Layer
92
TCP 연결종료 (1) 연결 종료: 1 단계: 클라이언트 종단 시스템은 TCP FIN 제어 세그먼트를 서버에게 송신
client closes socket: clientSocket.close(); 1 단계: 클라이언트 종단 시스템은 TCP FIN 제어 세그먼트를 서버에게 송신 2 단계: 서버 FIN 을 수신하면, ACK를 응답하고 수신쪽 연결을 종료. FIN를 송신. client FIN server ACK close closed timed wait Transport Layer
93
TCP 연결 종료 (2) 3 단계: client FIN을 수신하면, ACK로 응답.
“timed wait” 상태로 전이 – 수신된 FIN에 대해 ACK로 응답 4 단계: 서버, ACK 수신. 송신쪽 연결 종료. 주: 약간의 수정으로 동시에 FIN 을 처리할수 있다. client server closing FIN ACK closing FIN ACK timed wait closed closed Transport Layer
94
TCP Connection Management (cont)
TCP server lifecycle TCP client lifecycle Transport Layer
95
3장 트랜스포트 계층 3.1 트랜스포트 계층 서비스 3.2 다중화와 역다중화 3.3 비연결형 트랜스포트: UDP
3.4 신뢰적인 데이터 전송의 원리 3.5 연결형 트랜스포트: TCP 세그먼트 구조 신뢰적인 데이터 전송 흐름 제어 연결 관리 3.6 혼잡 제어의 원리 3.7 TCP 혼잡제어 Transport Layer
96
혼잡제어의 원리 혼잡(Congestion):
: “과다한 근원지가 과다한 데이터를 너무 빨리 송신하여 네트워크가 처리하기에 무리” 흐름제어와는 다름l! 현상: 패킷 손실 (라우터 들에서 버퍼 오버플로우) 긴 지연 (라우터 버퍼에서의 규잉지연) 중요한 문제! Transport Layer
97
3.6.1 혼잡의 원인과 그 비용: 시나리오 1 두 송신자, 두 수신자 하나의 라우터, 무한 버퍼 재전송 없음
무한 공유 출력 링크 버퍼 Host A lin : original data Host B lout 두 송신자, 두 수신자 하나의 라우터, 무한 버퍼 재전송 없음 C: 출력링크용량 혼잡시 긴 지연 최대 가능 처리율 λin→C/2, 지연 →∞ Transport Layer
98
3.6.1 혼잡의 원인과 그 비용: 시나리오 2 하나의 라우터, 유한 버퍼 송신자는 손실 패켓에 대하여 재전송 Host A
lout lin : original data l'in : original data, plus retransmitted data Host B 유한 공유 출력 링크 버퍼 Transport Layer
99
3.6.1 혼잡의 원인과 그 비용: 시나리오 2 l l l l > always: (goodput) =
in out = always: (goodput) “perfect” retransmission only when loss: retransmission of delayed (not lost) packet makes larger (than perfect case) for same l in out > l in l out R/2 lin lout b. a. c. R/4 R/3 “costs” of congestion: more work (retrans) for given “goodput” unneeded retransmissions: link carries multiple copies of pkt Transport Layer
100
혼자 원인과 비용: 시나리오 3 l l Q: what happens as and increase ? four senders
multihop paths timeout/retransmit l in Q: what happens as and increase ? l in Host A lout lin : original data l'in : original data, plus retransmitted data finite shared output link buffers Host B Transport Layer
101
혼잡 원인과 비용: 시나리오 3 Another “cost” of congestion:
Host A lout Host B Another “cost” of congestion: when packet dropped, any “upstream transmission capacity used for that packet was wasted! Transport Layer
102
혼잡 제어 방법 End-end congestion control:
no explicit feedback from network congestion inferred from end-system observed loss, delay approach taken by TCP Network-assisted congestion control: routers provide feedback to end systems single bit indicating congestion (SNA, DECbit, TCP/IP ECN, ATM) explicit rate sender should send at Transport Layer
103
사례연구: ATM ABR 혼잡 제어 ABR: available bit rate:
“elastic service” if sender’s path “underloaded”: sender should use available bandwidth if sender’s path congested: sender throttled to minimum guaranteed rate RM (resource management) cells: sent by sender, interspersed with data cells bits in RM cell set by switches (“network-assisted”) NI bit: no increase in rate (mild congestion) CI bit: congestion indication RM cells returned to sender by receiver, with bits intact Transport Layer
104
사례연구: ATM ABR 혼잡제어 two-byte ER (explicit rate) field in RM cell
congested switch may lower ER value in cell sender’ send rate thus minimum supportable rate on path EFCI bit in data cells: set to 1 in congested switch if data cell preceding RM cell has EFCI set, sender sets CI bit in returned RM cell Transport Layer
105
3장 트랜스포트 계층 3.1 트랜스포트 계층 서비스 3.2 다중화와 역다중화 3.3 비연결형 트랜스포트: UDP
3.4 신뢰적인 데이터 전송의 원리 3.5 연결형 트랜스포트: TCP 세그먼트 구조 신뢰적인 데이터 전송 흐름 제어 연결 관리 3.6 혼잡 제어의 원리 3.7 TCP 혼잡제어 Transport Layer
106
TCP 혼잡 제어 end-end control (no network assistance)
sender limits transmission: LastByteSent-LastByteAcked CongWin Roughly, CongWin is dynamic, function of perceived network congestion How does sender perceive congestion? loss event = timeout or 3 duplicate acks TCP sender reduces rate (CongWin) after loss event three mechanisms: AIMD slow start conservative after timeout events rate = CongWin RTT Bytes/sec Transport Layer
107
TCP AIMD multiplicative decrease: cut CongWin in half after loss event
additive increase: increase CongWin by 1 MSS every RTT in the absence of loss events: probing Long-lived TCP connection Transport Layer
108
TCP 슬로우 스타트 When connection begins, increase rate exponentially fast until first loss event When connection begins, CongWin = 1 MSS Example: MSS = 500 bytes & RTT = 200 msec initial rate = 20 kbps available bandwidth may be >> MSS/RTT desirable to quickly ramp up to respectable rate Transport Layer
109
TCP 슬로우 스타트 (계속) When connection begins, increase rate exponentially until first loss event: double CongWin every RTT done by incrementing CongWin for every ACK received Summary: initial rate is slow but ramps up exponentially fast Host A Host B one segment RTT two segments four segments time Transport Layer
110
개선 Philosophy: 3 dup ACKs indicates network capable of delivering some segments timeout before 3 dup ACKs is “more alarming” After 3 dup ACKs: CongWin is cut in half window then grows linearly But after timeout event: CongWin instead set to 1 MSS; window then grows exponentially to a threshold, then grows linearly Transport Layer
111
개선 (계속) Implementation:
Q: When should the exponential increase switch to linear? A: When CongWin gets to 1/2 of its value before timeout. Implementation: Variable Threshold At loss event, Threshold is set to 1/2 of CongWin just before loss event Transport Layer
112
요약: TCP 혼잡 제어 When CongWin is below Threshold, sender in slow-start phase, window grows exponentially. When CongWin is above Threshold, sender is in congestion-avoidance phase, window grows linearly. When a triple duplicate ACK occurs, Threshold set to CongWin/2 and CongWin set to Threshold. When timeout occurs, Threshold set to CongWin/2 and CongWin is set to 1 MSS. Transport Layer
113
TCP 송신자 혼잡 제어 Event State TCP Sender Action Commentary
ACK receipt for previously unacked data Slow Start (SS) CongWin = CongWin + MSS, If (CongWin > Threshold) set state to “Congestion Avoidance” Resulting in a doubling of CongWin every RTT Congestion Avoidance (CA) CongWin = CongWin+MSS * (MSS/CongWin) Additive increase, resulting in increase of CongWin by 1 MSS every RTT Loss event detected by triple duplicate ACK SS or CA Threshold = CongWin/2, CongWin = Threshold, Set state to “Congestion Avoidance” Fast recovery, implementing multiplicative decrease. CongWin will not drop below 1 MSS. Timeout CongWin = 1 MSS, Set state to “Slow Start” Enter slow start Duplicate ACK Increment duplicate ACK count for segment being acked CongWin and Threshold not changed Transport Layer
114
TCP 처리율 What’s the average throughout ot TCP as a function of window size and RTT? Ignore slow start Let W be the window size when loss occurs. When window is W, throughput is W/RTT Just after loss, window drops to W/2, throughput to W/2RTT. Average throughout: .75 W/RTT Transport Layer
115
TCP 미래 Example: 1500 byte segments, 100ms RTT, want 10 Gbps throughput
Requires window size W = 83,333 in-flight segments Throughput in terms of loss rate: ➜ L = 2· Wow New versions of TCP for high-speed needed! Transport Layer
116
TCP 공정성 공정성 목표: if K TCP sessions share same bottleneck link of bandwidth R, each should have average rate of R/K TCP connection 1 bottleneck router capacity R TCP connection 2 Transport Layer
117
TCP가 공정한 이유? Two competing sessions:
Additive increase gives slope of 1, as throughout increases multiplicative decrease decreases throughput proportionally R equal bandwidth share loss: decrease window by factor of 2 congestion avoidance: additive increase Connection 2 throughput loss: decrease window by factor of 2 congestion avoidance: additive increase Connection 1 throughput R Transport Layer
118
공정성 (계속) Fairness and parallel TCP connections Fairness and UDP
nothing prevents app from opening parallel cnctions between 2 hosts. Web browsers do this Example: link of rate R supporting 9 cnctions; new app asks for 1 TCP, gets rate R/10 new app asks for 11 TCPs, gets R/2 ! Fairness and UDP Multimedia apps often do not use TCP do not want rate throttled by congestion control Instead use UDP: pump audio/video at constant rate, tolerate packet loss Research area: TCP friendly Transport Layer
119
지연 모델링 Notation, assumptions:
Assume one link between client and server of rate R S: MSS (bits) O: object size (bits) no retransmissions (no loss, no corruption) Window size: First assume: fixed congestion window, W segments Then dynamic window, modeling slow start Q: How long does it take to receive an object from a Web server after sending a request? Ignoring congestion, delay is influenced by: TCP connection establishment data transmission delay slow start Transport Layer
120
고정 혼잡 윈도우(1) First case: WS/R > RTT + S/R: ACK for first segment in window returns before window’s worth of data sent delay = 2RTT + O/R Transport Layer
121
고정 혼잡 윈도우(2) Second case:
WS/R < RTT + S/R: wait for ACK after sending window’s worth of data sent delay = 2RTT + O/R + (K-1)[S/R + RTT - WS/R] Transport Layer
122
TCP 지연 모델링: 슬로우 스타트 (1) Now suppose window grows according to slow start Will show that the delay for one object is: where P is the number of times TCP idles at server: - where Q is the number of times the server idles if the object were of infinite size. - and K is the number of windows that cover the object. Transport Layer
123
TCP 지연 모델링: 슬로우 스타트 (2) Delay components:
2 RTT for connection estab and request O/R to transmit object time server idles due to slow start Server idles: P = min{K-1,Q} times Example: O/S = 15 segments K = 4 windows Q = 2 P = min{K-1,Q} = 2 Server idles P=2 times Transport Layer
124
TCP 지연 모델링 (3) Transport Layer
125
TCP 지연 모델링 (4) Recall K = number of windows that cover object
How do we calculate K ? Calculation of Q, number of idles for infinite-size object, is similar (see HW). Transport Layer
126
HTTP 모델링 Assume Web page consists of:
1 base HTML page (of size O bits) M images (each of size O bits) Non-persistent HTTP: M+1 TCP connections in series Response time = (M+1)O/R + (M+1)2RTT + sum of idle times Persistent HTTP: 2 RTT to request and receive base HTML file 1 RTT to request and receive M images Response time = (M+1)O/R + 3RTT + sum of idle times Non-persistent HTTP with X parallel connections Suppose M/X integer. 1 TCP connection for base file M/X sets of parallel connections for images. Response time = (M+1)O/R + (M/X + 1)2RTT + sum of idle times Transport Layer
127
HTTP 응답 시간 (단위: 초) RTT = 100 msec, O = 5 Kbytes, M=10 and X=5
For low bandwidth, connection & response time dominated by transmission time. Persistent connections only give minor improvement over parallel connections. Transport Layer
128
HTTP 응답 시간 (단위: 초) RTT =1 sec, O = 5 Kbytes, M=10 and X=5
For larger RTT, response time dominated by TCP establishment & slow start delays. Persistent connections now give important improvement: particularly in high delaybandwidth networks. Transport Layer
129
3장 : 요약 principles behind transport layer services:
multiplexing, demultiplexing reliable data transfer flow control congestion control instantiation and implementation in the Internet UDP TCP Next: leaving the network “edge” (application, transport layers) into the network “core” Transport Layer
Similar presentations