490 likes | 955 Vues
Ch. 23 Process-to-Process Delivery, UDP & TCP. Process-to-Process Delivery 개념 UDP TCP SCTP( 생략 ). 23.1 Process-to-Process Delivery. 전송 (Transport) 계층은 프로세스 간의 전달을 책임진다. Client/Server 모델. Client/Server 간의 연결을 위한 주소 로컬 호스트 (IP 주소 ) 로컬 프로세스 (Port 번호 ) 원격지 호스트 (IP 주소 )
E N D
Ch. 23 Process-to-Process Delivery, UDP & TCP Process-to-Process Delivery 개념 UDP TCP SCTP(생략)
23.1 Process-to-Process Delivery 전송(Transport) 계층은 프로세스 간의 전달을 책임진다.
Client/Server 모델 • Client/Server 간의 연결을 위한 주소 • 로컬 호스트 (IP 주소) • 로컬 프로세스 (Port 번호) • 원격지 호스트 (IP 주소) • 원격지 프로세스 (Port 번호)
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)
포트 번호의 IANA 범위 Well-Known Port: 1~1023, IANA에서 통제 Registered Port: 1,024~49,151, 중복방지를 위해 IANA에 등록 Dynamic Port: 49,152 ~ , 자유스럽게 사용, 주로 클라이언트 포트로 활용
소켓 주소 IP주소 + Port 주소
다중화 및 역다중화 주소 지정은 다음과 같은 다중화/역다중화를 수행
전송계층 프로토콜의 두 형태 • Connectionless(비연결) service • 연결 설립, 해제 과정이 없음 • 패킷에 대한 일련번호, ACK 를 사용하지 않음 • 순서가 뒤바뀌거나 손실된 패킷이 도착할 수 있음(비신뢰성) • Ex) UDP • Connection-oriented(연결지향) service • 두 프로세스 간의 연결 설립, 전송, 연결 해제 단계를 수행 • 오류제어, 흐름제어 등의 신뢰성 있는 데이터 전송 서비스 제공 • Ex) TCP, SCTP
신뢰성 대 비신뢰성 • 데이터링크 계층에서 전송의 신뢰성을 위해 오류제어, 흐름제어 기능 등이 규정되더라도, 전송계층에서 End-to-End 간의 신뢰성 제공 기능(오류/흐름 제어 기능 등)이 필요 • 하부 계층의 신뢰성, 응용 프로토콜의 특성에 따라 전송 계층의 프로토콜(UDP, TCP 등)을 선택할 수 있도록 함 • 실제 인터넷에서 데이터 링크 계층의 LLC 기능을 수행하지 않는 구간이 상당히 많음
User Datagram Protocol(UDP) • 비연결형, 신뢰성을 제공하지 않음 • Port 주소 정보만 전달 • 장점 및 용도 • 프로토콜 오버헤드가 최소 • 지연에 민감, 신뢰성이 중요하지 않은 응용 • 로컬 망/근거리 내에 데이터 전송 • 주기적인 간단한 데이터 전송 등
UDP Header • Source/Destination port number • Total length: UDP 헤더 길이 + UDP payload 길이(byte 단위) • Checksum • [Pseudo(의사) 헤더 + UDP 헤더 + UDP payload] 영역의 checksum을 계산 (다음 페이지 참조) • IPv4: 옵션(모든 비트가 다 1이면 checksum 사용하지 않음) • IPv6: 필수
Transmission Control Protocol (TCP) • 연결 지향(Connection-oriented) 프로토콜 • 신뢰성 있는 데이터 전송 계층 프로토콜 • 오류 제어, 흐름 제어, 혼잡(congestion) 제어 기능 제공 • TCP well-known port
TCP 특징 • 스트림(Stream) 모드 서비스 • 연결된 두 TCP 간의 하나의 튜브로 연결된 것 같은 형태로 바이트 스트림을 전송 • 상위 응용 프로세스가 전달하는 메시지의 경계를 맞추어 전달(Block Mode)하지 않는다. • 전송되는 TCP 패킷(세그먼트)의 크기는 TCP 자체적으로 판단
TCP 세그먼트(segment) 송신 및 수신 버퍼
전이중(Full-Duplex) 전송을 지원 • TCP 순서 번호 • 바이트 번호를 사용: TCP 세그먼트의 순서 번호를 사용하지 않고 전송하는 데이터의 순서 번호를 사용함 • 즉 TCP 세그먼트의 순서번호는 해당 세그먼트에 포함된 데이터의 첫번째 바이트 번호를 사용 • TCP의 순서 번호는 임의로 생성(랜덤)된 번호부터 시작 • 항상 0부터 시작하지 않음 • ACK 번호: • 다음 수신하기를 기대하는 바이트 번호 • 누적된 ACK 번호 사용
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) 연결 해제 요청
Window Size: 흐름제어를 위해 사용되며, 현재 수신 버퍼 중 가용 공간 값을 나타냄 Checksum: UDPchecksum과 동일하게 동작(pseudo 헤더 + TCP 헤더 + TCP payload)하지만 TCP에서는 필수적으로 수행됨 Urgent Pointer: 긴급 데이터의 크기를 나타냄
TCP 연결 설정 3-way handshaking: 연결 설정을 위해 3개의 패킷을 주고 받음 ISN(Initial Sequence Number) 교환: 랜덤으로 선정된 ISN 번호를 peer TCP에게 전달 (SYN 비트 설정) SYN 비트 설정 시에는 하나의 sequence를 소비 참고: SYN flooding 공격, 왜 ISN을 0부터 사용하지 않을까?
TCP 연결 해제 +1 +1 Half-close 3-way 또는 4-way handshaking
PUSH 기능 • TCP Stream 모드 기능의 역효과 • 예) 대화형 응용(telnet)에서는 명령어를 즉시 상대 호스트에 전송해야 하나 stream 모드 방식에 의해 즉시 전송되지 않고 버퍼링 될 수 있음 • PUSH 명령은 비록 전송 데이터가 소량이더라도 즉시 TCP segment로 만들어 전송하고, 이 segment를 수신하는 상대 TCP도 즉시 용용 프로세스에게 전달할 것을 지시
Nagle 알고리즘 • 그러면 “TCP는 언제 Segment를 만들어 전송할까?” 에 대한 해답을 제시 • 송신 TCP는 단 한 바이트라도 응용 프로그램으로부터 전달되는 첫 번째 데이터는 세그먼트를 만들어 전송함 • 이후, 송신 TCP는 아래와 같은 조건 중 하나라도 만족하면 세그먼트를 만들어 전송한다. • 수신 TCP로부터 ACK를 받음 • 최대크기의 세그먼트를 구성할 정도로 충분한 데이터가 송신 버퍼에 쌓임 • 현재 TCP는 Nagle 알고리즘을 사용하기 때문에 PUSH 기능을 특별히 사용할 이유가 없음
긴급 데이터 전송 • 필요 이유 • 일반적으로 TCP는 사용자의 전송 데이터를 선착순으로 전송함. • 긴급하게 전송되어야 할 제어 정보를 전송할 별도의 메커니즘이 필요함 • FTP 전송에서 대용량 데이터 전송을 지시한 후, 이를 취소(Ctrl+C) 명령어를 전송할 경우 • 전송 메커니즘 • 긴급 데이터는 버퍼링 되지 않고, 현재 전송되는 세그먼트에 즉시 포함되어 전송됨 • 긴급 데이터는 항상 TCP (일반)데이터 영역 앞에 위치함 • 전송 TCP 세그먼트(URG + Urgent Pointer = 5) • TCP payload 영역은 처음 5바이트는 긴급 데이터임을 수신 TCP에서 인식하여 처리함
흐름 제어(Flow control) • 흐름 제어는 TCP의 수신 버퍼가 overflow 되지 않도록 송신 데이터의 흐름(flow)를 조절하는 기능이다. • Sliding Window 방식 • Data-link계층의 흐름제어와는 아래와 같은 차이가 있음 • 수신 버퍼의 수용 가능한 데이터 바이트 수에 의한 흐름제어 • 수신 TCP는 실제 수용 가능한 바이트 수를 Window 값으로 전달, (수신 버퍼의 크기는 가변적일 수 있음) • EX) TCP Segment(ack=12000, wnd = 2000)
송신 윈도우 Window Size = 6 (재전송을 위해 보관) Can be sent immediately Sent, not ACKed 수신 ACK 및 window 값에 의해 결정 Packet 송신 시마다 증가 • 2바이트 데이터(203~204)를 가진 TCP 세그먼트 송신 후 Sent, not ACKed Can be sent immediately
Sent, not ACKed Can be sent immediately • TCP 세그먼트(ACK=202, wnd=8 수신 후) Sent, not ACKed Can be sent immediately
오류 제어(Error Control) • 오류 탐지 • 손상 세그먼트: TCP checksum에 의해 탐지 • 손실 세그먼트: sequence number 및 ack number로 탐지 • 복구 방법 • 기본적으로는 Go-back-n재전송 • TCP 옵션을 사용하여 selective ACK를 사용할 수도 있다. • ACK 순서번호 • 누적된 ACK 순서번호 사용 • Negative ACK는 사용하지 않는다. • Piggyback ACK 사용
재전송 시점 (아래 조건 중 하나가 발생) • 재전송 타이머(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 구현에 따라 조금씩 다름)
Congestion Control • TCP 전송 경로 상의 라우터의 버퍼 overflow 발생을 제어 • Congestion: 라우터가 처리하는 속도보다 더 빠른 속도로 패킷이 유입되어 버퍼 overflow가 발생 -> 패킷이 폐기됨 • TCP에서 패킷 손실은 네트워크의 Congestion 이라고 가정 • Congestion Window • TCP 송신 Window = Min(rwnd, cwnd) • rwnd: flow control에 의한 receive window • cwnd: Congestion Window
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
multiplicative decrease • congestion 탐지 시, 즉 손실 segment 발생시에 • threshold := cwnd/2, cwnd :=1
SCTP: Stream Control Transport Protocol • 메시지 지향적이며 신뢰성 있는 전송 프로토콜(UDP+TCP) • 연결 관리, 흐름제어, 오류제어, 혼잡제어 기능 제공 • 메시지 경계 준수(block mode) • 다중 stream을동시 전송 • SCTP well-known port