전송계층(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