[Network] 웹과 네트워크의 기본에 대해 알아보자
웹은 HTTP로 나타낸다
웹 브라우저는 지정된 URL에 의지해서 웹 서버로부터 리소스(파일 등의 정보)를 받음
- 클라이언트(Client) : 서버에 의뢰를 하는 웹 브라우저
- HTTP(HyperText Transfer Protocol) : 웹의 클라이언트에서 서버까지 일련의 흐름
- 프로토콜(Protocol) = 약속, 규칙
- 서로다른 하드웨어, 운영체제 간에 통신하기 위한 규칙
- 웹은 HTTP라는 프로토콜(약속)을 통해 통신
HTTP 버전
- HTTP/1.0 : 초기의 사양, 아직 현역으로 사용중
- HTTP/1.1 : 현재 가장 많이 사용되는 버전
- HTTP/2.0 : HTTP/1.1의 차세대로 나왔지만 아직 널리 사용되기에는 시간이 걸릴듯
네트워크 기본은 TCP/IP
- TCP/IP : 인터넷과 관련된 프로토콜들의 모음
- 응용 계층(Application Layer)
- 애플리케이션에 사용하는 통신의 움직임 결정
- FTD, DNS, HTTP 등
- 전송 계층(Tranport Layer)
- 응용계층에 네트워크로 접속된 2대 컴퓨터 사이 데이터 흐름 제공
- TCP(Transmission Control Protocol), UDP(User Data Protocol)
- 네트워크 계층(Network Layer) = 인터넷 계층
- 네트워크 상에서 패킷의 이동을 다룸
- 어떠한 경로(절차)로 패킷(packet)을 보낼지 결정
패킷(packet) : 전송하는 데이터 최소 단위
- 데이터 링크 계층(Data Link Layer) = 링크 계층
- 네트워크에 접속하는 하드웨어적인 면을 다룸
- 응용 계층(Application Layer)
- 계층화(Layer)의 메리트
- 사양이 변경된 해당 계층만 변경 가능(유지보수)
- 설계가 편리함 -> 자기 자신 계층만 고려하면 됨, 나머지 부분 고려X
TCP/IP 통신의 흐름
TCP/IP로 통신을 할 때 계층을 순서대로 거쳐 상대와 통신함
송신하는 측은 애플리케이션 계층부터 내려가고 수신하는 측은 반대로 올라감
예시) HTTP
- 애플리케이션 계층 HTTP 클라이언트(송신): HTTP리퀘스트요청
- 전송 계층 TCP(송신): 안내 번호와 포트 번호를 붙여 네트워크 계층에 전달
- 네트워크 계층 IP(송신): 수신지 Mac 주소해서 데이터 링크 계층에 전달
- 데이터 링크 계층 네트워크(송신): 네트워크를 통해 송신할 준비
- 데이터 링크계층 네트워크(수신): 데이터를 받아들여 순서대로 위의 계층에 전달
- 송신측 : 각 계층을 거칠 때 마다 헤더 추가(해당 계층에 필요한 정보)
- 헤더 추가하는 과정을 캡슐화
- 수신측 : 각 계층을 거칠 때 마다 헤더 삭제
HTTP와 관계가 깊은 프로토콜은 IP/TCP/DNS
IP(Internet Protocol) -> 배송 담당
- 네트워크 계층(Network Layer)
- 개개의 패킷을 상대방에게 전달하는 역할
- IP 주소와 MAC 주소 요소가 중요
- IP 주소 : 각 노드에 부여된 주소, 변경 가능
- MAC 주소 : 각 네트워크 카드에 할당된 고유 주소, 변경 불가능
- MAC 주소에 의존해서 통신
- ARP : 수신지의 IP 주소를 바탕으로 MAC 주소를 찾는 프로토콜
MAC 주소(Media Access Control Address)
ARP(Address Resolution Protocol)
TCP(Transfer Control Protocol) -> 신뢰성 담당
- 전송 계층(Tranport Layer)
- 큰(대용량) 데이터를 보내기 쉽게 TCP 세그먼트(단위 패킷)으로 분해하여 상대에게 보내고,
정확하게 도착했는지 확인하는 역할 -> 쓰리웨이 핸드쉐이킹 사용
쓰리웨이 핸드쉐이킹(three way handshaking)
- SYN과 ACK라는 TCP 플래그를 사용
- 통신이 도중에 끊기면 TCP는 패킷을 재전송함
DNS(Domain Name System) -> 이름 담당
- 응용 계층(Application Layer)
- 도메인 이름과 IP 주소 이름 확인을 제공
- 도메인명에서 IP 주소를 조사 하거나 반대로 IP 주소에서 도메인명을 조사하는 서비스를 제공
URI와 URL
URI(Uniform Resource Identifiers) -> 리소스 식별자
리소스를 식별하기 위해 문자열 전반을 나타냄
- Uniform
- 통일(Uniformity)된 서식을 결정
- 리소스 지정 방법을 같은 맥락에서 구별없이 취급할 수 있음
- 새로운 스키마(http:, ftp 등) 도입을 용이하게 함
- Resource
- 식별 가능한 모든 것
- Identifier
- 식별 가능한 것을 참조하는 오브젝트이며 식별자로 불림
URL(Uniform Resource Locator)
리소스(자원)의 주소(네트워크 상의 위치)를 나타냄
- URI의 하위 종류
URL 포맷
- 완전 수식 절대 URI or 완전 수식 절대 URL
- 전체 경로를 다 기술한 URI
- 상대 URL
- 전체 경로 중 기준 URI부터 상대적 경로 표현
예시) 절대 URI 포맷
- 스키마(Scheme)
http:
와https:
를 사용하여 리소스를 얻기위한 프로토콜- 대소문자 무시, 마지막에 콜론(:)
- 자격정보(Credential) -> 옵션
- 서버로부터 리소스 취득을 위해 필요
- 유저명과 패스워드를 지정가능
- 서버 주소
- 완전 수식 형식 URI에서 사용
- DNS이름, IPv4 주소, IPv6 주소 사용
- 서버포트 -> 옵션
- 서버의 접속 대상인 네트워크 포트 번호
- 생략하면 디폴트(default) 포트(80)가 사용
- 계층적 파일 패스
- 특정 리소스 식별을 위해 서버 상의 파일 패스를 지정
- UNIX 디렉토리 지정 방법과 비슷
- 쿼리 문자열 -> 옵션
- 파일 패스로 지정된 리소스에 임의의 파라미터를 넘겨주기 위해 사용
- 프래그멘트 식별자 -> 옵션
- 주로 취득한 리소스에서 서브 리소스(도큐먼트 중간에 위치)를 가리키기 위해 사용
느낀점
HTTP/1.1의 차기 버전으로 HTTP/2.0이 나왔다고 했는데 어떤게 다른지 궁금해졌다. 기회가 된다면 찾아보고 어떻게 적용되고 사용되는지 눈으로 확인해보면 좋을거 같다는 생각이 들었다. 전체적으로 완벽히 이해가 안되는 부분이 있는데 직접 사용되는 예를 못봐서 그런거 같다.