1-1. 프로토콜이란?
프로토콜(Protocol)은 동료 계층 간에 통신을 가능하게 해주는 규칙과 절차의 집합을 의미합니다.
즉, 프로토콜은 모든 통신에서 똑같이 반복되어 일어나야 하는 일을 의미합니다.
- 프로토콜의 특징
- syntax : 어떤 형태로 data의 format을 만들 것인가?
- semantics : 서로 정보를 제어하기 위해 어떤 의미를 갖는 정보를 주고 받아야함.
- timing : 순서와 스피드를 매칭.
- 표준화된 프로토콜 아키텍쳐
- 서로 다른 장치 간에 원만한 통신을 위해서 기기의 표준화는 절대적입니다.
- 공급자 : 적절 수준의 마케팅 기회를 노릴 수 있습니다.
- 수요자 : 자신의 역량에 맞는 표준 장비를 선택할 수 있습니다.
2가지의 표준화된 프로토콜 아키텍쳐가 존재합니다 : "OSI 참조 모델", "TCP/IP 프로토콜 모델"
- OSI 참조 모델
- 유럽에서 제작했습니다.
- TCP/IP보다 잘 만들었지만 대부분의 사람들이 익순한 TCP/IP를 사용하여서 결국 사라졌습니다.
- TCP/IP 프로토콜 모델
- 현재 널리 사용 중인 프로토콜 아키텍쳐입니다.
- IBM에서 만든 SNA 아키텍쳐를 흡수하였습니다.
1-2. OSI 7계층
OSI 7계층은 네트워크 통신 기능을 7개의 계층으로 나누는 개념적 프레임워크입니다.
계층별로 모든 기술은 특정 기능을 제공하고 해당 기능을 수행해야 네트워킹에 유용하게 사용할 수 있습니다.
상위 계층의 기술은 기본 구현 세부 사항에 대해 걱정할 필요 없이 하위 수준 기술을 사용할 수 있으므로 추상화의 이점을 누릴 수 있습니다.
- 1계층 (물리 계층) : 물리적 통신 매체와 해당 매체를 통해 데이터를 전송하는 기술을 말합니다. 이는 디지털 및 전자 신호를 전송하는 것입니다.
- 2계층 (데이터 링크 계층) : 물리 계층이 이미 존재하는 네트워크를 통해 두 시스템을 연결하는 데 사용되는 기술을 말합니다. 이 계층은 데이터 패킷에 캡슐화된 디지털 신호인 데이터 프레임을 관리합니다. 이의 주요 초점은 보통 데이터의 흐름 제어 및 오류 제어입니다. 데이터링크 계층은 매체 접근 제어(MAC) 계층과 논리 링크 제어(LLC) 계층으로 나뉩니다.
- 3계층 (네트워크 계층) : 분산된 네트워크 하나 또는 연결된 여러 네트워크의 노드 또는 머신을 통한 라우팅, 전달 및 주소 지정과 같은 개념과 관련이 있습니다. 이는 흐름 제어도 관리할 수 있습니다. 인터넷에서는 "IPv4" 및 "IPv6"가 주 네트워크 계층 프로토콜로 사용됩니다.
- 4계층 (전송 계층) : 전송 계층의 주요 초점은 데이터 패킷이 손실이나 오류 없이 올바른 순서로 도착하는 것이나 필요한 경우 데이터 패킷을 원활하게 복구하는 것에 있습니다. 이의 초점은 보통 흐름 제어와 오류 제어입니다. 전송 계층에서 사용되는 프로토콜로 TCP와 UDP가 있습니다.
- 5계층 (세션 계층) : 세션 계층은 한 세션에서 서로 다른 두 애플리케이션 간의 네트워크 조정을 담당합니다. 이는 일대일 애플리케이션 연결 및 동기화 충돌의 시작과 끝을 관리합니다. 네트워크 파일 시스템(NFS)과 서버 메시지 블록(SMB)은 세션 계층에서 일반적으로 사용되는 프로토콜입니다.
- 6계층 (표현 계층) : 표현 계층은 주로 애플리케이션에서 전송하고 소비하는 데이터 자체의 구문과 관련이 있습니다. 예를 들어, HTML, JSON, CSV는 모두 표현 계층의 데이터 구조를 설명하는 모델링 언어입니다.
- 7계층 (응용 계층) : 응용 계층은 특정 유형의 애플리케이션 자체와 표준화된 통신 방법과 관련이 있습니다. 예를 들어, 브라우저는 HTTPS를 사용하여 통신할 수 있고, HTTP 및 이메일 클라이언트는 POP3 및 SMTP를 사용하여 통신할 수 있습니다.
2. TCP와 UDP
TCP (Transmission Control Protocol) : 인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜입니다. TCP는 연속성보다 신뢰성 있는 전송이 중요할 때 사용하는 프로토콜입니다.
- TCP 특징
- 연결 지향 방식으로 패킷 교환 방식을 사용
- 흐름 제어 및 혼잡 제어
- 높은 신뢰성을 보장
- UDP보다 속도가 느림
- 전이중, 점대점 방식 사용
- TCP 서버 특징
- 서버소켓은 연결만을 담당
- 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용
- 서버와 클라이언트는 1:1로 연결
- 스트림 전송으로 전송 데이터의 크기가 무제한
- 패킷에 대한 응답을 해야하기 때문에 (시간 지연, CPU 소모) 성능이 낮음
- Streaming 서비스에 불리함 (손실된 경우 재전송 요청을 하기 때문)
UDP (User Datagram Protocol) : 데이터를 데이터그램 단위로 처리하는 프로토콜입니다. UDP는 신뢰성보다 연속성이 중요한 서비스에서 자주 사용합니다. 예로 실시간 서비스(streaming)에 많이 사용됩니다.
- UDP 특징
- 비연결형 서비스로 데이터그램 방식을 제공
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않음
- UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
- 신뢰성 낮음
- TCP보다 속도가 빠름
데이터그램 : 독립적인 관계를 지니는 패킷
- UDP 서버 특징
- UDP에는 연결 자체가 없어서 서버 소켓과 클라이언트 소켓의 구분이 없음. "connect 함수" 필요 없음.
- 소켓을 활용해 IP와 PORT를 기반으로 데이터를 전송
- 서버와 클라이언트는 1:1, 1:N, N:M 등으로 연결 가능
- 데이터그램(메시지) 단위로 전송되며 그 크기는 65535 바이트로, 크기가 초과될 경우, 잘라서 보냄
- 흐름제어가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없음음
- 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시되는 경우에 사용
흐름제어(Flow Control) & 혼잡제어(Congestion Control)
흐름제어는 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것입니다. 예로, 송신하는 곳에서 감당이 안되게 데이터를 빠르게 보내면 수신자에게 문제가 발생할 수 있습니다.
혼잡제어는 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것입니다. 만약 정보의 소통량이 과다하면 패킷을 조금만 전송하여서 혼잡 붕괴현상이 일어나는 것을 막습니다.
3. TCP와 IP의 연계
- TCP는컴퓨터 간에 데이터를 안전하게 전송하기 위한 프로토콜입니다.
- IP는 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약입니다.
- TCP/IP는 컴퓨터 간의 통신 표준과 네트워크 라우팅 및 상호연결에 대한 규칙을 지정하는 프로토콜로, 인터넷에서 광범위하게 사용되고 있습니다. TCP/IP는 5개의 계층으로 구성된 계층적 모델입니다.
1. 물리층
장치 연결 부분의 물리적인 특성을 명시합니다.
- 물리층 특징
- 비트의 전기적 혹은 광학적 표현
- 비트의 나열, 데이터 포맷은 없음
- 노드로 비트를 보내는 역할
- 데이터의 물리적 이동은 물리층에서만 이루어짐
- 데이터 속도, 비트의 동기화, 토폴로지, 전송 모드, 선로 구성 등에 관한 사항 포함
2. 데이터 링크층
프레임화, 송수신 주소 명시, 흐름제어, 에러제어, 접근 제어 등이 존재합니다.
- 데이터 링크층 특징
- 데이터링크 계층부터 메시지 포맷이 존재
- 헤더 존재
- 에러 제어 : 비트에 대한 에러 검출과 복구
- 흐름 제어 : 수신 측과 송신 측의 데이터 데이터처리 속도 차이를 해결
- 접근 제어 : 여러 장치들이 동일한 링크를 공유할 때 충돌이 발생하지 않도록 조정
3. 네트워크 계층
데이터를 패킷 단위로 잘개 쪼개고 송수신 주소를 명시하고 라우팅을 수행합니다.
- 네트워크 계층 특징
- 라우팅 : 패킷을 최종 목적지로 경로 설정
- 데이터가 전송될 수 있는 많은 경우의 수 중 가장 효율적인 라우팅 방법을 찾음
- 에러 검사는 진행하지 않음 (이미 데이터 링크층에서 했기 때문)
4. 전송 계층
특정 프로세스에 대한 주소 지정, 메시지를 시그먼트 단위로 분할 및 조립, 제어, 연결 제어, 종단간 흐름 제어, 종단간 에러 제어를 수행합니다.
네트워크 계층에서 IP를 이용해 컴퓨터에서 컴퓨터로 데이터를 전송했다면, 전송 계층에서는 들어온 데이터가 컴퓨터 중 어떤 프로세스한테 전달이 되어야 하는지를 결정합니다.
- 전송 계층 특징
- 데이터의 크기가 너무 클 경우, 데이터가 잘려오기 때문에 잘려져 온 데이터를 잘 조립하는 역할
- TCP와 UDP는 대표적인 전송 프로토콜
5. 응용 계층
복잡 다양한 모든 응용프로그램들, 다양한 네트워크 서비스가 존재합니다.
- 응용 계층의 종류
- FTP : 파일을 송수신
- Telnet : 원격지 접속
- SMTP : 전자 우편을 주고받음
- HTTP : 하이퍼텍스트를 지원
4. 3 Way-Handshake
TCP 연결 과정을 의미합니다.
TCP 프로토콜로 통신하기 위해 데이터 전송 전 상호 연결을 수립하는 과정입니다.
상대방과 논리적 세션을 맺는 시작점으로 해당 과정을 거친 후에 데이터들을 정상적으로 송수신하는 절차를 가집니다.
즉, 데이터를 전송할 준비가 되었다는 것을 보장 및 데이터 전송 준비 확인하는 과정이며 3 Way-Handshake 과정에서 정상적으로 세션이 맺어지지 않으면 통신을 중단합니다.
3 Way-Handshake 과정
- CLOSED
- 아직 연결 시도 전 Client, Server의 상태
- TCP 포트가 닫혀진 상태
- LISTEN
- TCP 포트가 열려 있고 연결 요청 대기하는 상태
- SYN-SENT (Client)
- Client가 Server에게 연결을 요청하는 SYN 패킷을 전송
- 임의의 값 seq(100) 넘버를 함께 전송
- SYN-RECEVED (Server)
- SYN 패킷을 받은 Server는 요청을 수락하게 되면 SYN+ACK 패킷을 전송하며 응답
- 임의의 값 seq(200) 넘버 전달
- 해당 패킷의 응답이라는 표시로 Client로부터 전달 받은 seq(100)+1을 한 ack(101) 넘버 전달
- ESTABLISHED (Client)
- Server로부터 SYN+ACK 응답을 받아 Client는 연결이 수립된 상태
- 다시 Server에게 ACK로 수립 완료 패킷 전달
- 이전에 보낸 seq(100)+1을 하여 새로운 seq(101) 넘버 전달
- 해당 패킷의 응답이라는 표시로 Server로부터 받은 seq(200)+1을 하여 ack(201) 넘버 전달
- ESTABLISHED
- Client로부터 연결 수립이 되었다는 ACK 패킷을 전달받아 Server도 연결 수립 상태로 전환
- Server와 Client가 Established 모드가 된 후 데이터 송수신이 이루어짐
5. 4 Way-Handshake
TCP의 연결 종료를 의미합니다.
4 Way-Handshake 과정
- FIN+ACK (Client)
- FIN_WAIT_1 : 클라이언트가 서버에게 FIN+ACK를 보내고 대기
- ACK (Server)
- CLOSE_WAIT : 서버는 FIN+ACK에 대한 ACK를 보낸 후, 해당 어플리케이션에서 TCP 연결 종료를 할 때까지 대기
- FIN_WAIT_2 : 클라이언트는 ACK를 받고 FIN ACK를 받을 때까지 대기
- FIN+ACK (Server)
- LAST_ACK : 서버는 해당 애플리케이션에서 TCP 연결 종료되면 클라이언트에게 FIN+ACK를 보냄
- ACK (Client)
- TIME_WAIT : 클라이언트는 FIN+ACK 수신 후 마지막 ACK를 보내고 2MSL시간동안 대기
- CLOSED : 서버는 마지막 ACK 수신 후, 연결 종료
- CLOSED : 클라이언트는 2MSL(Maximum Segment Lifetime) 경과 후, 연결 종료
- 만약 서버가 마지막 ACK를 수신하지 못했다면 FIN+ACK 재전송이 발생할 것이고 이를 처리해주어야 하기 때문에 대기하는 것
- 1 ~ 4분 정도 대기
6-1. IPv4
IPv4 주소는 32비트 길이의 식별자로 0.0.0.0 ~ 255.255.255.255까지의 숫자의 조합으로 이루어지며 총 네 구간으로 나눠져 있고 최대 12자리의 번호로 이루어져 있습니다. 이를 통해 최대 약 43억개의 서로 다른 주소를 부여 할 수 있습니다.
모든 IP 주소는 네트워크 부분과 호스트 부분으로 나누어집니다.
- IP 주소의 클래스
- A class
- binary 0으로 시작하고 범위는 1.x.x.x ~ 126.x.x.x이다.
- 모두 0으로 예약하고 루프백용 01111111 (127)로 예약
- B class
- binary 10으로 시작하고 범위는 128.x.x.x ~ 191.x.x.x
- C class
- binary 110으로 시작하고 범위는 192.x.x.x ~ 223.x.x.x
- Private address
- 범위는 10.x.x.x, 172.16.x.x, 192.168.x.x
- 네트워크 주소 변환(NAT) 상자로 매핑됨
- A class
IPv4에서 라우팅
인터넷은 목적지 네트워크 부분만을 근거로 라우팅합니다. 그 의미는?
- 네트워크 성능과 관계없이 동일한 목적지 데이터는 동일한 경로를 통과함
- 단지 마지막 라우터만이 목적지 컴퓨터가 존재하는지 확인할 수 있음
- 임의 두 노드 간에 가는 경로와 오는 경로가 서로 상이할 수 있음
6-2. IPv6
현재의 IP는 IPv4이지만 이는 바뀌어야 합니다. WHY?
- 시간이 갈수록 IP 주소가 고갈됨
- 새로운 형태의 다양한 서비스가 출현
- 보안이 네트워크 필수 기능으로 인식
- 단말의 이동성 지원에 대한 요구
IPv6는 IPv4의 대체이고 개발 중에는 IPng(IP 차세대)라고 불렸습니다.
- IPv6의 특징
- 확장된 주소 공간
- 128비트 주소체계를 사용하는 IPv6는 IPv4의 주소 부족 문제를 해결
- IP 주소를 절약하기 위해 사용되는 NAT(Network Address Translation)와 같은 주소 변환 기술도 불필요
- 새로운 헤더 포맷
- 헤더를 고정 길이로 변경
- 패킷 단편화(fragmentation) 관련 필드가 삭제
- 체크섬(checksum) 필드 삭제
- 향상된 서비스의 지원
- IPv6는 트래픽을 효과적으로 분류할 수 있는 기능을 제공
- 이를 위해 IPv6 헤더 내에 플로우 레이블(Flow Lable) 필드를 이용
- 보안 기능
- IPv4에서의 보안은 IPSec이라는 보안 관련 프로토콜을 별도로 설치해주어야 하는 부가적 기능을 필요로 함
- IPv6에서는 프로토콜 내에 보안 관련 기능을 탑재할 수 있도록 설계
- 확장 헤더를 통하여 네트워크 계층에서의 종단간 암호화를 제공
- 주소 자동설정
- IPv6에서는 로컬 IPv6주소를 LAN상의 MAC주소와 라우터가 제공하는 네트워크 프리픽스에 결합하여 IP주소를 자동 생성
- 이동형 컴퓨터의 경우 어느 곳에서든 네트워크와 연결을 설정하면 자동으로 포워딩 주소를 설정할 수 있게 함
- 확장된 주소 공간
- IPv6 주소 종류
- unicast
- 단일 인터페이스
- anycast
- 인터페이스 세트 (일반적으로 다른 노드)
- 일반적으로 가장 가까운 하나의 인터페이스로 전달됩니다.
- multicast
- 인터페이스 세트
- 식별된 모든 인터페이스에 전달됩니다.
- unicast
7. DNS (Domain Name System)
DNS는 사용자에게 친숙한 도메인 이름을 컴퓨터가 네트워크에서 서로를 식별하는 데 사용하는 IP 주소로 변환하는 인터넷 표준 프로토콜의 구성 요소입니다.
8. 포트 (Port)
포트 번호를 통해서 대상 IP 기기의 특정 애플리케이션의 서버에 접속할 수 있도록 알려줍니다.
포트 번호는 0 ~ 65,535까지 사용할 수 있습니다. 그 중, 0 ~ 1023까지의 포트 번호는 주요 통신을 위한 규약에 따라 이미 정해져 있는 포트입니다.
종류 | 포트 번호 범위 | 설명 |
Well-known port | 0 ~ 1023 | 시스템 사용 번호 (슈퍼유저 권한 필요) 사용 권장 X |
Registered port | 1024 ~ 49151 | 특정 프로토콜이나 어플리케이션에서 사용하는 번호 (슈퍼유저 권한 필요 X) |
Dynamic port | 49152 ~ 65535 | 어플리케이션에서 혹은 임시 사용 번호 |
9. 포트포워딩
포트포워딩은 공유기의 포트를 통해 이 공유기와 연결된 기기들의 특정 포트에 진입할 수 있게 하는 기능입니다.
포트포워딩은 공유기와 연결된 기기의 포트를 특정 번호를 전달(forwarding)해 주는 것입니다.
'ELITE HACKER bootcamp > Pre.web' 카테고리의 다른 글
[1주차 TIL] 프록시 (0) | 2024.12.16 |
---|---|
[1주차 TIL] 패킷 (0) | 2024.12.16 |
[1주차 TIL] Cookie와 Session (0) | 2024.12.16 |
[1주차 TIL] HTTP/HTTPS (2) | 2024.12.15 |
[1주차 TIL] 웹이란? (0) | 2024.12.12 |