글 검색

공개된 글의 제목과 본문을 검색합니다.

    닫기 Esc

    Transfort 계층의 가장 기본적인 목적은? Process to Process logical communication

    • 해당 기능을 제공하기 위해서 transfort 계층에서 제공하는 가장 기본적인 기능은 Multiplexing/De-Multiplexing
    • 보내는 측에서는 여러 소켓에서 오는 메세지를 받아야하고
    • 받는 측에서는 네트워크를 통해서 오는 메세지를 목적시 소켓으로 배달해줘야함

    Connection-oriented demux (커넥션 지향 디멀티플렉싱)#

    Connection-oriented는 서버에 여러 어플리케이션들이 있음

    • 각 애플리케이션들은 도어소켓을 열고있고, 클라이언트가 접속하면 별도의 소켓을 열어서 소통
    • Receiver에서 demux를 하기 위해 4가지 정보가 다 필요함
      • source IP address
      • source port number (특정 클라이언트를 위한 포트)
      • dest IP address
      • dest port number (도어소켓 포트번호)
    • 서버쪽 어플리케이션은 자식 proccess를 fork해서 해당 포트만을 담당하도록 함
      • 혹은 threaded server를 통해서 이용할 수 도 있음

    UPD: User Datagram Protocol#

    • connectionless한 transfort
      • no handshaking
      • 각 UDP 세그먼트를 독립적으로 주고받음
    • 네트워크계층에서 post delivery 이외의 추가적 기능을 제공하지 않음
    • best effort 서비스를 제공함
      • best effort = 증권사가 팔 수 있는 한도(매도한도)까지 증권발행을 하는 형식. (출처: 네이버 백과사전)
      • 네트워크가 중간에 데이터가 소실되어도 UPD는 파악이 안되고 알려주지도 않음
      • 최선의 서비스를 제공
    • UDP를 이용하는 어플리케이션
      • 멀티미디어 스트리밍 어플리케이션 (유실에 관대함, 지연에 예민함)
      • DNS
      • SNMP (네트워크 관리 프로토콜)
        • 네트워트 토폴로지 같이 그룹에 묶인 여러 장치들이 중앙의 장치에게 정기적으로 자신의 상태를 REPORT함
    • reliable transfer over UDP = 신뢰성 있게 UDP 보내기
      • 아이러니 하게도 데이터의 무결성이 매우 중요한 어플리케이션의 경우 UDP를 이용하는 경우가 있음
        • 어플리케이션 스스로가 신뢰도를 체크하기 위해서
        • 에러가 발생했을때 리커버 할수있는 방법을 가지고있기 때문에

    UDP: segment header#

    UDP의 장점은 아래와 같음

    • 커넥션이 없기 때문에 오버헤드가 적음
    • 단순함 = sender나 receiver에 대한 커넥션 정보가 없음
    • UDP 세그먼트의 헤더 사이즈가 작음
      • UDP는 멀티플렉싱/디멀티플렉싱만 하기때문에 그 정보만 있으면 됨
    • 혼잡도를 컨트롤하지 않음 = 때문에 어플리케이션이 생성하는 속도로 데이터를 내보낼 수 있게됨

    UDP checksum#

    • Sending UDP는 헤더를 포함한 세그먼트를 16bit integer 의 연속으로 인지함 ⇒ 이걸 다 더함
      • 이걸 checksum 필드에 넣어주게 됨
    • Recevier 측도 동일한 방법으로 더함 그게 Sender측 checksum과 일치하는지 확인함
      • 일치하면 데이터에 문제가 생기지 않았다고 가정할 수 있음
      • 일치하지 않으면? 오는동안 데이터 변형이 발생됨
        • 아예 다르면 슬그머니 드랍함
    • 아주 단순한 방식의 checksum 방식이기 때문에 모든 에러를 검출할 수는 없음

    principles of reliable data transfer#

    • Checksum
      • Recevier가 세그먼트를 받았을 때 오류를 판단할 수 있어야 한다
    • Acknowledgement
      • 일반적으로 Sender에게 패킷을 잘 받았다는것을 알려주기 위함
      • 해당 응답은 individual 혹은 cumulative일 수도 있음
    • Negative acknowledgement
      • Sender에게 어떤 패킷이 잘못됬다 라는것을 알려주기 위함
      • 통하지 않을 수도 있음 = Recevier가 일단 패킷을 받는 경우엔 동작하지만 drop될 경우 받을 수 없음
    • Timer
      • Sender측에서 데이터를 보냈는데 Ack/Nack이 오지 않을 경우 네트워크에서 drop되었다 생각하고 재전송을 함
      • 근데 불필요한 재전송이 발생할 수도 있음 = Recevier는 잘 받고 Ack/Nack을 보냈는데도 응답이 없어질 수도 있음
    • Sequence number
      • 타이머가 보낸걸 또 보낼수도 있기 때문에 시퀀스 넘버가 필요함
    • Window, pipelining
      • 센더와 리시버 사이의 파이프가 있다고 가정 다만 한개의 파이프 라인을 통해서 패킷을 주고받을 경우에 하나를 보내고 하나를 받고 하면 파이프에 하나의 패킷만이 왔다갔다함
      • 파이프의 효율성을 높이기 위한 작업이 파이프라이닝
      • Ack을 받지않은 상태에서 집어넣을 수 있는 최대 데이터량을 윈도우라 함

    Connection-oriented transport: TCP#

    Reliable, in-order byte stream#

    • TCP는 자신이 전송하는 데이터를 byte stream으로 봄
    • TCP는 일단 어플레이션에서 내려오는 데이터를 자신의 버퍼에 담음
      • 해당 버퍼에서 데이터를 뽑을때 순서/혼잡도에 맞게 데이터를 뽑아옴
      • 유저의 메세지 바운더리는 인식하지 않고 바이트의 연속으로 인식함

    Point to Point transfer#

    Sender와 Receiver가 각각 하나씩 존재

    • 단 멀티캐스팅의 경우 Recevier가 여럿일 수 있음

    Full duplex data#

    TCP 커넥션 클라이언트 프로세스와 서버프로세스를 위해 TCP커넥션을 맺으면 동일한 커넥션을 통해서 양방향 통신이 가능

    Pipelined#

    TCP는 파이프의 효율을 높히고 작업량을 높히기 위해 윈도우를 설정 함

    TCP Segment structure#

    • UPD와 마찬가지로 크게 헤더와 페이로드로 나누어짐
    • header에서 options를 제외한 나머지 헤더는 모두 고정
      • TCP의 총 헤더 길이는 가변적임!
      • 때문에 header length 필드가 필요함
    • 고정헤더의 길이는 20byte 크기를 가짐 (32 bit * 5 line)
    • process to precess 를 제공하기 위한 source/dest port를 가짐
    • receive window는 flow control을 위한 필드임
      • 리시버가 받을 수 있는 버퍼사이즈임
    • U, A, P, R, S, F = 6개의 flag 비트
      • A(Acknowledgement와 연관된 필드) = Acknowledgement에 너에대한 정보가 포함되었다는 의미
      • connection estab
        • R(커넥션 리셋)
        • S(커넥션을 맺자는 요청을 보낼때)
        • F(커넥션을 끝낼때)
      • U, P ⇒ 두 플레그는 실제로는 활용되지 않고 잇음
        • P : Push data now
          • 데이터를 내려보내며 소켓 인터페이스에게 해당 데이터를 푸시해달라고 요청이 가능하게 하는 필드
            ⇒ 그러면 모든 버퍼에 있는 데이터와 지금온 데이터 모두를 즉시 내보내야 한다.
            ⇒ 해당 필드가 활성화 되어오면 리시버는 자신의 모든 버퍼를 플러쉬함
        • U : Urgent data
          • 소켓 인터페이스에 Urgent 한 데이터라는걸 표시해주는 플래그
          • P와 마찬가지로 모든 버퍼를 쏴버림
          • Urgent data pointer 필드에 Urgent한 데이터가 어디있는지 표시해서 보내줌

    TCP seq, numbers, ACKs#

    • sequence numbers
      • 세그먼트 페이로드에 실려있는 첫번째 바이트의 번호
    • acknowledgements
      • 누적 ACK을 사용함
      • 다음에 받을 seq를 기대한다!는 의미

    TCP round trip time, timeout#

    Timer는 RTT와 관련이 깊음

    • RTT를 너무 짧게 잡으면? ACK이 오는 중임에도 불구하고 데이터를 다시 보냄
    • RTT를 너무 길게 잡으면? 타이머가 너무 늦게 알아게됨
    • ACK이 들어올때마다 round trip time의 샘플을 구하게 됨 ⇒ 다음번 RTT의 시간을 예측
      • 샘플 하나로는 예상하지 못함
      • 때문에 평균을 내는데, 이때 재전송된 RTT의 시간은 빼고 구함
    • 평균을 이용함에도 불구하고 실제와 차이가 많이남
      • EstimatedRTT에 Safety margin을 더함
      safety margin을 구하는 식
      safety margin을 구하는 식
    전체 글 둘러보기