Download presentation
Presentation is loading. Please wait.
1
Chapter 15 Transmission Control Protocol (TCP)
2
학습목표(OBJECTIVES): TCP를 신뢰성 있는 스트림 배달 서비스를 제공하는 프로토콜로써 소개한다.
TCP 특징을 정의하고 UDP의 특징과 비교한다. TCP 세그먼트의 형식과 필드를 정의한다. TCP가 제공하는 연결 지향 서비스와 연결 설정 및 연결 종료 단계에서 교환되는 세그먼트를 설명한다. TCP의 상태 천이 다이어그램 및 시나리오를 설명한다. 흐름 제어와 오류 제어에 사용되는 TCP 윈도우를 설명한다. TCP에서 수신 윈도우가 송신 윈도우의 크기를 조절하는 흐름 제어 구현 방법을 알아본다.
3
학습목표(OBJECTIVES) (계속):
데이터 전송 단계 동안에 TCP에서 사용하는 오류 제어와 FSM을 설명한다. TCP에서 네트워크의 혼잡을 조절하는 다양한 방법을 알아본다. TCP에서 사용하는 타이머 종류와 목적을 알아본다. TCP의 옵션과 SACK 옵션을 이용하여 TCP에서 제공하는 선택적 확인응답 제공 방법을 알아본다. TCP 패키지의 배치도 및 단순화된 의사 코드를 설명한다.
4
Chapter Outline 15.1 TCP Services 15.2 TCP Features 15.3 Segment
A TCP Connection State Transition Diagram Windows in TCP Flow Control Error Control Congestion Control TCP Timers Options TCP Package Chapter Outline
5
15-1 TCP 서비스 TCP/IP 프로토콜 모음에서 TCP와 다른 프로토콜과의 관계는 그림 15.1에 나타나 있다. TCP는 응용 계층과 네트워크 계층 사이에 위치하고 있으며, 응용 프로그램과 네트워크 동작 사이의 매개체로서 사용된다.
6
Topics Discussed in the Section
Process-to-Process Communication Stream Delivery Service Full-Duplex Communication Multiplexing and Demultiplexing Connection-Oriented Service Reliable Service
7
TCP/IP 프로토콜 그룹
8
TCP가 제공하는 서비스 프로세스 대 프로세스 통신 스트림 배달 서비스 연결지향 서비스 신뢰성 서비스
9
프로세스 대 프로세스 통신 TCP-대-IP
10
프로세스 대 프로세스 통신 포트 번호 이용
12
스트림 배달(Stream delivery)
13
스트림 배달 서비스 TCP는 스트림 기반 프로토콜 바이트 스트림 형태로 데이터 송수신 두 개의 프로세스가 가상의 튜브로 연결
송신 프로세스는 바이트 스트림 생성(쓰기), 수신 프로세스는 바이트 스트림 소비(읽기)
14
송신(Sending) 과 수신(receiving) 버퍼(buffer)
송/수신이 동일한 속도로 이루어지지 않을 때 버퍼가 필요
15
TCP 세그먼트(segment) 일련의 바이트를 세그먼트라는 패킷으로 그룹화 IP 계층에 전달
16
TCP가 제공하는 서비스 연결지향 서비스 신뢰성 서비스 – 확인응답 메커니즘 이용 전이중 통신(양방향 데이터 송수신)
다중화와 역다중화 연결지향 서비스 두 TCP간에 가상 연결 설정 양방향 데이터 교환 연결 종료 신뢰성 서비스 – 확인응답 메커니즘 이용
17
15-2 TCP 특징 앞 절에서 언급한 서비스를 제공하기 위해서 이번 절에서는 TCP에서 가지고 있는 특징에 대해서 간략히 살펴보고, 뒷부분에서 자세히 살펴본다. 번호화 시스템 (Numbering System) 흐름 제어 (Flow Control) 오류 제어 (Error Control) 혼잡 제어 (Congestion Control)
18
번호화 시스템 바이트 번호- 모든 데이터 바이트에 번호 부여
송신 순서 번호 – 세그먼트에 있는 첫 번째 바이트에 순서번호 할당 확인응답 번호 – 자신이 수신하기를 기대하는 다음 바이트 번호
19
각 방향으로 전송되는 데이터 바이트는 TCP에 의해서 번호가 매겨진다.
Note 각 방향으로 전송되는 데이터 바이트는 TCP에 의해서 번호가 매겨진다. 번호는 임의로 생성된 값에서 시작한다.
20
Example 15.1 TCP 연결이 5,000바이트의 파일을 전송한다고 가정하자. 첫 번째 바이트는 10,001의 번호를 가지고 있다. 만일 각각이 1,000바이트를 가지는 5개의 세그먼트에 의해서 데이터가 전달된다면, 각 세그먼트의 순서 번호는 어떻게 되는가? Solution 다음은 각 세그먼트의 순서 번호를 보여준다.
21
세그먼트 내의 순서 번호 필드의 값은 그 세그먼트에 포함되는 첫 번째 데이터 바이트의 번호를 나타낸다.
Note 세그먼트 내의 순서 번호 필드의 값은 그 세그먼트에 포함되는 첫 번째 데이터 바이트의 번호를 나타낸다.
22
세그먼트 내의 확인응답 번호의 값은 수신하기를 기대하는 다음 바이트의 번호를 나타낸다.
Note 세그먼트 내의 확인응답 번호의 값은 수신하기를 기대하는 다음 바이트의 번호를 나타낸다. 확인응답 번호는 누적이다.
23
15-3 세그먼트(SEGMENT) TCP를 자세히 살펴보기 전에, TCP 패킷 자체에 대해서 살펴보기로 하자. TCP에서의 패킷을 세그먼트라고 한다. 형식(Format) 캡슐화(Encapsulation)
24
TCP 세그먼트 형식
25
TCP 세그먼트 형식 발신지 포트 번호(source port address)
목적지 포트 번호(destination port address) 순서 번호(sequence number) 확인 응답 번호(acknowledgement number) 헤더길이(header length) : 4 바이트 워드 값 제어(control) : 제어 또는 플래그 예약(reserved) 윈도우 크기(window size) 검사합(checksum) 긴급 포인터(urgent pointer) 옵션(option)
26
제어 필드(Control field)
27
TCP 세그먼트에 추가되는 의사헤더(Pseudoheader)
28
Note TCP에서의 검사합의 포함은 필수 사항이다.
29
캡슐화(Encapsulation)
30
15-4 TCP 연결 TCP는 연결 지향 프로토콜이다. 연결 지향 전송 프로토콜은 발신지와 목적지 간에 가상 경로를 설정한다. 하나의 메시지에 속하는 모든 세그먼트들은 이러한 가상 경로를 통하여 전송된다. 전체 메시지를 하나의 단일 가상 경로를 이용하여 전송함으로써, 손상되거나 손실된 프레임의 재전송뿐만 아니라 확인응답 등의 처리도 가능하게 된다. 비연결형 프로토콜인 IP 서비스를 이용하는 TCP가 어떻게 연결 지향을 제공할 수 있는지 궁금할 것이다. 요점은 TCP 연결은 실제가 아닌 가상이라는 것이다. TCP는 상위 단계에서 동작한다. TCP는 수신측에게 각각의 세그먼트를 전송하기 위하여 IP의 서비스를 이용하지만, TCP 자체에서 연결을 제어한다. 손실되거나 훼손된 세그먼트는 재전송된다.
31
TCP 연결 연결 설정(Connection Establishment) 데이터 전송(Data Transfer)
연결 종료(Connection Termination) 연결 리셋(Connection Reset)
32
TCP 연결 설정 3단계 핸드쉐이크(three-way handshake) 클라이언트와 서버 응용 프로그램간 연결
서버부터 시작(수동 개방(passive open)) 클라이언트부터 시작(능동 개방(active open)) 클라이언트는 SYN 플래그가 1로 설정된 SYN 세그먼트 전송 서버는 SYN와 ACK 플래그가 1로 설정된 세그먼트 전송 단순한 ACK 세그먼트 전송 동시 개방 SYN 플러딩 공격
33
3단계(three-way) 핸드쉐이크를 이용한 연결 설정
34
SYN 세그먼트는 데이터를 전달하지는 않지만 하나의 순서 번호를 소비한다.
Note SYN 세그먼트는 데이터를 전달하지는 않지만 하나의 순서 번호를 소비한다.
35
SYN+ACK 세그먼트는 데이터를 전달하지는 않지만 하나의 순서 번호를 소비한다.
Note SYN+ACK 세그먼트는 데이터를 전달하지는 않지만 하나의 순서 번호를 소비한다.
36
ACK 세그먼트는 데이터를 전달하지 않는 경우에는 순서 번호를 소비하지 않는다.
Note ACK 세그먼트는 데이터를 전달하지 않는 경우에는 순서 번호를 소비하지 않는다.
37
데이터 전송(Data Transfer)
38
데이터 전송 양 방향 데이터 전송 데이터 전송과 확인응답을 동시에 전송(piggyback) 푸싱(pushing) 데이터
푸쉬 비트를 설정하여 푸쉬 동작 요구 윈도우가 다 찰 때까지 기다리지 않는다는 것 긴급 데이터 URG 비트를 1로 설정, 긴급을 알림
39
3단계(three-way) 핸드쉐이크를 이용한 연결 종료
40
데이터를 포함하지 않는 FIN 세그먼트는 하나의 순서 번호를 소비한다.
Note 데이터를 포함하지 않는 FIN 세그먼트는 하나의 순서 번호를 소비한다.
41
절반-닫기(half-close) 한쪽에서는 데이터를 수신하면서 데이터 전송 종료 가능 어느 쪽이든 요청 가능
서버가 모든 데이터를 수신한 후에 처리를 시작하는 경우 발생(예:정렬(sort))
42
절반-닫기(Half-Close)
43
데이터를 포함하지 않는 FIN+ACK 세그먼트는 하나의 순서 번호를 소비한다.
Note 데이터를 포함하지 않는 FIN+ACK 세그먼트는 하나의 순서 번호를 소비한다.
44
15-5 STATE TRANSITION DIAGRAM
연결 설정, 연결 종료, 그리고 데이터 전송 기간 동안 발생하는 여러 가지의 이벤트들을 관리하기 위하여, TCP 소프트웨어는 그림 15.13에 나타나 있는 것과 같이 유한 상태 기기(FSM: Finite State Machine)를 이용하여 구현된다. 시나리오(Scenario)
45
상태 천이 다이어그램(State transition diagram)
46
Note FSM 내의 ESTABLISHED로 표시된 상태는 사실 두 개의 서로 다른 조합의 상태이며, 각각은 클라이언트와 서버의 데이터 전송을 위한 것이다.
48
연결설정과 반-닫기 종료 천이 다이어그램
49
연결 설정과 반-닫기 종료의 시간 축 다이어그램
TCP/IP Protocol Suite
50
일반적인 시나리오의 천이 다이어그램
51
일반적인 시나리오의 시간 축 다이어그램 TCP/IP Protocol Suite
52
동시 개방(Simultaneous open)
53
동시 닫기(Simultaneous close)
54
연결 거절(Denying a connection)
55
연결 중단(Aborting a connection)
56
15-6 TCP 윈도우 TCP에서의 데이터 전송과 흐름 제어, 오류 제어, 그리고 혼잡 제어와 같은 문제를 다루기 전에 먼저 TCP에서 사용되는 윈도우에 대해서 살펴보고자 한다. TCP는 데이터 전송을 위한 각 방향에 대해서 (송신 윈도우와 수신 윈도우의) 두 개의 윈도우를 사용하며 따라서 양방향 통신을 위하여 네 개의 윈도우가 필요하다. 그렇지만 여기에서는 설명을 간단히 하기 위하여 통신이 (클라이언트로부터 서버로의) 단방향으로 이루어지는 상황을 고려한다. 양방향 통신은 두 개의 단방향 통신과 피기배킹을 이용하면 유추할 수 있다.
57
TCP에서 송신 윈도우( Send window)
58
TCP에서 수신 윈도우(receive window)
59
15-7 흐름 제어(FLOW CONTROL) 13장에서 설명한 것과 같이, 흐름 제어(flow control)는 생산자가 데이터를 만드는 속도와 소비자가 데이터를 사용하는 속도의 균형을 맞추는 것이다. TCP는 흐름 제어와 오류 제어를 구별한다. 이 절에서는 오류 제어를 무시하고 흐름 제어에 대해서 설명한다. 임시적으로 일단 송신과 수신 TCP 사이에 설정된 논리 채널은 에러가 없다고 가정한다. 그림 15.24는 송신측과 수신측 사이의 단방향 데이터 전송의 경우를 보여주며, 13장에서 언급한 것과 같이, 양방향 데이터 전송은 단방향의 경우로부터 유추할 수 있다.
60
Topics Discussed in the Section
Opening and Closing Windows Shrinking of Windows Silly Window Syndrome
61
TCP에서 데이터 흐름과 흐름 제어 피드백
62
흐름 제어의 예
63
Example 15.2 그림 15.26은 몇몇 구현에서 이러한 필수사항에 대한 이유를 보여준다. 그림의 a 부분은 마지막 확인응답과 rwnd 값을 보여준다. 그림 b 부분은 송신측에서 206에서 214까지의 바이트를 전송한 경우를 보여준다. 206~209바이트는 확인응답되었기 때문에 제거되었다. 그렇지만 rwnd가 새로운 값인 4로 광고되었다. 즉, < 가 된다. 송신 윈도우가 축소되면 문제가 발생한다. 이미 전송된 바이트 214는 윈도우의 외부에 있다. 수신측에서는 바이트 210부터 바이트 217 중에서 어떤 것이 이미 전송되었는지를 알 수 없기 때문에 앞에서 언급한 관계식은 수신측에서 윈도우의 오른쪽 벽을 유지할 수 있도록 한다. 이러한 상황을 방지하기 위한 한 가지 방법은 수신측에서 윈도우 내에 충분한 버퍼 공간이 있기 전까지는 피드백의 전송을 연기하는 것이다. 다시 말하면, 수신측에서는 위에서 언급한 관계식을 충족하도록 하기 위해서 수신 프로세스가 좀 더 많은 바이트를 소비하기 전까지 기다리는 것이다.
64
Figure Example 15.2
65
15-8 오류 제어(ERROR CONTROL) TCP는 신뢰성 있는 전송 계층 프로토콜이다. 즉 데이터 스트림을 TCP로 전달하는 응용 프로그램은 TCP가 전체 스트림을 순서에 맞고 오류 없이, 또한 부분적인 손실이나 중복 없이 상대편에 있는 응용 프로그램에게 전달할 것이라고 확신한다는 것을 의미한다. TCP에서의 오류 제어는 세 가지 간단한 도구인 검사합(checksum), 확인응답(acknowledgment ), 그리고 타임-아웃 (time-out ) 등을 통하여 수행된다.
66
Topics Discussed in the Section
Checksum Acknowledgment Retransmission Out-of-Order Segments FSMs for Data Transfer in TCP Some Scenarios
67
ACK 세그먼트는 순서 번호를 소비하지 않으며 확인응답되지도 않는다.
Note ACK 세그먼트는 순서 번호를 소비하지 않으며 확인응답되지도 않는다.
68
Note 데이터는 순서에 어긋나게 도착할 수 있고 또한 수신 TCP에서 일시적으로 보관할 수 있다. 그렇지만 TCP는 세그먼트가 순서에 어긋나게 프로세스로 전달되지 않도록 한다.
69
TCP는 선택적 반복 프로토콜의 최상의 모델이다.
Note TCP는 선택적 반복 프로토콜의 최상의 모델이다.
70
TCP 송신측의 단순화된 FSM
71
수신측의 단순화된 FSM
72
정상적인 동작(Normal operation)
73
손실된 세그먼트(Lost segment)
74
수신 TCP는 순서에 맞는 데이터만을 프로세스에게로 전달한다.
Note 수신 TCP는 순서에 맞는 데이터만을 프로세스에게로 전달한다.
75
빠른 재전송(Fast retransmission)
76
확인응답 손실(Lost acknowledgment)
77
세그먼트를 재전송함으로써 교정되는 확인응답 손실
78
확인응답이 손실되는 경우에 적절히 처리되지 못하면 교착상태에 빠질 수 있다.
Note 확인응답이 손실되는 경우에 적절히 처리되지 못하면 교착상태에 빠질 수 있다.
79
15-9 혼잡 제어(CONGESTION CONTROL)
13장에서 혼잡 제어에 대해서 간략히 설명하였다. TCP의 혼잡 제어는 개방 루프(open-loop)와 폐 루프(closed-loop) 메커니즘 모두를 기반으로 한다. TCP는 혼잡을 방지하고 또한 혼잡이 발생한 후에는 혼잡을 감지하고 또한 혼잡에서 빠져나올 수 있도록 혼잡 윈도우와 혼잡 정책을 이용한다.
80
혼잡 제어 혼잡 윈도우 실제 윈도우 크기 = minimum(rwnd,cwnd) 혼잡 제어 원칙 느린 시작: 지수 증가
혼잡 회피: 가산 증가 혼잡 감지: 지수 감소
81
Topics Discussed in the Section
Congestion Window Congestion Policy
82
느린 시작(Slow start), 지수 증가(exponential increase)
83
느린 시작 알고리즘에서 혼잡 윈도우의 크기는 임계치에 도달하기 전까지는 지수적으로 증가한다.
Note 느린 시작 알고리즘에서 혼잡 윈도우의 크기는 임계치에 도달하기 전까지는 지수적으로 증가한다.
84
혼잡 회피(Congestion avoidance), 가신 증가(additive increase)
85
혼잡 회피 알고리즘에서 혼잡이 감지되기 전까지는 혼잡 윈도우의 크기는 가산적으로 증가한다.
Note 혼잡 회피 알고리즘에서 혼잡이 감지되기 전까지는 혼잡 윈도우의 크기는 가산적으로 증가한다.
86
TCP 혼잡 정책 요약
87
혼잡(Congestion) 예
88
TCP의 동작을 순조롭게 수행하기 위하여, TCP는 다음과 같이 4가지의 타이머를 이용한다.
TCP 타이머(TIMER) TCP의 동작을 순조롭게 수행하기 위하여, TCP는 다음과 같이 4가지의 타이머를 이용한다.
89
재전송 타이머 한 세그먼트에 대한 확인응답을 기다리는 시간인 재전송 타임아웃(RTO) 값 설정 왕복 시간(RTT)
송신 버퍼의 맨 앞 세그먼트 전송이 타이머 구동 타이머가 만료되면 세그먼트 재전송, 타이머 다시 구동 누적 확인응답된 세그먼트 버퍼에서 삭제 버퍼가 빈 경우 타이머 정지 왕복 시간(RTT) 측정된 TTT: 세그먼트에 대한 확인응답 수신에 걸리는 시간 재전송 시간 = 2 * RTT(round-trip time)
90
TCP에서는 어느 한 순간에는 오직 하나의 RTT 측정만이 진행된다.
Note TCP에서는 어느 한 순간에는 오직 하나의 RTT 측정만이 진행된다.
91
Example 15.3 가상적인 예를 살펴보자. 그림 15.39는 연결의 일부분을 보여준다. 그림에서는 연결 설정과 데이터 전송 단계의 일부분을 보여준다. 1. SYN 세그먼트가 전송될 때에는 RTTM, RTTS, 그리고 RTTD 값은 설정되지 않는다. RTO의 값은 (초기값인) 6.00초로 설정된다. 다음은 각 변수의 값들을 보여준다. 2. SYN+ACK 세그먼트가 도착하면 RTTM이 측정되며 1.5초의 값을 가진다. 다음은 각 변수들의 값을 보여준다.
92
Example 15.3 Continued 첫 번째 데이터 세그먼트가 전송될 때 새로운 RTT 측정이 시작된다. 송신자가 ACK 세그먼트를 전송할 때에는 RTT 측정을 하지 않는다. 왜냐하면 ACK 세그먼트는 순서 번호를 소비하지 않으며 또한 타임-아웃 타이머도 설정되지 않기 때문이다. 이미 측정이 진행 중이기 때문에, 두 번째 데이터 세그먼트에 대해서도 RTT 측정을 하지 않는다. ACK 세그먼트가 도착하면 그 다음 RTTM을 계산한다. 비록 ACK 세그먼트의 수신이 두 개의 세그먼트를 누적해서 확인응답해주기는 하지만, 이 세그먼트가 도착하면 첫 번째 세그먼트에 대한 RTTM 값을 계산한다. 각 변수들의 값은 다음과 같이 계산된다:
93
Figure Example 15.3
94
TCP에서는 새로운 RTO의 계산에 재전송 세그먼트의 RTT는 고려하지 않는다.
Note TCP에서는 새로운 RTO의 계산에 재전송 세그먼트의 RTT는 고려하지 않는다.
95
Example 15.4 그림 15.40에서는 앞선 예제의 연속으로, 세그먼트가 재전송되어서 Karn 알고리즘이 적용된 예를 보여준다. T 이 그림에서 첫 번째 세그먼트가 전송되었지만 손실되었다. RTO 타이머는 4.74초 이후에 만료된다. 세그먼트는 재전송되고, RTO 타이머는 앞선 RTO 값의 두 배인 9.48초로 설정된다. 시간 초과가 발생하기 전에 ACK를 수신하였다. (Karn 알고리즘에 의거하여) 새로운 RTO 값을 계산하기 위해서는 새 세그먼트를 전송하고 ACK를 수신할 때까지 기다려야 한다.
96
Figure Example 15.4
97
TCP 타이머 Karn 알고리즘 영속 타이머(persistence timer)
전송된 세그먼트에 대해 확인 응답되지 않아 재전송된 경우 이전 세그먼트에 대한 확인응답인지 재전송에 대한 확인응답인지 여부 판단이 애매하다 RTT 값은 재전송 없이 확인응답 수신 전까지 변동이 없음 영속 타이머(persistence timer) 윈도우 크기가 0 인 경우를 처리하기 위한 타이머 수신 TCP가 윈도우 크기 0 을 통보했는데, 송신 TCP가 이에 대한 확인응답을 보냈지만 수신 TCP가 이를 수신하지 못함 양쪽 TCP가 서로 기다리는 교착상태(deadlock) 해결
98
TCP 타이머 Keepalive 타이머 시간-대기 타이머(time-waited timer)
두 TCP 간에 설정된 연결이 오랫동안 휴지(idle) 상태에 있는 것을 방지하기 위한 타이머 시간-종료 : 2 시간 2 시간이 지나도록 세그먼트를 수신하지 못하면 75초 간격으로 10 개의 프루브(probe) 전송 응답이 없으면 다운으로 간주하고 연결 종료 시간-대기 타이머(time-waited timer) 연결 종료 동안에 사용
99
옵션(OPTION) TCP 헤더에는 최대 40바이트의 옵션 정보가 있을 수 있다. 이러한 옵션 정보들은 목적지에게 부가 정보를 전달하거나 또는 다른 옵션의 정렬을 맞추기 위하여 사용된다. 옵션은 단일 바이트 옵션과 다중 바이트 옵션의 두 범주로 나누어 질 수 있다. 첫 번째 범주에는 옵션 종료(end of option)과 무 동작(no operation)의 두 가지 유형의 옵션이 있다. 두 번째 범주에는 최대 세그먼트 크기(maximum segment size), 윈도우 확장 인자(window scale factor), 타임스탬프(timestamp), SACK-허용 및 SACK 등 다섯 가지 유형의 옵션이 있다(그림 참조).
100
옵션(Option)
101
옵션 종료(End-of-option) 옵션
102
Note EOP는 단지 한번만 사용할 수 있다.
103
무-동작(No-operation) 옵션
104
Note NOP는 한번 이상 사용할 수 있다.
105
최대 세그먼트 크기 옵션
106
MSS 값은 연결 설정 단계에서 결정되며, 연결이 유지되어 있는 동안에는
Note MSS 값은 연결 설정 단계에서 결정되며, 연결이 유지되어 있는 동안에는 변경될 수 없다.
107
윈도우 확장 인자(Window-scale-factor) 옵션
108
윈도우 확장 인자는 연결 설정 과정에서만 결정될 수 있으며, 연결이 유지되어 있는 동안에는 변경될 수 없다.
Note 윈도우 확장 인자는 연결 설정 과정에서만 결정될 수 있으며, 연결이 유지되어 있는 동안에는 변경될 수 없다.
109
타임스탬프 (Timestamp) 옵션
110
타임스탬프 옵션의 하나의 응용은 왕복 시간(RTT)를 계산하는 것이다.
Note 타임스탬프 옵션의 하나의 응용은 왕복 시간(RTT)를 계산하는 것이다.
111
Example 15.5 다음 그림은 한쪽 끝에서 왕복 시간을 계산하는 예를 보여준다. 다른 쪽에서 RTT를 계산하고자 한다면 모든 것을 뒤집으면 된다.
112
Note 타임스탬프 옵션은 순서 번호 겹침 방지(PAWS: Protection Against Wrapped Sequence Number) 를 위해서도 사용될 수 있다.
113
SACK-허용, SACK 옵션
114
Example 15.6 순서에 어긋난 블록을 리스트하기 위하여 어떻게 SACK 옵션을 사용하는지를 살펴보도록 한다. 다음 그림에서 한쪽 끝은 다섯 개의 세그먼트를 수신하였다.
115
Example 15.7 그림 15.50에 있는 예는 ACK와 SACK를 이용하여 어떻게 중복 세그먼트를 감지할 수 있는가를 보여준다. 이 그림에서는 (하나의 블록 내에) 여러 개의 순서에 어긋난 세그먼트와 하나의 중복 세그먼트가 있다. SACK는 중복 데이터를 보여주기 위하여 첫 번째 블록을 이용하고, 순서에 어긋난 데이터를 보여주기 위하여 그 다음 블록을 이용한다. 첫 번째 블록만이 중복 데이터를 위하여 사용될 수 있다는 것을 명심해야 한다. 자연적인 질문은 ACK와 SACK 값을 수신했을 때, 송신자는 어떻게 첫 번째 블록이 중복 데이터인지를 알 수 있는 가이다(이 예제와 이전 예제를 비교해보라). 답은 첫 번째 블록에 있는 바이트들은 ACK 필드에 의해서 이미 확인응답되었다는 것이다. 따라서 이 블록은 중복된 것임에 틀림없다.
116
Example 15.7
117
Example 15.8 그림 15.51의 예제는 순서가 어긋나게 들어온 세그먼트 중에서 중복이 발생하는 경우를 보여준다. 이 예에서, 세그먼트 중에 하나(4001:5000)는 중복되었다. SACK 옵션은 먼저 이러한 중복 데이터를 알리고 그 다음에 순서에 어긋난 블록을 알린다. 중복 블록이 ACK에 의해서 아직까지 확인응답되지 않았고, 순서에 어긋난 블록의 일부분(4001:5000은 4001:6000의 일부분)이므로, 송신측은 이것은 중복 데이터라는 것을 알 수 있다.
118
Figure Example 15.8
119
TCP 패키지 TCP는 매우 복잡한 프로토콜이다. TCP는 상태 천이 다이어그램을 이용하는 스트림 서비스와 연결 지향 프로토콜이다. TCP는 흐름과 오류 제어를 이용한다. TCP는 실제의 코드가 수만 라인으로 이루어질 정도로 매우 복잡하다. 이 절에서는 간략한 기본-골격의 TCP 패키지에 대해서 언급하고자 한다. 이 절의 목적은 상태 천이 다이어그램으로 표현되는 TCP의 본질을 보여주는 데 있다. TCP 패키지는 전송 제어 블록(TCB: transmission control block)이라고 하는 테이블과 일련의 타이머, 그리고 메인 모듈, 입력 프로세스 모듈과 출력 프로세스 모듈로 이루어진 세 개의 소프트웨어 모듈로 이루어져 있다. 그림 15.52에는 이러한 다섯 개의 요소와 상호 관계가 나타나있다.
120
Topics Discussed in the Section
Transmission Control Block TCBs Timers Main Module Input Processing Module Output Processing Module
121
TCP 패키지
122
전송 제어 블록(TCB)
131
알림 연습문제 풀이해서 Report로 다음주까지(일주일 후) 제출해 주세요!
Similar presentations