OSI 7계층와 TCP/IP 4계층
- 네트워크의 통신 과정을 7단계로 나눠 표준화한 것
- ISO(국제표준기구)에서 만듦
- 사용자에게
실제 애플리케이션 서비스를 제공
하는 계층 - HTTP, FTP, DNS
- 애플리케이션의
데이터 형태와 구조를 변환(번역, 암호화, 압축)
시키는 계층 - 코드 간의 번역을 담당 -> 사용자 시스템에서 데이터의 형식상 차이를 다루는 부담을 응용 계층으로부터 덜어줌
- 양 끝단의 응용 프로세스가
통신을 관리하기 위한 방법
을 제공- 동시 송수신 방식(duplex)- 반이중 방식(half-duplex), 전이중 방식(Full Duplex)의 통신 등
- 애플리케이션 간의
TCP/IP 세션을 구축하고 관리하며 종료
시키는 계층 - Socket
- 통신
양단 간의 신뢰성 있는 통신
을 보장하는 계층 - TCP, UDP
- 목적지까지의 경로를 선택하고
경로에 따라 패킷을 전달(라우팅)
해주는 계층 - IP / 라우터
- 인접한
피어 간의 신뢰성 있는 통신
을 보장하는 계층 - ARP, MAC / 브릿지, 스위치
- 전기적, 기계적, 기능적인 특성을 이용해서
통신 케이블로 데이터를 전송
- 리피터, 케이블, 허브, NIC
- 네트워크 통신 과정을 4계층으로 나눠 표현한 것
- TCP/IP 4계층에서 에플리케이션 계층을 3개로 쪼개고 인터넷 계층을 네트워크 계층이라고 부르면서 링크 계층을 데이터 링크 계층과 물리 계층으로 나누면 OSI 7계층이 됨
- 응용 프로그램이 사용되는 프로토콜 계층
- HTTP, FTP, DNS
- 송신자와 수신자를 연결하는 통신 서비스를 제공하며 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때 중계하는 역할을 하는 계층
- TCP, UDP
- 장치로부터 받은 네트워크 패킷을 IP 주소로 지정된 목적지로 전송하기 위해 사용되는 계층
- IP
- 전선, 광섬유, 무선 등 실질적으로 데이터를 전달하며 장치 간에 신호를 주고 받는 규칙을 정하는 계층
PDU
- 네트워크 어떠한 계층에서 다른 계층으로 데이터가 전달될 때 한 덩이리의 단위를 PDU(Protocal Data Unit)이라고 함
- PDU는 메타 정보를 갖고 있는
헤더
와 데이터를 의미하는페이로드
로 구성되며 계층마다 부르는 명칭이 다름
- 캡슐화 과정은 상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고 해당 계층의 헤더를 삽입하는 과정
- 비캡슐화 과정은 하위 계층에서 상위 계층으로 가며 각 계층의 헤더 부분을 제거하는 과정
- 송신자의 애플리케이션 계층에서부터 각 계층에서 캡슐화를 통해 데이터가 생성되고 수신자의 링크 계층에서부터 각 계층에서 비캡슐화를 통해 데이터가 전달
TCP와 UDP
TCP 흐름제어
수신자와 송신자
의 메시지 처리속도 차이를 해결하기 위한 방법- 수신자는 윈도우 크기를 자신의 응답 헤더에 담아서 송신 측에게 전해주게 되고, 송신자는 상대방에게 데이터를 보낼 때 이 윈도우 크기를 확인
- 전송한 패킷의 ACK을 수신하면 다음 패킷 전송
- 수신 측에서 설정한 윈도우 크기만큼의 패킷을 ACK의 확인 없이 전송, 데이터의 흐름을 동적으로 조절하는데 Cumulative ACK(마지막으로 수신 성공한 패킷의 ACK을 계속 전송)을 받고 문제가 된 패킷부터는 모두 재전송
- 수신 측에서 설정한 윈도우 크기만큼의 패킷을 ACK의 확인 없이 전송, 데이터의 흐름을 동적으로 조절하는데 Selective ACK(수신 성공한 패킷의 개별 ACK 전송)을 받고 문제가 된 패킷만 재전송
TCP 오류제어
- TCP 오류 제어는 수신자와 송신자의 패킷 오류 처리를 하는 방법
- 수신자가 송신자에게 명시적으로 NACK(부정응답)을 보내거나 송신자에게 ACK(긍정응답)가 오지 않거나 중복된 ACK가 계속 해서 오면 오류가 발생했다고 판단
- 송신 측에서 1개의 프레임을 송신하고, 수신측에서 수신된 프레임의 에러 유무에 따라 ACK 혹은 NAK를 보내는 방식
- Go Back N ARQ: 전송된 프레임이 손상되거나 분실된 경우 그리고 ACK 패킷의 손실로 인한 타임아웃이 발생한 경우에 확인된 마지막 프레임 이후로 모든 프레임을 재전송하는 방식
- SR(Selective-Reject) ARQ: 손실된 프레임만 재전송하여 Go Back N ARQ의 확인된 마지막 프레임 이후의 모든 프레임을 재전송하는 단점을 보완한 기법
TCP 혼잡제어
송신자와 네트워크(라우터)
의 데이터 처리 속도 차이를 해결하기 위한 방법- 패킷 손실 시 파악되는 타임 아웃이나 중복된 ACK을 통해서 혼잡을 파악
- ACK을 확인하지 않고도 보낼 수 있는 데이터 양인 CWND(Congestion Window)를 기반으로 동작
- CWND를 기본 값에서 시작하여 1씩 증가시키는 방법
- CWND가 1부터 지수적(2배)으로 증가시키는 방법
- CWND가 임계치에 도달하면 1씩 증가키는 방법
- 혼잡 상황에서 사용되는 기법으로 CWND를 1/2배로 감소하고 선형적 증가시키는 방법
- 중복 ACK를 3개 받으면 재전송을 하는 방법
TCP 3-Way Handshake
- 서버와 클라이언트가 TCP
연결을 맺을 때
사용
- 클라이언트는 서버로 통신을 시작하겠다는 SYN을 보낸다.
- 서버는 그에 대한 응답으로 SYN+ACK를 보낸다.
- 마지막으로 클라이언트는 서버로부터 받은 패킷에 대한 응답으로 ACK를 보낸다.
- LISTEN: 포트가 열린 상태로 연결 요청 대기 중인 상태
- SYN-SENT: SYN 요청을 한 상태
- SYN-RECEIVED: SYN 요청을 받고 상대방의 응답을 기다리는 중인 상태
- ESTABLISEHD: 연결의 수립이 완료된 상태, 서로 데이터를 교환할 수 있음
- TCP는 양방향 프로토콜이므로 클라이언트와 서버가 각각 서로에게 패킷을 전송할 수 있다는 것을 확인해야 됨
- 연결을 맺을 때 사용하는 포트(port)는 유한 범위 내에서 사용하고 시간이 지남에 따라 재사용됨
- 따라서 두 통신 호스트가 과거에 사용된 포트 번호 쌍을 사용할 가능성이 존재함
- 서버 측에서는 패킷의 SYN을 보고 패킷을 구분하게 되는데, 난수가 아닌 순차적인 number가 전송된다면 이전의 연결로부터 오는 패킷으로 인식할 위험이 있음
TCP 4-Way Handshake
- 서버와 클라이언트가 TCP
연결을 종료할 때
사용
- 클라이언트는 응답을 주고 연결을 끊기 위해 FIN패킷을 보낸다.
- 서버는 클라이언트에서 보낸 패킷에 대한 응답으로 ACK 패킷을 보낸다.
- 서버는 자신의 통신이 모두 끝나면 사용한 소켓을 정리하며 통신을 완전히 끝내도 된다는 의미로 FIN 패킷을 보낸다.
- 클라이언트는 서버 패킷에 대한 응답으로 ACK패킷을 보낸다.
- CLOSE-WAIT 상대방의 FIN(종료 요청)을 받은 상태 (상대방 FIN에 대한 ACK를 보내고 애플리케이션에 종료를 알림)
- FIN-WAIT-1 자신이 보낸 FIN에 대한 ACK를 기다리거나 상대방의 FIN을 기다리는 상태
- LAST-ACK CLOSE-WAIT 상태를 처리 후 자신의 FIN요청을 보낸 후 FIN에 대한 ACK를 기다리는 상태
- FIN-WAIT-2 자신이 보낸 FIN에 대한 ACK를 받았고 상대방의 FIN을 기다리는 상태
- TIME-WAIT 모든 FIN에 대한 ACK를 받고 연결 종료가 완료된 상태 (새 연결과 겹치지 않도록 일정 시간 동안 기다린 후 CLOSED로 전이)
- CLOSE 연결 수립을 시작하기 전의 기본 상태 (연결 없음)
- 클라이언트가 일방적으로 끊으면 서버는
연결은 되어 있으나 요청이 없는 상태
로 오해할 수 있음 - 클라이언트는 데이터 전송을 끝냈다고 하더라도 서버는 전송할 것이 남아있을 수 있음
IP 주소 체계
클래스 기반 할당 방식
- 클래스를 구분하여 대역을 설정하여 앞에 있는 부분을 네트워크 주소, 그 뒷 부분을 주소인의 호스트 주소로 IP를 활용하는 방법
- A 클래스의 12.0.0.0 네트워크를 부여받았다면 12.255.255.255.255는 브로드 캐스트용 주소가 되며 12.0.0.1 ~ 12.255.255.255.254의 호스트 주소로 사용 가능
- 116.0.0.0 네트워크를 부여받았다면 A 클래스이며 116.0.0.1 ~ 12.255.255.255.254의 호스트 주소로 사용 가능
- 앞에 첫번째 바이트를 네트워크 주소로 나머지 3개의 바이트를 호스트 주소로 사용
- 구분 비트가 0 -> 00000000.00000000.00000000.00000000 ~ 01111111.11111111.11111111.11111111
- 대역 0.0.0.0 ~ 127.255.255.255 사용
- 앞에서부터 두번째 바이트까지를 네트워크 주소로 나머지 2개의 바이트를 호스트 주소로 사용
- 구분 비트가 10 -> 10000000.00000000.00000000.00000000 ~ 10111111.11111111.11111111.11111111
- 대역 128.0.0.0 ~ 191.255.255.255 사용
- 앞에서부터 세번째 바이트까지를 네트워크 주소로 나머지 1개의 바이트를 호스트 주소로 사용
- 구분 비트가 110 -> 11000000.00000000.00000000.00000000 ~ 11011111.11111111.11111111.11111111
- 대역 192.0.0.0 ~ 223.255.255.255 사용
CIDR (Classless Inter-Domain Routing) 방식
- 클래스 없는 도메인 간 라우팅 기법
- 최신의 IP 주소 할당 방법으로 정적이였던 클래스 방식에 비해 IP 주소의 영역을 여러 네트워크 영역으로 나눌 수 있기 때문에 기존방식에 비해 유연
- 서브넷으로 최대 호스트 수를 유추할 수 있음
- 예를 들면 10.0.2.23/xx 같은 형식
- xx 자리수까지는 고정 IP
- 서브넷의 사용 가능 IP 수: 2^(32-xx) - 2
- 첫번째: 네트워크 주소, 마지막: 브로드캐스팅 주소
- 네트워크가 143.7.65.203/22 이면 앞에 22비트는 네트워크 주소를 나타내고 나머지 10비트는 호스트 주소를 나타내고 143.7.64.0 ~ 143.7.67.255의 호스트 주소를 사용
NAT (Network Address Translation)
- IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을
재기록
하면서라우터
를 통해 통신하는 기술 - 외부에 공개된
공인(Public) IP
와 내부에서 사용하는사설(Private) IP
를맵핑
하여 원활히 통신할 수 있게 하는 기술 - IPv4 주소 체계로 많은 주소를 표기하지 못했는데 이를 해결해준 기술
- 사설 IP를 통하기 때문에 내부망 IP들이 노출되지 않으므로 보안적 강점이 있음
- 외부에서 사설 IP를 알 방법이 없어 내부 네트워크와 호스트를 보호 가능
- 패킷 헤더 =
소스 IP: 사설 IP
,목적 IP: 목적지 IP
- 게이트 웨이에서
소스 IP: 게이트웨이의 공인 IP
로 변경,목적 IP: 목적지 IP
변경 없음 - NAT 테이블에 맵핑 내역을 저장
- 패킷 헤더 =
소스 IP: 목적지 IP
,목적 IP: 게이트웨이의 공인 IP
- 게이트 웨이에서
소스 IP: 목적지 IP
변경 없음,목적 IP: 사설 IP
로 변경 (재기록) - NAT 테이블을 참조하여 수정
CDN (Contents Delivery Network)
지리적, 물리적으로 떨어져 있는
사용자에게 웹 페이지 콘텐츠로드 지연을 최소화
하는 촘촘히분산된 서버
로 이루어진 플랫폼 기술- 각 지역에 캐시 서버(PoP, Points of Presence)를 분산 배치해서 가까운 사용자의 요청에 원본 서버가 아닌 캐시 서버가 콘텐츠를 전달
- 지리적으로 가까운 캐시 서버가 응답하여 빠른 응답 가능
- Origin 서버에 문제가 생겨도 다른 서버로 대체가 가능해 안전성 증가
- 트래픽 집중 방지 가능
- 클라이언트는 HTML, 이미지, CSS, JavaScript 파일 등 필요한 콘텐츠를 요청
콘텐츠에 대한 각 요청이 발생하면 최적으로 배치된 CDN 서버에 엔드유저가 매핑
- CDN 서버는 요청된 파일의
캐싱
된(사전 저장된) 버전으로 응답
GSLB (Global Server Load Balancing)
- 전통적인 DNS 서비스를 발전시킨 형태로 헬스 체크와 지리적 정보를 사용하는 시스템
- DNS 기반의 로드 밸런싱으로 IP가 아닌 도메인을 갖음
- DNS와 VIP를 통해서 구성을 한 경우 한 IDC에 서버들이 몰려 있으면 DR 상황에서 문제가 생길 수 있기 때문에 서버의 위치를 고려할 수 있는 GSLB를 사용
- VIP와 GLSB를 함께 사용 할 수도 있고 VIP 없이 GSLB만 서버에 묶어서 구성할 수도 있음
- 일반적인 DNS 방식과 달리 헬스 체크를 통해서 서버가 죽은 경우 해당 서버로 요청이 가지 않도록 할 수 있음
- 일반적인 DNS 방식과 달리 L4/L7의 스위치가 추가로 필요
로드 밸런싱
- 로드 밸런서를 클라이언트와 서버 사이에 두고, 부하가 집중되지 않도록 여러 서버에 분산하는 방식
- Scale out 시에 사용
- Server Load Balancing이라고도 불림
- 로드 밸런싱 작업을 담당하는 장비
- NAT(Network Address Translation): 사설IP - 공인IP 전환
- Tunneling: 데이터를 캡슐화하여 연결된 노드만 캡슐을 해제할 수 있게 만듦
- DSR(동적 소스 라우팅): 요청에 대한 응답을 할 때 로드밸런서가 아닌 클라이언트의 IP로 응답
- IP와 PORT 기반의 로드 밸런싱
- 보통 L4 스위치 장비로 로드밸런싱하며 가격이 비쌈
- VIP를 통한 로드 밸런싱은 L4 로드밸런싱
- URI, Payload, Http Header, Cookie 등 기반의 로드 밸런싱
- 보통 L7 스위치 장비로 로드밸런싱하며 가격이 비쌈
- nginx나 apache를 통한 로드 밸런싱은 L7 로드밸런싱
- 여러 개의 실제 서버를 대표하는 가상의 IP로 DNS와 VIP를 연결하여 다수의 서버에 연결할 때 사용
- VIP는 IP 기반의
로드 밸런싱
하는 역할을 겸할 수 있음
FQDN
- Fully Qualified Domain Name의 약자로 전체
주소 도메인 네임
- 도메인 하위에 서브 도메인을 구성할 수 있는데 FQDN은 서브도메인까지 포함한 Full Domain
ACL
- Access Control List의 약자로 네트워크 망에 접근을 허가하는 IP 리스트와 포트
Proxy 서버
CORS
- 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제
웹 브라우저에 URL을 입력했을 때의 수행 과정
- 사용자의 PC는
DHCP 서버
에서 사용자자신의 IP 주소
,가장 가까운 라우터의 IP 주소
,가장 가까운 DNS서버의 IP 주소
를 받음 DNS
서버로 쿼리를 전송해 URL의IP 주소
를 응답받음ARP
를 이용하여 가장 가까운 라우터의 IP 주소로 MAC 주소를 얻어 요청 전송
- TCP Socket을 통해 웹 서버와
3-Way Hand Shaking
을 하여 연결 HTTP Request
가 TCP Socket을 통해 보내지고, 응답으로 웹페이지의 정보가 사용자의 PC에 전달
- DHCP: IP 주소 및 TCP/IP 설정을 클라이언트에 자동으로 제공하는 프로토콜
- DNS: IP 주소와 도메인의 매핑 정보를 관리하는 프로토콜
- ARP: IP 주소를 물리 주소로 변환하는 프로토콜
- IP 주소: 컴퓨터 마다 부여된 고유의 주소, 변할 수 있음
- MAC 주소: NIC 카드 마다 부여된 네트워크 장비 고유의 주소, 변하지 않음