Computer Networking: a Top Down Approach - (10)
Network Layer - (1)
복습
UDP : User Datagram Protocol
DNS 서버에게 IP 주소를 요청할 때 UDP를 사용하는 이유?
DNS는 신뢰성보다 속도가 더 중요하고, 많은 클라이언트를 수용하는 것을 필요로 한다. 따라서 속도가 빠르고, 연결 상태를 유지하지 않고 정보 기록을 최소화하여 많은 클라이언트 수용이 가능한 UDP를 사용한다.
Principle of Reliable Data Transfer 
RDT에서 2가지 안좋은 현상 가능
-
- 패킷 에러
-
- 패킷 loss
1. 패킷 에러 처리하려면
- 에러 발생했는지 탐지 detection
- 탐지되었으면 다시 보내는사람한테 feedback으로 알리기
- 재전송 retransmission
- 재전송하기때문에 그걸 구분하기위한 Seq#
2. 패킷 Loss 처리하려면
- 타임아웃 Timeout 될때까지 피드백 오지않으면 유실이라 판단하고 재전송
Pipelined Protocols
현실적으로 인터넷에서 사용하려면 feedback을 받지 않은 상황에서도 한꺼번에 패킷을 배치처리해서 쏟아부어야한다. -> Pipeline 방식
Pipeline 방식으로 Reliable Data Transfer 구현하는 방법
- go-Back-N
- selective repeat
Go-Back-N 
- 장점 : 동작이 단순하다. Receiver 저장공간 필요없고 Seq# 트래킹해서 저장할필요 X. Sender도 타이머가 1개밖에없다.
- 단점 : 오버헤드가 크다. 하나라도 유실되면 Window 안에있는 모든 패킷 다 재전송
Selective Repeat
- 장점 : 유실된 패킷만 재전송
- 단점 : 구현 복잡. Receiver 더 지능적이고 저장공간 많아야한다. Sender 더 복잡. 모든 윈도우 안에있는 패킷마다 타이머를 가져야한다.
TCP 
- 포인트 to 포인트, 즉 딱 2개의 소켓
- reliable하고 in-order 순서있는 스트림
- 파이프라인 방식
- 양쪽에 각각 버퍼가 2개씩있다. send버퍼/receive버퍼 양쪽에 각각있다.
TCP Segment Structure
TCP Seq# 와 ACKs 
- ACK : cumulative ACK. 사용자A가 보내는 ACK 80 은 79까지 잘 받았고 80번 기다리고 있다는 뜻.
A는 요청하는거 번호 쏘고 B는 요청한거 주면서 Seq는 요청했던거 주면서 그대로 번호 주고 ACK는 다음꺼 보낸다.
TCP Cumulative ACK 
TCP는 패킷 유실에 대처하기위해 Timer 사용. 실제로 timeout 터지면 패킷유실이라고 판단. timeout길이 생각보다 길다. RTT보존값 구한다음 이 값에 마진의 4배해서 매우 넉넉하게 잡아놓는다. 이 계산식은 이전 게시물 참고.
=> 너무 오래 걸린다. 빨리 판단해보자 -> Fast Retransmit
Fast Retransmit
- 같은 Seq#에 해당하는 ACK를 여러개 받으면 패킷유실이라고 판단!
- TCP ACK는 누적이기때문에 중간에 하나 유실된 이후 가는 모든 ACK는 다 유실된 패킷의 Seq#를 가리키기 때문이다.
- 1개 받고 그 뒤에 3개 추가로 와서 총 4개의 같은 번호 ACK 받으면 유실이라 판단
TCP Retransmission 
TCP Congestion Control
- 3개의 메인 Phase 반복됨 1. Slow Start 2. Additive increase : 3. Multiplicative decrease :
Chapter 4. Network Layer
우리는 애플리케이션레이어에서 HTTP, 전송레이어에서 UDP, TCP를 통해 데이터를 주고받을때 어떤내용을 써야하고 어떤 정보를 적어주어야하는지 공부했다. 그럼 이것을 어떻게 TCP 세그먼트를 어떤 경로로 목적지까지 잘 배송시킬지를 생각해봐야한다.
이를 담당하는것은 IP 인터넷 프로토콜 하나뿐이다.
TCP세그먼트가 IP패킷에 담겨지면 라우터는 그 패킷을 받아서 알맞은 경로로 목적지까지 배송해준다.
Router

네트워크 레이어 = “배송담당” 이기때문에 중간에 라우터들은 구현을 네트워크 레이어까지만 하면 된다. 어디로 전달할지만 정해주면 되기 때문이다.
라우터의 역할 2가지
라우터가 너무 많은데 포워딩 테이블 길어지는 것 아닐까?
주소의 범위로 적어놓는다. ex) A부터 B까지 범위는 K로 나가라. 서울, 대전, 부산 이렇게 범위로.
예시
Longest Prefix Matching
DA 1번은 0번과 매칭됨. DA 2번은 2번, 3번 인터페이스와 매칭됨 이런경우 더 구체적으로 일치하는 긴 케이스인 2번과 매칭됨.
우체국이라 생각하면됨.