ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 네트워크 5주차: Transport Layer (Multiplexing, Demultiplexing, PDU, RDT)
    교내 강의/컴퓨터 네트워크 2024. 4. 3. 18:14

    Encapsulation, Decapsulation:

    PDU(Protocol Data Unit):

        Segment: Data Chunk + Port# (Transport layer)

        Datagram: Segment + IP Addr (Network layer)

        Frame: Datagram + HW Addr (Data Link layer)

     

    Multiplexing(다중화): 

        Application Layer->Network Layer로 소켓을 통해 받은 데이터를 세그먼트로 캡슐화하여 네트워크 계층으로 전달

    Demultiplexing(역다중화):

        네트워크 계층으로부터 전달받은 세그먼트의 헤더 정보를 확인하여, 응용 계층의 각각 올바른 소켓으로 전달해 주는 과정

        해더에 있는 주소 정보: Source IP, Port Num, Dest IP, Porst Num

        

    Connectionless Demultiplexing:

        UDP에서 사용, 목적지 포트 번호를 식별해 올바른 소켓에서 demultiplexing함.

    Connection-oriented demultiplexing:

        4 Tuple: source IP Address, source Port number, destination IP Address, destination Port number로 식별함.

        하나의 서버는 여러개의 TCP 소켓을 가질 수 있음.


    UDP(User Datagram Segmant):

        안정성, 진실성x, 빠르기만 함.

        원한다면 진실성 체크는 application layer에서 해야함

        64k-header만큼만 보낼 수 있음, 넘치면 누락됨

        checksum으로 최소한의 확인.

     

    Checksum: 

        1. word(16bit)단위로 더함,

        2. carry 발생 시 0비트에 다시 더해줌

        3. 1의 보수로 바꿔줌

     


    RDT(Reliable Data Transfer):

    네트워크 에러와 그에 대한 해결책들

         checksum, ack, sync flag 등으로 여러번 체크

        

    •     rdt_send() : 상위 계층에서 보내고자 하는 데이터가 있을 경우rdt_send를 호출하여 rdt 프로토콜로 전송한다.
    •     udt_send() : 신뢰할 수 없는 하위 계층으로 데이터를 전송할 때 udt_send를 호출하여 패킷을 보낸다.
    •     rdt_rcv() : 하위 계층에서 보내고자 하는 데이터가 있는 경우 rdt_rcv를 호출하여 받아온다.
    •     deliver_data() : rdt 프로토콜에서 상위 계층으로 데이터를 보낼 때 호출한다. 

    RDT 1.0:

    RDT 1.0에서는 채널이 완벽하게 신뢰할 수 있다고 가정하며,

    오류 검증 및 재전송 과정을 거치지 않고 패킷 송수신.


    RDT 2.0:

    1. checksum으로 오류 검출,

    2. ack/nak 비트로 오류 여부 알림, 

    3. nak시 재전송.

     

    데이터를 전송 후 ack/nak를 stop and wait한다.

     

    문제:

        corrut가 ack/nak에서 발생 시 sender는 receiver의 상태를 알 수 없음,

        무작정 retransmit하면 duplicate이 발생함

    해결 -> RDT 2.1


    RDT 2.1:

        sequence number 사용해서 순서 확인 (홀수짝수)

        sender는 ack, checksum 외에 s_num을 같이 보냄.

        

        duplication은 ack/nak가 corrupted 되었을 때 발생,

        s_num으로 체크 후 duplication일 경우 받은 정보를 전송 (s_num 짝수/홀수를 받았다~..)


    RDT 2.2

    2.1과 동일 하나 nak을 안쓰고 마지막으로 corrupt없이 받은 ack_num을 리턴함

     

    receiver는 0을 받으면 ack로 0을 보냄, 

    sender는 0을 받으면 1을 보냄


     

Designed by Tistory.