IP Datagram

 

[ IP Datagram ]

 

<왼쪽 위부터 오른쪽 방향으로 차례대로 보시면 됩니다.>

- TCP 헤더 + IP 헤더 = 20 bytes + 20 bytes = 최소 40 bytes의 헤더크기를 가진다

(세그먼트 헤더와 데이터그램 헤더를 합친 값)

 

- Version : IP 프로토콜 버전 번호 ex) IPv4, IPv6

 

- HLEN : Header Length, 세그먼트의 헤더는 제외한 IP데이터그램의 헤더 길이(크기)

 

- Type of Service : 제공하는 서비스의 코드값으로 라우터로부터 받아야할 서비스를 기재하는데 실제로는 거의 사용하지 않는다.

 

- Total Length : 데이터그램의 전체 바이트 길이로, MTU에 제한을 받으며 최대 216제곱 바이트까지 가질 수 있다.

 

- Identification : 패킷들로 분할하는 단편화와 재조합을 위한 16비트의 식별자

 

- Flags : 6종류의 플래그 비트(URG, PSH, RST, SYN, FIN)가 있으며, 각 플래그 비트는 1비트를 가진다. 대표적으로 연결 설정할 때 필요한 SYN, 연결 끊기에 필요한 RST, 연결 해제에 필요한 FIN이 있다.

 

- Fragment Offset : 단편화와 재조합에 필요한 필드이다.

 

- TTL : Time-To-Live의 약자로, 최대 초기화값은 255이다. TTL은 데이터 전달을 확인하고자 최종 목적지에 도착할 때는 TTL=0의 값을 가져야한다. 하나의 지점을 지나갈 때마다 TTL1씩 감소하며, 최종 목적지가 아닌데 0이 되면 오류발생지로부터 출발지에 오류를 보낸다.

 

- Protocol : (UDP인지 TCP인지) 어느 프로토콜인지 알려주는 코드값이다.

 

- Header Checksum : 헤더에 대한 오류검사를 위한 필드로, 검사합(Checksum)은 전체 데이터그램을 합한 값의 1의 보수값이 저장된다. 수신측에서는 검사합과 실제 데이터그램의 합한 값을 더해보고 숫자 0이 들어갔을 경우 오류로 간주한다.

 

- Source IP Address : 출발지 IP 주소(32비트)가 저장된다.

 

- Destination IP Address : 목적지 IP 주소(32비트)가 저장된다.

 

- IP Options (if any) : 옵션이 없으면 헤더값 20바이트로 고정되지만 있으면 헤더값이 가변적일 수 있으므로 헤더 길이를 기재한다. 방문한 라우터들의 리스트를 명시하거나 타임스탬프를 기록한다. 선택적 필드이므로, 옵션을 제외한 나머지 필드는 무조건 있어야 한다.

 

- Padding : 글자 그대로 여백

 

- Data : TCPUDP 세그먼트가 저장되어 있다.

 

 


 

IP 단편화 (Fragmentation), 재조합 (Reassembly)

 

- 네트워크 링크들은 최대 전송 단위(MTU)를 가지는데, MTUFrame(2계층 데이터 단위)의 최대 크기이다.

 

- 단편화(Fragmentation) : 크기가 큰 IP 데이터그램은 망 내부에서 다수의 작은 데이터그램들로 분할된다. 하나의 데이터그램에 딱 한 번만 가능하다.

 

- 분할된 데이터그램들은 각각 독립된 객체로 취급받으며 개별적으로 캡슐화된다. , 분할된 데이터그램들은 각각 별도의 오버헤드가 생긴다.

 

- 재조합(Reassembly) : 최종 목적지에서 분할된 데이터그램들이 재조합되어 하나의 데이터그램이 된다. 따라서 하나라도 순서가 어긋날 경우 나머지 분할된 데이터그램들은 대기해야 한다.

 

- IP 헤더 필드값(Identification)을 보고 분할된 데이터그램들을 식별하여 재조합한다. , 같은 IP 헤더값을 가진 데이터그램들만 재조합한다.

 

- 목적지에서 재조합을 위한 버퍼가 있는데, 분할된 데이터그램들을 저장해놨다가 하나가 손실될 경우 재조합 타이머(Reassembly timer)Time-Out 나면, 출발지에서 재전송한다.



 

 


IP 주소(Addressing)

 

- IP 주소는 32비트 크기로, 호스트와 라우터 인터페이스에 대한 식별자이다.

 

- 인터페이스(Interface) : 호스트 또는 라우터와 통신 링크 사이의 연결을 의미한다.

 

- 라우터는 일반적으로 다수의 인터페이스를 가진다. 여러 개의 서브넷(Subnet)을 연결하는 중심 매체 역할을 하기 때문이다.

 

- 호스트는 일반적으로 하나 또는 둘의 인터페이스를 가진다.

 

- IP 주소는 각 인터페이스와 연관된다.

 

- 인터넷 네트워킹은 많은 서브넷(부분적인 네트워크)이 모인 전체 네트워킹이다. 같은 서브넷에 속한 인터페이스의 IP 주소는 앞부분이 똑같다. 이 앞부분을 Subnet Prefix라고 한다.

 

- 같은 서브넷끼리는 라우터를 거치지 않는다. 라우터는 서로 다른 서브넷들을 연결하기 때문이다.

 


 

 

사이더(CIDR)

 

- Classless Inter Domain Routing의 약자로, 클래스 없는 도메인 간의 라우팅 기법이다.

 

- 기존의 도메인은 Class A, Class B, Class C, Class D, Class E 로 나누어져 각기 다른 형식을 가진 주소로 이루어져있는데, 클래스 A, B, C까지는 유니캐스트(unicast) 주소이고, 클래스 DE는 멀티캐스트(multicast) 주소이다. IP주소 중 n 비트까지는 network 주소가 들어가고 나머지는 다른 주소가 들어가는 등의 방식으로 주소가 다양하다.

 

- 사이더는 최신의 IP 주소 할당 방법으로 기존의 IP 주소 할당 방식인 네트워크 클래스를 대체한다.

 

- IP 주소의 영역을 여러 네트워크 영역으로 나눌 때 기존방식에 비해 유연성을 더한다. 특히 IPv4 주소가 급격히 부족해지고 있으므로 해당 버전보다 효율적으로 사용하게 해준다.

 

- 접두어(Subnet Prefix)를 이용한 주소 지정 방식을 가지는 계층적 구조(Host IP < Subnet < Internet)를 활용하여 인터넷 광역 라우팅의 부담을 줄여준다. 여기서 사용하는 접두어는 Subnet에 포함되는 호스트 IP들을 대표하는 역할을 한다. 개개의 IP주소들을 포워딩 테이블에 저장하게 되면 탐색시간이 너무 길어진다는 문제점(광역 라우팅)을 해결한다.

 

- CIDR은 IP 주소를 Subnet portion(네트워크 주소) 부분과 Host portion(특정 호스트 주소) 부분으로 나눈다

 

- 표기 방식은 a.b.c.d/x (실제로는 문자가 아닌 숫자) 인데, 여기서 x는 Subnet portion의 비트 수이다.






IP 주소 할당(DHCP)

 

- IP 주소를 할당하는 방식에는 WindowsUNIX에서 두 가지가 있다.

  • 직접 설정하여 고정된 IP 주소를 가지는 방법

  • DHCP를 통해 동적으로 할당받는 방법

- 직접 고정된 IP 주소를 설정할 경우 주소의 비효율적인 사용이 되기 때문에 대부분 동적할당방법을 선택한다.

 

- DHCP : Dynamic Host Configuration Protocol의 약자로, 동적 호스트 구성 프로토콜을 의미한다. 클라이언트가 네트워크 관리자(DHCP 서버)에게 주소가 필요하다는 요청을 보내면 DHCP 서버에서 중앙에 관리하던 IP 주소들 중 하나를 클라이언트에게 동적으로 할당해준다.

 

- DHCP는 사용자들이 자주 바뀌는 환경(학교나 기업 등)에서 유용하다.

 

- 동적으로 할당한다.”는 의미는 사용 가능한 IP주소보다 더 많은 호스트(클라이언트)가 있는 경우에 IP 주소의 할당시간을 짧게 하여 네트워크를 동적으로 재구성할 수 있음을 뜻한다.

 

- 웹서버와 같이 영구적인 IP주소를 필요로 할 경우 정적인 주소를 제공한다.

 

- DHCP를 사용하는 목적

  • 호스트가 네트워크에 접속할 때 서버로부터 IP 주소를 동적으로 획득한다.

  • 네트워크에 연결되었을 때만 주소를 가지므로 연결이 안되어있을 때, 다른 클라이언트가 주소를 재사용할 수 있다.

  • 짧은 시간 동안에 네트워크에 연결되는 모바일 사용자(스마트폰, 태블릿 등)를 지원한다.

- DHCP 동작

  • 호스트는 DHCP 서버 발견(DHCP discover) 메시지를 브로드캐스트(broadcast)방식으로 발송
  • DHCP 서버는 DHCP 제공(DHCP offer) 메시지로 호스트에게 응답
  • 호스트는 DHCP 요청(DHCP request) 메시지로 IP 주소를 서버에 요청
  • DHCP 서버는 DHCP ACK 메시지로 호스트가 사용할 IP 주소를 전송

 

- 브로드캐스트 방식으로 소통하는 이유 : 맨 처음에 서버가 하나 이상일 수 있어서 통신할 서버의 주소를 모르기 때문에 호스트는 목적지 IP주소란에 브로드캐스트 주소를 넣어 메시지(데이터)를 보낸다. 이후, 서버로부터 받은 메시지(데이터)에서 서버의 주소를 알게 된 후 그 주소로 메시지를 보내면 2계층에서 오버헤드(MAC주소추가) 되었을 때 ARP 프로토콜이 처음 소통했던 서버의 주소와 다른 것으로 인지하고 중간에 데이터를 버린다. 브로드캐스트가 아닌 다른 IP 주소의 MAC주소가 2계층에서 추가되므로 서버 발견 메시지를 보냈을 때와 DHCP 요청 메시지를 보낼 때의 목적지 IP주소가 달라지기 때문이다. , 브로드캐스트로 통신을 시작했기 때문에 시작할 때와 다른 주소를 사용하여 데이터를 보내면 데이터는 버려진다.





▶ 인터넷 서비스 제공자(ISP)


- 인터넷 서비스 제공자(Internet Service Provider, ISP)에 의해 계층적으로 IP주소가 관리되어 라우팅 정보를 효율적으로 알린다. 여기서 효율성이란 포워딩 테이블에서 주소를 검색하는 시간을 짧게 하는 것을 의미한다


- 서브넷(Subnet) : 어떤 기관에 소속되어 있지만 분리되어 하나로 인식될 수 있는 네트워크망을 의미한다. 범위는 근거리 통신망 내에 속하는 모든 호스트들이 될 수 있다.



- 포워딩 테이블에서 Entry 수는 서브넷(Subnet)을 대표하는 라우터의 개수인데개개의 호스트들의 IP주소를 엔트리로 하면, 포워딩 테이블에서 주소를 탐색하는 시간이 길어지기 때문에 대표 라우터의 IP주소로 테이블을 구성하여 테이블 크기를 줄여서 탐색시간을 짧게 한다.


- 즉ISP가 계층적으로 주소를 관리하므로, 해당 서브넷에 해당하는 IP주소를 알리면 인터넷(Internet)에 연결되어있을 때 해당 Subnet에 포함되는 IP주소의 호스트와 통신할 수 있게 된다.

 

- ISPSubnet을 알 수 있는 방법은 인터넷 관련 최상위 기관인 국제인터넷주소관리기구(Internet Corporation for Assigned Names and Numbers, ICANN)에 의해 정보를 제공받기 때문이다. ICANN은 인터넷 DNS의 기술적 관리, IP 주소공간 할당, 프로토콜 관리, 루트 서버 시스템 관리 등의 업무를 조정한다.

 

 


 

▶ 네트워크 주소 변환(NAT)

 

- 네트워크 주소 변환(Network Address Translation, NAT)은 수많은 Subnet으로 이루어진 광범위한 네트워크에서 통신하기 위해 사용된다.

 

- Subnet 내부 통신의 경우 : private 제한을 가지는 홈 네트워크 같은 로컬 네트워크에서 데이터를 주고받게 된다. 이 때 라우터를 거치지 않고 자신의 IP주소를 사용한다.

 

- Subnet 외부 통신의 경우 : 자신의 IP와 같은 IP주소가 다른 Subnet에 있을 수 있기 때문에 라우터를 거쳐 갈 때 단 하나의 NAT IP주소로 변환되어 통신을 하게 된다. 당연히 통신을 하는 상대의 IP주소도 NAT IP주소로 변환된 것이다.


[ 라우터를 기준으로 좌 외부 통신(Internet), 우 내부 통신 ]



[ 라우터(NAT)를 기준으로 좌 내부 통신, 우 외부 통신(Internet) ]


- NAT IP주소로 변환되는 과정에서 IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하게 되는데, 패킷에 변화가 생기는 것이므로 IPTCP/UDP의 체크섬도 다시 계산된다. 이는 호스트 간의 통신에 복잡성을 증가시키는 것으로 네트워크 성능에 영향을 준다.

 

- 그럼에도 NAT IP주소로 변환하는 이유는 위에서도 언급했듯이 광범위한 네트워크에서 쉽고 빠른 통신을 위해 여러 개의 호스트가 하나의 공인 IP주소를 사용하여 인터넷에 접속하기 위해서이다.

 

- 다시 말해, 복잡성이 증가함에도 공인 IP주소를 사용하는 것은 여러 호스트에서 하나의 IP 주소를 공유함으로서 라우터의 탐색 시간을 줄여 보다 빠르게 통신하기 위해서이다.


- NAT 전의 ISP는 Subnet에 포함되는 IP 주소들(사설 IP)의 시작주소(Subnet Prefix)를 알렸는데, 여기서는 NAT에 의해 변환된 단 하나의 공인 IP주소(NAT IP주소)를 사용함으로서 ISP로부터 호스트별 주소를 할당받지 않고 단 하나의 IP주소만을 할당받는다.

 

- 공인 IP주소는 Subnet 외부의 통신을 위해 할당받는 것이기 때문에 로컬 네트워크에서 호스트의 주소를 바꾸게 되어도 Subnet 외부에는 알려지지 않는다. 그 외 다른 정보도 외부로부터 숨겨질 수 있어서 보안성이 더해진다.

 

- 로컬 네트워크에서는 기기의 주소를 바꾸지 않고, ISP만 바꾸는 것도 가능하다.

 

- NAT은 변환 테이블(Translation Table)을 통해 기존의 IP주소 및 포트번호와 대응되는 NAT IP 주소 및 새로운 포트 번호를 기억한다.

 

- 끝으로, NAT 라우터는 무조건 들어오고, 나가는 데이터그램의 헤더에 저장된 IP 주소, 포트 번호와 대응되는 NAT IP 주소, 새로운 포트 번호로 변환해야한다.






 

 

Network Layer (네트워크 계층, 3계층)

 

- 송신 호스트에서 수신 호스트로 세그먼트를 전송한다.

 

- 송신 호스트에서 세그먼트를 데이터그램(datagram)으로 캡슐화한다.

 

- 수신 호스트에서 세그먼트를 전송 계층(4계층)으로 전송한다.

 

- 네트워크 계층이 모든 호스트와 라우터에서의 프로토콜을 지정한다.

 

- 라우터는 해당 라우터를 통과하는 모든 IP 데이터그램에 있는 헤더 필드를 검사한다.

 

 

 

Network Layer Functions and Plane

 

- 라우팅 (Routing) : 출발지에서 목적지까지의 모든 경로를 결정한다. 라우터에서 라우팅 알고리즘으로 포워딩 테이블을 만든다. 포워딩 테이블에는 목적지 IP 주소와 해당 포트번호가 저장되어 있다.

 

- 포워딩 (Forwarding) : 라우터 내부에 입력 버퍼와 출력버퍼가 있다. 입력버퍼로 들어온 패킷의 헤더에 있는 IP주소와 포워딩 테이블의 IP주소를 비교하여 적절한 포트번호를 가진 출력 버퍼로 패킷들을 옮긴다.

 

- 라우팅이 출발지에서 목적지까지 여행을 계획하는 과정이라면, 포워딩은 여행 중간의 하나의 지점을 지나가는 과정이다.

 

- Control plane

  • 넓은 네트워크의 논리적인 부분을 담당하는 뇌의 역할을 한다.

  • 데이터그램이 종단 사이에 라우터들에 의해 어떻게 라우팅되는지 결정한다.

  • 하드웨어 측면에서 라우터에 의해 구현되는 전통적인 라우팅 알고리즘 방식
  • 소프트웨어 측면에서 서버에 의해 구현되는 SDN(Software-Defined Networking) 방식
  • Per-Router Control plane : 각 라우터마다 있는 라우팅 알고리즘이 Control plane의 상호작용을 한다.

  • Logically Centralized Control plane : 별도로 중앙에 배치된 컨트롤러가 local control agents(CAS)로 각 라우터와 상호작용한다. 중앙에서 control plane이 이루어짐.

- Data plane

  • 각 라우터의 포워딩 함수들을 동작한다. , 다리가 동작하는 것과 유사하다.

  • 라우터 입력 버퍼에 도착한 데이터그램이 어떻게 출력 버퍼로 포워딩되는지 결정한다.

 


 

 

 

Network Service Model

 

- 송신자에서 수신자에게 데이터그램들을 전송하는 채널에 대한 서비스 모델은 두 가지가 있다.

 

- 각각의 데이터그램에 대한 서비스 : 지연 시간이 40ms 보다 적은 상태로 전달된다.

 

- 일련의 데이터그램들에 대한 서비스 : 순서가 중요한 데이터그램을 위한 서비스로, 전송을 위해 최소한의 대역폭이 보장된다. 또한 각 패킷간의 간격에서 변화(ex : Jitter)가 제한적이다.

ex) 영상코덱(MPEG)

 

 

 

라우터 입력 포트의 기능 (3계층)

 

- 패킷의 헤더 필드 값(목적지 IP주소)을 보고, 포워딩 테이블에 있는 출력 포트 번호를 찾는다.

 

- 포워딩 테이블에 있는 IP주소와 패킷의 목적지IP주소를 비교하는데 시간이 오래 걸린다.

 

- 큐잉(Queuing) : 데이터그램이 포워딩하는 속도보다 더 빨리 입력 포트에 도착하면, (입력 버퍼)에 저장된다.

 

- 목적지 기반의 포워딩 : 목적지 IP 주소만을 이용하여 포워딩한다. 전통적인 방식이다.

 

- 일반화된 포워딩 : 헤더 필드 값의 전체를 이용하여 포워딩한다.

 

 

 

목적지 기반의 포워딩

 

원래는 IP 주소를 범위로 정해 포트 번호를 구분한다. ]

 

- IP 주소가 32비트이다보니 전체 값을 저장하면 테이블이 너무 커진다. 따라서 IP 주소에서 앞부분에 정해진 비트까지만 보여주고 범위(range)를 정하여 포트번호를 구분한다. , 주소의 앞쪽만 매칭시켜서 해당 포트번호로 보낸다.

 

- Longest prefix matching : 패킷의 목적지 IP주소가 포워딩 테이블에서 둘 이상의 IP주소 범위에 포함될 경우, 그 중 비트가 가장 많이 공개된(가장 긴 prefix) IP 주소 범위의 포트번호로 포워딩한다.

 

[ 밑에 있는 예제의 정답은 위에서부터 01이다. ]


- TCAMs : Ternary Content Addressable Memories 의 약자로, 실제 라우터가 포워딩 테이블에서 IP 주소를 탐색하는데 시간이 많이 걸리므로 라우팅의 속도를 빠르게 하기 위해 IP 주소 검색을 위한 포워딩 테이블이 저장되는 메모리이다.

 

 

 

Switching fabrics

 

- 스위치 내부에서 각 입출력 포트를 가상의 회선으로 그물 또는 직물처럼 연결하여 구성되는 모양을 섬유(fabric)로 비유한 것이다. , 스위치 내부가 직물 또는 망처럼 보이는 모양

 

- 입력 버퍼로부터 적절한 출력 버퍼로 패킷을 전송한다.

 

- Switching rate : 입력 포트에서 출력 포트로 패킷을 전송할 수 있는 속도로, 종종 다수의 입출력 라인 속도에서 측정되어진다. n개의 입력이 있을 때, 스위칭 속도는 입력 라인 속도의 N배가 요구된다.

 

[ 스위칭 구조 분류  ]


- Switching via Memory

  • CPU의 직접적인 제어 아래에 스위칭하는 전통적인 컴퓨팅 방식으로, 첫 세대 라우터들의 스위칭 구조이다.

  • 패킷이 시스템 메모리로 복사된다.

  • 속도가 메모리 대역폭에 의해 제한된다.

  • 메모리에 접근하는 시간도 많이 걸린다.

 

- Switching via a Bus

  • 버스 구조는 2 이상의 신호선들을 모아놓은 것으로, 디지털 시스템에서 디지털 요소들을 상호 연결하는데 필요한 데이터 신호 통로들의 구조화된 그룹이다.

  • 입력 포트 메모리로부터 출력 포트 메모리까지 하나의 공유된 버스를 통해 데이터그램을 스위칭한다.

  • Bus contention : 스위칭 하는 속도는 버스의 대역폭에 의해 제한된다.

  • ex) Cisco 5600 제품이 32Gbps의 속도를 가진 버스 구조로 접근성에 있어서 충분한 속도를 가진다.

 

- Switching via Crossbar

  • 제한적인 버스 대역폭을 해결한다.

  • 다수의 프로세서들을 연결하기위해 개발된 interconnection nets, banyan networks, crossbar 망이다.

  • 진보된 구성으로는, 데이터그램을 고정된 길이의 셀들로 분할하여 단편화한다.

  • ex) Cisco 12000 제품이 interconnection network를 통해 60Gbps의 속도로 스위칭한다.

 

 

 

입력 포트 큐잉(Queuing)

 

- 큐잉은 입력 큐(버퍼)에서 패킷이 저장되는 것을 의미한다.

 

- 입력 큐(버퍼)가 꽉 차면 오버플로우(Overflow)가 발생했다고 한다.


- 큐잉 지연(Queuing delay) : 큐에서 패킷들이 대기하는 시간이다.

 

- 오버플로우가 발생하면 큐잉 지연(Queuing delay)이 일어나고 전송 속도가 저하된다. 또한 큐에 들어오지 못한 패킷들은 손실된다.

 

- HOL blocking : Head-of-the-Line blocking 의 약자로, 큐에서 저장된 패킷들 중 앞에 있는 패킷이 속도가 느려 뒤에 있는 패킷이 못가는 상황을 말한다. , 둘 이상의 다른 입력 버퍼에서 같은 출력 버퍼로 이동하는 패킷들이 있을 때, 하나가 이동하면 다른 입력 버퍼의 맨 앞의 패킷은 이동할 수 없다. 그러면 대기하는 패킷의 뒤에 있는 패킷들도 덩달아 대기해야하는 상황을 말한다.

 

 

 

라우터 출력 포트의 기능 (3계층)

 

- 버퍼링(Buffering)

  • 더 빠른 속도의 구조(fabric)로 인해 발생한다. 혼잡 제어나 버퍼공간의 부족으로 데이터그램(패킷들)이 손실될 수 있다.

  • 스위치를 통해 도착하는 속도가 출력 라인 속도보다 크면, 버퍼링이 발생한다.

  • 출력 버퍼에서 오버플로우가 발생하게 되면 큐잉 지연 및 패킷의 손실이 발생한다.

- 스케줄링(Scheduling) : 최고의 성능을 내기 위해 전송할 패킷의 우선순위를 조정하는 기능이다. 기본적으로 FIFO(First-In-First-Out)방식이다.

 

 

 

출력 포트 스케줄링(Scheduling)

 

- 스케줄링이란 링크로 보낼 다음 패킷을 결정하는 것이다.

 

- FIFO 스케줄링 : 기본적인 방식으로 처음 큐에 도착하는 패킷이 먼저 전송된다. 즉 순서에 맞게 전송한다.

 

- 오버플로우 발생 시 패킷을 버리는 방법

  • tail drop : 꼬리 자르듯이 도착하는 패킷들을 버린다.

  • priority : 우선순위를 기반으로 낮은 순위의 패킷들을 버린다.

  • random : 무작위로 패킷을 뽑아 버린다.

 

- Priority Scheduling : 가장 높은 우선순위를 가진 큐에 담긴 패킷들을 먼저 링크로 보낸다. 즉 순위가 낮은 큐는 순위가 높은 큐가 비어 있어야 패킷들을 전송할 수 있다.

 

- Round Robin(RR) Scheduling : 다수의 큐들이 돌아가면서(Cyclically) 각각의 패킷들을 전송한다.

 

- Weighted Fair Queuing (WFQ) : 라운드 로빈(RR) 스케줄링과 유사하나, 각 큐마다 대기 시간이 있다는 점에서 차이가 있다. , 각 큐는 돌아가면서 패킷을 전송하지만 전송되는 시간간격이 정해져 있다.

 

 

 

 

 

 

 

 

Congestion Control

 

- 너무 많은 출발지(네트워크 장비)에서 네트워크가 감당하기에는 너무 많은 데이터를 너무 빠르게 전송하여 발생하는 네트워크 혼잡 현상이다.

 

- 징후

  • 라우터에서 버퍼가 오버플로우되어 패킷 손실의 발생
  • 라우터 버퍼에서 긴 큐잉 지연(Queueing delay) 발생

 

- 흐름 제어(Flow Control)와는 다르다.

 

 

 

라우터가 무한한 크기의 버퍼를 갖는 경우

 

- 출력 링크의 수용력을 R이라고 가정했을 때,

  • 전송률이 아무리 커도 링크 처리량(수용력)R/2을 넘을 수가 없다.
  • 지연 시간이 지수적으로 증가하므로 혼잡 시 큰 지연이 발생한다.

 



 

 

라우터가 유한한 크기의 버퍼를 갖는 경우

 

- 송신측에서는 타임아웃된 패킷(손실 패킷)의 재전송이 이루어진다. , 큐가 유한할 경우 패킷의 손실이 발생한다.

  • (λin : 입력 버퍼에 패킷이 들어오는 속도, λout : 출력 버퍼의 송신 속도)
  • 입력 버퍼의 속도와 출력 버퍼의 속도가 같은 경우 : λin = λout
  • 전송 계층의 입력 버퍼의 속도가 재전송 속도까지 포함할 경우 : λ'in = λout

 

[왼쪽부터 가장 이상적인 상황, 덜 이상적인 상황, 가장 현실적인 상황]


- 가장 이상적인 상황 : 라우터 버퍼가 이용가능할 때만 송신측에서 패킷을 전송하므로 어떤 패킷의 손실도 발생하지 않음.

λin = λ'in = λout

 

- 덜 이상적인 상황 : 라우터 버퍼가 꽉 차서 패킷이 손실될 수 있으므로 송신자는 패킷이 손실되었을 때만 재전송한다.

λ'in > λout

 

- 가장 현실적인 상황 : 라우터 버퍼가 꽉 차서 패킷이 손실될 수 있고, 패킷이 크게 지연되어 송신측의 타이머가 타임아웃될 수 있으므로, 두 상황 모두 재전송한다. , 패킷의 큰 지연으로 불필요한 재전송이 늘어난다.

λ'in >> λout

 

- 혼잡 비용

  • 손실된 패킷을 재전송한다.
  • 큰 지연으로 인한 불필요한 재전송이 발생 => 라우터가 패킷의 불필요한 복사본을 포워드(입력버퍼->출력버퍼)하는데 링크의 대역폭을 사용하므로 네트워크 자원이 비효율적으로 사용된다.

 

 

여러 개의 네트워크 장비를 거쳐가는 경우

 


- λ'in : 재전송을 포함하여 입력버퍼에 패킷이 들어오는 속도

 

- 데이터의 traffic이 증가하게 되므로 혼잡이 커지고 지연 시간이 길어진다.

 

- λ'in 이 계속 증가하게 되면(재전송 발생 증가), 패킷이 경로 상에 버려지는 상황이 증가한다는 뜻으로, 버려지는 지점까지 패킷을 전송하기 위해 상위 라우터에서 사용되는 전송 용량은 낭비된다.

 

 

 

AIMD (Additvie Increase Multiplicative Decrease)

 

- 혼잡 윈도우 크기(Congestion Window Size, cwnd) : 수신측의 윈도우 크기(rwnd)에 영향을 받으며, 송신측에 있는 윈도우 크기이다.

 

- 전송 후 ACK받지 못한 세그먼트들 : LastByteSent - LastByteRead <= cwnd <= rwnd

 

- 송신측에서 ACK를 못받고 타임아웃되면 패킷 손실이 발생한 것으로 알고 Congestion으로 받아들인다. 따라서 송신측은 윈도우 크기(cwnd)를 줄여서 데이터 전송 속도를 조절한다.

 

- 송신측에서 패킷의 손실이 발생할 때까지 이용가능한 대역폭을 탐지하면서 전송률(Congestion Window Size, cwnd)을 증가시킨다.

 

- 가법적 증가(Additive Increase) : 손실이 발견될 때까지 매 RTT(왕복시간)마다 1MSScwnd를 증가시킨다. 추가로 매 ACK마다 cwndMSS * (MSS/cwnd) 바이트씩 증가한다.

 

- 승법적 감소(Multiplicative Decrease) : 손실이 발생한 후에 cwnd를 절반으로 감소시킨다.

 

- 그래프 상에서 cwnd 값이 톱니 모양의 패턴을 가지게 된다. 값이 꺾일 때마다 패킷의 손실이 발생한 것이다.

 


 

 

 

Congestion Control Details

 

- 송신자에서 ACK받지 않은 데이터 양을 제한하여 송신률을 제한한다.


 


- 송신자의 송신률(Bytes/sec):


- 송신자의 혼합감지

  • 손실 이벤트 : 타임아웃 또는 3개의 중복 ACK
  • 손실 이벤트가 발생하면 송신률을 감소시킨다.

- 혼잡제어 알고리즘의 3가지 요소

  • AIMD
  • 슬로 스타트(slow start)
  • 타임아웃에 대한 반응

 

 

 

Slow Start

 

- TCP 연결이 시작될 때 혼잡 윈도우 크기(cwnd)초기값은 1MSS 이다.

 

- TCP 연결이 시작한 이후 데이터의 첫 번째 손실이 발생하기 전까지 송신률을 지수적으로 증가시킨다.

 

- RTT마다(오류없이 ACK가 올때마다) cwnd2배씩 증가한다.

 

- , 연결가능한 대역폭이 MSS/RTT(송신률)보다 아주 큰 경우, 송신률은 cwnd와 비례하므로 초기에는 느리지만 지수적으로 빠르게 증가한다.

 


 

 

 

타임아웃에 대한 반응

 

- TCP Tahoe : 타임아웃 또는 3개의 중복ACK 상황에서 항상 cwnd1 MSS 로 설정한다.

 

- 타임아웃에 의해 감지된 손실 : 전혀 전송되지 않은 것으로 간주하고, 심각한 혼잡 상황으로 받아들인다.

  • cwnd = 1MSS (Slow Start 발생)
  • cwnd는 지수적으로 증가하다가 임계값(threshold)에 달하면, 선형적으로 증가(혼잡 회피)한다.

 

- 3개의 중복 ACK에 의해 감지된 손실 : 다른 세그먼트(or 패킷)는 잘 도착했으므로 일부 세그먼트들은 전송해도 된다는 것으로 간주하고, 조금 혼잡한 상황으로 받아들인다.

  • TCP Reno : cwnd는 절반으로 감소하고 이후에 선형적으로 증가한다.
  • 이전의 TCP Tahoe 는 슬로 스타트(Slow Start)로 진입한다.

 

[ Loss 발생 시, TCP Tagoe1MSS로 뚝 떨어짐, TCP Reno 절반으로 떨어짐 ]


- cwnd 값이 타임아웃 전의 1/2 크기에 도달할 때, 지수적 증가는 선형적 증가로 변경된다.

 

- 가변적 임계값(variable threshold) 설정 : 손실 이벤트가 발생 시 임계값을 손실 이벤트 전의 cwnd1/2 크기로 설정한다.

 


[전체적인 구상도] 


 

 

 

Throughput

 

- cwndRTT 함수로써 TCP의 평균처리율은 슬로스타트는 무시하고, 항상 전송한 데이터로 추정한다.

 

- 평균 처리율 

 

- 손실이 발생하면 윈도 크기는 1/2로 감소하고 전송률도 비례하므로 1/2로 감소한다.

 

- cwnd가 커지면 처리율이 증가(데이터 전송 속도가 빨라짐)하므로 Congestion도 증가한다.

 

- 미래에 장거리 및 고속링크일 경우 cwnd = 83,333 만큼 요구되는데 이는 많은 양의 세그먼트이며 손실 가능성이 높다.

 

- 손실 관점에서 평균 처리율 (L:손실률)


- 고속 환경을 위한 새로운 버전의 TCP 연구가 필요하다.

 

 

 

공평성 (TCP Fairness)

 

- K 개의 TCP 연결이 R bps의 전송률(대역폭)의 병목 링크(bottleneck link)를 통과하는 경우, 각 연결의 평균 전송률이 R/K에 가깝다면 TCP 혼잡제어 메커니즘은 공평하다.

 

- 공평한 이유는 이상적으로 두 처리율의 합은 R과 같아야 한다.

(동등한 대역폭 공유와 전체 대역폭 이용선의 교차 지점 가까운 곳의 처리율)

 

- 공평성과 UDP

  • 멀티미디어 애플리케이션들은 TCP를 사용하지 않으므로, 혼잡제어로 인한 전송 the고 조정을 하지 않는다.
  • UDP의 사용은 일정한 속도로 음성과 영상을 전송하며 패킷 손실을 감수한다.
  • TCP관점에서 UDP는 공평하지 못한데, 그 이유는 다른 연결과 협력하지 않고, 전송률 조절도 하지 않기 때문이다. 이 부분에 대하여 UDPTCP Traffic을 밀어낼 가능성이 있다.
  • 관련 연구 분야로는 UDP 트래픽으로 dsl한 인터넷 마비 방지하는 혼잡제어 방식이 있다.

 

- 명확한 혼잡 제어 통보 (Explicit Congestion Notification, ECN)

  • IP헤더의 Tos 필드에 2비트가 Congestion을 나타내기 위해 네트워크 라우터에 의해 값이 저장된다.
  • , 네트워크 장비(라우터)Congestion을 감지하고 호스트에게 알려준다.
  • 주로 심각한 상황이 되면, 송신측의 혼잡을 알리기 위해 수신측에서 ACK세그먼트의 ECE 비트를 설정한다.

 

 

 

 

 

 

 

연결 설정

 

- 송신자와 수신자는 세그먼트를 교환하기 전에 연결 설정(Handshaking)을 한다.

 

- TCP 변수 초기화 : 순서번호, 버퍼 및 흐름제어 정보(수신윈도우)

 

- 클라이언트 : 연결 요청


Socket clientSocket = new Socket("hostname", "port number");



- 서버 : 클라이언트 연결 승인


Socket connectionSocket = welcomeSocket.accept();



 

 

3-Way Handshake

 

- 1단계 : 클라이언트는 SYN 비트 플래그(flag)를 설정하고 서버에 SYN 세그먼트를 전송한다. 최초의 순서번호를 기술한다.

* SYN 세그먼트 : 연결 요청 때에만 세그먼트의 헤더에 flag필드에 1비트의 값을 가진 세그먼트로, 데이터는 없다.

 

- 2단계 : 서버는 SYN 세그먼트를 받고, 클라이언트에게 SYNACK 세그먼트를 전송한다. 서버는 TCP 버퍼와 변수를 할당한 뒤, 서버의 최초 순서번호를 기술한다.

 

- 3단계 : 클라이언트는 SYNACK를 받고, ACK 응답을 서버에게 보낸다. 클라이언트는 TCP 버퍼와 변수를 할당한다. ACK응답에는 데이터가 포함될 수 있다.

 





 

 

 

연결 해제

 

- 클라이언트와 서버 각각 서로에게 FIN 세그먼트를 전송한다.

 

- FINACK는 하나의 세그먼트에 같이 포함될 수도 있다.

 

- 클라이언트가 연결을 종료하는 경우를 가정해본다.


ClientSocket.close();



- 1단계 : 클라이언트는 세그먼트 헤더에 FIN비트 플래그(flag)를 설정하고, 서버에 FIN 세그먼트를 전송한다.

 

- 2단계 : 서버는 FIN 세그먼트를 받고, ACK 세그먼트를 전송한다. 연결을 종료하고, FIN 세그먼트를 클라이언트에게 전송한다.

 

- 3단계 : 클라이언트는 서버로부터 FIN 세그먼트를 받고, ACK 세그먼트를 서버로 전송한다. 이후 대기 시간(timed wait)동안 기다린 후, 연결 종료된다.

 

- 4단계 : 서버는 클라이언트로부터 ACK 응답을 받고, 연결 종료된다.

 







 

+ Recent posts