이번 포스트에서는 TCP의 혼잡 제어에 대해 다루겠다. 먼저 TCP의 재전송에 대해 간단히 정리하고 넘어가겠다, TCP의 재전송 시나리오 : 호스트 A가 시퀀스 넘버 92, 100이라는 세그먼트를 호스트 B로 전송한다. 호스트 B는 해당 세그먼트에 대한 ACK 세그먼트 100, 120을 보냈으나 타임아웃 되기 전에 도착하지 못했다. 타임아웃이 가장 오래된 세그먼트에 걸려 있기 때문에 호스트 A는 시퀀스 넘버 92에 대한 세그먼트를 재전송한다. 호스트 B는 Seq 92를 이미 받았으므로 ACK 120을 재전송한다. 호스트 A는 ACK 120을 받고 Seq 120번부터 전송한다. 혼잡 제어(Congestion Control)란? : 라우터가 버퍼 오버플로우가 발생하지 않게끔 윈도우 사이즈를 조절하는 기법이다..
이번 포스트에서는 TCP의 연결 관리 및 흐름 제어에 대해 다루겠다. RTT : 패킷 하나를 보내고 나서 ACK이 올때까지 걸리는 시간(Queueing 딜레이에 의해 변동) 흐름제어(Flow Control)란? : Sender가 세그먼트를 보낼 때 Reciever의 버퍼 정보를 확인하여 버퍼 오버플로우가 발생하지 않는 만큼만 보내는 기법이다. 흐름제어: Basic Idea Receiver의 여유 버퍼 크기를 receive window 필드를 통해 Sender에게 알려준다. Sender는 RW의 크기에 맞게 세그먼트를 전송한다. 그럼 만약 세그먼트 하나를 보냈는데 Receiver 버퍼가 꽉 차면 Sender는 언제 세그먼트 전송을 재개할까? Receiver가 먼저 Sender에게 RW 사이즈가 담긴 세그먼..
이번 포스트에서는 TCP에 대해 다루겠다. TCP의 특징 : Point-to-point (점대점): 데이터의 시작점과 끝점 사이의 연결을 관리한다. Reliable, in-order byte stream: 신뢰성 보장, 순서대로 온 것만 애플리케이션 레이어로 올려준다. Full duplex data: 양방향 통신, 최대로 보낼 수 있는 세그먼트가 사이즈(MSS)가 정해져 있다. Cumulative ACKs: ACK(10) - 9번까지 잘 받았으니 이제 10번 보내달라는 뜻이다. 페이로드 없고 헤드(20바이트) 부분만 존재한다. Pipelining: 파이프라이닝 방식 사용한다. Connection-oriented (연결 지향): 3-way handshaking으로 연결하고 4-way handshaking으..
이번 포스트에서는 go-back-n과 selective repeat 프로토콜에 대해 다루겠다. 기존의 rdt3.0(stop-and-wait)은 패킷을 보낼 때마다 일정한 RTT(Round Trip Time)를 기다려야 하기 때문에 utilization이 상당히 낮다. 즉, 패킷을 하나 보낸 다음에 응답을 기다리는 동안에 아무런 동작도 하지 않기 때문에 그 네트워크의 효율이 낮다는 것이다. 실제로 확인해보면 패킷을 하나 보내는데에 소요한 시간보다 응답을 기다리는 RTT 시간이 더 길다. Go-Back-N Cumulative ACK: ACK까지 잘 받았다는 의미 (예, 10번까지 잘 받았으니 다음부터는 11번부터 보내줘) Timer: 윈도우의 가장 oldest in-flight 패킷에 설정, 즉 가장 최근에..
이번 포스트에서는 신뢰성 있는 데이터 전송에 대해 다루겠다. 먼저 unreliable channel, 즉 신뢰성 없는 채널은 다음과 같은 요인이 존재한다. 1. Message (packet) error 2. Message (packet) loss reliable channel은 위에 나열된 요인을 없애는 것이 주목표라고 할 수 있다. rdt 1.0 : Reliable Transfer over Reliable Channel (신뢰성 있는 채널이 이미 있다고 가정) 이미 에러도 없고 로스도 없는 환경이다. 그러므로 sender는 단지 헤더를 붙이고 다음 레이어로 전송 receiver는 헤더를 제거하고 다음 레이어로 전송 rdt 2.0 : Channel with Bit Errors (로스는 없고 에러만 존재하..
이번 포스트에서는 Transport Layer에 대해 다루도록 하겠다. Transport Layer의 주요 역할 : logical communication (논리적인 통신) : 어플리케이션 또는 프로세스 간에 어떻게 해야지 데이터를 더 잘 전달하는 지를 담당 segmentation : 송신 쪽에서는 큰 메시지들을 작은 세그먼트로 분리하여 Network Layer로 전달, 수신 쪽에서는 세그먼트들을 재결합하여 Application Layer로 전달 TCP : Congestion control (혼잡 제어) Flow control (흐름 제어) Connection setup (연결) Inordered delivery delay 보장 ❌ bandwidth 보장 ❌ UDP : Unordered delivery ..
이번 포스트에서는 라우팅 알고리즘 중의 "DIstance-Vector Algorithm"에 대해 다루도록 하겠습니다. Distance-Vector Algorithm 이란? : 목적지까지의 모든 거리를 계산하는 게 아니라 목적지까지의 최단거리와 그 목적지까지 가려면 어떤 인접 라우터를 거쳐서 가야하는지를 저장하는 알고리즘입니다. 즉, 거리와 방향만을 고려하는 알고리즘입니다. Distance-Vector 알고리즘 동작 과정 : 자신과 연결된 코스트의 비용이 바뀌거나 주변 인접 노드로부터 DV(Distance Vector)를 받으면 액션을 취한다. 자신의 DV를 다시 계산한다. 자신의 DV가 바뀌면 주변 인접 노드한테 전달한다. Distance-Vector 알고리즘 예시 (1): 공식 : dx(y) = min..
이번 포스트에서는 라우팅 알고리즘 중의 "Link-State Algorithm"에 대해 다루도록 하겠습니다. Link-State Algorithm 이란? : 링크 상태 데이터베이스를 사용하여 목적지까지의 여러 가능한 경로들 중에서 각 링크 비용 합에 기반하여 최소의 경로 비용을 계산하는 라우팅 알고리즘입니다. 즉 쉽게 말해 모든 라우터가 주기적으로 브로드캐스트를 통해 전체 라우터의 토폴로지(topology)를 알아내어 최적의 경로를 계산하는 알고리즘입니다. Link-State 알고리즘 동작 과정 : Initialization: N' = {u} for all nodes v if v adjacent to u then D(v) = Cu,v else D(v) = ∞ Loop find w not in N' suc..
이번 포스트에서는 ICMP에 대해 다루도록 하겠습니다. ICMP 란? : ICMP는 Internet Control Message Protocol의 줄임말로 네트워크 제어 메시지를 전달하기 위해 사용된 프로토콜입니다. ICMP의 특성을 활용하여 만들어진 유틸리티로는 traceroute가 있습니다. ICMP 기능 : Error reporting Echo request/reply Traceroute : 패킷이 목적지까지 도달하는 동안 거치는 라우터의 IP주소를 확인할 수 있는 툴이다. UDP와 ICMP, IP의 TTL(Time To Live)값을 활용한다. Traceroute 동작 과정 : TTL 값을 1로 설정하고 33434번 포트로 UDP 패킷(probes)을 한 번에 세 개씩(안정 보장을 위해) 보낸다...
이번 포스트에서는 DHCP에 대해 다루도록 하겠습니다. DHCP 란? : Dynamic Host Configuration Protocol의 약자이며 호스트의 IP주소와 각종 TCP/IP 프로토콜의 기본 설정을 클라이언트에게 자동적으로 제공해주는 Application Layer의 프로토콜입니다. 즉, 쉽게 말해 우리가 사용하는 IP주소를 자동으로 할당해주는 프로토콜입니다. DHCP의 특징 : 자동 갱신(renew) 주소의 재활용 가능(reuse) 모바일 유저도 사용 가능 IP 충돌 방어 라우터에 구현됨 UDP 사용 DHCP 동작 과정 : 호스트가 브로드캐스팅을 통해 DHCP discover 메시지 전송 DHCP 서버가 듣고 DHCP offer 메시지(IP주소 오퍼)로 회신 호스트가 해당 IP주소를 가지겠다..