TCP/ IP (Transmission Control Protocol/ Internet Protocol)
현재의 인터넷에서 사용하는 프로토콜 그룹이며, 상호작용하는 모듈로 이루어진 계층적 프로토콜이다. 각 모듈을 특정한 기능을 제공하며 원래의 TCP/IP 프로토콜은 하드웨어에 설치된 4가지 소프트웨어 계층으로 정의되지만 현재는 5 계층으로 간주한다.
응용 계층(Application Layer)
- 프로토콜 : HTTP, SMTP, FTP
- PDU : Message
OSI 모델의 최상위 계층으로 다양하게 존재하는 응용 환경에서 공통적으로 필요한 기능을 다룬다.
시스템 간의 응용 처리는 상호 간에 통신하면서 일련의 업무를 처리할 수 있도록 필요한 서비스 기능을 제공한다.
이메일, 파일 전송, 웹사이트 조회 등 애플리케이션에 대한 서비스를 제공하는 계층.
응용계층 프로토콜(Application Layer Protocol)
옆에 적혀있는 숫자는 포트 번호이다. 동작하는 애플리케이션은 각각 포트 번호가 있어서 다른 애플리케이션과 서로 구분된다. 데이터를 전송할 때는 상대방의 IP 주소가 필요하지만, 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP에서는 포트 번호가 필요하다.
HTTP(HyperText Transfer Protocol) - 80
웹 서비스에서 클라이언트(웹 브라우저)와 웹 서버 간에 정보를 주고받기 위해 사용되는 프로토콜.
DNS(Domain Name System) - 53
네트워크에서 호스트 이름을 IP 주소로 변환하는 데 사용하는 시스템(서비스)이다. DNS 서비스가 동작하는 컴퓨터(서버)를 DNS 서버라고 한다.
SSH(Secure Shell) - 22
SSH의 사용 예로는 대표적으로 두 가지가 있다. 데이터 전송과 원격 제어이다.
데이터 전송의 예로는 대표적으로 원격 저장소인 깃헙이 존재한다. 소스 코드를 원격 저장소인 깃헙에 푸시할 때 우리는 SSH를 활용하여 파일을 전송한다. 원격 제어로 예는 웹 개발 공부를 한 사람들 중에 AWS와 같은 클라우드 서비스를 이용하려면 AWS의 인스턴스 서버에 접속하여 해당 머신에 명령을 내리기 위해서는 SSH를 통한 접속을 해야 한다.
SSH 프로토콜은 단순한 평문 전달 방식의 ID/PW가 아닌, 대칭키 암호화 방식 혹은 비대칭키 암호화 방식을 사용한다. 클라이언트와 서버는 공개키(public key)와 비밀키(secret key)를 통해 인증하는 방식이기 때문에 한 쌍(piar)의 SSH 키가 필요하다.
파일 전송 프로토콜 - FTP, SFTP
FTP(File Transfer Protocol) - 20,21
FTP 서비스를 제공하는 서버와 해당 서버에 접속하는 클라이언트 사이에 두 개의 연결이 이루어진다. 하나는 네트워크 21번 포트로, 데이터의 전송을 제어하기 위한 신호를 송수신하기 위한 것이다. 나머지 하나는 네트워크 20번 포트로, 실제 파일의 전송에 사용된다. 사용자가 FTP 서버에 접속할 때 입력하는 계정의 정보나 파일 전송 명령 등은 데이터 제어용 연결(21 포트)에서 이루어지고 실제 파일의 송수신 작업은 데이터 전송 연결(20번 포트)을 통해 이루어진다. FTP 서버에 접속한 클라이언트는 다수의 파일을 연속적으로 송수신하기 위해 FTP 서버와 끊임없는 메시지를 서로 전송함으로 연결 상태를 유지한다.
FTP는 파일의 송수신만을 위해 고안된 프로토콜이기 때문에 작동 방식이 직관적이다. WWW 방식보다 파일을 빠르고 한꺼번에 주고받을 수 있다는 장점이 있지만, WWW는 내려받으면서 재생이 가능하다는 점과 비교했을 때 FTP는 보통 콘텐츠를 모두 내려받은 후에만 해당 파일의 내용을 확인할 수 있다는 단점이 있다. 또한 별도의 FTP 클라이언트 프로그램을 사용하지 않는 경우에는 조작이 복잡하고 어려울 수 있다. 마지막으로 FTP는 무차별 대입 공격이나 패킷 가로채기, 스푸핑 공격 등의 수많은 보안 취약점이 존재한다.
SFTP(Secure File Transfer Protocol) - 218
SSH 파일 전송 프로토콜 또는 보안 파일 전송 프로토콜로 알려져 있는 SFTP는 보안 네트워크 또는 안정적인 네트워크 연결을 통해 두 사용자 간에 또는 클라이언트 - 서버 아키텍처에서 안전한 파일 액세스, 관리 및 안전한 데이터 교환을 제공하는 네트워크 계층 프로토콜이다.
이메일 프로토콜 - SMTP, POP3, IMAP
이메일 시스템은 크게 메일 서버와 클라이언트로 구성된다.
SMTP(Simple Mail Transfer Protocol) - 25
이메일을 전송할 때 사용하는 프로토콜로, 이메일 송신 프로토콜이 사용되는 경우는 크게 두가지로 나뉜다. 첫번째는 클라이언트가 작성한 메일을 서버에 전송할 때와 두번째는 인터넷을 통해 서버 간 메일을 전송할 때이다. 위에 그림을 참고하면 sunny라는 발신자가 메일 서버(A)에 메일을 보낼 때, 그리고 메일 서버(A)가 인터넷을 통해 서버(B)에 메일을 전달할 때 발신 프로토콜인 SMTP를 사용한다.
POP3(Post Office Protocol version 3) - 110
이메일을 수신할 때 사용하는 프로토콜의 한 종류이다. 보다 구체적으로는 이메일 서버에 도착한 메일을 클라이언트로 가져올 때 사용된다. POP3의 경우 서버의 사서함으로부터 클라이언트 PC로 메일을 직접 다운로드 하는 형식이다. 서버로부터 메일을 다운로드 할 때는 헤더 부분(발신자의 정보, 수신 서버의 호스트 주소, 해당 메일의 고유한 식별자와 메일이 수신된 날짜 시간 등의 정보를 담은 메일의 앞머리 부분)과 본문(메일 본문 및 첨부파일을 포함한 실제 메일 내용)을 모두 다운로드한다. POP3 방식을 이메일을 수신한 경우 메일을 다운로드 받은 로컬 PC에만 해당 메일이 남아있게 되어 추가적인 설정을 하지 않는 이상 다른 PC나 모바일 등의 기기로 동일한 이메일을 확인할 수 없다.
IMAP(Internet Message Access Protocol) - 143
POP3와 마찬가지로 이메일을 수신할 때 사용하는 또 다른 프로토콜의 종류이다. IMAP의 경우 이메일 서버와 동기화되는 방식이기에 스마트폰, 태블릿, PC 등 다양한 클라이언트 장치에서 동일하게 미리 설정한 '받은 편지함', '보낸 편지함'등을 확인할 수 있다. 이는 서버에 직접 접속하여 직접 메일을 확인하는 방식이기 때문에 메일 열람 후에도 서버에 이메일이 그대로 남아있어 여러 클라이언트를 통해서도 반복적으로 이메일을 확인할 수 있고, 수진자에게 메일을 보여줄 때 메일의 헤더 부분만 보여주고 수신자가 해당 메일을 클릭해야만 메일 내용과 첨부파일 등의 본문을 다운로드하기 때문에 POP보다 빠른 방법으로 메일을 확인할 수 있다.
전송 계층(Transport Layer)
- 프로토콜 : TCP/UDP
- PDU : Segment
엔드 포인트(End point) 간 신뢰성이 있고, 효율적인 데이터 전송을 담당하는 계층으로, TCP/UDP 프로토콜로 구성되어 흐름, 혼잡, 오류 제어 등을 담당한다. 순차 번호 기반의 오류 제어 방식을 사용한다.
신뢰성 있는 데이터를 통신하기 때문에 데이터가 제대로 도착했는지 확인이 필요하고, 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별 또한 해야 한다.
전송 계층 프로토콜(Transport Layer Protocol)
클라이언트와 서버가 연결된 상태에서 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜이며이다.
TCP 프로토콜의 PDU : Segment
전송 계층에서는 세션 계층에서 전달된 데이터를 받아 실질적인 전송을 위해 일정 크기로 나눈다. 나눈 데이터에는 출발지 포트, 목적지 포트, 순서 번호, 오류 검출 등이 헤더로 붙게 되는데 이것을 세그먼트라고 부른다. 세그먼트는 전송계층의 TCP 프로토콜이 응용 계층의 데이터 단위인 메시지를 받아 작은 조각으로 분할한 데이터 단위이다.
TCP 프로토콜에 따라 분할된 데이터에 TCP 헤더가 붙어 캡슐화된 전송 계층의 패킷이 세그먼트(Segment)이다.
연결 설정 과정(3-Way Handshake)
1. 클라이언트에서 서버에 접속을 요청하는 SYN패킷을 보낸다. 이때 클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 된다.
2. SYN, ACK 비트를 1로 설정해 패킷 송신
서버는 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송하고, 클라이언트에서 다시 ACK으로 응답하기를 기다린다. 이때 서버는 SYN_RECEIVED 상태가 된다.
3. ACK 비트를 1로 설정해 패킷 송신
클라이언트는 서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는 것이다. 이때의 서버 상태는 ESTABLISHED이다.
* SYN : 상대방과 연결을 생성할 때, 일련번호의 동기화를 맞추기 위한 세그먼트임을 의미한다.
* ACK : 승인 번호 필드에 값이 채워져 있음을 알리는 플래그로, 플래그가 0이면 승인 번호 필드 자체가 무시된다.
연결 해제 과정(4-Way Handshake)
1. 데이터를 전부 송신한 Client가 FIN 송신
2. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송한다.
3. 서버가 ACK 송신, 서버에게 남은 패킷 송신(일정 시간 대기)
*FIN : finish 플래그로, 상대방과 연결을 종료하고 싶다는 요청인 세그먼트임을 의미한다.
TCP 헤더
출발 포트(source port)와 목적 포트(destination port)
TCP 헤더의 출발지 포트 주소와 목적지 포트 주소가 필요하다. TCP 헤더에 포트 번호가 있기 때문에 애플리케이션을 구분할 수 있게 된다. 포트 번호는 0~65535번 까지 사용할 수 있고 , 크게 세 종류로 구분된다.
일련번호(sequence nubmer)와 확인 응답 번호(acknowledgment number)
3-way handshake가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 TCP 헤더의 일련번호(sequence number)와 확인 응답 번호(acknowledgement number)를 사용해야 한다.
일련번호는 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려 주는 역할을 한다. 전송된 데이터에 일련번호를 부여하면 수신자는 원래 데이터의 몇 번째 데이터를 받았는지 알 수 있다.
일련번호는 전송하는 데이터의 순서를 의미하며, 32 bit -> 최대 4,294,967,296까지의 수를 담을 수 있기 때문에 일련번호의 중복은 쉽지 않다. 해당 일련번호 덕분에 수신자는 쪼개진 세그먼트의 순서를 파악하여 올바른 순서로 데이터를 재조립할 수 있게 된다.
송신자가 최초의 데이터를 전송할 때는 번호를 랜덤 한 수로 초기화하며, 이후 자신이 보낼 데이터의 1 바이트당 시퀀스 번호를 1씩 증가시키며 데이터의 순서를 표현한다. 최대 32 bit를 넘어갈 경우 다시 0부터 시작한다.
확인 응답 번호는 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할을 한다. 그래서 이 번호는 다음 번호의 데이터를 요청하는데도 사용한다.
연결 설정과 해제 때 발생하는 핸드쉐이크 과정에서는 상대방이 보낸 일련번호 +1로 자신의 승인 번호를 만들어내지만, 실제로 데이터를 주고받을 때는 상대방이 보낸 시퀀스 번호 + 자신이 받은 데이터의 바이트로 승인 번호를 만들어낸다.
데이터 오프셋(Data Offset)
데이터 오프셋은 전체 세그먼트 중에서 헤더가 아닌 데이터가 시작되는 위치가 어디부터인지를 표시한다.
윈도우 사이즈(Window Size)
윈도우 사이즈는 한 번에 전송할 수 있는 데이터의 양을 의미하는 값을 담는다.
체크섬(Checksum)
체크섬은 데이터를 송신하는 중에 발생할 수 있는 오류를 검출하기 위한 값이다.
UDP(User Datagram Protocol)
사용자 다이어그램 프로토콜. 전송 계층에서 데이터를 효율적이고 빠르게 보낼 때 사용되는 프로토콜이다.
UDP는 비연결형 통신이라서 데이터를 전송할 때 TCP처럼 시간이 걸리는 확인 작업을 일일이 하지 않는다. UDP는 TCP와 달리 효율성을 중요하게 여기는 프로토콜이라 TCP와 같은 신뢰성과 정확성을 요구하게 되면 효율이 떨어진다.
UDP 헤더
UDP에서는 UDP 헤더가 붙은 데이터를 UDP 데이터 그램이라고 한다.
서버 부하 분산(Load Balancing)
서버 부하 분산(Server Load Balancing)은 외부의 사용자로부터 들어오는 다수의 요청을 서버들에게 적절히 배분하여 서버들로 하여금 요청을 처리케 하는 것을 의미한다. 분산 처리는 부하 분산 혹은 소프트웨어가 담당한다. 외부로부터의 요청을 서버가 직접 받는 것이 아닌 '소프트웨어'가 받은 후 이를 서버로 적절히 나누어 주는 것이다. 그리고 이 서버 부하 분산을 담당하는 네트워크 스위치를 L4/L7 Switch(Layer 4)라고 부르며 클라우드에서는 로드 밸런서(Load Balancer)라고 부른다. 또는 로드 밸런싱 혹은 LB(Load balancing)이라고 부른다.
서버 부하 분산 알고리즘
라운드 로빈(Round Robin)
Round Robin은 로드밸런서가 다수의 서버에게 순서대로 요청을 할당하는 방법이며, 가장 단순한 방법으로 서버군에 차례로 요청을 할당하여 분산한다.
최소 연결방식(Least Connection)
로드 밸랜서가 서버에게 요청을 전달한 뒤, 사용자와 서버가 정상적인 연결을 맺으면 사용자와 서버는 'Connection'을 생성한다. 로드밸런서 또한 중간자로서 Connection 정보를 갖고 있는데, 이 Connection 수 정보를 기반으로 가장 Connection이 적은 서버, 즉 부하가 가장 덜한 서버에게 요청을 전달한다.
가중 라운드 로빈(Weighted Round Robin Method)
각각의 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분한다. 주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 부하 분산 방식이다.
IP 해시 방식(IP Hash Method)
클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식이다. 사용자의 IP를 해싱해 로드를 분해하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장한다.
L4/L7 로드 밸런싱
L4 로드 밸런서는 네트워크 계층(IP)이나 전송 계층(TCP, UDP)의 정보(IP 주소, Port 번호, MAC 주소, 전송 프로토콜)를 바탕으로 로드를 분산한다.
L7 로드 밸런서는 애플리케이션 계층(HTTP, FTP, SMTP)에서 로드를 분산하기 때문에 HTTP 헤더, 쿠키 등과 같은 사용자의 요청을 기준으로 특정 서버에 트래픽을 분산하는 것이 가능하다. 패킷의 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분배하는 것이 가능하다. URL에 따라 부하를 분산시키거나 HTTP 헤더의 쿠키 값에 따라 부하를 분산하는 등 클라이언트의 요청을 보다 세분화해 서버에 전달할 수 있다. 또한 L7 로드 밸런서의 경우 특정한 패턴을 지닌 바이러스를 감지해 네트워크를 보호할 수 있으며, Dos/DDos와 같은 비정상적인 트래픽을 필터링할 수 있어 네트워크 보안 분야에서도 활용된다.
네트워크 계층(Network Layer)
- 프로토콜 : IP
- 프로토콜 데이터 유닛 : Datagram
다른 네트워크에 있는 목적지로 데이터를 전달하려면 네트워크 계층의 기술이 필요하다. IP 주소는 네트워크를 식별해주는 기능을 하며, 어떤 네트워크의 어떤 컴퓨터인지 구분하는 주소이다. IP주소는 목적지를 어디로 보낼지도 결정하지만 목적지까지 최적의 경로가 어디인지 결정한다. 최적의 목적지를 결정하는 것을 라우팅이라 하며, 경로 정보를 등록하고 관리하는 라우팅 테이블이 있다.
네트워크 계층 프로토콜(Network Layer Protocol)
IP(Internet Protocol)
네트워크 계층에는 IP라는 프로토콜이 있고, 이 IP가 있어서 라우터가 가능하다.
네트워크 계층에는 캡슐화를 할 때는 데이터에 IP 헤더가 추가되는데, 이렇게 만들어진 것을 IP 패킷이라고 한다.
IP 헤더
L3 switch
네트워크 계층은 라우팅 기능을 하는 층으로, 라우터는 네트워크 패킷을 연결해주는 통로 역할을 하며 대역폭 확장이 주 기능이다. 그래서 L2 스위치는 MAC 주소까지만 알았다면, L3 스위치는 MAC 주소뿐만 아니라 IP 주소까지 알고 있다. 즉, L3 스위치란 L2 스위치에 라우팅 기능이 추가된 장비로, 고성능 하드웨어를 기초로 하며, 스위치 자체에도 IP 주소가 할당되어 있다.
가정에서 많이 사용하는 공유기도 L3 기능과 WIFI 기능을 포함하고 있으며, 이러한 공유기를 AP 장비라고도 부르기도 한다.
데이터 링크 계층(Data Link Layer)
- 프로토콜 : Ethernet
- PDU : Frames
OSI 모델에서 두 번째 계층인 데이터 링크 계층은 인접한 네트워크 노드들끼리 데이터를 전송하는 것과 물리 계층에서 발생하는 오류를 감지하고 수정하는 두 가지 역할을 수행한다.
데이터 링크 계층 프로토콜 및 장비(Data Linke Layer Protocol and Equipment)
이더넷(Ethernet)
이더넷은 네트워크에 연결된 각 기기들이 48bit 길이의 고유의 MAC 주소를 가지고 이 주소를 이용해 상호 간에 데이터를 주고받을 수 있도록 만들어졌다. 전송 매체로는 BNC, UTP, STP 케이블을 사용하며, 각 기기들을 상호 연결시키는 데에는 허브, 네트워크 스위치, 리피터 등의 장치를 이용한다.
이더넷은 랜(LAN)에서 데이터를 정상적으로 주고받기 위해 사용되는 프로토콜로 개방 시스템 간의 연결 설정과 유지 및 제어를 위한 다양한 규칙들을 정의해 놓고 있다.
MAC 주소
랜카드는 0과 1로 구성된 데이터를 전기신호로 바꾸는 역할을 한다. 그런데 이 랜카드에는 MAC 주소라는 번호가 할당되어 있다. 즉 MAC 주소가 다르면 서로 다른 랜카드이며, 동일한 MAC 주소를 가진 랜카드는 없다.
MAC 주소는 48비트 숫자로 구성되어 있으며 앞 24비트는 랜카드 제조사 번호이며, 뒤 24비트는 해당 랜카드 제조사가 랜카드에 붙인 번호이다.
이더넷 헤더는 목적지 MAC 주소(6비트), 출발지 MAC 주소(6바이트), 유형(2바이트) 다 합쳐서 14바이트로 구성되어 있다. 이때 유형은 프로토콜을 나타낸다. 프로토콜 종류에는 IPv4, ARP, IPv6 등이 있다. 그리고 트레일러는 FCS라고도 부르며 데이터 전송 중 오류가 발생하는지 확인하는 용도이다. 따라서 이더넷 헤더, 데이터, 트레일러를 합친 것을 프레임이라고 부른다. 네트워크 케이블을 통해 프레임이 전송되는 것이다.
스위치(Switch)
스위치는 전이중 통신방식, 충돌이 일어나지 않는 구조로 되어 있기 때문에 효율이 높은 장비이다. 사용 목적은 허브와 유사하지만, 훨씬 더 향상된 속도를 제공되며, 허브와 달리 연결된 모든 컴퓨터에 데이터를 전송하는 게 아니라 데이터를 필요로 하는 특정 컴퓨터에만 데이터를 전송할 수 있다.
맥 주소 테이블(MAC address Table)
스위치에는 중요한 특징이 있다. 허브와는 다르게 스위치 내부에는 MAC 주소 테이블이 존재한다. MAC 주소 테이블(MAC address Table)은 스위치의 포트 번호와 해당 포트에 연결되어 있는 컴퓨터의 MAC 주소가 등록되어 있는 데이터베이스이다.
플러딩(flooding)
스위치에 들어온 데이터는 도착 단말 MAC 주소를 MAC 주소 테이블에서 탐색하는데, 아직 주소 테이블이 작성되지 않을 수 있다. 이 경우 송신 포트 이외의 연결된 모든 포트에 데이터를 전송하게 되는데 이를 플러딩 현상이라 한다.
ARP(Address Resolution Protocol)
ARP는 목적지 컴퓨터의 IP 주소를 활용해 MAC 주소를 찾기 위한 프로토콜이다. 이더넷 프레임을 전송하려면 목적지 컴퓨터의 MAC 주소를 지정해야 한다. 따라서 출발지 컴퓨터가 목적지 컴퓨터의 MAC 주소를 모르면 이를 알아내기 위해 브로드 캐스팅을 하는데 이를 ARP 요청이라 한다. 이때 브로드캐스팅이란 네트워크 상에 연결된 모든 컴퓨터들에게 요청하는 것을 의미한다.
물리 계층(Physical Layer)
- 프로토콜 :10 Base T, 802.11
- PDU : Bits
물리 계층은 시스템끼리 물리적인 연결을 하며 전기 신호를 변환, 제어를 한다. 물리 계층은 전송하고자 하는 데이터를 전기 신호로 바꾸어 상대 컴퓨터에게 전송하는 일을 한다.
물리 계층 장비(Physical Layer Equipment)
전기 신호
네트워크 통신에서는 숫자 0과 1만 사용된다. 즉, 전송하고자 하는 데이터는 0과 1로 변환되어 전송된다. 하지만 데이터를 0과 1로 이루어진 비트열로 변환만 해서는 데이터를 전송할 수 없다. 이렇게 변환한 0과 1을 다시 전기 신호로 변환해야 한다. 전기 신호로 변환해야 비로소 상대 컴퓨터에 전송되게 된다. 그리고 상대 컴퓨터는 전기 신호를 다시 0과 1로 변환하는 과정을 거친다. 그렇다면 0과 1을 어떻게 전기 신호로 바꿀까? 굳이 여기까지 알 필요는 없지만 컴퓨터 메인보드에 꼽혀있는 랜(LAN) 카드는 인터넷을 사용하기 위해 필요한 랜 케이블을 꼽는 곳인데 해당 랜 카드가 0과 1을 전기 신호로 바꿔주게 된다. 그렇기 때문에 랜 카드가 있어야만 네트워크 상에서 통신이 가능하다.
리피터(Repeater)
위에서 언급한 전기 신호를 전송하려면 전선 케이블이 있어야 한다. 바로 이때 리피터라는 장비를 사용한다. 물론 요즘에는 거의 사용하지 않는다고 한다.
리피터는 전기 신호를 증폭시켜주는 장비이다. 상대방이 가까우면 랜 케이블만 연결해도 되지만 컴퓨터 서로 멀리 있을 때는 신호가 갈수록 약해진다. 따라서 신호를 증폭시켜주는 리피터를 중간에 두면 신호를 제대로 받을 수 있다. 리피터를 이용하면 1대 1 통신이 가능하게 된다.
허브(hub)
리피터는 1대 1 통신만 가능하지만 허브를 이용하면 여러 대의 컴퓨터 간 통신이 가능하게 된다. 허브는 위에 그림처럼 포트가 여러 개 있어서 여러 대의 컴퓨터를 서로 연결할 수 있다. 그리고 리피터처럼 신호를 증폭시키는 기능까지 가지고 있다. 따라서 허브가 있으면 리피터는 별도로 필요 없는 것이 된다. 하지만 허브에 특정 컴퓨터에 데이터를 전송할 수 없고, 연결된 모든 컴퓨터에게 전달되는 단점이 있다.
라우터(Router)
IP에 헤더를 붙여 데이터를 다른 네트워크 목적지에 보낼지 결정하는 것을 라우팅(Routing)이라 하며, 라우팅은 라우터(Router)라는 장비와 L3 스위치가 라우팅을 한다. 서로 다른 네트워크 간에 통신을 하려면 라우터가 필요하다.