네트워크를 만드는 요소들을 하나씩 설명하겠다.
기기끼리의 통신에는 2가지 방법이있다.
위 두가지는 기기끼리의 데이터를 교환하는 방식인데, 회선 교환은 주로 전화상에서 많이 이루어진다. 우리가 전화할때 다른사람이 못끼어들고 단둘이서만 전화통화하듯이(최근 여럿이서 전화할수있지만, 예전의 상황을 예를 들자) 회선 교환은 일대일로 데이터를 교환한다.
따라서 회선 교환방식은 컴퓨터 네트워크에서는 효율적이지 않다.
패킷 교환방식은 원본 데이터를 패킷(packet) 이라고 하는 작은 단위로 나누고, 여러 회선을 공용해 통신을 주고 받는다.
이전에 사람을 텔레포트 시키는 기술이 발전이 안된이유가 사람을 패킷 방식처럼 쪼개서 전송후 다시 결합하는 과정에서 순서대로 전송이 안되어 에러가 발생할 가능성이 있어서 실패했다고 들었다. 재미로 듣자 ㅎㅎ
다시 본론으로 이것처럼 하나의 패킷은 헤더와 페이로드로 구성되어 있고, 헤더에는 어떤 데이터의 몇번째 데이터인지의 정보와 보내는 곳 이나 최종 목적지에 대한 정보 등이 들어있다.
다행히도(?ㅎㅎ) 이렇게 주고받을 데이터를 작게 분할하여 전송하더라도, 도착한 곳에서 원래대로 복원이 가능합니다.
IP 주소는 네트워크부와 호스트부로 나뉩니다. 네트워크부는 어떤 네트워크인지를 알 수 있는 정보이고, 호스트부는 그 네트워크 안의 특정 컴퓨터를 지칭하는 정보이다.
위그림은 우리가 주로 사용하는 IPv4의 주소형식이다.
맨상단에 10진수로 표기된 주소를 흔히 보았지만, 그 실체는 마침표로 구분된 4개의 8비트 필드(8자리 2진수 4개)로 되어있다.각 8비트 필드는 IPv4 주소에서 1바이트를 나타낸다.
IPv4 주소에서 네트워크부가 어디까지인지 나타내는 것이 서브넷 마스크이다.
서브넷 마스크의 경우는, 1에서 3까지의 옥텟을 네트워크부로 사용하는 서브넷 마스크 이다. 따라서 4옥텟은 호스트부로 사용하고 있음을 알수있다.
8자리의 2진수 묶음을 옥텟이라고 부른다. IPv4 주소는 4개의 옥텟으로 이루어져 있고, 각각을 1옥텟, 2옥텟, 3옥텟, 4옥텟이라고 부른다.
IP주소는 처음부터 주어지는 것이 아니라 할당이 되는 것이다.
위 그림처럼 호스트부
를 변경해 가면서 IP 할당이 이루어 지게 된다.
호스트부는 8자리로 이루어진 2진수이므로, 할당할 수 없는 시작(0)과 끝 숫자(255)를 제외한 번호로 할당이 가능하다.
- 호스트부가 0으로 만 이루어진 것을 네트워크 주소로 그 네트워크를 의미한다.
- 호스트부가 1로만 이루어진 것은 브로드캐스트 주소로 ARP 와 같은 기능을 사용하기 위해 사용한다.
IP 프로토콜의 한계에는 2가지가 있다.
패킷을 받을 대상이 없거나 특정한 이유로 서비스 불능 상태에 빠져도 데이터를 받을 상대의 상태 파악이 불가능하기 때문에 패켓을 그대로 전송하는 비연결성
문제가 있다.
중간에 패킷이 사라지더라도 보내는 기기 측에서는 알 수 있는 방법이 없습니다. 또한, 서로 다른노드를 거쳐서 전송되는 특성상, 보내는 기기측에서 의도한 순서대로 데이터가 도착하지 않을 수 있습니다. 또한, 한 IP에서 여러 애플리케이션이 작동하는 경우 특정할 수 없는 한계가 있습니다.
IP의 한계들을 보완하기 위해 나온것이 바로 TCP 와 UDP이다.
위 그림처럼 전송계층에 속하는 TCP와 UDP는 2계층에서 동작하는 IP 와 4계층에서 동작하는 애플리케이션(http 등)을 중개하는 역할을 한다. 다리역할을 한다고 알아두자.
둘의 공통점은 다리역활을 하는점이다. 그렇다면, 차이점은?
위 글을 읽으면 감이 확 안와닿겠지만, 아래와 같이 한줄로 정리가 가능하다.
따라서 데이터의 신뢰성을 필요로하는 애플리케이션은 TCP로, 빠른 속도나 실시간 통신이 중요한 애플리케이션의 경우 UDP로 구분해서 사용한다.
TCP 통신 3번의 악수
TCP 3-way handshake 는 양 끝단의(end to end) 기기의 신뢰성 있는
데이터 통신을 위해, TCP 방식이 연결을 설정하는 방식이다.
TCP/IP 의 개념은 1970년대 미 국방부가 미국 과 영국, 그리고 프랑스의 대학들의 연구자들과 협력하여 개발을 하였습니다.
각 국가가 파멸에 이를 수 있는 전쟁(핵 공격 및 장기간의 전쟁)에도 데이터의 온전성과, 통신기능의 원활한 사용을 위한 통신 프로토콜의 개발을 원한 미 국방부는, 신뢰할 수 있고, 탄력적인 성능을 가진 통신 프로토콜(TCP/IP)을 완성해 냈습니다.
<TCP 통신의 탄생>
위 그림을 비유하자면, 보내는이가 받는이에게 "나 데이터 보내도 돼?" 라고 물어보면 받는이가 SYN/ACK 신호 세트를 보내준다. 그리고 보내는이가 다시한번 SYN/ACK 신호 세트를 받는이에게 보내고 확인이 되면, 그때부터 데이터 전송이 시작된다.
TCP의 확실한 신뢰성을 보장해준다. 하지만, 문제가 확인할게 많아서 느리다는게 문제이다. 그래서 많은 애플리케이션 개발자들은 UDP를 사용한다.
한가지 예로 카카오톡 보이스톡을 하는데 TCP 통신방식을 이용하면 말이 엄청 끊길것이다. 데이터를 계속해서 확인하기 때문에 원활한 소통이 안될것이다.
각각의 상황에 적합한 통신방식을 사용하는것이 매우 중요하다.
TCP UDP 모두 포트번호를 사용한다. 포트번호가 무엇이길래 사용한다는것인가?
IP주소만 가지고는 한 IP에서 여러 애플리케이션이 동작할 때 특정 애플리케이션을 특정해 통신할 수 없다.
포트번호는 대상 IP기기의 특정 어플리케이션을 특정하는 번호이다.
예시로 네이버 서버에서 검색하는 서버와 이메일 발송서버를 운영중인데 요청한 컴퓨터의 IP주소만으로는 검색서버에 요청을 한건지 이메일 발송서버에 요청을 한건지 알수가 없기 때문에 포트번호를 통해서 어떤 요청을 했는지 파악할수있다. 포트번호는 ip주소와 함께 서버요청에서 필수적으로 사용되니 추후 더 알아보도록하자.
포트번호는 0~65,535번까지 사용이 가능하지만, 0번과 65,535번은 사용하지 않는 룰이 있다. 또한 자주 사용되는 well-known port도 있다. (하지만, 포트번호는 유동적으로 변경/사용할수있다.)
자주 사용되는 포트는 URI등에 명시하지 않지만, 그 이외의 잘 알려지지 않은 포트는 반드시 포함해야한다.
URL은 Uniform Resource Locator의 줄임말로, 네트워크 상에서 웹 페이지, 이미지, 동영상 등의 파일이 위치한 정보를 나타낸다. 브라우저의 주소창에 입력한 URL은 서버가 제공되는 환경에 존재하는 파일의 위치를 나타낸다.
우리가 주소창에 http://www.google.com:80/search?q=Java
를 입력하고 엔터를 누르면 일어나는 일은
1. scheme의 통신 프로토콜을 확인한다.
2. IP주소 또는 도메인을 확인한다.
3. 웹 서버에 접속하기위해 port번호를 확인하여 서버에 요청한다.
4. url-path가 존재한다면, 3번과정 이후 추가적으로 웹서버의 루트 디렉토리부터 웹 페이지, 이미지, 동영상등의 파일의 위치를 확인한다.
5. query를 확인하여 웹 서버에 전달하는 추가 질문을 확인한다.
6. 우리가 원하는 정보가 담긴 웹사이트가 열린다.
다시 우리가 주소창에 입력한 주소가 무엇인지 확인해보자.
URL은 URI의 속하는데 URI는 위에서 본 search?q=Java
이 부분을 의미한다. URL과 URI의 차이점은 http://www.google.com:80
여기까지 있는가 추가적으로 더 작성이 되어있는가 차이이다.
:scheme: -> http://
:hosts: -> www.google.com:80/
:url-path: -> search?
:query: -> q=java
위와같이 구분되어있다. 이중 URL은 hosts까지만 표시하는 것이고, URI는 url-path과 query를 포함하는 것이다.
우리가 구글을 입력할때 https://142.250.207.78/weather/index.html
이렇게 입력을한다면 매우 번거로울것이다. 따라서 도메인을 관리하는 곳 ICANN에서 도메인을 받을수있다. 물론 그아래에 많은 하위기관들도 존재한다. 따라서 우리가 도메인을 이용하는것은 ip주소를 매번 입력하여 접속하기 번거로울 뿐아니라 웹사이트의 접근을 더 쉽게 만들기 위함이다.
도메인은 두종류로 나뉜다.
gTLD는 전세계에서 등록이 가능한 .com, .net, .org, .edu, .gov, .int, .mil 입곱 가지로 시작하여 현재까지 .biz, .name, .info 등이 추가되어 왔다.
gTLD 의 경우 VERISIGN 등의 회사가 registrar이고, 국내 ICANN 인증 registrar 는 가비아, 후이즈 등이 있다.
ccTLD 의 경우 .kr, .us, .jp 등 200개 이상이 있다. 각국 네트워크 정보센터에서 위임받아 관리하며 .kr 의 경우 한국인터넷진흥원이 registry로 그리고 registrar는 가비아, 후이즈 등이 있다.
도메인은 단순 아이피주소를 대표하는 상호일뿐이다. 따라서 컴퓨터는 도메인을 확인하고 구글사이트를 열어야겠다라고 생각하지 않는다. 일단 도메인을 입력받으면, 해당 도메인 이름과 매칭된 ip주소를 확인하는 작업이 반드시 필요하다. 그리고 네트워크에는 이것을 위한 서버가 별도로 존재한다. 그것이 바로 DNS이다.
DNS는 Domain Name System의 줄임말로, 호스트의 도메인 이름을 IP 주소로 변환하거나 반대의 경우를 수행할 수 있도록 개발된 데이터베이스 시스템이다.
그리고 시스템 작업이나 서버 교체 등 ip주소가 변경되는 경우는 많이 있다.