네트워크 기기는 계층별로 그 처리 범위를 나눌 수 있다.
• 애플리케이션 계층: L7 스위치
• 인터넷 계층: 라우터, L3 스위치
• 데이터 링크 계층: L2 스위치, 브리지
• 물리 계층: NIC, 리피터, AP
애플리케이션 계층을 처리하는 기기
대표적으로 L7 스위치가 있다.

로드밸런서라고도 하는 L7 스위치는 서버의 부하를 분산하는 기기이다. IP나 포트 이외에도 URL, 서버, 캐시, 쿠키들을 기반으로 트래픽을 분산하는 것이 L4 스위치와는 다른 점이다. 단, L4와 L7 모두 서버에 부하가 되지 않을 정도로 반복적인 서버 요청을 보내는 헬스 체크를 실행한다.

로드밸런서를 통해 서버 1대가 장애가 발생해도 다른 서버로 안정적인 서비스를 제공해주기도 한다.
인터넷 계층을 처리하는 기기
라우터 : 여러 개의 네트워크를 연결, 분할, 구분시켜주는 역할이다. 연결할 때 패킷 경로를 최적화하도록 포워딩한다.
L3 스위치 : L2 스위치의 기능과 라우팅 기능을 갖춘 장비. 하드웨어 기반의 라우팅을 담당하는 라우터라고 봐도 된다.
데이터 링크 계층을 처리하는 기기
L2 스위치 : MAC 주소를 MAC 주소 테이블을 통해 관리하고 패킷 전송을 담당한다.
브리지 : 두 개의 LAN을 상호 접속하도록 다리 역할을 하는 장치. 통신망 범위를 확장하고 하나의 통신망을 구축할 때 쓰임
물리 계층을 처리하는 기기
NIC : 네트워크와 빠른 속도로 데이터를 송수신할 수 있도록 컴퓨터 내에 설치하는 확장 카드, LAN 카드라고도 한다.
리피터 :

약해진 신호를 증폭해 다른 쪽으로 전달한다. (광케이블 보급 이후 잘 안 쓰임)
AP : 패킷을 복사하는 기기. AP에 유선 LAN을 연결하면 다른 장치에서 무선 LAN으로 무선 연결이 가능하다.
인터넷 계층에 쓰는 IP 주소에 대해 여러가지 알아보자
ARP
우리가 IP주소로 통신할 때 실제로는 MAC주소를 기반으로 통신한다.
이 때 IP 주소를 실제 물리적 주소인 MAC 주소로 변환하도록 다리 역할을 하는 프로토콜이 ARP이다.

장치 A가 ARP Request 브로드캐스트를 보내 특정 IP에 해당하는 MAC 주소를 찾고, 그 MAC 주소를 가진 장치 B가 ARP reply 유니캐스트를 통해 MAC 주소를 반환한다.
홉바이홉 통신

IP 주소를 통해 통신망에서 패킷이 여러 라우터를 건너 뛰는 모습을 비유적으로 표현한 것. 라우팅 테이블의 IP를 통해 시작 주소부터 라우팅 과정을 거쳐 최종 목적지까지 도달하는 통신을 홉바이홉 통신이라고 한다.
라우팅 테이블에는 게이트웨이와 모든 목적지 정보, 목적지에 도달하기 위한 다음 라우터의 정보가 들어있다.
게이트웨이는 서로 다른 네트워크 상의 통신 프로토콜을 변환해주는 역할을 한다. 윈도우에선 netstat -r 명령어를 통해 확인할 수 있다.
IP 주소 체계
IP 주소는 IPv4와 IPv6로 나뉜다. 123.45.67.89 처럼 8비트(0~255) 단위로 32비트를 점을 찍어 표기하는 IPv4와 2001:db8::ff00:42:8329 처럼 16비트(0~ffff) 단위로 64비트를 콜론으로 찍어 표기하는 IPv6이 있다. (::은 0000을 생략한 것이므로 예시의 실제 주소는 2001:0db8:0000:0000 : 0000:ff00:0042:8329 이다)
이 IP 주소 체계는 현재 클래스 A부터 E까지 클래스로 구분하는 클래스 기반 할당 방식을 사용한다.

클래스 A~C는 일대일 통신에 사용되고 D는 멀티캐스트 통신, E는 예비용으로 쓴다.
구분 비트(맨 앞쪽 비트)를 통해 클래스를 구분하는데 A는 0, B는 10, C는 110 이런 방식으로 구분한다. 그렇기에 A가 가지는 범위는
00000000.00000000.00000000.00000000 ~ 01111111.11111111.11111111.11111111
0.0.0.0 ~ 127.255.255.255
이라고 보면 된다.
근데 이 방식은 사용하는 주소보다 버리는 주소가 많은 단점이 있다.
DHCP(Dynamic Host Configuration Protocol)
IP 주소 및 기타 통신 매개변수를 자동으로 할당하기 위한 네트워크 관리 프로토콜. 이 기술로 인터넷에 접속할 때마다 자동으로 IP 주소를 할당할 수 있다. 많은 라우터와 게이트웨이 장비에 이 DHCP 기능이 있다.
NAT(Network Address Translation)
패킷이 라우팅 장치를 통해 전송되는 동안 패킷의 IP 주소 정보를 수정하여 IP 주소를 다른 주소로 매핑하는 방법.

위 그림처럼 한 회사 안에서 많은 사설 IP들이 쓰이고 그것들을 라우터의 NAT 장치를 통해 인터넷에 공인 IP로 요청하는 방식이다. 이를 통해 여러 호스트가 하나의 공인 IP 주소를 사용해 인터넷에 접속할 수 있다. 단, 접속하는 호스트가 많을수록 접속 속도가 느려질 수도 있다.
IP 주소를 이용한 위치 정보
IP 주소는 동 또는 구까지 위치 추적이 가능하다.
mylocation이라는 사이트에서 할 수 있는데

지금은 IP에 위치를 등록해줘야 하나보다...
HTTP는 애플리케이션 계층에서 웹 서비스 통신에 사용되는 프로토콜이다.

HTTP/1.0은 기본적으로 한 연결당 하나의 요청을 처리한다.
이는 RTT(Round Trip Time, 왕복 시간)를 증가하는 요인이 된다.
RTT는 데이터 패킷이 출발지에서 목적지까지 갔다가 다시 출발지로 돌아오는 데 걸리는 총 시간을 의미한다. 매번 서버로부터 파일을 가져올 때 TCP의 3-way handshake를 하기에 RTT가 증가한다. 그래서 이를 해결하기 위한 이미지 스플리팅, 코드 압축, 이미지 Base64 인코딩 같은 방식을 사용했다.
이미지 스플리팅
많은 이미지를 다운받는 대신 합쳐진 하나의 이미지를 다운받고 background-image의 position을 이용하는 방법
코드 압축
개행문자와 띄어쓰기를 없애서 코드를 압축하는 방식
이미지 Base64 인코딩
이미지 파일을 64진법으로 이루어진 문자열로 인코딩하는 방식
이미지 파일 대신 문자열로 보내기에 HTTP 요청을 할 필요가 없지만 변환하면서 37% 정도 크기가 더 커지는 단점이 있다.

매번 TCP 연결을 하지 않고 keep-alive라는 옵션으로 여러 개의 파일을 송수신 할 수 있다. (원래 1.0에서도 keep-alive는 있었지만 1.1부터 표준화되었다)
아직까진 문서 안의 다수의 리소스를 처리하려면 리소스 개수에 비례해 대기 시간이 길어지고, 헤더 구조에 많은 메타데이터들이 압축되지 않은 채 들어가 있어 무거웠다.
HOL Blocking(Head Of Line Blocking)
네트워크에서 같은 큐에 있는 패킷이 그 첫 번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상
HTTP/1.x보다 지연 시간을 줄이고 응답 시간을 더 빠르게 할 수 있다.
멀티플렉싱, 헤더 압축, 서버 푸시, 요청의 우선순위 처리를 지원한다.
멀티플렉싱

여러 개의 스트림을 사용해 송수신한다는 뜻이다. 스트림은 일련의 데이터 흐름으로 보면 된다. 애플리케이션에서 받아온 메시지를 독립된 프레임으로 조각내 송수신하고 다시 조립해서 데이터를 주고받는 형식이다. 이를 통해 단일 연결로 병렬로 여러 요청을 주고받을 수 있다. HTTP/1.x의 HOL Blocking 문제를 해결한 셈이다.
헤더 압축
HTTP/2에선 HTTP/1.x에서 크기가 컸던 헤더를 압축해서 문제를 해결했다. 그 압축할 때 쓰던 알고리즘이 허프만 코딩 압축 알고리즘이다.
허프만 코딩
문자열을 문자 단위로 쪼개서 빈도수가 높은 정보는 적은 비트 수로 표현하고 빈도수가 낮은 정보는 비트 수를 많이 사용해 전체 비트양을 줄이는 방식
서버 푸시
HTTP/1.1에서와는 달리 HTTP/2는 client 요청 없이 서버가 알아서 바로 리소스를 푸시할 수 있다.

위 그림과 같이 html에는 css와 js가 포함되기 마련이라 html만 요청해도 css와 js파일을 클라이언트에 던져 줄 수 있다.
HTTPS는 HTTP에서 Security가 추가된 것이다. 애플리케이션 계층과 전송 계층 사이에 신뢰할 수 있는 SSL/TLS 계층을 넣은 HTTP 요청을 말한다.
SSL/TLS
전송계층에서 보안을 담당하는 프로토콜이다. 클라이언트와 서버가 통신할 때 제 3자가 메시지를 간섭하는 공격을 방지한다. 보안 세션을 기반으로 데이터를 암호화하며 이 때 인증 메커니즘, 키 교환 암호화 알고리즘, 해싱 알고리즘이 쓰인다.
핸드셰이크를 통해 보안 세션을 생성하고, 클라이언트와 서버가 키를 공유해 인증, 인증확인 작업 후 데이터를 송수신한다. 클라이언트에서 사이퍼 슈트를 전달해 그것을 받은 서버가 암호화 알고리즘 리스트를 제공할 수 있는지 확인 후 인증서를 보내는 인증 매커니즘을 시작하고 해싱 알고리즘등 을 이용해 암호화 된 데이터들을 송수신한다.
사이퍼 슈트(cypher suites)
프로토콜, AEAD 사이퍼 모드, 해싱 알고리즘이 나열된 규약
TLS_AES_128_GCM_SHA256 형태와 같은 5개의 규약이 있으며 순서대로 TLS는 프로토콜, AES_128_GCM는 AEAD 사이퍼 모드, SHA256은 해싱 알고리즘이다.
AEAD 사이퍼 모드
데이터 암호화 알고리즘이다.
AES_128_GCM은 128비트의 키를 가진 표준 블록 암호화 기술과 병렬 계산에 용이한 암호화 알고리즘 GCM이 결합된 알고리즘을 뜻한다.
인증 메커니즘
CA(Certificate Authorities)에서 발급한 인증서를 기반으로 이루어지는 매커니즘
CA에서 발급한 인증서는 '공개키'를 클라이언트에게 제공해 서버가 신뢰할 수 있음을 보장한다.
CA 발급 과정
사이트 정보와 공개키를 제출해 공개키를 해시한 값인 지문을 사용한 비밀키를 받아 인증서를 발급받는다.
디피-델만 알고리즘
키 교환 알고리즘은 디피-헬만 알고리즘을 근간으로 만든 ECDHE, DHE를 사용한다.
(수학 식)
위 식을 보면 g와 x와 p를 안다면 y는 구하기 쉽지만 g와 y와 p만 안다면 x를 구하기는 어렵다는 원리에 기반한 알고리즘이다.
(그림 2-63)
위 그림을 쉽게 설명하자면 처음엔 둘 다 같은 흰색 페인트 통(공개값)을 가진다. 그리고 각자의 비밀 키(회색, 분홍색)와 공개 키를 섞어 만든 공개키(연회색, 연분홍색)을 서로 바꾼다.
이 서로 바꾼 공개 키는 공격자가 공개 값과 함께 알고 있어도 비밀 키를 역산할 수 없다. (흰색과 빨강을 3대 1로 섞었는지 흰색과 분홍을 1대 1로 섞었는지 알 수 없다)
이 서로 공유한 공개 키는 각자의 비밀 키와 결합하면 똑같은 값인 공통의 암호값, PSK가 생성된다.
공격자는 공개값과 공개 키를 다 가지고 있어도 비밀 키를 모르기에 공통의 암호값인 PSK를 만들어 낼 수 없다.
SHA256 알고리즘
데이터를 추정하기 힘든 더 작고, 섞여 있는 조각으로 만드는 해시 알고리즘 중 많이 쓰이는 알고리즘.
전처리 된 메시지를 기반으로 256비트의 해시 값으로 반환한다.
SEO에도 도움이 되는 HTTPS
SEO는 검색엔진 최적화로, 검색엔진에 웹 사이트를 검색할 때 결과가 상단에 노출되어 사용자가 바로 볼 수 있도록 하는 방법이다. 즉, SEO순위가 높을 수록 검색에 잘 노출된다는 의미이다. 구글은 공식적으로 HTTPS를 쓰는 사이트가 같은 조건에서 SEO순위가 높을 것이라 평가했다.
SEO 순위를 높이기 위해 캐노니컬 설정, 메타 설정, 페이지 속도 개선, 사이트맵 관리 등의 방법이 있다.
HTTPS 구축 방법
HTTP/3는 TCP에서 돌아가는 HTTP/2와 달리 QUIC라는 계층 위에서 돌아가며, UDP를 사용한다.
(그림 2-68)
HTTP/2에서 가지고 있던 멀티플렉싱 장점을 가지고 있으며 초기 연결 설정 시 지연 시간 감소가 있다.
초기 연결 설정 시 지연 시간 감소
QUIC는 TCP가 아니기에 3-way handshake를 쓰지 않는다. 첫 연결 설정에 1 RTT만 사용되고, 패킷 손실에 대한 문제는 수신 측에서 오류를 검출하고 수정하는
순방향 오류 수정 매커니즘을 사용한다.