-
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을 보냄
'교내 강의 > 컴퓨터 네트워크' 카테고리의 다른 글
네트워크 6주차: TL (TCP: Window, Timeout) (0) 2024.04.13 네트워크 6주차: TL (rdt 3.0, Packet pipelining (GBN, SR)) (0) 2024.04.12 컴퓨터 네트워크 4주차: p2p, BitTorrent, DHT (0) 2024.03.27 네트워크 3주차 (0) 2024.03.19 네트워크 2주차 (0) 2024.03.12