7 (수신된 윈도우 크기)

Download Report

Transcript 7 (수신된 윈도우 크기)

전송 제어 프로토콜
박신애
2013.05.08
[email protected]
Content
•
•
•
•
•
•
•
•
•
•
•
전송 제어 프로토콜
TCP 서비스
바이트 번호 지정
순서번호
세그먼트
연결
흐름제어
어리석은 윈도우 신드롬
오류제어
TCP 타이머
혼잡제어
전송 제어 프로토콜
• 전송 제어 프로토콜
▫
▫
▫
▫
Transmission Control Protocol ( TCP )
연결 지향 프로토콜
신뢰성 있는 프로토콜
신뢰성은 있지만 복잡한 전송 프로토콜
전송 제어 프로토콜
• 포트번호
▫ TCP 또한 전송층 주소로 포트번호 사용
Port
Protocol
Description
Port
Protocol
Description
7
Echo
Echoes a received datagram back to the
sender
23
TELNET
Terminal Network
25
SMTP
Simple Mail Transfer Protocol
53
DNS
Domain Name Server
67
BOOTP
Bootstrap Protocol
79
Finger
Finger
80
HTTP
Hypertext transfer Protocol
111
RPC
Remote Procedure Call
9
Discard
Discard any datagram that is received
11
Users
Active users
13
Daytime
Returns the data and the time
17
Quote
Returns a quote of the day
19
Chargen
Returns a string of characters
20
FTP,Data
File Transfer Protocol (data connection)
21
FTP,CTR
File Transfer Protocol (control connection)
표1. TCP에서 사용되는 잘 알려진 포트들
TCP 서비스
• 스트림 전송 서비스
▫ UDP와 달리 스트림 지향 프로토콜
▫ 두 프로세스간 데이터 운반 할 수 있는 가상의 ‘튜브’ 연결
▫ ‘튜브’를 통해 바이트 흐름으로 데이터를 전달 및 수신
Sending Process
Receiving Process
Stream of bytes
TCP
TCP
TCP 서비스
• 송신 및 수신 버퍼
▫ 송신과 수신이 같은 속도로 데이터를 처리 불가
▫ TCP는 저장을 위한 원형 배열 버퍼가 필요
Sending Process
TCP
Receiving Process
TCP
TCP 서비스
• 바이트와 세그먼트
▫ 전송층에서 TCP는 세그먼트로 전송
▫ 다수의 바이트를 묶어 그룹화 한 패킷을 세그먼트라 함
▫ 세그먼트는 동일한 크기로 전송되지 않음
Sending Process
Segment N
Segment 1
Receiving Process
….
TCP
TCP
TCP 서비스
• 전이중 서비스
▫ TCP는 데이터가 동시에 양방향으로 전달 가능
• 연결 지향 서비스
▫ TCP는 연결 지향 서비스로 다음과 같은 과정으로 동작
1.
2.
3.
A의 TCP는 B의 TCP를 통지하고 B의 TCP로부터 동의를 얻는다.
A의 TCP와 B의 TCP는 양방향으로 데이터를 교환한다.
양쪽에 송신 할 데이터가 없는 경우 두 TCP는 버퍼를 제거한다.
• 신뢰성 있는 서비스
▫ 확인 응답 기법으로 데이터 도착을 확인
바이트 번호 지정
• 바이트의 번호 지정
▫ 세그먼트에는 추정을 위한 세그먼트 번호를 위한 영역 없음
▫ 바이트 번호인 순서번호와 확인 응답 번호 영역이 존재
• 바이트 번호
▫ 연결 상태에서 전송되는 모든 데이터 바이트에 TCP 번호 부여
▫ 0 부터 시작하지 않으며 0~4294967295 사이의 임의 번호로 시작
▫ 흐름 및 오류 제어에 사용
순서번호
• 순서번호
▫ TCP는 각 세그먼트에 순서번호 할당
▫ 세그먼트에 운반되는 첫 번째 바이트 번호
• (문제) TCP연결이 6000byte를 전송할 때, 첫 번째 바이트
는 10010 번호가 부여되어있다. 첫 4개 세그먼트는 1000
byte를 나머지는 2000byte 운반할 때 순서번호는 ?
▫
▫
▫
▫
▫
세그먼트 1 -> 순서번호: 10010
세그먼트 2 -> 순서번호: 11010
세그먼트 3 -> 순서번호: 12010
세그먼트 4 -> 순서번호: 13010
세그먼트 5 -> 순서번호: 14010
순서번호
• 확인 응답 번호
▫ 수신한 바이트의 확인을 위해 확인 응답 번호 사용
▫ 확인 응답 번호는 수신해야 하는 다음 바이트 번호로 지정
• 주의
▫ 5642 번까지 수신하고 5643 번호로 확인 응답 번호를 전송했을 때
5643 byte를 수신했다는 의미가 아님을 주의 한다.
▫ 첫 번째 byte 의 번호가 0 부터 시작하지 않기 때문.
세그먼트
• 세그먼트
▫ TCP를 사용하는 두 장치 사이에 데이터 전송 단위
▫ 20~60 byte 헤더와 데이터로 구성
세그먼트
• 세그먼트
Header
Data
Destination port address (16bits )
Source port address (16bits )
Sequence number ( 32bits )
Acknowledgment number ( 32bits )
HLEN
(4bits)
Reserved
(6bits)
u a p r s f
r c s s y i
g k h t n n
Checksum (16bits )
Window size(16bits )
Urgent pointer (16bits )
Options and padding
세그먼트
• 세그먼트
▫
▫
▫
▫
▫
발신지 포트: 전송 호스트에 있는 응용 프로그램의 포트 번호
목적지 포트: 수신 호스트에 있는 응용 프로그램의 포트 번호
순서번호: 세그먼트에 포함된 첫 데이터 바이트에 할당된 번호
확인 응답 번호: 송신자로부터 받기를 기대하는 바이트 번호
헤더길이 ( HLEN )
 20~60byte가 될 수 있으며, 5(5*4=20)~15(15*4=60) 사이의 값
▫ 윈도우 크기: 상대방이 유지해야 하는 바이트 단위의 윈도우 크기
▫ 긴급 지시자: 긴급 플래그 설정 시 유효하며 긴급 데이터 번호지정
▫ 제어 ( control )
 여섯 개의 다른 제어 비트 또는 플래그 비트를 정의
세그먼트
• 세그먼트
▫ 윈도우크기 ( window size )
 상대방 쪽이 유지해야 하는 바이트 단위의 윈도우 크기
▫ 긴급 지시자 ( urgent pointer )
 긴급 플래그가 설정되었을 때만 유효하며 긴급 데이터 번호지정
▫ 제어 ( control )
 여섯 개의 다른 제어 비트 또는 플래그 비트를 정의
세그먼트
• 세그먼트
▫ 제어 (control): 여섯 개의 다른 제어 비트 또는 플래그 비트를 정의
flag
Description
URG
The value of the urgent pointer field is valid
ACK
The value of the acknowledgment field is valid
PSH
Push the data
RST
The connection must be reset
SYN
Synchronize sequence numbers during connection
FIN
Terminate the connection
표2. 제어 항에서의 플래그 설명
연결
• 연결 설정
▫
▫
▫
▫
TCP는 전이중 모드로 데이터를 전송
연결 설정을 위해서는 네 단계가 필요
두 번째와 세 번째를 합쳐 세 단계로 연결 설정가능
세 단계 연결을 삼방향 핸드셰이크(three way handshke)라 함
연결
• 연결 설정
Time
Time
삼방향 핸드 셰이크 연결 설정
연결
• 연결 종료
▫ 양방향 연결을 종료하기 위해 네 단계 필요
▫ (주의) 한 쪽에서 연결을 종료해도 다른 한쪽은 데이터 송신 가능
연결
• 연결 종료
Time
Time
네 단계 연결 종료
연결
• 연결 재설정
▫ 현재 연결이 훼손되었을 때 재설정 요청
▫ 연결 재설정은 세가지 경우 중 한가지 경우에 발생
1.
2.
3.
TCP가 존재하지 않은 포트의 연결 요청을 받은 경우 다른 쪽 TCP는
요청을 무효로 하는 RST 세그먼트를 보낼 수 있다.
한쪽의 비정상 적인 상황 때문에 연결 중지를 위해 RST 세그먼트를
보낼 수 있다.
TCP가 오랫동안 유휴상태인 것을 발견하여 연결을 없애기 위해 RST
세그먼트를 보낼 수 있다.
흐름제어
• 슬라이딩 윈도우 프로토콜
▫ 흐름 제어를 위한 바이트 단위의 윈도우
▫ 전송된 바이트의 확인 응답이 오면 버퍼의 윈도우 위치가 이동
Occupied part of the buffer
Empty to be
fill by process
Sent and
Sent, not
acknowledged.
acknowledged
recycled
Can be sent immediately
211
210
209
208
207
206
205
204
Next byte to be sent
203
202
201
200
흐름제어
• 수신자 윈도우
▫ 수신자가 수신 가능 한 바이트 크기를 말함
▫ 수신 버퍼 전체 크기 – 수신된 크기 = 수신자 윈도우
Empty, to receive more
bytes from network
Occupied part of the buffer
199
198
197
196
195
Consumed and
recycled
194
13 (수신 전체 버퍼 크기) – 6(수신된 크기) = 7 (수신된 윈도우 크기)
흐름제어
• 송신자 윈도우
▫ 수신자 윈도우 크기보다 작거나 같을 때 흐름제어 가능
▫ 확인 응답이 되지 않은 바이트와 송신 가능한 바이트
Size = receiver window
211
210
209
208
207
206
205
204
203
202
201
Next byte to be sent
200
흐름제어
• 송신 윈도우의 이동
Size = receiver window
1. 2 byte 송신
2. 203 확인 응답 수신
211
210
209
208
207
206
205
204
203
a. before
Size = receiver window
211
b. after
210
209
208
207
206
205
204
203
202
201
200
흐름제어
• 송신자 윈도우 확장
▫ 수신 프로세스가 수신 데이터보다 빠르게 처리될 때 수신자 윈도우
크기가 확장 됨
▫ 수신자 윈도우 크기 확장으로 송신자 윈도우 확장
• 송신자 윈도우 축소
▫ 수신 프로세스가 수신 데이터보다 느리게 처리될 때 수신자 윈도우
크기가 축소 됨
▫ 수신자 윈도우 크기 축소로 송신자 윈도우 축소
흐름제어
• 송신자 윈도우 종료
▫ 수신자 버퍼가 완전히 채워져 수신자 윈도우 크기가 0 일 때
▫ 0이 수신되면 송신자 윈도우 종료
▫ 종료된 송신자 윈도우는 어떤 데이터도 송신 불가
어리석은 윈도우 신드롬
• 어리석은 윈도우 신드롬
▫ 데이터를 느리게 만들거나 수신 측에서 늦게 처리하거나 혹은 둘
다 일 경우 매우 작은 세그먼트로 데이터를 송신하는 결과를 초래
하여 운용 효율성을 감소 시킬 수 있는 상황을 말함
어리석은 윈도우 신드롬
• 송신자에 의해 생성된 신드롬
▫ 한 바이트만으로 세그먼트가 만들어져 송신되는 문제 발생
▫ 데이터를 한 바이트로 전송하지 못하도록 하여 문제 해결
▫ Nagle의 알고리즘
 송신 윈도우 크기가 1byte 일지라도 송신 응용프로그램으로 부터 받은
첫 데이터를 세그먼트로 송신 한다.
 확인 응답 메시지가 도착 할 때까지 송신 버퍼에 축적 후 송신하거나 최
대 크기 세그먼트가 채워지면 송신한다.
어리석은 윈도우 신드롬
• 수신자에 의해 생성된 신드롬
▫ 한 번에 한 바이트씩 처리하는 문제 발생
▫ Clark의 해결방법
 데이터 도착 즉시 확인 응답
 세그먼트 축적하기에 충분한 공간이 있거나 버퍼의 절반이 비어 있을
때까지 0값의 윈도우 크기를 통지
▫ 확인 응답 지연
 데이터 도착 즉시 확인 응답 하지 않음
 균형을 위해 확인 응답은 500ms 이상 지연 되면 안됨
오류제어
• 오류제어
▫ 손상, 유실, 순서가 어긋난 것들과 중복 세그먼트를 찾아내는 기법
▫ 검사합, 확인 응답, 시간종료(time-out)로 컨트롤
▫ (주의) TCP는 부정적인 확인 응답이 없음
오류제어
• 유실 또는 손상 세그먼트
▫ 손상 세그먼트는 목적지에서 폐기
▫ 유실 세그먼트는 목적지에 도착하지 못한 세그먼트
▫ 발신지와 목적지 관점에서 유실 또는 손상세그먼트는 동일
오류제어
• 유실 또는 손상 세그먼트
OK OK
time-out
OK
Time
Time
오류제어
• 중복 세그먼트
▫ 다른 세그먼트로 수신된 동일한 순서번호를 갖는 세그먼트 폐기
• 순서 없는 세그먼트
▫ 순서가 어긋나게 수신된 세그먼트
▫ 뒤의 세그먼트가 먼저 도착 시 앞의 세그먼트들이 모두 도착 후 확
인 응답 송신
▫ 확인 응답이 늦어져 재전송 되더라도 중복 세그먼트는 폐기되어 문
제 발생하지 않음
오류제어
• 유실된 확인 응답
Acknowledgment
lost
OK OK OK
Time
Time
TCP 타이머
• TCP 타이머
Timers
Retransmission
Persistence
Keep-alive
Time-waited
TCP 타이머
• 재전송 타이머 (Retransmission)
▫ 유실되거나 폐기된 세그먼트를 제어하기 위하여 확인 응답 대기 시
간을 처리하는 타이머
▫ 동작 방법
 TCP가 세그먼트 하나를 전송할 때 재전송 타이머 생성
 타이머가 종료되기 전 확인 응답을 수신하면 해당 타이머 제거
 타이머가 종료된다면 세그먼트 재전송 후 타이머 재생성
TCP 타이머
• 재전송 타이머 (Retransmission)
▫ 재전송 시간계산
 각 연결의 경로와 길이가 달라 동일한 재전송 시간을 사용할 수 없음
 네트워크 환경이 유동적이어서 단일 연결을 위해서도 재전송 시간은 고
정될 수 없음
 왕복 시간(round-trip time, RTT) 를 기반으로 동작 생성
재전송 시간 = 2 x RTT
TCP 타이머
• 재전송 타이머 (Retransmission)
▫ RTT 계산
 TCP 타임스탬프 값 사용
 세그먼트 하나를 전송하여 확인 응답이 올 때까지의 왕복시간으로 사용
 아래 식으로 계산 α의 일반적인 값은 90%
RTT = α(이전 RTT)+(1-α)(현재 RTT)
▫ Karm 알고리즘
 (문제) 세그먼트가 확인 응답이 없어 재전송된 후 도착한 확인 응답이
재전송에 대한 응답인지 원래의 세그먼트의 응답인지 알 수 없음
 (해결) 세그먼트 송신 후 재전송 없이 확인 응답을 수신할 때까지 RTT
값 갱신하지 않음
TCP 타이머
• 영속 타이머 (Persistence Timer)
▫ 송신 TCP가 0 크기 윈도우 확인 응답을 수신하면 영속 타이머 시작
▫ 영속 타이머 종료 후 프로브(probe) 세그먼트 송신
▫ 프로브(probe) 세그먼트
 1byte 만을 갖는 세그먼트
 확인 응답 수신되지 않으며, 수신데이터를 위한 순서번호 계산 무시
 수신 TCP에게 확인 응답이 손실되어 재전송이 필요하다는 경고 메시지
TCP 타이머
• 연결 유지 타이머 (keep-alive Timer)
▫ 오랫동안 유휴 연결 방지를 위해 일부 구현에 사용
▫ 동작 방법






서버와 클라이언트가 연결이 되면 타이머 시작
클라이언트는 서버에게 연결 유지 연락을 송신
서버는 타이머 재 설정
만약 타이머가 종료되었다면 클라이언트에 프로브 세그먼트 송신
프로브 세그먼트 송신 후 클라이언트에 연락 없으면 연결 종료
보통 타이머는 2시간이며, 프로브 세그먼트는 75초 간격으로 10번 송신
• 시간 대기 타이머
▫ 연결을 종료하는 동안 사용되는 타이머
혼잡제어
• 혼잡
▫ 혼잡이 발생하는 원인
1. 라우터의 패킷 처리 속도보다 더 빠르게 패킷 수신
2. 라이터에서의 패킷 손실로 송신 TCP는 확인 응답 수신 불가
3. 송신 TCP 세그먼트 재전송
4. 재전송에 의해 혼잡현상이 심해짐
• 혼잡 윈도우
▫ 송신자의 윈도우 크기는 네트워크의 혼잡에 의해서 결정될 수 있음
실제 윈도우 크기 = 최소치(수신자 윈도우 크기, 혼잡 윈도우 크기)
혼잡제어
• 혼잡 회피 (Congestion Avoidence)
▫ 혼잡을 회피하기 위한 송신 TCP의 전략
▫ 종류





슬로우 스타트 (slow start)
덧셈 증가 (additive increase)
곱셈 감소 (multiplicative decrease)
빠른 재전송 (fast retransmit)
빠른 복구 (fast recovery)
혼잡제어
• 혼잡회피
▫ 슬로우 스타트




혼잡 윈도우 크기를 최대 세그먼트 크기로 설정
임계치(threshold)를 윈도우 크기의 반으로 설정
확인 응답 수신마다 혼잡 윈도우 크기를 두 배로 증가
(주의) 혼잡 윈도우 크기 증가가 느리다는 뜻으로 프로세스는 전혀 느리
지 않음
▫ 덧셈 증가
 혼잡 회피를 위해 지수적인 증가를 늦춰야 함
 임계치에 도달 후 여러 세그먼트의 확인 응답이라도 한 세그먼트 만큼
크기 증가
 타임 아웃 되거나 수신자 윈도우 크기와 같을 때까지 계속 됨
혼잡제어
• 혼잡회피
▫ 곱셈감소




혼잡 발생 시 혼잡 윈도우 크기 감소 필요
송신 TCP는 세그먼트 유실 시 혼잡 짐작 가능
타임 아웃 발생 시 임계치를 이전 혼잡 윈도우 크기의 절반으로 재설정
혼잡 윈도우 크기는 하나의 최대 세그먼트 크기부터 재시작
혼잡제어
• 혼잡회피
▫ 곱셈감소
혼잡제어
• 혼잡회피
▫ 빠른 재전송 (fast restransmit)
 현 순서의 세그먼트가 아닌 그 후의 세그먼트가 도착했을 경우 송신
TCP 에 duplicate ack 를 보냄
 순서대로 도착 후 확인 응답 ack를 보냄
 만약 확인 응답이 아닌 duplicate ack를 연속적으로 수신한다면 손실 가
능성이 높아 재전송 타이머 종료 후 재전송
혼잡제어
• 혼잡회피
▫ 빠른 복구 (fast recovery)
 보통 빠른 재전송 후 슬로우 스타트가 동작한다.
 빠른 복구에선 혼잡 윈도우 크기를 반으로 줄인 후 선형 증가