“성공과 실패를 결정하는 1%의 네트워크 원리” 책을 읽고 서로 피드백을 해주는 스터디에 들어갔다.
네트워크에 대해 공부해보 싶어서 책이나 강의를 들으며 공부해 봐야겠다는 생각을 했었다. 그런데 막상 혼자 공부해보려 하니 어디서부터 어떤 방식으로 공부해야 할지 감이 오지 않았다. 그러다 슬랙 채팅방에서 선배가 네트워크 책을 읽고 페어끼리 피드백을 해주는 스터디를 만든다고 하셨다. 이 스터디를 하면 내가 생각하지 못한 부분을 피드백 받을 수 있고, 책을 읽고 정리하는 습관도 길러지겠다는 기대감이 들었다. 그래도 현재 알고리즘 공부, 동아리 프로젝트 개발을 하고 있고, spring boot, jpa를 공부해야 해서 스터디 기간이 3개월이라는 부분이 부담스러웠다. 하지만 네트워크 지식도 필요하기도 하고 시간을 여유롭게 쓰는 것 보다는 나을 거라는 생각이 들었다. 그래서 스터디를 신청하게 되었다.
01. HTTP 리퀘스트 메시지
1. URL 입력
- 브라우저는 웹서버에 액세스하는 클라이언트 기능, 파일을 다운로드/업로드하는 FTP의 클라이언트 기능, 메일의 클라이언트 기능을 가지고 있다.
- URL은 클라이언트의 기능 중 어느 것으로 데이터에 액세스하면 좋을지 판단하기 위해
http:, ftp:, file:, mailto: 등 여러 종류가 있다. 각종 URL의 형식이 다르다.
- FTP (File Transfer Protocol)
- 파일을 다운로드/업로드할 때 사용하는 프로토콜이다.
- FTP 프로토콜을 이용하여 파일 전송을 하는 프로그램도 FTP이다.
- 프로토콜
2. URL 해독
- URL을 해독할 때는 요소를 따로따로 분해한다.
- 프로토콜 + // + 웹 서버 명 + / + 디렉토리 명 + / + 파일 명
- “/ + 디렉토리 명 + / + 파일 명”은 데이터 출처의 경로명이다.
3. 파일명을 생략한 경우
4. HTTP의 기본 개념
- CGI (Common Gateway Interface)
- 서버와 애플리케이션 간에 데이터를 주고 받는 방식 또는 컨벤션을 CGI라고 한다.
- CGI의 규칙에 맞게 움직이는 프로그램 CGI 프로그램이라고 한다.
- URI (Uniform Resource Identifier)
- 리퀘스트 메시지 안에 ‘무엇을’, ‘어떻게 해서’ 하겠다는 내용이 쓰여있는데, ‘무엇을’에 해당하는 것이 URI이다.
- 다양한 액세스 대상을 쓸 수 있다.
- 스테이터스 코드
- 응답 메시지의 앞부분에 실행 결과를 나타낸다.
- 메소드
- GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE, CONNECT
5. HTTP 리퀘스트 메시지
- 리퀘스트 메시지
- 리퀘스트 라인
- <메소드><공백><공백><HTTP 버전>
- 리퀘스트 메시지의 첫 번째 행으로, 메소드를 통해 웹 서버에 어떻게 할 것인지 전달한다.
- 메시지 헤더
- <필드명>:<필드값>
<공백 행>
- 한 행에 한 개의 헤드 필더를 쓰며, 리퀘스트의 부가적인 정보를 나타낸다.
- 메시지 본문
- <메시지 본문>
- 클라이언트에서 서버에 송신하는 데이터로, 폼 페이지에 입력한 데이터를 웹 서버에 보낼 때 데이터가 들어간다.
6. HTTP 응답 메시지
- 응답 메시지
- 스테이터스 라인
- <HTTP 버전><공백><스테이터스 코드><공백><응답 문구>
- 응답 문구에는 스테이터스 코드의 내용을 나타내는 설명문이 들어간다.
- 메시지 헤더
- 메시지 본문
- <메시지 본문>
- 서버에서 클라이언트에 송신하는 데이터로, 파일에서 읽은 데이터나 CGI 애플리케이션이 출력한 데이터가 들어간다.
- 메시지 본문은 바이너리 데이터로 취급한다.
- 영상 등을 포함하고 있는 태그를 만나면 영상용 공백을 비워두고 문장을 표시 후 다시 웹 서버에 액세스하여 비워 둔 공백에 표시한다.
- 한 개의 리퀘스트에 대해 한 개의 응답만 돌려보내기 때문에 한 문장에 3개의 영상이 포함되어 있다면 총 4회 리퀘스트 메시지를 보낸다.
02. IP 주소로 DNS 서버 조회
1. IP 주소의 기본
- LAN
- 근거리 통신망 (Local Area Network)
- 동일한 물리적 공간에 존재하는 장치들의 네트워크를 의미한다.
- 하나의 라우터에 장치들이 연결되어 형성된다.
- MAC 주소
- Mac Adress, 하드웨어 주소, 물리적 주소, 이더넷 주소(Ethernet Adress)라고 불린다.
- 컴퓨터간 데이터를 전송하기 위해 있는 컴퓨터의 물리적 주소이다.
- 컴퓨터와 라우터, 스위치 등 통신 장비 모두에게 붙어있다.
- MAC 주소와 IP 주소 둘 다 필요한 이유
- 변동가능성 있는 IP 주소와 달리 MAC 주소는 변하지 않는다.
- MAC 주소는 물리적으로 연결되어 있는 노드와 통신할 때 사용된다.
- 상대의 MAC 주소만으로는 상대가 어디에 있는지 판단할 수 있다.
- 계층구조 네트워크인 IP 주소로 수 많은 컴퓨터 사이에서 범위를 좁혀나가 MAC 주소를 찾는다.
- ARP
- 네트워크단에서 IP 주소로 MAC 주소를 알아오는 기능을 하는 프로토콜이다.
- IP주소의 계층형 주소 특징을 이용해 그 주소로 찾아가 MAC 주소를 알아온다.
- 허브
- 패킷을 중계하는 장치의 일종으로, 리피터 허브와 스위칭 허브로 나뉜다.
- 전기적인 신호를 증폭시켜 LAN의 전송거리를 연장시키고, 여러 대의 디바이스를 연결해 네트워크를 만들어주는 장비다.
-
데이터 패킷이 포트 중 하나에 도착하면 다른 모든 포트로 복사된다.
-
해당 데이터를 허브가 연결된 모든 포트로 다시 브로드 캐스트한다.
⇒ 의도 하지 않은 컴퓨터도 데이터를 받게 된다.
⇒ 보안 문제가 발생하고, 불필요한 트래픽이 발생한다.
- 멀티포트 기능
- 한 번에 많은 디바이스를 연결할 수 있는 기능이다.
- 허브가 없다면 디바이스는 두 대만 연결 가능하다.
- 리피터 기능
- 전기적인 신호를 증폭시켜 들어온 데이터를 재전송한다는 의미이다.
- 리피터 기능을 사용하면 LAN의 최대 전송거리가 연장되고, 접속할 수 있는 장비의 수가 많아진다.
- 허브는 단순히 포트를 늘려주는 기능을 가진다.
- 스위치
- 허브와 유사하지만 스위치는 물리적 주소를 학습할 수 있으며, MAC 주소를 테이블에 저장한다.
- 해당 장치의 MAC 주소를 기록하기 때문에 연결된 특정 장치를 감지할 수 있다.
-
데이터 패킷이 스위치로 전송 된다.
-
MCA 주소 및 일치하는 포트 표를 보고 의도 된 대상 포트로만 전달된다.
⇒ 네트워크에서 불필요한 트래픽을 줄인다.
- 데이터 전송 에러 등을 복구해주는 기능들을 가진다.
- 자신의 테이블에 없는 목적지를 가진 패킷이 오면 해당 패킷을 연결된 모든 장치에 포워딩한다.
- 라우터
- 패킷을 중계하는 장치의 일종이다.
- LAN을 연결시켜주는 장치로써 패킷에 담긴 수신처의 주소를 읽고, 다른 통신망으로 전송하는 장치이다.
- 다른 통신망을 인식하여 가장 효율적인 경로로 패킷을 보낸다.
- 서브넷
- 허브에 몇 대의 PC가 접속된 것이다.
- IP 주소에서 네트워크 영역을 부분적으로 나눈 부분망, 부분 네트워크를 뜻한다.
- 서브넷 마스크
- 서브넷을 만들 때 쓰인다.
- 서브넷 마스크를 이용해 IP 주소 체계의 네트워크 번호와 호스트 번호를 분리할 수 있다.
- TCP/IP
- Internet Protocol Suite는 인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 통신규약의 모음이다. 인터넷 프로토콜 슈트 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP 프로토콜 슈트라고도 불린다.
- 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP로 이루어져 있다.
- TCP
- IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해준다.
- HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP위에서 동작하기 때문에 TCP/IP로 부르기도한다.
- 브로드캐스트 : 서브넷에 있는 기기 전체에 패킷을 보낸다.
- IP 주소
- 네트워크 번호 + 호스트 번호
- OO동 OO번지 형태로 네트워크 주소를 할당한다.
- 동에 해당하는 번호가 네트워크 번호이고, 번지에 해당하는 번호가 호스트 번호이다.
- 상대에게 데이터를 보내는 동작 과정
- 송신측이 메시지를 보낸다.
- 서브넷 안에 있는 허브가 운반하고, 송신측에서 가장 가까운 라우터까지 도착한다.
- 라우터가 메시지를 보낸 상대를 확인하여 다음 라우터를 판단한다.
- 다음 라우터에 보내도록 지시하여 송신 동작을 실행한다.
- 다시 서브넷의 허브가 라우터까지 메시지를 보낸다.
- 동작을 반복하다가 최종적으로 상대에게 데이터가 보내진다.
- IP 주소 표기 방법
- IP 주소 본체 표기 방법
- 10.11.12.13
- 32비트의 디지털 데이터로, 8비트씩 점으로 구분하여 10진수로 표기한다.
- 이 형태가 보통 IP 주소이지만, 이것만으로 네트워크 번호와 호스트 번호를 구분할 수 없다.
- IP 주소 본체와 같은 방법으로 네트워크를 표기하는 방법
- 10.11.12.13/255.255.255.0
- 필요에 따라 IP 주소에 넷마스크를 덧붙인다.
- 넷마스크는 IP 주소에서 32비트 부분의 디지털 데이터로, 왼쪽에 1이 나열되고 오른쪽에 0이 나열된 값이 된다.
- 1인 부분은 네트워크 번호를 나타내고, 0인 부분은 호스트 번호를 나타낸다.
- 네트워크 번호의 비트 수로 넷마스크를 표기하는 방법
- 서브넷을 나타내는 주소
- 10.11.12.0/24
- 호스트 번호 부분이 모두 0인 IP 주소는 서브넷 자체를 나타낸다.
- 서브넷의 브로드캐스트를 나타내는 주소
- 10.11.12.255/24
- 호스트 번호 부분이 모두 1인 IP 주소는 브로드캐스트를 나타낸다.
2. 도메인명과 IP 주소를 구분하여 사용하는 이유
- URL 안에 IP 주소를 쓰지 않는 이유
- 서버명 대신에 IP 주소를 써도 올바르게 작동하지만, 숫자를 나열한 IP 주소를 기억하기 어렵다.
- TCP/IP의 구조를 고안할 당시에는 주소 대신에 이름을 사용하는게 가치 있는 일이었다.
- IP 주소 대신 이름으로 통신하지 않는 이유
- IP 주소는 4바이트분의 수치만 취급하면 되지만, 도메인명은 최대 255바이트까지의 문자를 취급해야 한다.
- 라우터가 과부하되어 데이터 운반에 더 많은 시간이 걸리면서 네트워크의 속도가 느려진다.
- ⇒ 효율성이 떨어진다.
- DNS로 이름을 알면 IP 주소를 알 수 있고, IP 주소를 알면 이름을 알 수 있다.
- Domain Name System
- 서버명과 IP 대응, 메일 주소와 메일 서버 대응 등 다양한 정보를 이름에 대응해서 등록할 수 있다.
3. Socket 라이브러리가 IP 주소를 찾는 기능 제공
- 네임 리졸루션 (name resolution, 이름 확인)
- DNS의 원리를 사용하여 IP 주소를 조사한다.
- 리졸버(resolver)
- DNS 클라이언트에 해당하며, DNS 리졸버 또는 리졸버라고 부른다.
- 네임 리졸루션을 실행한다.
- Socket 라이브러리에 들어있는 부품화한 프로그램이다.
- Socket 라이브러리
- OS에 포함되어 있는 네트워크의 기능을 애플리케이션에서 호출하기 위한 부품을 모아놓은 것이다.
- 데이터를 송•수신할 때 사용하는 부품을 비롯하여 다수의 프로그램 부품이 들어있다.
4. 리졸버를 이용하여 DNS 서버 조회
- 리졸버 호출
- <메모리 영역> = gethostbyname(”www.lab.cyber.co.kr”);
- 리졸버의 프로그램명(gethostbyname)과 웹 서버의 이름을 쓰면 리졸버를 호출할 수 있다.
- 리졸버가 DNS 서버에 조회 메시지를 보내고, DNS 서버에서 응답 메시지가 돌아온다.
- 응답 메시지 속의 IP 주소를 리졸버가 추출하여 브라우저에서 지정한 메모리 영역에 써넣는다.
- 브라우저는 메모리 영역에서 IP 주소를 추출 후 HTTP 리퀘스트 메시지와 함께 OS에 건내주어 송신을 의뢰한다.
5. 리졸버 내부 작동
- 프로토콜 스택
- OS 내부에 내장된 네트워크 제어용 소프트웨어이다.
- ‘프로토콜 드라이버’, ‘TCP/IP 소프트웨어’ 등으로도 부른다.
- 네트워크 애플리케이션이 리졸버를 호출하면 제어가 리졸버의 내부로 넘어간다.
- DNS 서버에 문의하기 위한 메시지를 만든다.
- 리졸버가 OS의 내부에 포함된 프로토콜 스택을 호출하여 DNS 서버에 송신을 의뢰한다.
- LAN 어댑터를 통해 메시지가 DNS 서버에 송신된다.
- DNS 서버는 액세스 대상의 웹 서버가 DNS 서버에 등록되어 있다면 답을 응답 메시지에 써서 클라이언트에게 반송한다.
- 메시지는 네트워크를 통해 클라이언트측에 도착하고, 프로토콜 스택을 경유하여 리졸버에 건네진다.
- 리졸버가 응답 메시지를 해독 후 IP 주소를 추출하여 지정한 메모리 영역에 저장한다.
- 애플리케이션이 메모리 영역에 저장된 IP 주소를 추출한다.
출처
성공과 실패를 결정하는 1%의 네트워크 원리
IP 주소와 MAC 주소
https://jhnyang.tistory.com/404
허브&스위치&라우터
https://coding-chobo.tistory.com/38
https://www.youtube.com/watch?v=1z0ULvg_pW8
TCP
https://aws-hyoh.tistory.com/entry/TCPIP-쉽게-이해하기