전송계층(23장) 강의자료

Download Report

Transcript 전송계층(23장) 강의자료

Ch. 23 Process-to-Process Delivery,
UDP & TCP




Process-to-Process Delivery 개념
UDP
TCP
SCTP(생략)
23.1 Process-to-Process Delivery
 전송(Transport) 계층은 프로세스 간의 전달을 책임진다.
2
Client/Server 모델
 Client/Server 간의 연결을 위한 주소
 로컬 호스트 (IP 주소)
 로컬 프로세스 (Port 번호)
 원격지 호스트 (IP 주소)
 원격지 프로세스 (Port 번호)
3
Port 번호
 16비트 양의 정수 (1~65,535) 사용
 클라이언트 프로세스: 임시 포트 번호(운영체제가 자동 할당)
 서버 프로세스: 특정한 서버 번호를 지정
 결과적으로 클라이언트가 서버에 접속하기 위해서는 서버 IP주소와 서
버 포트 번호를 알아야 함
 Well-Known Port Number(잘 알려진 포트번호)
 흔히 사용하는 서버 프로세스의 포트번호는 이미 약속한 번호로
 Ex) Echo(UDP 7), Daytime(UDP 13), Nameserver(UDP 53)
 Ex) FTP(TCP 20,21), TELNET(TCP 23), HTTP(TCP 80)
4
Port 번호 사용 예
5
포트 번호의 IANA 범위
 Well-Known Port: 1~1023, IANA에서 통제
 Registered Port: 1,024~49,151, 중복방지를 위해 IANA에 등
록
 Dynamic Port: 49,152 ~ , 자유스럽게 사용, 주로 클라이언트
포트로 활용
6
소켓 주소
 IP주소 + Port 주소
7
다중화 및 역다중화
 주소 지정은 다음과 같은 다중화/역다중화를 수행
8
전송계층 프로토콜의 두 형태
 Connectionless(비연결) service
 연결 설립, 해제 과정이 없음
 패킷에 대한 일련번호, ACK 를 사용하지 않음
 순서가 뒤바뀌거나 손실된 패킷이 도착할 수 있음(비신뢰성)
 Ex) UDP
 Connection-oriented(연결지향) service
 두 프로세스 간의 연결 설립, 전송, 연결 해제 단계를 수행
 오류제어, 흐름제어 등의 신뢰성 있는 데이터 전송 서비스 제공
 Ex) TCP, SCTP
9
신뢰성 대 비신뢰성
 데이터링크 계층에서 전송의 신뢰성을 위해 오류제어, 흐름
제어 기능 등이 규정되더라도, 전송계층에서 End-to-End 간
의 신뢰성 제공 기능(오류/흐름 제어 기능 등)이 필요
 하부 계층의 신뢰성, 응용 프로토콜의 특성에 따라 전송 계층의
프로토콜(UDP, TCP 등)을 선택할 수 있도록 함
 실제 인터넷에서 데이터 링크 계층의 LLC 기능을 수행하지 않는
구간이 상당히 많음
10
세가지 프로토콜
11
User Datagram Protocol(UDP)
 비연결형, 신뢰성을 제공하지 않음
 Port 주소 정보만 전달
 장점 및 용도
 프로토콜 오버헤드가 최소
 지연에 민감, 신뢰성이 중요하지 않은 응용
 로컬 망/근거리 내에 데이터 전송
 주기적인 간단한 데이터 전송 등
12
UDP well-known port
13
UDP Header
 Source/Destination port number
 Total length: UDP 헤더 길이 + UDP payload 길이(byte 단위)
 Checksum
 [Pseudo(의사) 헤더 + UDP 헤더 + UDP payload] 영역의 checksum을
계산 (다음 페이지 참조)
 IPv4: 옵션(모든 비트가 다 1이면 checksum 사용하지 않음)
 IPv6: 필수
14
UDP checksum
15
UDP checksum 예
16
Transmission Control Protocol (TCP)
 연결 지향(Connection-oriented) 프로토콜
 신뢰성 있는 데이터 전송 계층 프로토콜
 오류 제어, 흐름 제어, 혼잡(congestion) 제어 기능 제공
 TCP well-known port
17
TCP 특징
 스트림(Stream) 모드 서비스
 연결된 두 TCP 간의 하나의 튜브로 연결된 것 같은 형태로 바이트 스트
림을 전송
 상위 응용 프로세스가 전달하는 메시지의 경계를 맞추어 전달(Block
Mode)하지 않는다.
 전송되는 TCP 패킷(세그먼트)의 크기는 TCP 자체적으로 판단
18
 송신 및 수신 버퍼
 TCP 세그먼트(segment)
19
 전이중(Full-Duplex) 전송을 지원
 TCP 순서 번호
 바이트 번호를 사용: TCP 세그먼트의 순서 번호를 사용하지 않고 전송
하는 데이터의 순서 번호를 사용함
 즉 TCP 세그먼트의 순서번호는 해당 세그먼트에 포함된 데이터의 첫
번째 바이트 번호를 사용
 TCP의 순서 번호는 임의로 생성(랜덤)된 번호부터 시작
 항상 0부터 시작하지 않음
 ACK 번호:
 다음 수신하기를 기대하는 바이트 번호
 누적된 ACK 번호 사용
20
TCP 세그먼트 헤더
21
 Source/Destination Port
 Sequence Number: 전송 데이터의 첫번째 바이트 번호
 ACK Number: 현재까지 오류 없이 성공적으로 수신한 데이터 번호
+1, 즉 다음 수신할 데이터 바이트 번호
 HLEN: 헤더 길이(4바이트 단위), 옵션이 없을 경우 이 필드 값은
5(5X4=20)
 Reserved: 사용하지 않는 필드
 Control Flags






URG(Urgent): 긴급 데이터가 있음
ACK: ACK Number 필드가 의미 있음
PSH(Push): Push 기능을 요구
RST(Reset): 연결을 리셋함
SYN(Synchronize): 연결을 요청하면서 ISN(초기순서번호) 동기화
FIN(Final) 연결 해제 요청
22
 Window Size: 흐름제어를 위해 사용되며, 현재 수신 버퍼 중 가용
공간 값을 나타냄
 Checksum: UDP checksum과 동일하게 동작(pseudo 헤더 + TCP 헤
더 + TCP payload)하지만 TCP에서는 필수적으로 수행됨
 Urgent Pointer: 긴급 데이터의 크기를 나타냄
23
TCP 연결 설정
 3-way handshaking: 연결 설정을 위해 3개의 패킷을 주고 받음
 ISN(Initial Sequence Number) 교환: 랜덤으로 선정된 ISN 번호를
peer TCP에게 전달 (SYN 비트 설정)
 SYN 비트 설정 시에는 하나의 sequence를 소비
 참고: SYN flooding 공격, 왜 ISN을 0부터 사용하지 않을까?
24
25
TCP 연결 해제
 3-way 또는 4-way handshaking
+1
+1
Half-close
26
TCP 데이터 전송
27
PUSH 기능
 TCP Stream 모드 기능의 역효과
 예) 대화형 응용(telnet)에서는 명령어를 즉시 상대 호스트에 전
송해야 하나 stream 모드 방식에 의해 즉시 전송되지 않고 버퍼
링 될 수 있음
 PUSH 명령은 비록 전송 데이터가 소량이더라도 즉시 TCP
segment로 만들어 전송하고, 이 segment를 수신하는 상대
TCP도 즉시 용용 프로세스에게 전달할 것을 지시
28
Nagle 알고리즘
 그러면 “TCP는 언제 Segment를 만들어 전송할까?” 에 대한 해답을
제시
1.
2.
송신 TCP는 단 한 바이트라도 응용 프로그램으로부터 전달되는 첫
번째 데이터는 세그먼트를 만들어 전송함
이후, 송신 TCP는 아래와 같은 조건 중 하나라도 만족하면 세그먼트
를 만들어 전송한다.
 수신 TCP로부터 ACK를 받음
 최대크기의 세그먼트를 구성할 정도로 충분한 데이터가 송신 버퍼에 쌓임
 현재 TCP는 Nagle 알고리즘을 사용하기 때문에 PUSH 기능을 특별
히 사용할 이유가 없음
29
긴급 데이터 전송
 필요 이유
 일반적으로 TCP는 사용자의 전송 데이터를 선착순으로 전송함.
 긴급하게 전송되어야 할 제어 정보를 전송할 별도의 메커니즘이 필요
함
 FTP 전송에서 대용량 데이터 전송을 지시한 후, 이를 취소(Ctrl+C) 명령어
를 전송할 경우
 전송 메커니즘
 긴급
되어
 긴급
 전송
데이터는 버퍼링 되지 않고, 현재 전송되는 세그먼트에 즉시 포함
전송됨
데이터는 항상 TCP (일반)데이터 영역 앞에 위치함
TCP 세그먼트(URG + Urgent Pointer = 5)
 TCP payload 영역은 처음 5바이트는 긴급 데이터임을 수신 TCP에서 인식
하여 처리함
30
흐름 제어(Flow control)
 흐름 제어는 TCP의 수신 버퍼가 overflow 되지 않도록 송신 데이터
의 흐름(flow)를 조절하는 기능이다.
 Sliding Window 방식
 Data-link계층의 흐름제어와는 아래와 같은 차이가 있음
 수신 버퍼의 수용 가능한 데이터 바이트 수에 의한 흐름제어
 수신 TCP는 실제 수용 가능한 바이트 수를 Window 값으로 전달, (
수신 버퍼의 크기는 가변적일 수 있음)
 EX) TCP Segment(ack=12000, wnd = 2000)
31
송신 윈도우
Window Size = 6
(재전송을 위해 보관)
Sent, not ACKed
…
199
200
201
Can be sent immediately
202
203
204
205
206
207
208
209
…
수신 ACK
및 window
값에 의해 결정
Packet 송신
시마다 증가
 2바이트 데이터(203~204)를 가진 TCP 세그먼트 송신 후
Sent, not ACKed
…
199
200
201
202
203
Can be sent immediately
204
32
205
206
207
208
209
…
Sent, not ACKed
…
199
200
201
202
203
Can be sent immediately
204
205
206
207
208
209
…
208 209
…
 TCP 세그먼트(ACK=202, wnd=8 수신 후)
Sent, not ACKed
…
199
200
201
202
203
Can be sent immediately
204
33
205
206
207
오류 제어(Error Control)
 오류 탐지
 손상 세그먼트: TCP checksum에 의해 탐지
 손실 세그먼트: sequence number 및 ack number로 탐지
 복구 방법
 기본적으로는 Go-back-n재전송
 TCP 옵션을 사용하여 selective ACK를 사용할 수도 있다.
 ACK 순서번호
 누적된 ACK 순서번호 사용
 Negative ACK는 사용하지 않는다.
 Piggyback ACK 사용
34
 재전송 시점 (아래 조건 중 하나가 발생)
 재전송 타이머(RTO: Retransmission TimeOut) 만료
 세 개의 중복된 ACK 수신 (Fast Recovery)
 RTO 시간 측정 (TCP 구현에 따라 조금씩 다름)
 RTT 계산
 TCP 세그먼트 전송 시간과 이에 대한 ACK 도착 시간 차이에 의해 측정된 RTT
를 계속해서 갱신
 이때 재전송 TCP 세그먼트는 RTT 계산에서 제외
 RTT = (1-)*RTThistory + *RTTnew
(보통 는 0.5)
 RTO = RTT* (보통  는 2)
 순서가 맞지 않는 TCP 세그먼트 도착 (TCP 구현에 따라 조금씩 다름)
 수신 측에서 임시 저장
 Delayed ACK
 Silly window syndrome 해결을 위해 TCP 세그먼트 수신 후 500ms 시간
이 지난 후 ACK 전송 (TCP 구현에 따라 조금씩 다름)
35
 정상 동작
36
 Segment 손실
37
 Segment 손실 (Fast Recovery)
38
 Segment 손상
39
 ACK 손실
40
Congestion Control
 TCP 전송 경로 상의 라우터의 버퍼 overflow 발생을 제어
 Congestion: 라우터가 처리하는 속도보다 더 빠른 속도로 패킷
이 유입되어 버퍼 overflow가 발생 -> 패킷이 폐기됨
 TCP에서 패킷 손실은 네트워크의 Congestion 이라고 가정
 Congestion Window
 TCP 송신 Window = Min(rwnd, cwnd)
 rwnd: flow control에 의한 receive window
 cwnd: Congestion Window
41
Congestion Control 매커니즘
 slow start
 초기 상태
 cwnd := 1 MSS(최대 세그먼트 크기)
 threshold := Maximum Window Size(최대 윈도우 크기) / 2
 exponential increase(지수 증가)
 송신 성공 시마다, cwnd += ACK된 세그먼트 크기
 계속 Ack된다면 cwnd = 1 MSS -> 2MSS -> 4 -> 8 -> 16 -> …
 additive increase (혼잡 회피)
 cwnd >= threshold 인 경우,
 현재의 cwnd 만큼 ACK 수신 시에 cwnd += 1
 ex) cwnd = 32, threshold = 32
 현재 전송한 32 segment에 대한 ACK가 모두 도착하면 cwnd = 33
42
 multiplicative decrease
 congestion 탐지 시, 즉 손실 segment 발생시에
 threshold := cwnd/2, cwnd :=1
43
SCTP: Stream Control Transport Protocol
 메시지 지향적이며 신뢰성 있는 전송 프로토콜(UDP+TCP)
 연결 관리, 흐름제어, 오류제어, 혼잡제어 기능 제공
 메시지 경계 준수(block mode)
 다중 stream을 동시 전송
 SCTP well-known port
44
 다중 스트림을 위한 chuck를 동시에 전송
45