1 / 45

Ch. 23 Process-to-Process Delivery, UDP & TCP

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 주소 )

washi
Download Presentation

Ch. 23 Process-to-Process Delivery, UDP & TCP

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Ch. 23 Process-to-Process Delivery, UDP & TCP Process-to-Process Delivery 개념 UDP TCP SCTP(생략)

  2. 23.1 Process-to-Process Delivery 전송(Transport) 계층은 프로세스 간의 전달을 책임진다.

  3. Client/Server 모델 • Client/Server 간의 연결을 위한 주소 • 로컬 호스트 (IP 주소) • 로컬 프로세스 (Port 번호) • 원격지 호스트 (IP 주소) • 원격지 프로세스 (Port 번호)

  4. 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)

  5. Port 번호 사용 예

  6. 포트 번호의 IANA 범위 Well-Known Port: 1~1023, IANA에서 통제 Registered Port: 1,024~49,151, 중복방지를 위해 IANA에 등록 Dynamic Port: 49,152 ~ , 자유스럽게 사용, 주로 클라이언트 포트로 활용

  7. 소켓 주소 IP주소 + Port 주소

  8. 다중화 및 역다중화 주소 지정은 다음과 같은 다중화/역다중화를 수행

  9. 전송계층 프로토콜의 두 형태 • Connectionless(비연결) service • 연결 설립, 해제 과정이 없음 • 패킷에 대한 일련번호, ACK 를 사용하지 않음 • 순서가 뒤바뀌거나 손실된 패킷이 도착할 수 있음(비신뢰성) • Ex) UDP • Connection-oriented(연결지향) service • 두 프로세스 간의 연결 설립, 전송, 연결 해제 단계를 수행 • 오류제어, 흐름제어 등의 신뢰성 있는 데이터 전송 서비스 제공 • Ex) TCP, SCTP

  10. 신뢰성 대 비신뢰성 • 데이터링크 계층에서 전송의 신뢰성을 위해 오류제어, 흐름제어 기능 등이 규정되더라도, 전송계층에서 End-to-End 간의 신뢰성 제공 기능(오류/흐름 제어 기능 등)이 필요 • 하부 계층의 신뢰성, 응용 프로토콜의 특성에 따라 전송 계층의 프로토콜(UDP, TCP 등)을 선택할 수 있도록 함 • 실제 인터넷에서 데이터 링크 계층의 LLC 기능을 수행하지 않는 구간이 상당히 많음

  11. 세가지 프로토콜

  12. User Datagram Protocol(UDP) • 비연결형, 신뢰성을 제공하지 않음 • Port 주소 정보만 전달 • 장점 및 용도 • 프로토콜 오버헤드가 최소 • 지연에 민감, 신뢰성이 중요하지 않은 응용 • 로컬 망/근거리 내에 데이터 전송 • 주기적인 간단한 데이터 전송 등

  13. UDP well-known port

  14. UDP Header • Source/Destination port number • Total length: UDP 헤더 길이 + UDP payload 길이(byte 단위) • Checksum • [Pseudo(의사) 헤더 + UDP 헤더 + UDP payload] 영역의 checksum을 계산 (다음 페이지 참조) • IPv4: 옵션(모든 비트가 다 1이면 checksum 사용하지 않음) • IPv6: 필수

  15. UDP checksum

  16. UDP checksum 예

  17. Transmission Control Protocol (TCP) • 연결 지향(Connection-oriented) 프로토콜 • 신뢰성 있는 데이터 전송 계층 프로토콜 • 오류 제어, 흐름 제어, 혼잡(congestion) 제어 기능 제공 • TCP well-known port

  18. TCP 특징 • 스트림(Stream) 모드 서비스 • 연결된 두 TCP 간의 하나의 튜브로 연결된 것 같은 형태로 바이트 스트림을 전송 • 상위 응용 프로세스가 전달하는 메시지의 경계를 맞추어 전달(Block Mode)하지 않는다. • 전송되는 TCP 패킷(세그먼트)의 크기는 TCP 자체적으로 판단

  19. TCP 세그먼트(segment) 송신 및 수신 버퍼

  20. 전이중(Full-Duplex) 전송을 지원 • TCP 순서 번호 • 바이트 번호를 사용: TCP 세그먼트의 순서 번호를 사용하지 않고 전송하는 데이터의 순서 번호를 사용함 • 즉 TCP 세그먼트의 순서번호는 해당 세그먼트에 포함된 데이터의 첫번째 바이트 번호를 사용 • TCP의 순서 번호는 임의로 생성(랜덤)된 번호부터 시작 • 항상 0부터 시작하지 않음 • ACK 번호: • 다음 수신하기를 기대하는 바이트 번호 • 누적된 ACK 번호 사용

  21. TCP 세그먼트 헤더

  22. 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) 연결 해제 요청

  23. Window Size: 흐름제어를 위해 사용되며, 현재 수신 버퍼 중 가용 공간 값을 나타냄 Checksum: UDPchecksum과 동일하게 동작(pseudo 헤더 + TCP 헤더 + TCP payload)하지만 TCP에서는 필수적으로 수행됨 Urgent Pointer: 긴급 데이터의 크기를 나타냄

  24. TCP 연결 설정 3-way handshaking: 연결 설정을 위해 3개의 패킷을 주고 받음 ISN(Initial Sequence Number) 교환: 랜덤으로 선정된 ISN 번호를 peer TCP에게 전달 (SYN 비트 설정) SYN 비트 설정 시에는 하나의 sequence를 소비 참고: SYN flooding 공격, 왜 ISN을 0부터 사용하지 않을까?

  25. TCP 연결 해제 +1 +1 Half-close 3-way 또는 4-way handshaking

  26. TCP 데이터 전송

  27. PUSH 기능 • TCP Stream 모드 기능의 역효과 • 예) 대화형 응용(telnet)에서는 명령어를 즉시 상대 호스트에 전송해야 하나 stream 모드 방식에 의해 즉시 전송되지 않고 버퍼링 될 수 있음 • PUSH 명령은 비록 전송 데이터가 소량이더라도 즉시 TCP segment로 만들어 전송하고, 이 segment를 수신하는 상대 TCP도 즉시 용용 프로세스에게 전달할 것을 지시

  28. Nagle 알고리즘 • 그러면 “TCP는 언제 Segment를 만들어 전송할까?” 에 대한 해답을 제시 • 송신 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 (재전송을 위해 보관) Can be sent immediately Sent, not ACKed 수신 ACK 및 window 값에 의해 결정 Packet 송신 시마다 증가 • 2바이트 데이터(203~204)를 가진 TCP 세그먼트 송신 후 Sent, not ACKed Can be sent immediately

  32. Sent, not ACKed Can be sent immediately • TCP 세그먼트(ACK=202, wnd=8 수신 후) Sent, not ACKed Can be sent immediately

  33. 오류 제어(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를 동시에 전송

More Related