2006-11-23 경북대학교컴퓨터공학과 1 제 12 장 TCP (Transmission Control Protocol) TCP 개요 연결관리 연결설정 연결해제 전송제어 오류제어 흐름제어 혼잡제어 TCP 세그먼트 TCP 구조
TCP/IP 위치 2006-11-23 경북대학교컴퓨터공학과 2
TCP 의캡슐화 2006-11-23 경북대학교컴퓨터공학과 3
TCP vs IP 2006-11-23 경북대학교컴퓨터공학과 4
2006-11-23 경북대학교컴퓨터공학과 5 Well known 포트번호 Port Protocol 7 Echo 9 Discard 11 Users 13 Daytime 17 Quote 1 Chargen 2 FTP, Data 3 FTP, Control 23 TELNET 25 SMTP 53 DNS 67 BOOTP 79 Finger 80 HTTP 111 RPC
2006-11-23 경북대학교컴퓨터공학과 6 TCP 기능 연결지향프로토콜 3 단계 : 연결설정, 데이터전송, 연결해제 신뢰성서비스제공 상위계층의응용프로그램에게완전무결한전송서비스를보장 오류제어메커니즘제공 ( 재전송방식이용 ) 흐름제어메커니즘제공 ( 슬라이딩윈도우프로토콜이용 ) Full duplex ( 전이중 ) 서비스제공 하나의 TCP 연결상에서동시양방향전송 스트림데이터서비스제공 신뢰성있는전송서비스를제공하기위해바이트단위의순서번호부 여 ( 데이터세그먼트는자신이운반하는첫번째데이터바이트의순서 번호를헤드에기록함 )
2006-11-23 경북대학교컴퓨터공학과 7 Stream service 송신 TCP 송신응용프로그램으로부터문자스트림의형태로전달 적절한크기의세그먼트로잘라서번호를부여한후 IP로전달 수신 TCP 데이터를추출하여문자스트림으로응용프로그램에전달 Buffer Hello dear friend. I am sending a letter I am sending a letter Hello dear friend. TCP Segment 2 TCP Segment 1
2006-11-23 경북대학교컴퓨터공학과 8 TCP 송수신큐 스트림데이터서비스 : 송수신 TCP 큐사용 송신 : write 동작 수신 : read 동작 응용프로그램의데이터생성시 TCP 로전달 예 : 키보드입력시응용프로그램은한문자씩 TCP 로전달 예 : 파일로부터입력시응용프로그램은한라인또는한블록씩 TCP 로전달 여러번의 write 동작으로하나의세그먼트생성 응용프로그램에서 PUSH 를요구하면각 write 마다하나의세그먼트생성가능
송수신버퍼 2006-11-23 경북대학교컴퓨터공학과 9
2006-11-23 경북대학교컴퓨터공학과 10 세그먼트 TCP 간에전달되는데이터단위
2006-11-23 경북대학교컴퓨터공학과 11 TCP 세그먼트 포트번호 : 발신지 / 목적지응용프로그램의포트번호 순서번호 (SEQ): 첫번째데이터바이트의번호 ACK 번호 : 수신확인번호 ( 상대방으로부터수신한바이트의번 호를알려주어제대로전송되었음을확인해줌 ) 헤더길이 : 4 바이트단위 (5~15) 윈도우크기 : 상대방으로부터수신가능한바이트개수 ( 자신의 수신버퍼상태를기반으로결정 ) 검사합 (checksum) : 오류검출 제어플래그 옵션 (option) : 옵션정보 ( 최대 40 바이트 )
2006-11-23 경북대학교컴퓨터공학과 12 SEQ/ACK Number 순서번호 (SEQ): TCP 세그먼트가운반하는데이터의첫번째바이트의번호 연결설정시 TCP는난수발생기를사용하여초기순서번호 (Initial Sequence Number: ISN) 을생성 각연결마다독립적인순서번호사용 ACK 번호 : 상대방으로부터수신하고자하는바이트의번호 상대로부터 SEQ = x 인세그먼트를수신하면 ACK <= x+1 x 번바이트까지잘받았으며다음에받을바이트는 x+1 번임
2006-11-23 경북대학교컴퓨터공학과 13 순서번호예제 Q : A TCP connection is transferring a file of 6000 bytes. The first byte is numbered 10010. What are the sequence numbers for each segment if data is sent in five segments with the first four segments carrying 1,000 bytes and the last segment carrying 2,000 bytes? A : Segment 1 10,010 (10,010 to 11,009) Segment 2 11,010 (11,010 to 12,009) Segment 3 12,010 (12,010 to 13,009) Segment 4 13,010 (13,010 to 14,009) Segment 5 14,010 (14,010 to 16,009)
제어플래그 2006-11-23 경북대학교컴퓨터공학과 14
2006-11-23 경북대학교컴퓨터공학과 15 검사합 UDP 와동일하며필 수사항 (mandatory) Pseudoheader를임시로추가하여 checksum 계산한후제거 프로토콜의값 : 6
2006-11-23 경북대학교컴퓨터공학과 16 TCP 동작 연결관리 연결설정 연결해제 연결중단 연결거부 데이터전송제어 오류제어 흐름제어 혼잡제어
2006-11-23 경북대학교컴퓨터공학과 17 연결설정 3-way handshaking 을통한양방향연결설정 SYN segment, SYN + ACK segment 는데이터운반불가능하지만 1 개의순서번호사용 ACK segment 는데이터운반가능 ( 데이터를운반하지않을경우에는순서번호사용하지않음 )
2006-11-23 경북대학교컴퓨터공학과 18 연결설정 1) 클라이언트프로그램은자신의 TCP 에게데이터전송을요청 (active open) 2) 서버프로그램은자신의 TCP 에게연결수락준비를통보 (passive open) 서버프로세스는자신이먼저연결개설요청불가 3) 클라이언트 TCP 는서버 TCP 에게연결설정요구세그먼트를전송 클라이언트 TCP 는 SYN 세그먼트전송 ( SYN = 1 ) 클라이언트가전송하는세그먼트의초기순서번호 (ISN) 포함 4) 서버 TCP 는클라이어트 TCP 의연결설정요구에대한수락과서버 - 클라이언트방향의연결설정을요구하는세그먼트전송 서버 TCP 는 SYN+ACK 전송 ( SYN=1, ACK=1 ) 서버 TCP 가전송하는세그먼트의 ISN 포함 클라이언트 TCP 의윈도우 (rwnd) 크기지정 ( 클라이언트가전송할수있는세그먼트의최대크기 ) 지정 5) 클라이언트 TCP 는서버 TCP 에게 ACK 를전송하여서버 - 클라이언트간에양방향연결설정완료 클라이언트 TCP 는서버 TCP 의연결요청을수락 ( ACK=1 ) 서버 TCP 의윈도우 (rwnd) 크기지정 첫번째데이터배달가능
2006-11-23 경북대학교컴퓨터공학과 19 TCP 연결 TCP TCP TCP 각연결마다독립적인순서번호, 버퍼, 윈도우를유지관리함 TCP
2006-11-23 경북대학교컴퓨터공학과 20 연결해제 (3-way) 3-way handshaking 연결해제
2006-11-23 경북대학교컴퓨터공학과 21 연결해제 (3-way) 1. 클라이언트프로세스가더이상보낼데이터가없으면자신의 TCP에게연결종료요구 (active close) 하고클라이언트 TCP는 FIN을전송 ( FIN=1 ) 한다음서버 TCP로가는방향의연결해제 FIN segment 가데이터를운반하지않을경우에는순서번호를쓰지않음 2. 서버 TCP 는클라이언트 TCP 의연결종료요구에대해 FIN+ACK 으로회신하고클라이언트로가는방향의연결종료 (passive close) - 서버프로세스가보낼데이터가없을경우 3. 클라이언트 TCP 는 ACK 로써응답하고서버 TCP 는연결종료
2006-11-23 경북대학교컴퓨터공학과 22 연결해제 (4-way) 각방향의연결을별도로해제 (half close) 데이터송신은중단한반면상대방으로오는데이터의수신은지속됨 양방향연결종료를위해서는 4-way handshaking
2006-11-23 경북대학교컴퓨터공학과 23 데이터전송 ESTABLISHED : Connection is established ESTABLISHED 데이터전송 데이터전송 ESTABLISHED Active close FIN ACK Inform application and deliver data in queue and EOF
2006-11-23 경북대학교컴퓨터공학과 24 데이터전송 오류제어 흐름제어 혼잡제어
2006-11-23 경북대학교컴퓨터공학과 25 ACK 데이터세그먼트또는제어세그먼트의수신확인 TCP 에서는 NAK 가사용되지않음 피기백킹가능 ( 데이터에 ACK 정보를편승 ) ACK 세그먼트에대한 ACK 는보내지않음 Accumulative ACK The acknowledgment number is cumulative. ( 제대로받은가장마지막바이트의수신확인으로그이전의모든바이트에대한수신확인이이루어짐 ) 수신 TCP 는 ACK 를통해다음받을바이트번호를알려줌 TCP 세그먼트헤드의 32-bit ACK 필드사용 (ACK flag=1 일경우에만유효 ) Selective ACK (SACK) 송신 TCP 에게분실세그먼트나순서어긋한세그먼트의수신을알려주기위하여 TCP 헤드의옵션필드사용 ACK 전송을위한 6 Rules
2006-11-23 경북대학교컴퓨터공학과 26 Normal operation 1) 데이터를보낼때는항상 ACK 정보를첨부 (Piggybacked ACK) 트래픽감소를위하여 2) 데이터세그먼트를 1 개수신한이후 500ms 경과하면 Explicit ACK 전송 과도한 ACK 전송방지를위해 3) 수신한데이터세그먼트가 2 개누적되면즉각 Explicit ACK 전송 불필요한재전송방지를위해
2006-11-23 경북대학교컴퓨터공학과 27 Lost segment 손실감지 : 타임아웃 전까지 ACK 되지않을경우 4) Out of order 세그먼트가도착하면즉각 Explicit ACK 전송 상대방 TCP 에게세그먼트분실통보를하기위해 Out of order 세그먼트수신시임시저장하고즉각 ACK 전송 5) 분실세그먼트를받을경우즉각 Explicit ACK 전송 상대방 TCP 에게분실세그먼트를잘받았다는통보를하기위해
2006-11-23 경북대학교컴퓨터공학과 28 Lost ACK 의복구 ( 시나리오 1) 6) 중복세그먼트를받을경우즉각 Explicit ACK 전송 ACK 분실에대처하기위해 송신 TCP : RTO 가만료되어세그먼트재전송 수신 TCP : 동일순서번호를가진중복세그먼트를폐기
2006-11-23 경북대학교컴퓨터공학과 29 Lost ACK 의복구 ( 시나리오 2) Accumulative ACK 를사용하므로다음에오는 ACK 에의해자동적으로복구
2006-11-23 경북대학교컴퓨터공학과 30 재전송규칙 오류감지는세그먼트의 검사합 필드이용오류복구는재전송으로이루어짐 TCP는상위프로세스에게오류없는데이터를순서대로전달할책임 ( 신뢰성서비스 ) 순서번호가없는세그먼트는재전송되지않음재전송규칙 1) 재전송타이머 (RTO) 가만료되는경우재전송 TCP는각세그먼트전송시재전송타이머 (RTO) 를각각생성 RTO는 RTT 측정치에따라동적으로갱신됨 ACK 세그먼트전송시에는재전송타이머를생성하지않음 2) 3 Duplicate ACK s 수신시재전송
2006-11-23 경북대학교컴퓨터공학과 31 흐름제어 상대방 TCP 에서의 overflow 예방 슬라이딩윈도우프로토콜사용 윈도우 : TCP 가전송가능한바이트의범위를지정 (Byte oriented) 각 TCP 연결마다하나의윈도우관리 윈도우크기는상대방 TCP 의버퍼상태 (rwnd) 와네트워크혼잡상황 (cwnd) 에의하여결정됨 window size = minimum (rwnd, cwnd) TCP 는 ACK 세그먼트를상대방 TCP 에게전송하여자신이수신가능한데이터량을상대방 TCP 에게통보
2006-11-23 경북대학교컴퓨터공학과 32 흐름제어예제 연결설정시윈도우크기 = 4K 송신 TCP가 4K 데이터전송 수신 TCP는 ACK 전송 ( 윈도우크기를 0 으로감소 ) 송신 TCP는전송불가 수신 TCP가 ACK 전송 ( 윈도우크기를 1K 로증가 ) 송신 TCP는다시1K 전송가능
2006-11-23 경북대학교컴퓨터공학과 33 슬라이딩윈도우 open close
2006-11-23 경북대학교컴퓨터공학과 34 Sliding window 200~202 번바이트에대한 ACK 수신및 203~204 번바이트전송이후
2006-11-23 경북대학교컴퓨터공학과 35 Example 3 What is the value of the receiver window (rwnd) for host A if the receiver, host B, has a buffer size of 5,000 bytes and 1,000 bytes of received and unprocessed data? Solution The value of rwnd = 5,000 1,000 = 4,000. Host B can receive only 4,000 bytes of data before overflowing its buffer. Host B advertises this value in its next segment to A.
2006-11-23 경북대학교컴퓨터공학과 36 Example 4 What is the size of the window for host A if the value of rwnd is 3,000 bytes and the value of cwnd is 3,500 bytes? Solution The size of the window minimum(rwnd, cwnd) = 3,000 bytes.
2006-11-23 경북대학교컴퓨터공학과 37 혼잡제어 라우터가처리할수있는속도이상으로라우터에데이터가도착할경우혼잡발생 혼잡발생시패킷이손실되어발신 TCP는 ACK를받지못함 ( 발신 TCP의 timeout 재전송을통하여복구됨 ) 흐름제어기능은상대방 TCP의버퍼용량만고려하고네트워크의수신용량은무시하므로혼잡제어가별도로필요함
혼잡제어 2006-11-23 경북대학교컴퓨터공학과 38
2006-11-23 경북대학교컴퓨터공학과 39 Slow start 연결설정시초기값 : cwnd <= 1 MSS (Max Segment Size) 전송한세그먼트가 ACK 될때마다 cwnd <= cwnd + 1 MSS ( Slow start ) 실제로는 cwnd 가지수형태로증가 Not slow start 1 (cwnd = 1 MSS) => MSS 크기의세그먼트 1개전송 => 1 ACK 수신 2 (cwnd = 2*MSS) => MSS 크기의세그먼트 2개전송 => 2 ACK s 수신 3 (cwnd = 4*MSS) => MSS 크기의세그먼트 4개전송 => 4 ACK s 수신 4 (cwnd = 8*MSS) => MSS 크기의세그먼트 8개전송 => 8 ACK s 수신
2006-11-23 경북대학교컴퓨터공학과 40 Congestion avoidance cwnd 의무한증가를막기위하여임계치 ssthresh ( slow start threshold ) 사용 (Ex : ssthres = 65,535 byets) cwnd < ssthresh 경우, 1 개의 ACK 수신시마다 cwnd <= cwnd + 1 MSS ( slow start ) cwnd = ssthresh 일경우, 윈도우내의전체세그먼트에대한 ACK 를모두받을경우에만 cwnd <= cwnd + 1 MSS ( additive increase )
2006-11-23 경북대학교컴퓨터공학과 41 Multiplicative Decrease TCP 의재전송타이머가만료되면 혼잡발생으로확신 (strong possibility) ssthresh <= ½ * (window size) cwnd <= 1 MSS ( 초기단계로복귀 ) Slow start를다시시작함 3 개의 ACK 가중복으로수신되면 세그먼트가분실되었지만이후에보낸세그먼트는제대로도착했음을의미 ( fast transmission and fast recovery ) 혼잡으로추정 (weak possibility) ssthresh <= ½ * (window size) cwnd <= ssthresh Congestion avoidance (additive increase) 를시작함
2006-11-23 경북대학교컴퓨터공학과 42 TCP congestion policy 요약 cwnd <= 1 MSS
2006-11-23 경북대학교컴퓨터공학과 43 TCP 혼잡제어예제 송신윈도우에있던 16 개의세그먼트에대한 ACK 를수신하면 cwnd 를 1MSS 만큼증가 ssthresh : 16 -> 10 ssthresh : 10 -> 6
2006-11-23 경북대학교컴퓨터공학과 44 TCP 구조 전송제어블록 (TCB : Transmission Control Block) Timer 메인모듈 입력프로세스모듈 출력프로세스모듈
전송제어블록 (TCB) 연결에대한정보보관 상태 (state): 연결의상태 프로세스 (process): 이연결을사용하는프로세스 로칼 / 리모트 IP 주소 로칼 / 리모트포트번호 인터페이스 : 서브넷의인터페이스 로칼 / 리모트윈도우 : 윈도우에관한정보보관 송수신순서번호 (SEQ/ACK) 왕복 (round-trip) 시간 : RTT 정보보관 타임아웃값 : 각타이머의종료시간보관 버퍼크기 : 로칼 ( 수신 ) 버퍼용량 버퍼포인터 : 수신데이터가저장될버퍼위치 ( 응용프로그램이읽어갈때까지머무름 ) 2006-11-23 경북대학교컴퓨터공학과 45
2006-11-23 경북대학교컴퓨터공학과 46 기말고사 일자 : 12 월 7 일 19:00 범위 : 8 장 4-20 12 장 17-43