• 목차
    • Connection Pool에 대한 개념과 기본적인 원리
    • Commons DBCP로 Connection Pool 이해하기

Connection Pool이란?

  • 클라이언트의 요청에 따라 각 어플리케이션의 스레드에서 데이터베이스에 접근하기 위해서는 Connection이 필요하다
  • Connection pool은 이런 Connection을 여러 개 생성해 두어 저장해 놓은 공간, 또는 이 공간의 Connection을 필요할 때 꺼내 쓰고 반환하는 기법을 만한다
스크린샷 2021-08-13 오후 9 44 34

DB에 접근하는 단계

  1. 웹 컨테이너가 실행되면서 DB에 연결된 Connection 객체들을 미리 생성하여 pool에 저장한다
  2. DB에 요청 시, pool에서 Connection 객체를 가져와 DB에 접근한다
  3. 처리가 끝나면 다시
스크린샷 2021-08-13 오후 9 44 45

Connection이 부족하면?

  • 모든 요청이 DB에 접근하고 있고 남은 Connection이 없다면, 해당 클라이언트를 대기 상태로 전환시키고 Pool에 Connection이 반환되면 대기 상태에 있는 클라이언트에게 순차적으로 제공된다

왜 사용할까?

  • 매 연결마다 Connection 객체를 생성하고 소멸시키는 비용을 줄일 수 있다
  • 미리 생성된 Connection 객체를 사용하기 때문에, DB 접근 시간이 단축된다
  • DB에 접근하는 Connection 수를 제한하여, 메모리와 DB에 걸리는 부하를 조정할 수 있다

Commons DBCP로 Connection Pool 이해하기

Commons DBCP 속성 설정

  • Commons DBCP의 속성은 BasicDataSource 클래스의 setter 메서드로 설정할 수 있다

  • Spring 프레임 워크를 사용한다면 다음과 같이 bean 설정으로 속성을 등록한다

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
    destroy-method="close"
    p:driverClassName="${db.driverClassName }"
    p:url="${db.url}"
    p:username="${db.username}"
    p:password="${db.password}"
    p:maxActive="${db.maxActive}"
    p:maxIdle="${db.maxIdle}"
    p:maxWait="${db.maxWait}"
    />

커넥션의 개수

커넥션 풀의 저장 구조

  • 커넥션 생성은 Commons DBCP에서 이루어진다
  • Commons DBCP는 PoolableConnection 타입의 커넥션을 생성하고 생성한 커넥션에 ConnectionEventListener를 등록한다
  • ConnectionEventListener에는 애플리케이션이 사용한 커넥션을 풀로 반환하기 위해 JDBC 트라이버가 호출할 수 있는 콜백 메서드가 있다
  • 생선된 커넥션은 commons-pool의 addObject() 메서드로 커넥션 풀에 추가된다
  • commons-pool은 내부적으로 현재 시간을 담고 있는 타임 스탬프와 추가된 커넥션의 레퍼런스를 한 쌍으로하는 ObjectTimestampPari라는 자료구조를생헝한다
  • 이들을 LIFO(last in first out) 형태의 CursorableLinkedList로 관리한다
스크린샷 2021-08-13 오후 9 58 31

커넥션 개수 관련 속성

속성 이름 설명
initialSize BasicDataSource 클래스 생성 후 최초로 getConnection() 메서드를 호출할 때 커넥션 풀에 채워 넣을 커넥션 수
maxActive 동시에 사용할 수 있는 최대 커넥션 개수 (기본값: 8)
maxIdle 커넥션 풀에 반납할 때 최대로 유지될 수 있는 커넥션 개수 (기본값: 8)
minIdle 최소한으로 유지할 커넥션 개수 (기본값: 0)
  • 8개의 커넥션을 최대로 활용할 수 있고 4개는 사용중이고 4개는 대기 중인 상태

    스크린샷 2021-08-13 오후 11 06 15
  • 커넥션 개수와 관련된 가장 중요한 성능 요소는 일반적을 커넥션의 최대 개수이다

  • maxActive 값은 DBMS의 설정과 애플리케이션 서버의 개수, Apache, Tomcat에서 동시에 처리할 수 있는 사용자 수 등을 고려해서 설정해야 한다.

  • DBMS가 수용할 수 잇는 커넥션 개수를 확인한 후에 어플리케이션 서버 인스턴스 1개가 사용하기에 적절한 개수를 설정한다

  • 사용자가 몰려서 커넥션을 많이 사용할 때는 maxActive 값이 충분히 크지 않다면 병목 지점이 될 수 있다

  • 반대로 사용자가 적어서 사용자가 적어서 상요 중인 커넥션이 많지 않은 시스템에서는 maxActive 값을 지나치게 작게 설정하지 않는 한 성능에 영향이 없다

커넥션을 얻기 전 대기 시간

  • BasicDataSource 클래스의 maxWait 속성은 커넥션 풀 안의 커넥션이 고갈됐을 때 커넥션 반납을 대기하는 시간이며 기본값은 무한정이다
  • 사용자가 갑자기 급증하거나 DBMS에 장애가 발생했을 때 장애를 더욱 크게 확산시킬 수 있어 주의해야 한다.
  • 적절한 maxWait 값을 설정하려면 TPS(transaction per seconds)와 Tomcat에서 처리 가능한 스레드 개수 등을 이해해야 한다

TPS(transaction per seconds)

  • maxActive = 5과 maxIdle = 5, minIdle = 5로 설정한 상황을 가정한다
  • 요청 하나당 쿼리 10개를 실행한다고 가정한다
  • 각 쿼리의 평균 실행 시간은 50밀리초라고 하면 전체 10개 쿼리의 실행 시간은 500밀리초 이다.
  • 요청에 대한 초종 응답 시간은 500밀리초라고 생각할 수 있다.
스크린샷 2021-08-13 오후 11 36 50
  • 커넥션 풀에 이용 가능한 유휴 상태의 커넥션이 5개일 때는 동시에 5개의 요청을 500밀리초 동안 처리한다
  • 따라서 1초 동안에는 10개의 요청을 처리할 수 있고 성능 지수는 10TPS라고 볼 수 있다
스크린샷 2021-08-13 오후 11 39 35

TPS와 커넥션 개수와의 관계

  • 처리할 요청 수가 증가해도 커넥션 풀의 커넥션 개수가 5개이면 10TPS 이상의 성능을 낼 수 없다
  • 1번부터 5번까지 요청이 실행되는 동안은 커넥션 풀에 여분의 커넥션이 없다
  • 6번부터 10번까지 요청은 대기(wait)상태가 되 여분의 커넥션이 생길 때까지 maxWait 값만큼 기다린다
스크린샷 2021-08-13 오후 11 39 41
  • 이를 해결하는 가장 수운 방법은 maxActive 값을 높여서 커넥션 풀의 개수를 늘리는 것이다
스크린샷 2021-08-13 오후 11 42 44
  • 커넥션의 개수를 5에서 10으로 늘리면 전체적인 성능도 10TPS로 증가한다
  • 하지만 일반적을 DBMS의 리소스는 다른 서비스와 공유해 사용하는 경우가 많기 때문에 무조건 커넥션 개수를 크게 설정할 수 없다
  • 따라서 예상 접속자 수와 서비스의 실제 부하를 측정해 최적의 값을 설정하는 것이 중요하다
  • 대기 시간 (wait) 값 조절이 커넥션의 개수를 무한히 늘리지 않고 최적의 시스템을 환겨을 구축하는데 중요한 역할을 한다
  • maxWait 값을 어떻게 설정했는지가 일시적인 과부하 상태에서 드러나는 시스템의 전체적인 견고함을 결정짓는다
스크린샷 2021-08-13 오후 11 47 36
  • 적당한 maxWait 값은 Commons DBCP 외에 Tomcat의 동작 방식도 고려해야 한다
  • Tomcat은 스레드 기반으로 동작해 사용자의 요청을 처리한다
  • Tomcateh 내부에 스레드 풀을 가지고 잇어서 사용자의 요청이 들어올 때마다 스레드 풀에서 하나씩 스레드를 꺼내 요청을 처리한다
  • 1 ~ 5번의 요청이 처리되기 전에 또 다른 요청이 들어온다
  • 즉 동시에 6개의 요청이 들어왔을 때 6번 요청은 여분의 커넥션이 없으므로 maxWait 값 만큼 기다린다 (Tomcat의 스레드가 기다리는 주체이다)

적절한 maxWait 값은?

  • 위의 그림에서 maxWait 속성에 설정한 시간이 10,000 밀리초이면 처리량을 넘어서는 요청의 스레드는 10초 동안 대기 상태에 있게 된다
  • 그리고 사용자의 요청이 계속 증가하면 결국 Tomcat 스레드 풀의 모든 스레드가 소진돼 Tomcat은 아래와 같은 오류를 출력하며 응답을 멈출 것이다
    1
    심각: All threads (512) are currently busy, waiting. Increase maxThreads (512) or check the servlet status
  • 10초 동안의 대기 상태가 해제되고 커넥션을 획득해 사용자의 요청을 열심히 처리하고 응답을 보내도 그 응답을 받을 사용자는 이미 떠나고 난 뒤인 경우도 있다
  • 이럴 경우 사용자가 인내할 수 있는 시간을 넘어서는 maxWait 값은 아무런 의미가 없다
  • 반대의 경우에는 커넥션 풀에 여분이 없을 때마다 오류가 반환된다
  • maxWait 값도 사용자의 대기 가능한 시간 같은, 어플리케이션의 특성 및 자원의 상황을 고려해야한다
  • 만약 갑작스럽게 사용자가 증가해 maxWait 값 안에 커넥션을 얻지 못하는 빈도가 늘어난다면 maxWait을 줄여서 스레드가 한도에 도달하지 않도록 한다
  • 전체 시스템의 장애는 피하고 ‘간헐적 오류’가 발생하는 정도로 장애의 영향을 줄인다
  • 이런 상황이 자주 있다면 Commons DBCP의 maxActive 값과 Tomcat의 maxThread 값을 동시에 늘이는 것을 고려한다
  • 그러나 시스템 자원의 한도를 넘어선다면 시스템을 확충해야한다

커넥션의 검사와 정리

  • 유효성 검사 쿼리 (validation query)와 Evictor 스레드 관련 설정으로도 애플리케이션의 안정성을 높일 수 있다

유효성 검사쿼리의 설정

  • JDBC 커넥션의 유효성에 대한 validationQuery 옵션
    • testOnBorrow: 커넥션 풀에서 커넥션을 얻어올 때 테스트 실행(기본값: true)
    • testOnReturn: 커넥션 풀로 커넥션을 반환할 때 테스트 실행(기본값: false)
    • testWhileIdle: Evictor 스레드가 실행될 때 (timeBetwwenEvictionRunMills > 0) 커넥션 풀 안에 있는 유휴 상태의 커넥션을 대상으로 테스트 실행 (기본값: false)
  • 검증에 지나치게 자원을 소모하지 않게 testOnBorrow와 testOnReturn 옵션을 false로 설정한다
  • 오랫동안 대기상태였던 커넥션이 끊어지는 현상을 막기위해 testWhileIdle 옵션은 true로 설정한다
  • 부적절한 상태의 커넥션이 반납되었을 때 testWhileIdle = true이면 커넥션 풀에서 오류가 발생하는 커넥션을 제외할 수 있다

Evictor 스레드와 관련된 속성

  • Evictor 스레드는 Commons DBCP 내부에서 커넥션의 자원을 정리하는 구성요소이며 별도의 스레드로 실행된다

  • 관련 속성

    • timeBetweenEvictionRunsMills: Evictor 스레드가 동작하는 간격, 기본값은 -1이며 Evictor 스레드의 실행이 비활성화되어있다
    • numTestsPerEvictionRun: Evictor 스레드 동작 시 한 번에 검사할 커넥션 수
    • minEvictableIdleTimeMillis: 스레드 동작 시 커넥션의 유휴 시간을 확인해 설정 값 이상일 경우 커넥션을 제거한다 (기본값: 30분)
  • 역할

    1. 커넥션 풀 내의 유휴 상태의 커넥션 중에서 오랫동안 사용되지 않은 커넥션을 추출해 제거한다

      • Evictor 스레드 실행 시 설정된 numTestsPerEvictionRun 속서값만큼 CursorableLinkedList의 ObjectTimestampPar을 확인한다
      • ObjectTimestampPair의 타임 스탬프 값과 현재 시간의 타임 스탬프 값의 차이가 minEvictableIdleTimeMillis 속성을 초과하면 해당 커넥션을 제거한다
      • 커넥션 숫자를 적극적으로 줄여야한다면 사용하지 않기
    2. 커넥션에 대해서 추가로 유효성 검사를 수행해 문제가 있을 경우 해당 커넥션을 제거한다

      • testWhileIdle = true 일때만 이 동작을 수행한다
      • 첫 번째 작업 시 minEvictableIdleTimeMillis 속성값을 초과하지 않은 커넥션에 대해서 추가로 유효성 검사를 수행하는 것이다.
    3. 앞의 두 작업 이후 남아있는 커넥션의 개수가 minIdle 속성값보다 작으면 minIdle 속성값 만큼 커넥션을 생성해 유지한다

      testWhileIdle=true && timeBetweenEvictionRunMillis > 0이면 위의 3가지 역할을 다 수행하고,

      testWhileIdle=false && timeBetweenEvictionRunMillis > 0이면 두 번째 동작은 수행하지 않는다.

  • 주의점

    • Evictor 스레드는 동작 시에 커넥션 풀에 잠금(lock)을 걸고 동작하기 때문에 너무 자주 실행하면 서비스 실행에 부담을 줄 수 있다
    • numTestsPerEvictionRun 값을 너무 크게 설정하면 Evictor 스레드가 검사해야하는 커넥션 수가 많아져 잠금 상태에 있는 시간이 길어지므로 실행에 부담이 된다.
  • 유용한 방안

    • IDC(internet data center) 정책에 따라서는 서버 간의 소켓 연결 후 정해진 시간 이상 아무런 패킷도 주고받지 않으면 연결을 종료한다
    • timeBetweenEvictionRunsMills 속성으로 의도하지 않게 연결이 끊어지는 것을 방어할 수 있다.
    • ex) 30분 동안 통신이 없을 때 연결이 끊어지는 정책으로 네트워크를 운영한다면, BasicDataSource가 풀링(pooling)하는 커넥션의 수가 30개라고 가정할 때
      • 30분 안에 모든 커넥션에 유효성 검사 쿼리를 한 번씩은 실행하는 것이 바람직하다.
      • Evictor 스레드가 5분에 한 번씩 실행되도록 설정했을 때 30분 동안 Evictor 스레드 실행 횟수는 6번이므로 매번 5개의 커넥션을 검사해야 전체 커넥션을 테스트할 수 있다.
      • 30분 안에 5분마다 Evctor 스레드가 실행되면 6번 실행되지만 오차를 감안해 5번으로 가정하면 이때 설정해야 할 numTestsPerEvictionRun 값은 다음과 같이 구할 수 있다
      • 6 * numTestsPerEvictionRun > 30개
      • 따라서 numTestsPerEvictionRun 속성값은 최소 6 이상이어야 한다. 일반적인 공식으로 정리하면 다음과 같다
      • ('IDC 정책에서 허용하는 최대 유휴 커넥션 유지 시간' / timeBetweenEvictionRunsMillis 속성값) * numTestsPerEvictionRun 속성값) > 전체 커넥션 개수

reference

읽어보면 좋은 것들

Comment and share

  • our goals
    • understand principles behind transport layer services
      • multiplexing, demultiplexing
      • reliable data transfer
      • flow control
      • congestion control
    • learn about Internet transport layer protocols
      • UDP: connectionless transport
      • TCP: connection-oriented reliable transport
      • TCP congestion control

Transport services and protocols

  • provide logical communication between app processes on different hosts
  • transport protocols run in end systems
    • send side: breaks app messages into segments, passes to entwork layer
    • receive side: reassembles segments into messages, passes to app layer
  • more than one transport protocol abailable to apps
    • Internet: TCP and UDP
스크린샷 2021-08-10 오후 4 24 35

Transport vs network layer

  • network layer: logical communication between hosts
  • transport layer : logical communication between processes
    • relies on, enhances, network layer services

Internet transport-layer protocols

  • reliable, in-order delivery (TCP)
    • congestion control
    • flow control
    • connection setup
  • unreliable, unordered delivery (UDP)
    • no-frills extension of “best-effort” IP
  • service not available
    • delay guarantees
    • bandwidth guarantees

Multiplexing/demultiplexing

스크린샷 2021-08-10 오후 4 35 55

How demultiplexing works

  • host receives IP datagrams
    • each datagram has source IP address, destination IP address
    • each datagram carries one transport-layer segment
    • each segment has source, destination port number
  • host uses IP address & port numberes to direct segment to appropriate socket

Connectionless demultiplexing

  • recall: created socket has host-local port #:

    • DatagramSoket mySocket1 = new DatagramSocket(12534)
  • recall: when creating datagram to send into UDP socket, must specify

    • destination IP address
    • destination port #
  • when host receives UDP segment

    • checks destination port # in segment

    • directs UDP segment to secket with that port #

      IP datagrams with same dest. post #, but different source IP addesses and/or source port numbers will be directed to same socket at dest

Connectionless demux: example

스크린샷 2021-08-10 오후 4 54 33

Connection-oriented demux

  • TCP socket identified by 4-tuple
    • source IP address
    • source port number
    • dest IP address
    • dest port number
  • demux
    • receiver uses all four values to direct segment to appropriate socket
  • server host may support many simutaneous TCP sockets
    • each socket identified by its own 4-tuple
  • web servers have different sockets for each connecting client
    • non-persistent HTTP will have different socket for each request

Connection-oriented demux: example

스크린샷 2021-08-10 오후 5 01 17
스크린샷 2021-08-10 오후 5 01 34

UDP: User Datagram Protocol

  • “no frills”, “bare bones” Internet transport protocol
  • “best effort” service, UDP segments may be
    • lost
    • delivered out-of-order to app
  • connectionless
    • no handshaking between UDP sender, receiver
    • each UDP segment handled independently of others
  • UDP use:
    • streaming multimedia apps (loss tolerant, rate sensitive)
    • DNS
    • SNMP
  • reliable transfer over UDP
    • add reliability at application layer
    • application-specific error recovery

UDP: segment header

스크린샷 2021-08-10 오후 5 13 04

UDP checksum

  • Goal: detect “errors” in transmitted segment
  • sender
    • treat segment contents, including header fields, as sequence of 16-bit integers
    • checksum: additon (one’s complement sum) of segment contents
    • sender puts checksum value into UDP checksum field
  • receiver:
    • compute checksum of received segment
    • check if computed checksum equals checksum field value
      • No - error detected
      • YES - no error detected. But maybe errors nonetheless?

Internet checksum: example

스크린샷 2021-08-10 오후 5 21 30

carry된 비트를 더해주고 1의 보수를 취하면 checksum

TCP

  • point-to-point
    • one sender, one receiver
  • reliable, in-order byte stream
    • no “messge boundaries”
  • pipelined
    • TCP congestion and flow control set window size
  • full duplex data
    • bi-directional data flow in same connection
    • MSS: maximum segment size
  • connection-oriented
    • handshaking (exchange of control msgs) inits sender, receiver state before data exchange
  • flow controlled
    • sender will not overwhelm receiver

TCP segment structure

스크린샷 2021-08-10 오후 7 19 58

TCP seq. numbers, ACKs

  • sequnce number
    • byte stream “number” of first byte in segment’s data
  • acknowledgements
    • seq # of next byte expected from other side
    • cumulative ACK
    • Q: how receiver handles out-of-order segments
      • A: TCP spec doesn’t say, up to implementor
스크린샷 2021-08-10 오후 7 27 34
스크린샷 2021-08-10 오후 7 28 49

TCP round trip time, timeout

  • Q: how to set TCP timeout value?
    • longer than RTT
      • but RTT varies
    • too short: premature timeout, unneceessary retransmissions
    • too long: slow reaction to segment loss
  • Q: how to estimate RTT
    • SampleRTT: measured time from segment transmission until ACK receipt
      • ignore retransmissions
    • SampleRTT will vary, want estimated RTT “smoother”
      • average several recent measurements, not just current SamplRTT
스크린샷 2021-08-10 오후 7 35 40
스크린샷 2021-08-10 오후 7 36 00

TCP: reliable data transfer

  • TCP creates rdt(reliable data transfer) service on top of IP’s unreliable service
    • pipelined segments
    • cumulative acks
    • sigle retransmission timer
  • retransmissions triggered by
    • time out
    • duplicate acks
  • let’s initially consider simplified TCP sender
    • ignore duplicate acks
    • ignore flow control, congestion control

TCP sender events

  • data rcvd from app
    • create segment with seq #
    • seq # is byte-stream number of first dta byte in segment
    • start timer if not already running
      • think of timer as for oldest unacked segment
      • expiration interval : TimeOutInterval
  • timeout
    • retransmit segment that caused timeout
    • restart timer
  • ack rcvd
    • if ack acknowledges previously unacked segemtns
      • update what is known to be ACKed
      • start timer if there are still unacked segments
스크린샷 2021-08-11 오후 8 13 14

NextSeqNum은 보내야하는 Seq 번호, SendBase는 보냈지만 ACK 받지 않은 Seq 번호

TCP: retransmission scenarios

스크린샷 2021-08-11 오후 8 17 16
스크린샷 2021-08-11 오후 8 19 12

TCP ACK generation

스크린샷 2021-08-11 오후 8 42 40

TCP fast retransmit

  • time-out period often relatively long
    • long delay before resending lost packet
  • detection lost segments via duplicate ACKs
    • sender often sends many segments back-to-back
    • if segment is lost, there will likely be many duplicate ACKs
  • TCP fast retransmit
    • if sender receives 3 ACKs for same data (“triple duplicate ACKs), resend unacked
      • likely that unacked segment lost, so don’t wait for timeout
스크린샷 2021-08-11 오후 8 49 24

TCP: flow control

스크린샷 2021-08-11 오후 8 52 26
  • receiver “advertises” free buffer space by including rwnd value in TCP header of receiver-to-sender segments
    • RcvBuffer size set via socket options (typical default is 4096 bytes)
    • many operating systems autoadjust RcvBuffer
  • sender limits amount of unacked (“in-flight”) data to receiver’s rwnd value
  • guarantees receive buffer will not overflow
스크린샷 2021-08-11 오후 8 58 14

TCP: connection management

  • before exchanging data, sender/receiver “handshake”
    • agree to establish connection (each knowing the other willing to establish connection)
    • agree on onnection parameters
스크린샷 2021-08-11 오후 9 02 50

Agreeing to establish a connection

  • Q: will 2-way handshake always work in network?
    • variable delays
    • retransmitted messages (e.g. req_conn(x)) due to message loss
    • message reordering
    • can’t “see” other side
스크린샷 2021-08-11 오후 9 05 37

2-way handshake failure scenarios

스크린샷 2021-08-11 오후 9 08 34

TCP 3-way handshake

스크린샷 2021-08-11 오후 9 14 04
스크린샷 2021-08-11 오후 9 15 40

TCP: closing a connection

  • client, server each close ther side of connection
    • send TCP segment with FIN bit = 1
  • responsd to receved FINB with ACK
    • on receiving FIN, ACK can be combined with own FIN
  • simultaneous FIN exchanges can be handled
스크린샷 2021-08-11 오후 9 18 57

client가 마지막에 2 * max segment lifetime을 대기하는 이유는

server측에서 FIN 요청을 하고 ACK를 못 받아서 다시 FIN 요청을 보낼 경우를 대비해서 대기한다

TCP congetion control

  • congestion
    • informally: “toioi many sources sending too much data too fast for network to handle”
    • different from flow control!
    • manifestations
      • lost packets (buffer overflow at routers)
      • long delays (queueing in router buffers)

TCP congestion control: additive increase, multiplicative decrease

  • approach: sender increases transmission rate (window size), probing for usable bandwidth, until loss occurs
    • additive increase: increase cwnd by 1 MSS every RTT until loss detected
    • multiplicative decrease: cut cwnd in half after loss
스크린샷 2021-08-11 오후 11 59 18

TCP Congestion Control: details

스크린샷 2021-08-12 오전 12 06 26
  • sender limits transmission
    • LastByteSent - LastByteAcked <= min(cwnd, rwnd)
  • cwnd is dynamic, function of perceived network congestion
  • TCP sending rate
    • roughly: send cwnd bytes, wait RTT for ACKS, then send more bytes
    • rate = cwnd / RTT (bytes/sec)

TCP Slow Start

  • when connection begins, increase rate exponentially until first loss event
    • initially cwnd = 1 MSS
    • double cwnd every RTT
    • done by incrementing cwnd for every ACK received
  • summary: initial rate is slow but ramps up exponentially fast
스크린샷 2021-08-12 오전 12 10 14

TCP: detecting, reacting to loss

  • loss indicated by timeout
    • cwnd set to 1 MSS
    • window then grows exponetially (as in slow start)
  • loss indicated by 3 duplicate ACKs: TCP RENO
    • dup ACKs indicate network capable of delivering som segments
    • cwnd is cut in half window then grows linearly
  • TCP Tahoe always set cwnd to 1 (timeout or 3 duplicate acks)

TCP: switching from slow start to CA

  • Q: when should the exponential increase switch to linear?
  • A: when cwnd gets to 1/2 of its value before timeout
  • Implementation
    • variable ssthresh
    • on loss event, ssthresh is set to 1/2 of cwnd just before loss event

TCP throughput

  • avg. TCP throughput as function of window size, RTT?
    • ignore slow start, assuum always data to send
  • W: window size (measured in bytes) where loss occurs
    • avg. window size (# in-flight bytes) is 3/4 W
    • avg. throughput is 3/4W per RTT
스크린샷 2021-08-12 오전 12 24 56

TCP Fairness

  • fairness goal
    • if K TCP sessions share same bottleneck link of bandwidth R, each should have average rate of R/K
스크린샷 2021-08-12 오전 12 29 34

Why is TCP fair?

  • two competing sessions
    • additive increase gives slope of 1, as throughout inscreases
    • multiplicative decrease decreases throughput proportionally
스크린샷 2021-08-12 오전 12 29 41

참조

  • 컴퓨터 네트워크 이미정 교수님 강의
  • Computer Networking: A Top-Down Approach Featuring the Internet

Comment and share

Socket programming

  • goal: learn how to build client/server applications that communicate using sockets
  • socket: door between application process and end-end-transport protocol
스크린샷 2021-08-10 오후 1 56 42
  • Two socket types for two transport services
    • UDP : unreliable datagram
    • TCP : reliable, byte stream-oriented
  • Application Example
    1. client reads a line of characters (data) from its keyboard and sends data to server
    2. server receives the data and converts characters to uppercase
    3. server send modified data to client
    4. client receives modified data and displays line on its screen

Socket programming with UDP

  • UDP: no “connection” between client & server
    • no handshaking before sending data
    • sender explicitly attaches IP destination address and port $ to each packet
    • receiver extracts sender IP address and port # from received packet
  • UDP : transmitted data may be lost or received out-of-order
  • Application viewpoint
    • UDP provides unreliable transfer of groups of bytes (“datagrams”) between client and server

Client/server socket interaction: UDP

스크린샷 2021-08-10 오후 2 07 36

Example app: UDP client

스크린샷 2021-08-10 오후 2 09 01

Example app: UDP server

스크린샷 2021-08-10 오후 2 10 30

Socket programming with TCP

  • client must contact server
    • server process must first be running
    • server must have created socket(door) that welcomes client’s contact
  • client contacts server by
    • Creating TCP socket, specifying IP address, port, number of server process
    • when client creates socket
      • client TCP establishes connection to server TCP
    • when contacted by client, server TCP creates new socket for server process to communicate with that particular client
      • allows server to talk with multiple clients
      • source port numbers userd to distinguish clients
  • application viewpoint
    • TCP provides reliable, in-order byte-stream transfer (“pipe”) between cient and server

Client/server socket interaction: TCP

스크린샷 2021-08-10 오후 2 21 11

Example app: TCP client

스크린샷 2021-08-10 오후 2 23 25

Example app: TCP server

스크린샷 2021-08-10 오후 2 26 56

연결을 담당하는 serverSocket 1개와 각 연결이 완료되면 요청마다 처리를 담당하는 connectionSocket이 생성된다

참조

  • 컴퓨터 네트워크 이미정 교수님 강의
  • Computer Networking: A Top-Down Approach Featuring the Internet

Comment and share

Web and HTTP

  • web page consists of objects

  • object can be HTML file, JPEG image, Java applet, audio file, …

  • web page consists of base HTML-file which includes several referenced objects

  • each object is addressable by a URL, e.g.,

    스크린샷 2021-08-04 오후 5 08 42

HTTP overview

HTTP: hypertext transfer protocol

  • Web’s application layer protocol
  • client/server model
    • client: browser that requests, revceives, (using HTTP protocol) and displays Web objects
    • server: Web server sends (using HTTP protocol) objects in response to requests
스크린샷 2021-08-04 오후 5 11 59
  • uses TCP
    1. client initiates TCP connection(creates socket) to server, port 80
    2. server accepts TCP connection from client
    3. HTTP messages (application-layer protocol messages) exchanged between browser (HTTP client) and Web server (HTTP server)
    4. TCP connection closed
  • HTTP is “stateless”
    • server maintains no information about past client requests
    • aside : protocols that maintain "state" are complex!
      • past history (state) must be maintained
      • if server/client crashes, their views of “state” may be inconsistent, must be reconciled

HTTP connections

  • non-persistent HTTP
    • at most one object sent over TCP connection
      • connection then closed
    • downloading multiple obejcts requires multiple connections
  • persistent HTTP
    • multiple objects can be sent over single TCP connection between client, server

Non-persistent HTTP

suppose user enters URL:

www.someSchool.edu/someDepartment/home.index

스크린샷 2021-08-04 오후 6 39 30 스크린샷 2021-08-04 오후 6 39 52

Non-persistent HTTP: response time

  • RTT (definition): time for a small packet to travel from client to server and back
  • HTTP response time
    • one RTT to initiate TCP connection
    • one RTT for HTTP request and first few bytes of HTTP response to return
    • file transmission time
    • non-persistent HTTP response time = 2RTT + file transmission time
스크린샷 2021-08-04 오후 6 45 50

Persistent HTTP

  • non-persistent HTTP issues
    • requires 2 RTTs per object
    • browsers often open parallel TCP connections to fetch referenced objects
    • OS overhead for each TCP connection (each tcp buffer, socket)
  • persistent HTTP
    • server leaves connection open after sending response
    • subsequent HTTP messages between same client/server sent over open connection
    • client sends request as soon as it encounters a referenced object
    • as little as one RTT for all the referenced objects

HTTP request message

  • two types of HTTP messages: request, response
  • HTTP request message
    • ASCII (human-readable format)
스크린샷 2021-08-04 오후 6 57 53

Keep-Alive Header is persistent HTTP configure

general format

스크린샷 2021-08-04 오후 7 00 07

Uploading form input

Method types

  • HTTP/1.0
    • GET
    • POST
    • HEAD
      • asks server to leave requested object out of response
  • HTTP/1.1
    • GET, POST, HEAD
    • PUT
      • uploads file in entity body to path specified in URL field
    • DELETE
      • deletes file specified in the URL field

HTTP response message

스크린샷 2021-08-04 오후 7 07 22

HTTP response status codes

  • status code appears in 1st line in server to client response message
  • some sample codes
    • 200 OK
      • request succeeded, requested object later in this msg
    • 301 Moved Permanently
      • request object moved, new location specified later in this msg (Location Header)
    • 400 Bad Request
      • request msg not understood by server
    • 404 Not Found
      • requested document not found on this server
    • 505 HTTP Version Not Supported

User-server state: cookies

  • many Web sites use cookies four components
    1. cookie header line of HTTP response message
    2. cookie header line in next HTTP request message
    3. cookie file kept on user’s host, managed by user’s browser
    4. back-end database at Web site
  • example
    • Susan always access Internet from PC
    • visits specific e-commerce site for first time
    • when initial HTTP requests arrives at site, site creates
      • unique ID
      • entry in backend database for ID
스크린샷 2021-08-04 오후 4 19 27
  • what cookies can be used for
    • authorization
    • shopping carts
    • recommendations
    • user session state (Web e-mail)
  • how to keep “state”
    • protocol endpoint: maintain stat at sender/receiver over multiple transactions
    • cookies: http messages carry state
  • aside : cookies and privacy
    • cookies permit sites to learn a lot about you
    • you may supply name and e-amil to sites

Web caches (proxy server)

  • goal: satisfy client request with out involving origin server
  • user sets browser: Web access via cache
  • browser sends all HTTP requests to cache
    • object in cache: cache returns object
  • else cache requets object from origin server, then returns object to client
스크린샷 2021-08-04 오후 7 28 32
  • cache acts as both client and server
    • server for original requesting client
    • client to origin server
  • typically cache is installed by ISP (university, company, residential ISP)
  • why Web cacing?
    • reduce response time for cient request
    • reduce traffic on an institution’s access link
    • Internet dense with caches: enables “poor” content providers to effectively deliver content (so Too does P2P file sharing)

Conditional GET

  • Goal: don’t send object if cache has up-to-date cached version
    • reduce delay
    • lower link utilization
  • cache: specify date of cached copy in HTTP request
    • If-modified-since: date
  • server response contatins no object if cached copy is up-to-date
    • HTTP/1.0 304 Not Modified
스크린샷 2021-08-04 오후 7 37 57

참조

  • 컴퓨터 네트워크 이미정 교수님 강의
  • Computer Networking: A Top-Down Approach Featuring the Internet

Comment and share

Application architectures

  • possible structure of applications
    • client-server
    • peer-to-peer (P2P)

Client-server architecture

  • server
    • always-on host
    • permanent IP address
    • data centers for scaling
  • clients
    • communicate with server
    • do not communicate directly with each other
    • may be intermittently(on and off) connect
    • may have dynamic IP addresses

P2P architecture

  • no always-on server
  • arbitrary end systems directly communicate
  • peers request service from other peers, provide service in return to ohter peers
    • self scalability - new peers bring new service capacity, as well as new service demands
  • peers are intermittently connected and change IP address
    • complex management

Processes communicating

  • process: program running within a host

    • within same host, tow processes communicate using inter-process communication (defined by OS)
    • processes in different hosts communicate by exchanging messages
  • clients, servers

    • client process: process that initiates communication

    • server process: process that waits to be contacted

      aside: applications with P2P architectures have client processes & server processes

Sockets

  • process sends/receives messages to/from its socket
  • socket analogous to door
    • sending process shoves message out door
    • sending process relies on transport infrastructure on other side of door to deliver message to socket at receiving process
스크린샷 2021-08-04 오후 2 48 00

Addressing processes

  • to receive messages, process must have identifier
  • host device has unique 32-bit IP address
  • Q: does IP address of host on which process runs suffice for identifying th process?
    • A: no, many processes can be running on same host
  • identifier include both IP adderss and port numbers
  • example port numbers:
    • HTTP server: 80
    • mail server: 25
  • to send HTTP message to www.naver.com web server
    • IP address: 121.33.223.11
    • port number: 80

What transport service does an app need?

  • data integrity
    • some apps (e.g., file transfer, web transactions) require 100% reliable data transfer
    • other apps (e.g., audio) can tolerate some loss
  • timing
    • some apps (e.g., Internet telephony, interactive games) require lo delay to be “effective”
  • throughput
    • some apps (e.g., multimedia) require minimum amount of throughtput to be “effective”
    • other apps (“elastic apps”) make use of whatever throughtput they get

Transport service requirements: common apps

스크린샷 2021-08-04 오후 3 21 17

Internet transport protocols services

  • TCP service
    • reliable transport between sending and receiving process
    • flow control: sender won’t overwhelm receiver
    • connection-oriented: setup required between client and server processes
    • congestion control: throttle sender when network overloaded
    • does not provide: timing, minimum throughput guarantee, security
  • UDP service
    • unreliable data transfer between sending and reveiving process
    • does not provide: reliability, flow control, congestiong control, timing, throughput guarantee, security, or connection setup

      Internet apps: application, transport protocols

스크린샷 2021-08-04 오후 3 33 28

Application layer protocol defines

  • types of messages exchanged
    • e.g., request, response
  • message syntax
    • what fields in messages & how fields are delineated
  • message semantics
    • meaning of information in fields
  • rules for when and how processes send & responsd to messages

참조

  • 컴퓨터 네트워크 이미정 교수님 강의
  • Computer Networking: A Top-Down Approach Featuring the Internet

Comment and share

Disk Structure

  • logical block
    • 디스크의 외부에서 보는 디스크의 단위 정보 저장 공간들
    • 주소를 가진 1차원 배열처럼 취급
    • 정보를 전송하는 최소 단위
  • Sector
    • Logical block이 물리적인 디스크에 매핑된 위치
    • Sector 0은 최외각 실린더의 첫 트랙에 있는 첫 번째 섹터이다

Disk Scheduling

  • Access time의 구성
    • Seek time
      • 헤드를 해당 실린더로 움직이는데 걸리는 시간
    • Rotational latency
      • 헤드가 원하는 섹터에 도달하기까지 걸리는 회전지연시간
    • Transfer time
      • 실제 데이터의 전송 시간
  • Disk bandwidth
    • 단위 시간 당 전송된 바이트의 수
  • Disk Scheduling
    • seek time을 최소화하는 것이 목표
    • Seek time := seek distance
스크린샷 2021-08-03 오후 2 01 34

Disk Management

  • physical formatting (Low-level formatting)
    • 디스크를 컨트롤러가 읽고 쓸 수 있도록 섹터들로 나누는 과정
    • 각 섹터는 header + 실제 data(보통 512 bytes) + trailer로 구성
    • header와 trailer는 sector number, ECC (Error-Correcting Code) 등의 정보가 저장되며 controller가 직접 접근 및 운영
  • Partitioning
    • 디스크를 하나 이상의 실린더 그룹으로 나누는 과정
    • OS는 이것을 독립적 disk로 취급 (logical disk)
  • Logical formatting
    • 파일 시스템을 만드는 것
    • FAT, inode, free space 등의 구조 포함
  • Booting
    • ROM에 있는 “small bootstrap loader”의 실행
    • sector 0 (boot block)을 load하여 실행
    • sector 0은 “full Bootstrap loader program”
    • OS를 디스크에서 load하여 실행

Disk Scheduling Algorithm

  • 큐에 다음과 같은 실린더 위치의 요청이 존재하는 경우 디스크 헤드 53번에서 시작한 각 알고리즘의 수행 결과는? (실린더 위치는 0-199)

    • 98, 183, 37, 122, 14, 124, 65, 67
  • FCFS

  • SSTF

  • SCAN

  • C-SCAN

  • N-SCAN

  • LOOK

  • C-LOOK

FCFS (First Come First Service)

스크린샷 2021-08-03 오후 2 17 35

SSTF (Shortest Seek Time First)

스크린샷 2021-08-03 오후 2 19 20

SCAN

  • disk arm이 디스크의 한쪽 끝에서 다른쪽 끝으로 이동하며 가는 길목에 있는 모든 요청을 처리한다
  • 다른 한쪽 끝에 도달하면 역방향으로 이동하며 오는 길목에 있는 모든 요청을 처리하며 다시 반대쪽 끝으로 이동한다
  • 문제점: 실린더 위치에 따라 대기시간이 다르다 (중앙에 위치한 것이 2배 더 많이 실행된다)
스크린샷 2021-08-03 오후 2 22 43

C-SCAN

  • 헤드가 한쪽 끝에서 다른쪽 끝으로 이동하며 가는 길목에 있는 모든 요청을 처리
  • 다른쪽 긑에 도달했으면 요청을 처리하지 않고 곧바로 출발점으로 다시 이동
  • SCAN보다 균일한 대기 시간을 제공한다
스크린샷 2021-08-03 오후 2 26 31

Other Algorithms

  • N-SCAN
    • SCAN의 변형 알고리즘
    • 일단 arm이 한 방향으로 움직이기 시작하면 그 시점 이후에 도착한 job은 되돌아올 때 service
  • LOOK and C-LOOK
    • SCAN이나 C-SCAN은 헤드가 디스크 끝에서 끝으로 이동
    • LOOK과 C-LOOK은 헤드가 진행 중이다가 그 방향에 더 이상 기다리는 요청이 없으면 헤드의 이동방향을 즉시 반대로 이동한다

C-LOOK

스크린샷 2021-08-03 오후 2 30 03

Disk-Scheduling Algorithm의 결정

  • SCAN, C-SCAN 및 그 응용 알고리즘은 LOOK, C-LOOK 등이 일반적으로 디스크 입출력이 많은 시스템에서 효율적인 것으로 알려져 있음
  • File의 할당 방법에 따라 디스크 요청이 영향을 받음
  • 디스크 스케줄링 알고리즘은 필요할 경우 다른 알고리즘으로 쉽게 교체할 수 있도록 OS와 별도의 모듈로 작성되는 것이 바람직하다

Swap-Space Management

  • Disk를 사용하는 두 가지 이유
    • memory의 volatile한 특성 -> file system
    • 프로그램 실행을 위한 memory 공간 부족 -> swap space (swap area)
  • Swap-space
    • Virtual memory system에서는 디스크를 memory의 연장 공간으로 사용
    • 파일 시스템 내부에 둘 수도 있으나 별도 patition 사용이 일반적
      • 공간 효율성보다는 속도 효율성이 우선
      • 일반 파일보다 휠씬 짧은 시간만 존재하고 자주 참조됨
      • 따라서, block의 크기 및 저장 방식이 일반 파일시스템과 다름
스크린샷 2021-08-03 오후 2 49 13

RAID

  • RAID (Redundant Array of Independent Disks)
    • 여러 개의 디스크를 묶어서 사용
  • RAID의 사용 목적
    • 디스크 처리 속도 향상
      • 여러 디스크에 block의 내용을 분산 저장
      • 병렬적으로 읽어 옴 (interleaving, striping)
    • 신뢰성(reliability) 향상
      • 동일 정보를 여러 디스크에 중복 저장
      • 하나의 디스크가 고장시 다른 디스크에서 읽어옴 (Mirroring, shadowing)
      • 단순히 중복 저장이 아니라 일부 디스크에 parity를 저장하여 공간의 효율성을 높일 수 있다
스크린샷 2021-08-03 오후 2 53 00

Comment and share

  • page 1 of 1

Yechan Kim

author.bio


author.job