• Transport services and protocols
    : 서로 다른 호스트의 프로세스간 논리적인 연결 제공
    : 종단 시스템 간에 동작하는 첫번째 layer
    : send side에서 app msg를 segment로 쪼개 network layer로 전송
    : receive side에서는 segment를 message로 재조립하여 application layer로 전송



    - Transport vs. N
    etwork layer
    : Transport는 프로세스간 논리적인 연결
    : Network는 호스트간 논리적인 연결

  • TCP vs. UDP
    : 두 프로토콜 모두 delay, bandwidth guarantees 이용 불가
    : 많은 application들은 하나의 transport layer protocol을 사용하므로 Multiplexing and Demultiplexing이 필요함

    - TCP(Transmission Control Protocol)
     : 신뢰성, 메세지 순서 보장
     : 연결성(발신자 수신자간 handshaking)
     : point-to-point
     : full duplex (전이중 방식), 하나의 Connection에서 양쪽으로 데이터 흐름
     : 혼잡 제어, pipelined(window size로 혼잡 및 흐름 제어)
     : send & receive buffers
     : HTTP, FTP, SMTP, Telnet 등에 사용


                        TCP segment structure



    ■ 3-hand-shaking 



    ■ 4-hand-shaking



    - UDP(User Datagram Protocol)
     : 비신뢰성, 메세지 비순서
     : 비연결성(발신자와 수신자간의 handshaking 없이 port만으로 소켓 구별, no-frills extension of “best-effort” IP)
     : 설계방식에 따라 full duplex, half duplex (반이중 방식)
     : reliability를 application layer상에 추가(RUDP)할 수 있지만 app-specific error만 복구 가능
     : RTT가 너무 짧으면 불필요한 재전송 발생, RTT가 너무 길면 느린 reaction과 segment 손실 가능성
     : RIP(Routing Information Protocol), DNS, NFS(Network File System), SNMP(Simple Network Management Protocol)등에 사용

     
                        UDP segment structure

      ■ Checksum
        : segment의 에러 체크
        : header + data + pseudo-header의 sum의 16 bit-one's complement 값
        : 모든 Data값과 checksum값을 더했을 때 모든 bit가 1로 채워져있다면 에러가 없음을 의미, 에러가 검출되면 해당 segment는 버려짐
       


     

  • Multiplexing and Demultiplexing


    Demultiplexing
      : host는 IP datagrams을 받음(IP와 PORT로 적합한 소켓을 구별)
       : 각 datagram은 source IP address, destination IP address를 가짐
       : 각 datagram은 1 transport-layer segment를 가짐
       : 각 segment는 source, destination port를 가짐



     1. Connectionless demultiplexing
      

    2. Connection-oriented demultiplexing
      


  • Principles of Reliable data transfer(RDT)
      
       

    : FSM(F
    inite State Machine)? 각각 loop를 돌고 있는 상태
    : ACKs(ACKnowledgements)? 수신자가 패킷을 받았다고 발신자에게 보내는 신호
    : NAKs(Negative ACKnowledgements)? 수신자가 패킷에 에러가 있다고 발신자에게 보내는 신호(seq# ack로 대체)
    : rdt 1.0? 수신, 발신 FSM을 분리 -> rdt 2.0? 에러 복구에 대한 ACK, NAK 도입 -> ACK/NAK 에러 발생시 발신자는 알수없으므로 중복 전송 가능성 -> rdt 2.1? 발신자는 ACK/NAK를 받았을 경우에만 재전송, 각 패킷에 sequence number를 붙임, 수신자는 중복 패킷 버림 (stop and wait) -> ACK/NAK에서 에러가 발생할 경우 전송한 패킷을 재전송 가능성 -> rdt 2.2? NAK 대신 마지막으로 받은 패킷의 seq를 ACK에 붙여 전송 -> 패킷이나 ACK에서 에러나 손실이 발생하면 무한정 기다리게 됨 -> rdt 3.0? time-out 도입

    1. Forward Error Correction(FEC)
      : Realtime communication
      : 수신자로 하여금 에러를 수정할 수 있도록 redundant bits를 추가 
    2. Retransmission
      : 수신자가 에러를 감지하고 발신자에게 data를 다시 전송해달라고 요청
     : ARQ(Automatic Repeat reQuest)
       : 수신자 피드백 방식, 오류검출만으로도 통신회선의 신뢰성 제고, 실시간 처리에는 부적합한 에러 제어 방법
       : 오류 검출, 수신 여부 피드백, 재전송 기능 등이 필요

       ■ Stop and Wait
         : 한 번에 하나씩 긍정 확인응답(ACK)을 받고, 후속 데이터 전송
         
    가장 단순하나, 다소 비효율적
         : 반이중 방식에서도 가능(Pipelining를 이용하여 효율 증가)

        

       ■ Go back N(GBN or Continuous ARQ)     
         
    Pipelining Protocol
         : 반이중 방식
         : Sliding Window 방식
         : 한번에 여러 개를 보낸후 하나의 긍정 확인응답(ACK)을 받고, 후속 데이터 전송.
         : 발신자는 패킷 n에 대해 timeout 발생시 패킷 n과 window 안에 있는 seq #이 n보다 높은 모든 패킷을 재전송
         : 수신자가 예기치 않은 패킷을 받을 경우, 그 패킷을 버리고 가장 최근에 받은 패킷의 ACK를 재전송

        

        

       ■ Selective Repeat
         Pipelining Protocol
         : 전이중 방식
         : Go back N 과 비슷하지만 오류가 발생된 패킷 이후 또는 오류 발생된 패킷만을 재전송
         : 수신자는 순서가 다르더라도 Receiver Window 안에 포함되는 패킷이라면 받을수 있으며 Buffer 해놓음.

        
        




'Major > Network' 카테고리의 다른 글

네트워크 - Link Layer  (0) 2015.12.17
네트워크 - Network Layer  (0) 2015.12.10
네트워크 - Application Layer  (0) 2015.12.02
네트워크 - 기본  (0) 2015.12.01
Big-endian vs Little-endian  (0) 2015.11.16

+ Recent posts