서브넷의 등장 배경흔히 사용되는 IPv4 주소 체계는 클래스를 나누어 IP를 할당한다. 하지만 이 방식은 매우 비효율적이다. 예를 들어 어떤 기관에 A 클래스를 할당한다고 하면 16,777,214개의 호스트를 할당할 수 있게 되는데, 이 기관이 100개의 호스트를 할당한다고 하더라도 16,777,114개의 호스트가 낭비되게 된다. 이러한 비효율성을 해결하기 위해 네트워크 장치들의 수에 따라 효율적으로 사용할 수 있는 서브넷(subnet)이 등장하게 되었다. 혹시라도 IP 클래스에 대해 모르겠다면 다음 포스팅을 참고하자. [네트워크] IP,IP 클래스, IPv4, IPv6이란? | IP 클래스 구분IP 주소 IP는 Internet Protocol의 약자로 기기간 네트워크 통신을 할 때 쓰는 프로토콜을 의..
IP 주소IP는 Internet Protocol의 약자로 기기간 네트워크 통신을 할 때 쓰는 프로토콜을 의미한다. IP에서 IP 기기의 주소를 나타내는 것이 바로 IP주소이다. 흔히 우리가 사용하는 IP는 이 IP주소를 의미한다. 우편배달을 예로 들자면 IP주소는 배달 주소를 나타내게 된다. 즉 IP주소를 사용하는 이유는 각각의 host들을 구분하여 데이터를 정확하게 송수신하기 위해서이다. 이러한 IP주소는 IPv4와 IPv6 체계로 나뉜다. 먼저 IPv4에 대해서 알아보자.IPv4IPv4는 3자리 숫자가 4마디로 표기되는방식이다. 각 마디는 옥텟(octet)이라고 부른다. 위 주소는 내부적으로 32비트(각 마디당 8bit)로 처리된다. 예를 들어 192.168.123.123은 11000000.1010..
IP 단편화(fragmentation)network links는 MTU(Max Transfer Size)를 가진다. 링크 계층 프로토콜마다 다른 링크 타입과 MTU를 가지므로 네트워크는 큰 IP datagram을 분할할 필요성이 있다. 이러한 IP datagram을 여러 조각의 datagram으로 쪼개서 전송하고 최종 목적지에서 재결합(reassembly) 된다. IP 헤더를 통해 본래 하나의 datagram이었는지 구분하고 순서를 확인하게 된다. 4000byte datagram을 3개의 datagram으로 쪼개서 전송했다고 하자. 각 datagram은 헤더가 20byte씩을 차지한다. 즉 처음 datagram도 헤더가 20byte를 차지하므로 data field는 3980이다. 또한 MTU는 1500..
스케줄링 기법(Scheduling Mechanisms)네트워크에서 스케줄링은 link 상으로 보낼 다음 패킷(packet)을 선택하는 것을 뜻한다. 스케줄링 기법에는 여러가지가 존재하는데, 그 중 몇 가지만 알아보자. FIFO(First In First Out) 스케줄링FIFO 스케줄링은 간단하게 큐에 도착한 순서대로 전송하는 기법을 뜻한다. 이 때 만약 큐가 가득찼을 때 패킷을 버린다면 어떤 패킷을 버려야 할까? 이것도 다음과 같이 여러가지 방법이 있다.tail drop : 방금 도착한 패킷을 버린다.priority : 우선순위에 기반해 패킷을 버린다.random : 랜덤으로 패킷을 버린다.Priority 스케줄링가장 높은 우선순위의 패킷을 먼저 전송하는 기법을 뜻한다. Round Robin(RR) ..
TCP 혼잡 제어란?혼잡(congetion)하다는 것은 너무 많은 source가 너무 많은 data를 너무 빨리 전송해 네트워크가 이를 처리하지 못하는 상태를 말한다. 조금 더 자세히 설명하자면 데이터의 양이 수신 측에서 처리할 수 있는 양을 초과하게 되면 송신 측에서는 수신 측에서 처리하지 못한 데이터를 손실 데이터로 간주하고 계속 재전송하게 되므로 네트워크가 더욱더 혼잡하게 된다. 이러한 혼잡 상태를 제어하는 것을 혼잡 제어라고 한다. TCP 혼잡 제어의 여러 가지 방법을 알아볼 것인데, 그전에 TCP에 대해 잘 모르겠다면 다음 포스팅을 참고하자. [네트워크] TCP란? | TCP의 특징 | TCP RDT | 3-way handshakeTCP란? TCP(Transmission Control Prot..
TCP란? TCP(Transmission Control Protocol)는 애플리케이션에서 보낸 데이터를 신뢰성 있게 수신 측에 전송을 보장하는 프로토콜이다. 다음과 같은 특징들을 가진다. point-to-point : 하나의 송신 측과 하나의 수신 측이 통신하는 1:1 통신이다.reliable : 신뢰성 있는 데이터 전송을 보장한다.pipelined : TCP 흐름 제어와 혼잡 제어가 window size를 설정한다.full duplex(전이중 통신) : 쌍방향 통신이 가능하다. 즉 데이터를 주고받을 수 있다.connection-oriented : 연결 지향적이다. 송신 측과 수신 측이 데이터를 교환하기 전에 handshaking을 한다.flow control : 흐름 제어를 한다.congestion ..
pipelined protocols pipelined protocols에서 pipelining은 송신자가 다수의 패킷을 한 번에 보내는 것을 말한다. 즉 ACK신호를 받을 때까지 기다리다 ACK신호를 받고 나서 다음 데이터를 보내는 stop and wait 방식과 다르게 송신자가 ACKs 신호를 받지 않아도 패킷 여러 개를 보내는 방식이다. 송신자와 수신자가 버퍼를 가져야 하며, 대표적인 두 가지 프로토콜로 Go-Back-N과 Selective Repeat이 있다. 참고 : stop and wait 방식의 RDT [네트워크] Reliable Data Transfer - rdt 1.0/2.0/2.1/2.2/3.0 | RDT란? | FSM 이란? RDT(Reliable Data Transfer)란? RDT는..
RDT(Reliable Data Transfer)란? RDT는 신뢰성 있는 데이터 교환을 의미한다. 즉 송/수신하는 데이터가 오류 없이 온전히 전송되는 것을 뜻한다. Transport Layer(전송계층)에서는 신뢰성 있는 데이터 교환을 하고 싶어 하지만, 하위 레이어들에서는 신뢰성을 보장할 수 없기 때문에 문제가 발생할 수 있다. 이를 해결하기 위해 Transport Layer에서 RDT 프로토콜을 이용할 수 있다. 아래는 RDT 프로토콜을 이용해 데이터를 송/수신하는 예시이다. 송신 측 상위 레이어에서 보내려는 데이터가 있다면 rdt_send()를 호출해 데이터를 RDT 프로토콜로 전송한다. RDT 프로토콜에서 신뢰할 수 없는 채널인 하위 레이어로 보낼 때 udt_send()를 호출해 패킷을 전송한다..
UDP란? UDP(User Datagram Protocol)는 비연결형, 신뢰성이 없는 전송 프로토콜이다. IP데이터그램을 캡슐화하여 보내는 방법과 연결 설정을 하지 않고 보내는 방법을 제공한다. UDP는 TCP/IP 5계층에서 Transport Layer(전송계층)의 프로토콜이다. UDP의 특징 UDP는 흐름제어, 오류제어 또는 손상된 세그먼트의 수신에 대한 재전송을 하지 않는다. 따라서 내용이 전송 중에 손실 될 수 있고, 전송되는 세그먼트의 순서가 바뀔 수 있다. UDP는 TCP보다 간단하고 빠르다. 작은 header size를 가지고 있다. 흐름제어를 하지 않기 때문에 전송 속도를 최대한 빠르게 할 수 있다. 수신자와 송신자 간의 handshaking이 없는 connectionless 성질을 가진..
Web 과 HTTP 웹 페이지는 객체(object)로 구성된다. 객체(object)는 HTML 파일, JPEG 이미지, JAVA applet, 오디오 파일 등이 될 수 있다. 웹페이지는 여러 참조된 객체를 포함하는 기본 HTML 파일로 구성되며, 각 개체는 URL로 주소 지정이 가능하다. HTTP HTTP(Hyper Text Transfer Protocol)는 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다. TCP/IP 5계층에서 Application Layer(어플리케이션 계층)에 속하는 프로토콜이다. HTTP의 동작 client 측에서 브라우저를 통해 어떠한 서비스를 요청(request)하면 server에서 해당 요청사항에 맞는 결과를 찾아 사용자에게 응답(respon..
계층화(Layering)란? 계층화란 모듈들이 계층(Layer)을 이루도록 역할과 책임을 세분화 하는 것을 말한다. 시스템을 구성하는 모듈들의 상관 관계를 의존성을 이용해 구분한다. 상위 계층의 모듈은 하위 계층에서 제공하는 인터페이스를 이용해 구현되어야 한다. 계층화의 예로 비행기 서비스의 예를 들어보자. 어떤 사람이 출발 항공에서 도착 항공 까지 비행 서비스를 이용하는 것을 계층화(Layering) 한 것을 나타냈다. 매표소 계층, 수화물 계층, 게이트 계층, 활주로 계층, 비행기 계층으로 나누어 각각 계층이 역할과 책임을 세분화하여 맡는다. 이렇게 계층화를 하는 이유가 무엇일까? 계층화의 장점 복잡한 시스템을 파악하기 쉽게 단순화 시킬 수 있다. 시스템의 업데이트와 유지보수를 쉽게 할 수 있다. 한..