1 Chapter 15 TCP Objectives TCP 서비스에대한이해 TCP 상태천이다이아그램 TCP 의흐름제어와오류제어 TCP 혼잡제어 TCP 타이머 TCP 옵션 TCP 패키지의구성요소및모듈
2 목차 TCP 서비스 TCP 특성 세그먼트 TCP 연결 상태천이다이어그램 TCP 윈도우 흐름제어
3 목차 ( 계속 ) 오류제어 혼잡제어 TCP 타이머 옵션 TCP 패키지
TCP/IP 프로토콜에서 TCP 의위치 4
5 15.1 TCP 서비스
6 15.1 TCP 서비스 ( 계속 ) TCP- 대 -IP
7 15.1 TCP 서비스 ( 계속 ) 포트번호
8 15.1 TCP 서비스 ( 계속 ) TCP 에서사용되는잘알려진포트
9 15.1 TCP 서비스 ( 계속 ) 스트림배달서비스 전이중서비스 연결지향서비스 신뢰성서비스
10 15.1 TCP 서비스 ( 계속 ) 스트림배달서비스
11 15.1 TCP 서비스 ( 계속 ) 스트림배달서비스 송신 TCP 송신응용프로그램으로부터문자스트림수신 ( 송신버퍼이용 ) 적절한크기인세그먼트를만들어네트워크를통하여전송 수신 TCP 세그먼트를수신 ( 수신버퍼이용 ) 데이터를추출하여문자스트림으로수신응용프로그램에전달
12 15.1 TCP 서비스 ( 계속 ) 송신버퍼와수신버퍼
13 15.1 TCP 서비스 ( 계속 ) TCP 세그먼트
14 15.1 TCP 서비스 ( 계속 ) 전이중서비스 동시에양방향전송 송신데이터와수신데이터에대한확인응답을함께보내는피기백킹 (piggybacking) 사용 연결 - 지향서비스 TCP 는연결지향프로토콜 물리적연결이아닌가상의연결 요청 승인 데이터교환 해제순으로진행 신뢰성서비스 확인응답메커니즘이용
15 15.2 TCP 특징
16 15.2 TCP 특징 바이트번호 모든데이터바이트에번호부여 송신순서번호 세그먼트에있는첫번째바이트에순서번호할당 확인응답번호 자신이수신하기를기대하는다음바이트번호
17 15.2 TCP 특징 ( 계속 ) Example 5,000 바이트의파일전송 첫번째바이트의순서번호 : 10,001 5개세그먼트는각각 1,000바이트 세그먼트 1 - 순서번호 : 10,001 (10,001 ~ 11,000) 세그먼트 2 - 순서번호 : 11,001 (11,001 ~ 12,000) 세그먼트 3 - 순서번호 : 12,001 (12,001 ~ 13,000) 세그먼트 4 - 순서번호 : 13,001 (13,001 ~ 14,000) 세그먼트 5 - 순서번호 : 14,001 (14,001 ~ 15,000)
18 15.2 TCP 특징 ( 계속 ) 흐름제어 수신측은송신측에서전송할데이터량제어 오류제어 신뢰성있는서비스를제공하기위해오류제어메커니즘구현 혼잡제어 망의혼잡을고려하여데이터량을수신측에서조절
19 15.3 세그먼트
20 15.3 세그먼트 TCP 세그먼트형식 TCP 를이용하여두개의장치간에전달되는데이터단위
21 15.3 세그먼트 ( 계속 ) 세그먼트 발신지포트번호 (source port address) : 전송호스트응용프로그램의포트번호 목적지포트번호 (destination port address) : 수신호스트응용프로그램의포트번호 순서번호 (sequence number) : 세그먼트에포함된데이터의첫번째바이트에부여된번호 확인응답번호 (acknowledgement number) : 상대방노드로부터수신하고자하는바이트의번호
22 15.3 세그먼트 ( 계속 ) 세그먼트 ( 계속 ) 헤더길이 (header length) : TCP 헤더길이의 4 바이트워드값 제어 (control) : 제어또는플래그
23 15.3 세그먼트 ( 계속 ) 제어필드
24 15.3 세그먼트 ( 계속 ) 세그먼트 ( 계속 ) 윈도우크기 (window size) 상대방이유지해야하는바이트단위의윈도우크기 확인을포함하는세그먼트 ( 즉, ACK 플래그 =1) 인경우에만유용 검사합 (checksum) : 오류제어
25 15.3 세그먼트 ( 계속 ) 세그먼트 ( 계속 ) 긴급포인터 (urgent pointer) URG 플래그가 1인경우에만유효 세그먼트가긴급데이터를포함할때사용 긴급데이터의마지막바이트에대한오프셋 옵션 (option) : 옵션정보 ( 최대 40 바이트 )
26 15.3 세그먼트 ( 계속 ) 검사합계산에사용되는의사헤더
27 15.3 세그먼트 ( 계속 ) 캡슐화 TCP header Application-layer data IP header Frame header IP payload Data-link layer payload TCP payload
28 15.4 TCP 연결
29 15.4 TCP 연결 TCP : 연결 - 지향프로토콜 발신지와목적지간에가상경로설정 연결설정과연결종료를통하여이루어짐
30 15.4 TCP 연결 ( 계속 ) 3 단계핸드셰이크 (three-way handshaking) 서버 : 자신의 TCP에게연결수락준비를통보 (passive open) 클라이언트 : 자신의 TCP에게특정한서버와의연결요청 (active open)
31 15.4 TCP 연결 ( 계속 ) 3 단계핸드셰이크절차 +
32 15.4 TCP 연결 ( 계속 ) SYN 플러딩공격 송신지 IP 주소를위조하여대량의 SYN 세그먼트를하나의서버에전송 서버는 SYN+ACK 를보낸후, TCP 연결에필요한자원 ( 타이머, 버퍼등 ) 을할당하므로서버의자원부족 서버는자원이없으므로모든서비스를거부 이를 DoS(Denial of service) 공격이라함
33 15.4 TCP 연결 ( 계속 ) 데이터전송
34 15.4 TCP 연결 ( 계속 ) 푸싱 (pushing) 데이터 수신 TCP 에게가능한한빨리데이터를응용프로그램으로전달해주도록요청할때사용 PSH 비트이용 응용프로그램의요구에의해서송신 TCP 가 PSH 비트를설정한다.
35 15.4 TCP 연결 ( 계속 ) 긴급데이터 송신응용프로그램으로부터전송된데이터의일부분을수신응용프로그램이순서에어긋나게읽기를원할때사용 예 ) Telnet 서비스에서의 control+c 전송 URG 비트와긴급포인터사용 세그먼트의시작에긴급데이터를넣고, 긴급포인터를긴급데이터의마지막오프셋으로지정 수신 TCP 에서는긴급데이터를추출하여먼저응용프로그램으로전달
36 15.4 TCP 연결 ( 계속 ) 연결종료 3-단계핸드셰이크방식과반-종료방식사용 클라이언트 : 능동종료 서버 : 수동종료
37 15.4 TCP 연결 ( 계속 ) 3- 단계핸드셰이크종료 +1 +
38 15.4 TCP 연결 ( 계속 ) 반 - 종료 (Half-close) +1 +1 +1 +1
39 15.4 TCP 연결 ( 계속 ) 연결리셋 연결거부 : 존재하지않는포트로연결을요구하는경우 연결중단 : 비정상적인상황인경우 휴지연결의종료 : 오랜시간동안연결이휴지상태인경우 이모든경우에는 RST 비트를 1 로설정한세그먼트를전송하여연결을리셋한다.
40 15.5 상태천이다이어그램
41 15.5 상태천이다이어그램 유한상태기기 (finite state machine) 이용구현
15.5 상태천이다이어그램 ( 계속 ) 42
43 15.5 상태천이다이어그램 ( 계속 ) 연결설정및종료
44 15.5 상태천이다이어그램 ( 계속 ) 연결거절
45 15.5 상태천이다이어그램 ( 계속 ) 연결중단
46 15.6 TCP 윈도우
47 15.6 TCP 윈도우 송신윈도우
48 15.6 TCP 윈도우 ( 계속 ) 수신윈도우
49 15.7 흐름제어
50 15.7 흐름제어 TCP 에서데이터흐름과흐름제어피드백 Messages are pushed 1 5 Flow control feedback 3 Messages are pulled 2 Segements are pushed 4 Flow control feedback
51 15.7 흐름제어 ( 계속 ) 흐름제어의예
52 15.7 흐름제어 ( 계속 ) 송신윈도우의확장 수신프로세스가수신속도보다빠르게데이터를처리하면확장
53 15.7 흐름제어 ( 계속 ) 송신윈도우축소 수신프로세스가수신속도보다느리게데이터를처리하면축소
54 15.7 흐름제어 ( 계속 ) Example 확인응답번호가 206 이고 rwnd 가 12 인세그먼트를수신했고, 더이상데이터를전송하지않은경우의슬라이딩윈도우 12
55 15.7 흐름제어 ( 계속 ) Example 확인응답번호가 210 이고 rwnd 가 5 인세그먼트를수신했고, 209 번바이트까지를전송한경우의슬라이딩윈도우
56 15.7 흐름제어 ( 계속 ) Example 수신측은윈도우가축소되는것을어떻게막을수있는가? Solution - 마지막에전송한확인응답번호와 rwnd 값을기억한다. - 다음의조건을만족하지못하면버퍼에공간이더생길때까지확인응답을지연한다. - (new ack + new rwnd) (old ack + old rwnd)
57 15.7 흐름제어 ( 계속 ) 어리석은윈도우신드롬 송신 / 수신응용프로그램이데이터를천천히생성하거나천천히처리할때발생 예 ) 1 바이트데이터 + 20 바이트 TCP 헤더 + 20 바이트 IP 헤더 비효율적인네트워크자원사용
58 15.7 흐름제어 ( 계속 ) 송신측에서발생하는신드롬 송신응용프로그램이한바이트씩데이터를천천히발생시키는경우에발생 가능하면한바이트데이터를전송하지못하게함 데이터를취합하여큰블록데이터로만들어전송 Nagle 알고리즘적용 : 송신 TCP에서실행하는알고리즘
59 15.7 흐름제어 ( 계속 ) Nagle 알고리즘 1. 송신 TCP는응용프로그램으로부터수신한첫데이터를세그먼트로만들어전송한다. 2. 첫번째세그먼트를전송한후송신 TCP는수신 TCP 로부터확인응답을수신하거나최대크기의세그먼트 (MSS) 를구성할정도로데이터가출력버퍼에저장되면세그먼트를전송한다. 3. 2번째단계를계속반복한다.
60 15.7 흐름제어 ( 계속 ) 수신측에서발생하는신드롬 어리석은윈도우신드롬이발생하는상황에서한바이트수신처리후에윈도우크기를통보하게되는경우에발생 Clark 해결방법 : 충분한공간이생기거나적어도버퍼가반이상비어있을때까지윈도우크기를 0 으로확인응답 확인응답송신지연 : 수신버퍼가충분한공간이생길때까지확인응답보류