3 장 Transport Layer 1 3 장 Transport Layer 이장의목적 Transport layer의배경과원리이해 multiplexing/demultiplexing 신뢰적인 data transfer flow control congestion control 인터넷 transport layer 이해 UDP : connectionless transport TCP : connection oriented transport TCP congestion control 2
3 장 Transport Layer 3.1 Transport Layer 서비스개요 3.2 다중화와역다중화 3.5 Connection oriented transport : TCP segment structure reliable data transfer flow control connection control 3.3 Connectionless transport : UDP 3.6 혼잡제어의원리 3.4 신뢰적 data 전송의원리 3.7 TCP 의혼잡제어 3 Transport services and protocol 서로다른 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 4
Transport vs Network layer network layer : host 간에 logical communication을제공 transport layer : process간에 logical communication을제공 Network layer가제공하지못하는신뢰적인전송을제공할수있다. 그러나 network layer의제약을받는경우도있다. : 지연이나대역폭에대한보장은불가능하다. 5 인터넷에서 trans-layer 의개요 신뢰적인연결지향서비스 (TCP) 혼잡제어 흐름제어 연결지향 비신뢰적인비연결지향서비스 (UDP) best-effort delivery service : IP : data 전달에최선을다하지만어떠한보장도하지않는다. 보장하지않는것 최대지연시간 전달대역폭 6
3 장 Transport Layer 3.1 Transport Layer 서비스개요 3.2 다중화와역다중화 3.5 Connection oriented transport : TCP segment structure reliable data transfer flow control connection control 3.3 Connectionless transport : UDP 3.6 혼잡제어의원리 3.4 신뢰적 data 전송의원리 3.7 TCP 의혼잡제어 7 Multiplexing/demultiplexing Demultiplexing at rcv host segment 의 data 를올바른 socket 으로전달하는작업 = process Multiplexing at send host socket 들로부터 data 를모으고각 data 의 header 정보로캡슐화하고하위 layer 로전달하는작업 = socket 8
Transport layer 에서 demultiplexing Transport layer에서 demultiplexing을위한요구사항 각 socket은유일한식별자를갖는다. 각 segement는 segment가전달될적절한 socket을가르키는특별한 field를갖는다. 이들특별한 field는 source와 destination의 port 번호이다. (0~1023 까지의 port를 wellknow port라고한다.: RFC 1700 에명시되어있다.) Segment가 host에도착하면 T/L는 segment안에목적지의 port # 를검사하고이에상응하는 socket으로 data 를전달한다. 32 bits source port # dest port # 기타 header fields application Data (message) UDP/TCP segment format port# : 0 ~ 65534 9 Connectionless demultiplexing 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에전달된다. 10
Connectionless demultiplexing DatagramSocket serversocket = new DatagramSocket(6428); 11 Connection oriented demux TCP socket는 4개의 tuple로구성된집합에의해식별된다. source IP source port # dest IP dest port # Host 에 segment 가도착하면 host 는적절한 socket 으로 segment 를전달하기위해네개의값을모두사용한다. Server host는동시에여러개의 TCP socket을지원한다. 각 socket들은앞에본 4개의 tuple에의해구별된다. Web server는각각의 client의접속에대해서로다른 socket을이용한다. non-persistent HTTP의경우모든요청마다다른 socket을이용한다. 각각의 object마다새로운 TCP connection을이용한다. 12
Connection oriented demux 13 Connect oriented demux Thread Web server 14
3 장 Transport Layer 3.1 Transport Layer 서비스개요 3.2 다중화와역다중화 3.5 Connection oriented transport : TCP segment structure reliable data transfer flow control connection control 3.3 Connectionless transport : UDP 3.6 혼잡제어의원리 3.4 신뢰적 data 전송의원리 3.7 TCP 의혼잡제어 15 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) 16
UDP often used for streaming multimedia apps 손실허용 Rate sensitive UDP 를사용하는 app DNS SNMP app가신뢰성을제공한다면 UDP 상에서도신뢰성있는통신이가능하다. app이신뢰성있는통신을위해확인응답이나재전송등의기능을제공해야한다. 32 bits source port # dest port # 길이검사합 application Data (message) UDP/TCP segment format 17 UDP checksum 목적 : 전송된 segment 에 errors 를검출한다. 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를처리하는방법이다름. 과정은다르지만판단결과는동일 ) 18
Internet checksum Example : 두개의 16bit integers 19 3 장 Transport Layer 3.1 Transport Layer 서비스개요 3.2 다중화와역다중화 3.5 Connection oriented transport : TCP segment structure reliable data transfer flow control connection control 3.3 Connectionless transport : UDP 3.6 혼잡제어의원리 3.4 신뢰적 data 전송의원리 3.7 TCP 의혼잡제어 20
신뢰적인 data 전송의원리 T/L 뿐아니라 A/L, L/L에서도매우중요한문제이다. 매우중요한 topics 하위계층이비신뢰적인채널인경우상위채널에서신뢰적인통신을제공해야한다. 21 신뢰적 Data transfer rdt_send() : 하위 rdt에 Data를전달하기위해 app가호출 deliver_data() : rdt가상위 layer에 Data를전달하기위해호출 udt_send() : 비신뢰적인하위채널에 Data를전달하기위해 rdt가호출 rdt_rcv() : 상위 rdt에 Data를전달하기위해호출 22
신뢰적 Data transfer 앞으로의전개 점점복잡해지는하위채널을고려신뢰적 data 전송 protocol의송신자측면과수신자측면을전개 단방향전송만을고려 : 이경우에도제어패킷은양방향전송이필요 FSM으로표현 참고 : datagram 이라는용어보다는일반적인 packet 이라는용어를사용한다. 23 rdt 1.0 : 신뢰적인채널에서 rdt 하위채널이완전히신뢰적인경우 no bit error no loss of packets FSM 송신측은상위 layer의 data를받아하위채널로 packet을전달한다. 수신측은하위채널에서 packet을수신하고 data를상위 layer로전달한다. 24
rdt 2.0 : 비트오류가있는채널 bit error이가능한채널에서 rdt : packet의손실이나순서는보장 checksum을통해 bit error감지 수신측의 feedback 필요 acknowledgement (ACKs) : sender가receiver에게pkt를잘받았다는응답 negative acknowledgement (NAKs) : sender가 receiver에게 pkt에 error또는장애가있다는응답 sender는nak인경우pkt 재전송 rdt 2.0에부가적으로필요한 protocol (rdt 1.0에비해서 ) error 검출 receiver feedback : 제어 msg (ACK,NAK) 재전송 25 rdt 2.0 : FSM 26
rdt 2.0 : rcvpkt OK 27 rdt 2.0 : rcvpkt error 28
rdt 2.0 : 치명적인결함 ACK/NAK 가회손되는경우 중복을제어하는방법 sender는 receiver쪽에어떤일이벌어졌는지알수없다. 재전송으로 packet이중복될수있다. sender는 pkt에 sequence number를추가한다. ACK나 NAK가변형되면 sender 는 pkt를재전송한다. receiver는중복된 pkt을버린다. rdt 2.1 stop and wait Sender는 pkt 하나를전송한후 receiver 로부터 response가올때까지대기한다. -> response가없으면계속기다린다. 29 rdt 2.1 : sender 30
rdt 2.1 : receiver 31 rdt 2.1 Sender pkt에 seq # 를추가한다. 두개의 seq # 만으로충분하다. ( 이전송신된 pkt와의중복만을검사함으로..) ACK/NAK의손상을검사한다. 상태가 rdt 2.0보다두배많다. 현재전송 pkt 의 seq # 가 0 인지 1 인지기억하고있어야한다. receiver 수신된 pkt의중복여부를검사해야한다. pkt의 seq # 가 0/1인지검사한다. receiver 는 sender 가 ACK/NAK 를정상적으로수신했는지알수없다. 32
rdt 2.2 : NAK 가없는 rdt rdt 2.1과의차이는 ACKs만을사용하는것이다. receiver는 NAK 대신최근에정확히수신된 pkt에대한 ACK를전달한다. Sender는중복된 ACK를통해서중복된 ACK pkt이후에전송한 pkt이정상적으로수신되지못했음을안다. ACK 의누적 누적된 ACK를사용하는경우 sender는마지막수신한 ACK의 seq # 이전의 pkt는모두정상잔달되었음을확인할수있다. 33 rdt 2.2 : NAK 가없는 rdt 34
rdt 3.0 : 채널에 error 나 loss 가가능 새로운가정 하위채널에 packet loss가일어날수있는경우 (data& ACKs) checksum, seq #, ACKs만으로는충분하지않다. 새로운접근방식 sender는합리적인시간만큼 ack를기다린다. 합리적인시간만큼기다려도 ACK 가없으면재전송한다. 만일 ACK가지연된것이라면 중복을유발하는재전송이일어난다. 이미중복처리에대한준비가되어있다. receiver는중복된 pkt에대한 ACK를재전송한다. 이러한작업은실제로문제를일으키지는않는다. 위의구현을위해 countdown timer를필요로한다. 35 rdt 3.0 : sender 36
rdt 3.0 in action 37 rdt 3.0 in action 재전송 무시 38
rdt 3.0 의성능 39 rdt 3.0 : stop and - wait 40
Pipelined protocol Pipelining : sender에게 ACK를기다리지않고여러개의 pkt를전송하도록하용하는것 seq # 의범위는증가되어야한다. sender와 receiver는하나이상의 pkt를 buffering해야한다. piplining protocol : go-back-n, selective repeat 41 Pipelining : 성능의향상 42
Go-Back-N sender pkt hrader에 k-bit seq # 를갖는다. window : 전송되었지만확인안된 pkt를위해허용할수있는 seq # 의범위 send_base nextseqnum 전송후응담확인 pkt 전송대기 전송후응담확인안됨 사용불가 window size ACK(n) : seq # n을가진 ACK를 cumulative ACK로인식한다. 수신측에서보면 n을포함한 n까지의모든 pkt에대한 ACK이다. 가장오래된수신확인안된 timer를단일 timer로사용한다. Timeout 발생시 : 송신되었으나 ACK가없는모든 pkt를재전송한다. (window내에전송된모든 pkt) 43 GBN : sender FSM 44
GBN : receiver FSM ACK만사용 : pkt가수신될때마다항상현재까지수신된가장높은 seq# 를가진 pkt에대한 ACK를전송한다. 중복된 ACK가발생할수있다. 단지 expectedseqnum만을유지한다. : 현재까지수신된 pkt의 seq# 의다음 seq# 순서가잘못수신된 pkt의처리 걍버린다. : 순서가잘못된 pkt에대해서 buffering 할필요가없다. 현재까지수신된가장큰 seq# 에대한 ACK를재전송한다. 45 GBN in action 재전송 버린다 46
Selective Repeat receiver 가수신한 pkt 에대한개별적인 ACK 가요구된다. 순서가틀린 pkt들은하위 seq# 를가진 pkt가수신될때까지 buffering되었다가 seq# 순서대로상위 layer에전달된다. sender는 ACK가없는 pkt에대해서만재전송한다. sender 의 timer 는 ACK 가없는각각의 pkt 에대해서유지된다. sender 의 window send_base pkt에대한 ACK를받아야이동한다. : GBN에서는누적된 ACK를이용함으로 send_base pkt에대한 ACK가없어도이동가능하다. 47 Selective repeat : sender receiver windows send_base nextseqnum 전송후응담확인 pkt 전송대기 전송후응담확인안됨 사용불가 window size 순서가바뀌어서들어온 pkt 받을수있는 pkt 손실된 pkt 사용불가 window size 48
Selective repeat sender receiver 상위 layer 에서 Data 가수신되면 pkt의다음 seq# 를검사 window내에있으면 pkt를전송한다. timeout(n) pkt n을재전송하고 timer를 restart한다. ACK(n) 이수신 n이윈도우에있다면 pkt가수신된것을확인한다. n이 send_base와같다면 send_base는가장작은seq# 를갖는미확인 pkt로이동하고 window내에이전송 pkt가있으면전송한다. pkt n [n in rcvbase, rcvbase+n-1] ACK(n) 을송신 out-order인경우 buffering한다. in-ordert인경우필요하다면 buffer에저장된번호가연속적인 pkt와함께상위 layer에전달하고 rcv_base를가장낮은seq# 를가진미전송 pkt로옮긴다. pkt n [n in rcvbase-n, rcvbase-1] ACK(n) 이외의경우 무시한다. 49 Selective repeat in action buffering 후 ACK window 이동 2 에대한 ACK 를받을때까지 window 를이동시키지못한다. 50
Selective repeat 의문제 Example Seq# : 0, 1, 2, 3 windows size = 3 왼쪽두개의경우모두 seq# 가 0 으로구별이불가능하다. Q; windows size와 seq# 의관계를어떻게하면이문제를해결할수있는가 windows size를 seq# 의개수의절반이하로한다. seq# 0 인 pkt 구별할수없다. seq# 0 인 pkt 51 Selective repeat 의문제 Example Seq# : 0, 1, 2, 3, 4 windows size = 3 0 1 2 3 4 0 1 2 3 0 1 2 3 4 0 1 2 3 0 1 2 3 4 0 1 2 3 0 pkt 1 pkt 2 pkt 0 1 2 3 4 0 1 2 3 0 1 2 3 4 0 1 2 3 0 1 2 3 4 0 1 2 3 0 pkt 0 1 2 3 4 0 1 2 3 0 1 2 3 4 0 1 2 3 52
Selective repeat 의문제 Example Seq# : 0, 1, 2, 3, 4 windows size = 2 0 1 2 3 4 0 1 2 3 0 1 2 3 4 0 1 2 3 0 pkt 1 pkt 0 1 2 3 4 0 1 2 3 0 1 2 3 4 0 1 2 3 0 pkt 0 1 2 3 4 0 1 2 3 0 1 2 3 4 0 1 2 3 53 3 장 Transport Layer 3.1 Transport Layer 서비스개요 3.2 다중화와역다중화 3.3 Connectionless transport : UDP 3.4 신뢰적 data 전송의원리 3.5 Connection oriented transport : TCP segment structure reliable data transfer flow control connection control 3.6 혼잡제어의원리 3.7 TCP의혼잡제어 54
TCP: overview RFCs:793, 1122, 1323, 2018, 2581 point-to-point 단일송. 수신자간에통신 신뢰적인 in-order byte stream Message에구분이없다. pipelined 혼잡제어나흐름제어를통해 window size를제어한다. 송, 수신측은 buffer를갖는다. full duplex 동일 connection에양단이동시에data를전송할수있다. MSS : maximum segment size (segment에서 app layer data 의최대크기 ) connection oriented handshake 를먼저수행한다. Flow control sender 가 receiver 를압박하지못하도록 receiver 가전송량을통제한다. 55 TCP segment 의구조 56
TCP seq# 와 ACK seq# Segment의첫번째 byte의 stream에서의 byte 순서번호 ACKs: 다음에받을첫번째 byte의순서번호 Cumulative ACK가가능하다. Q : 순서가틀린 segment를수신한경우어떻게할까?? A : RFC에서는어떤규칙도없다. 기본적으로두가지방법이있다. - 즉시버린다. - buffering한다. ( 중간에빠진 data를받기위해..) 시작 seq# 는종료된접속의남아있는 seg 와유효한 seg 와의혼동을막기위해임의로선택된다. 57 TCP : RTT(Round Trip Time) & Timeout Q : TCP의 timeout는어떻게설정할까??? RTT보다커야한다. but RTT 값은?? 너무작은경우 불필요한재전송이일어난다. 너무큰경우 Segment 손실에대한대응이늦어진다. Q : EstimatedRTT는어떻게설정할까??? SampleRTT : segment가송신된시간으로부터 ACK가도착한시간간격 재전송 segment는무시된다. EstiamteRTT는매우 smooth하게변경된다. EstiamatedRTT는 SampleRTT 의가중평균값이다. 58
TCP : RTT(Round Trip Time) & Timeout 59 RTT 추정치예제 60
TCP : RTT(Round Trip Time) & Timeout timeout 설정 EstimatedRTT보다약간의여유값을더한값으로설정 SampleRTT의변화량이큰경우는따라서커져야한다. ( 반대의경우도동일 ) DevRTT : SampleRTT가 EstimatedRTT로부터얼마나벗어나느지에대한예측 DevRTT = (1-β)* DevRTT + β* SampleRTT-EstimatedRTT (β의권장값 : 0.25) 실제 timeout 설정 TimeoutInterval = EstimatedRTT + 4*DevRTT 61 3 장 Transport Layer 3.1 Transport Layer 서비스개요 3.2 다중화와역다중화 3.5 Connection oriented transport : TCP segment structure reliable data transfer flow control connection control 3.3 Connectionless transport : UDP 3.6 혼잡제어의원리 3.4 신뢰적 data 전송의원리 3.7 TCP 의혼잡제어 62
TCP reliable data transfer TCP는비신뢰적인 IP 상위에서신뢰적인통신서비스를제공한다. Pipelined segment 누적 ACK TCP는단일재전송 timer를사용한다. 전송 segment 각각에대한 timer는개념적으로는쉽지만 overhead가크다. 재전송을일으키는이벤트 timeout 중복 ACK 간소화된 TCP sender 중목 ACK 무시 혼잡제어, 흐름제어무시 63 TCP sender event App 로부터 data 수신 : seq# 를가진 segement 생성 seq# 는첫번째바이트의바이트스트림번호이다. timer 시작 ( 다른 segment에서의해서 timer가실행중이아닐때 ) timer의만료주기 TimeoutInterval timeout : timeout을일으킨 segment를재전송 timer 재시작 ACK : ACK가확인안된 segment의 ACK인경우 ACK의 seq# 가 sendbase보다크면이전에확인응답안된 segment에대해확인하고 sendbase를갱신한다. 아직확인응답안된 segment가존재하면 timer를재시작한다. 64
TCP 의흥미로운시나리오 65 TCP 의흥미로운시나리오 66
TCP 의 ACK 생성권고 Receiver 의 event 기다리는 seq# 를가진 segment 도착. 이미기다리는 seq# 까지의모든 segment 수신 기다리는 seq# 를가진 segment 도착. 이전에수신한 seq 에대한 ACK 는아직전송전 기다리는것보다높은순서의 seq# 를가진 segment 가도착. Gap 이발견 Receiver 의동작 지연된 ACK. 다음순서의 segment 를 500ms 기다렸다가도착하지않으면 ACK 를전송한다. 하나의누적된 ACK 를전송 즉시중복된 ACK전송 ( 기다리는다음순서의 seq#) 수신 segment 의 gap 부분에해당하는 segment 도착 즉시 ACK전송 (segment가 gap의낮은쪽에서시작하도록 ) 67 빠른재전송 timeout이유발하는재전송의문제 주기가비교적길어서 segment를잃어버렸을때송신자를기다리게해서종단간의지연이증가한다. 중복된 ACK와 segment loss 수신자는기다리는것보다큰 seq# 의 segment를수신하면이를 buffering하고중복 ACK를전송한다. segment를손실하면많은중복된 ACK가전송된다. 만일 3번의중복된 ACK가 sender에게전송되면해당 segment가 loss되었다고판단한다. 이경우 timeout이전이라도해당 segment를재전송한다. -> fast retransmit Seq# 가 10, 20, 30, 40, 인경우20이loss 되면 30, 40, 50, 을보낼때마다 ACK(20) 이중복해서 sender에게전달된다. 68
빠른재전송 seq10 Sender seq20 ACK20 Recever seq30 seq40 seq50 ACK20 seq60 ACK20 seq20 ACK20 seq70 ACK30 seq80 ACK30 seq90 ACK30 seq30 ACK30 seq100 ACK100 69 Fast retransmit algorithm 70
3 장 Transport Layer 3.1 Transport Layer 서비스개요 3.2 다중화와역다중화 3.5 Connection oriented transport : TCP segment structure reliable data transfer flow control connection control 3.3 Connectionless transport : UDP 3.6 혼잡제어의원리 3.4 신뢰적 data 전송의원리 3.7 TCP 의혼잡제어 71 TCP Flow control TCP connection 에서수신측이가용한버퍼의크기를알려주어흐름을제어한다. RcvWindow flow control Sender가 receiver의 buffer가 overflow 되도록너무빠르게 data 를전송하지못하도록하는것 IP 여유공간 버퍼내 TCP data APP 흐름제어는속도를일치시키는서비스이다. Receiver쪽 app이 data를읽는속도와 sender의전송속도를일치시키는것이다. RcvBuffer App process 가수신 buffer 로부터 data 를늦게읽으면 RcvWindow 가줄어들수있다. 72
TCP Flow control IP RcvWindow 여유공간 RcvBuffer 버퍼내 TCP data APP (out-of-order segment는버린다고가정 ) segment 내에 RcvWindow size 를저장 receiver 가 sender 에게알려줌 Sender 는 RcvWindow 크기보다적은확인응답된 data 량을유지함으로써수신 buffer 에 overflow 가발생하지않았음을확신한다. 버퍼내에여유공간 = RcvWindow = RcvBuffer [LastByteRcvd LastByteRead] 73 3 장 Transport Layer 3.1 Transport Layer 서비스개요 3.2 다중화와역다중화 3.5 Connection oriented transport : TCP segment structure reliable data transfer flow control connection control 3.3 Connectionless transport : UDP 3.6 혼잡제어의원리 3.4 신뢰적 data 전송의원리 3.7 TCP 의혼잡제어 74
TCP 의 connection 관리 Recall: TCP sender 와 receiver 는 connection 을초기화한다음 data segment 을전송한다. TCP 초기화변수 Seq#, buffer, flow control 정보들 ex) RcvWindow client : connection initiator server : client의접속을승인 Three way handshake: step 1: client가 server에게 TCP SYN segment를전송 초기 seq# 설정 data는없다. step 2: server 는 SYN 를수신하고 SYNACK 를전송 server : 변수및 buffer 할당 server의초기 seq# 설정 step 3: client 는 SYNACK 수신 ACK 전송 (data 를추가해도된다.) client : 변수및 buffer 할당 75 TCP 의 connection 관리 Closing a connection: Step 1: client 는 connection 을종료하기위해 FIN bit 가 1 로설정된 TCP segment 를 server 에게전달 Step 2: server 는 FIN 을수신하면 ACK 를응답하고 connection 을종료한다는 FIN 를 client 에게전송한다. 76
TCP 의 connection 관리 Step 3: client 는 FIN 을수신하면 ACK 를응답하고일정시간을기다린후 (time wait) connection 을종료한다. Step 4: server 는 ACK 를수신하면 connection 을종료한다. Note : with small modification can handle simultaneous FINs. 77 3 장 Transport Layer 3.1 Transport Layer 서비스개요 3.2 다중화와역다중화 3.5 Connection oriented transport : TCP segment structure reliable data transfer flow control connection control 3.3 Connectionless transport : UDP 3.6 혼잡제어의원리 3.4 신뢰적 data 전송의원리 3.7 TCP 의혼잡제어 78
혼잡제어의원리 Congestion : 높은전송률로 data를전송하려는많은근원지로인한문제 flow control과는다르다. 현상 pkt의손실 (router buffer의 overflow) 지연의증가 (router buffer에서 queueing delay 증가 ) Sender에의해서조정 실제혼잡도를조사하는것은아니다 (TCP) ATM등가같이혼잡도를조사하기위해서는네트워크장치들의협조가필요함 다음과같은경우 Data 전송량을줄인다. timeout이빈번히일어날때 재전송량이많아질때 79 congestion scenario 1 두개의 sender와 reciver 무한버퍼를가진하나의라우터 재전송은없다. C/2 λ out λ in C/2 delay λ in C/2 혼잡시에매우큰지연이있다. 패킷의처리량이링크의용량에접근하게되면매우큰 queueing delay가발생한다. 80
congestion scenario 2 유한 buffer를가진라우터 손실된 pkt에대한재전송이이루어진다. 81 congestion scenario 2 손실이발생하지않는이상적인경우 : λ in = λ out ( 그림 a) 손실된 pkt만재전송하는 perfect한경우 : λ in > λ out ( 그림 b) pkt의 delay로인한불필요한재전송으로 λ in 이매우커지고 λ out 이더욱줄어든다. ( 그림 c) congestion 의 cost Buffer overflow로인해버려진 pkt에대한재전송 큰지연으로인한불필요한재전송 82
congestion scenario 3 4개의 sender 여러개의라우터와다중경로 timeout/ 재전송 Q : λ in 이나 λ in 가커지면어떤현상이일어나는가?? A : 다음장의도표를참고 83 congestion scenario 3 C/2 λ out λ in congestion의또하나의 cost 혼잡으로인해 pkt가경로상에서버려질때버려지는지점까지 pkt를전송하는데사용된 router의전송용량은쓸모없는것이되었다. 84
congestion control 에대한접근방법 End-end congestion control ( 종단간의혼잡제어 ) Network으로부터어떠한 feedback도제공되지않는다. 손실이나지연등의현상을관찰해서 end system이추측해야한다. TCP가사용하는방식 Network-assisted congestion control ( 네트워크지원혼잡제어 ) routert가혼잡상태에관한정보를 sender에게직접적인 feedback을제공한다. 하나의 bit로혼잡을나타낸다. (SNA, ATM, DECbit ) 전송률을 sender에게명확히전달한다. 두가지혼잡 data 전송방식 choke pkt 라우터가 sender 송, 수신자사이의 pkt의 field에추가 85 ATM ABR 혼잡제어 86
ATM ABR 혼잡제어 network 상태를수집하는 cell 87 3 장 Transport Layer 3.1 Transport Layer 서비스개요 3.2 다중화와역다중화 3.5 Connection oriented transport : TCP segment structure reliable data transfer flow control connection control 3.3 Connectionless transport : UDP 3.6 혼잡제어의원리 3.4 신뢰적 data 전송의원리 3.7 TCP 의혼잡제어 88
TCP congestion control end-end control (network 으로부터지원은없다 ) sender 의전송량을제한 LastbyteSend LastbyteAcked CongWin (TCP 수신buffer가충분히큰경우 : 혼잡제어만필요 ) [ min{congwin, RcvWindow}] ( 혼잡제어 ) ( 흐름제어 ) 송신률 rate = CongWin / RTT (byte/sec) CongWin 는 netwok 혼잡도에따라동적으로변한다. Sender가 congestion에대한반응 손실이발생 timeout 또는 3번의중복 ACK 손실에의한재전송이발생 TCP sender 는손실이발생하면 CongWin 을줄인다. 혼잡제어알고리즘 AIMD slow start timeout event에대한반응 89 TCP AIMD multiplicative decrease loss event가발생하면 CongWin의 size를반으로줄인다. - 1MSS 이하로떨어지지는않는다. additive increase loss event가없으면매번 ACK를확인할때각RTT마다congWin의증가폭이 1MSS가되도록조금씩 confwin을증가시킨다. -> 이러한선형증가를혼잡회피라고한다. ½ 로 90
TCP Slow start TCP연결이시작될때 CongWin의크기는 1 MSS로초기화되고초기전송률은 MSS/RTT가된다. Ex MSS(500byte), RTT(200ms) init rate = 20kbps 500byte/200ms = 4,000bit/0.2s = 20,000bps =20kbps 사용가능한대역폭은 MSS/RTT보다매우크다 선형비률로증가시키면전송률이적당한수준에오를때까지긴지연이초래된다. 첫번째 loss 가발생할때까지각 ack 를확인할때마다 congwin 을 1MSS 만큼증가시켜각 RTT 마다 congwin 이두배가되도록한다. congwin 의증가치 AIMD : 각 RTT마다 1MSS SS : 각 ACK마다 1MSS 각 RTT마다두배 91 TCP Slow start 접속이되면 loss event가발생할때까지지수적으로속도를증가시킨다. 각RTT마다CongWin이두배 모든 ACK가수신될때마다 CongWin을증가시킨다. 초기의속도는매우느리지만지수적으로빠르게증가하는모델이다. 92
Refinement 세번의중복 ACK 수신 CongWin은반으로줄어든다. Congwin은선형적으로증가한다. AIMD 그러나 timeout 이발생하면 CongWin을 1MSS로줄인다. 지수적으로 CongWin을증가시킨다. threshold에도달하면다시선형적으로증가한다. : 혼잡회피에들어간다. 개념 - 세번중복된 ACKs는네트워크가거의대역폭한계에도달했다고판단 - timeout는삼중 ACK보다심각하게처리한다. threshold : CongWin 의절반 93 Refinement Q : 언제지수적인증가가일어나는가? A : timeout 에의해 CongWin 이 1 로줄어든이후에 threshold 까지 구현 threshold는가변적이다. Loss event가일어나면 threshold는 congwin의 1/2로설정된다. threshold timeout 중복된 ACKs 지수적증가 선형적증가 94
TCP 혼잡제어요약 CongWin은 threshold에도달할때까지 slow-start방식으로빠르게증가한다. CongWin이 threshold에도달하면혼잡회피를위해선형적으로천천히증가한다. 3번중복된 ACK가감지되면 CongWin은 threshold 까지줄어들고선형으로증가한다. Timeout이발생하면 CongWin은 1 MSS로줄었다가다시 threshold에도달할때까지빠르게증가한다. 95