공부한 기록/네트워크 통신

네트워크 프로그래밍

YongE 2023. 8. 31. 19:14

네트워크 network


네트워크란? 서로 데이터를 주고 받을 수 있는 컴퓨터 및 장치들의 집합이다.

네트워크 내에서 통신의 주체가 되는 장비를 ‘노드(node)’라고 한다.

노드는 컴퓨터, 프린터, 라우터, 브릿지, 게이트웨이와 같은 네트워크 장비이기도 하다.

노드 중에서 일반적인 컴퓨터를 호스트라고 부른다.

네트워크 주소 network address

모든 네트워크 노드(장비)들은 각각의 고유한 네트워크 주소를 갖고 있다.

Java 프로그래밍에서 네트워크 주소

네트워크 주소는 바이트 목록(byte[])이다. Java의 기본 숫자 타입(int, long, float)은 네트워크 주소를 저장하기에 적당하지 않다.

Java의 int 타입 변수는 4바이트이지만 바이트의 순서는 big-endian이기 때문이다.

Big-endian : 메모리 공간에 큰 자리부터 8bit씩 전송하는 형태

Little-endian : 메모리 공간에 작은 자리부터 8bit씩 전송하는 형태

결론 : java에서 네트워크 주소를 저장할 땐, byte 타입 배열을 사용해야 한다.

 

네트워크 주소에는 여러 종류가 있다.

  • Ethernet 네트워크(유선)에서 주소는 mac 주소(mac address)이다.
    • Ethernet은 네트워크 종류 중 하나이며, mac 주소는 ethernet 하드웨어에 부여된다. 하드웨어 제조사가 ethernet 하드웨어를 만들 때 mac 주소를 부여하는데, 이 각각의 mac 주소는 지구상에서 유일무이하다.
  • IP 네트워크(무선, internet protocol)에서 주소는 ip 주소(ip address)이다. IP 네트워크의 대표적인 예가 ‘인터넷’이라고 한다.
    • 일반적으로 ip 주소는 컴퓨터를 책임지는 조직에서 컴퓨터에 할당한다. 예를 들어, 대학교가 책임지는 컴퓨터의 인터넷 주소는 성공회대가 할당한다.
    • 어떤 노드의 주소는 하나의 노드 이름을 갖기도 한다. 허나, 이름이 주소에 고정되는 것은 아니다. 앞으로 새 서버를 도입한다면 노드 이름은 바뀔 수가 있다.
      • 203.245. 55. 30 이란 주소는 www.xxx.com 이름을 갖지만, 향후 노드의 주소는 바뀔 수가 있다. 이는 domain name이라고도 한다.

패킷 packet

컴퓨터 네트워크에서는 패킷 교환 방식을 사용한다. 각 데이터는 패킷이란 데이터 조각으로 나뉘고, 이 패킷은 각각 따로 전달된다.

이렇게 데이터를 패킷으로 나눠서 전달하면 여러 데이터 통신이 하나의 회선을 공유하여 경제적이다. 전송과정에서 체크섬 값 확인을 통해 패킷 손상 여부를 확인할 수 있으므로 문제가 없다.

손상된 데이터를 체크했을 때 손상되기 전 체크섬 값과 같을 확률은 굉장히 낮다.

  • 라우팅 routing
  • 각 패킷을 최적의 경로로 보내기 위해 분류 및 전달하는 동작이다. 이를 수행하는 장비를 라우터 router라고 한다.

TCP/IP

애플리케이션계층(application layer)의 주요 프로토콜은 HTTP, SMTP, FTP이다.

HTTP, SMTP는 TCP프로토콜에서, DNS는 UDP프로토콜에서

transport 계층의 프로토콜

(1) TCP 프로토콜 (Transmission Control Protocol)

손실되거나 손상된 데이터의 재전송과 데이터의 순서를 보장하는 프로토콜이다.

그래서 신뢰할 수 있지만 오버헤드(overhead)가 높은 프로토콜이다.

— 안심포장 택배

(2) UDP 프로토콜 (User Datagram Protocol)

손실되거나 손상된 데이터의 재전송과 데이터의 순서를 보장하지 않는 프로토콜이다.

그래서 신뢰할 수 없지만 빠른 프로토콜이다

— 깡통배송

  • 애플리케이션 계층 (Application Layer)
  • 전송 계층 (Transport Layer)패킷을 받는 입장(peer-to-peer관계)에서는 전달받은 패킷을 조립하고 원래 데이터 순서로 재정렬한다. 이 과정에서 데이터가 빠졌거나 도중에 손상되었다면 재전송을 요청한다.
  • 즉, 인터넷 계층의 부족한 점을 보완하는 계층이다.
  • 애플리케이션계층에서 온 데이터는 바로 전송하기엔 크다. 이 데이터를 하나하나 쪼개서 인터넷 계층으로 보낸다. 책상을 그냥 보내기에는 너무 크니 분해 및 포장해서 택배회사로 보내는 역할을 한다.
  • 인터넷 계층 (Internet Layer)패킷을 보내는 일을 담당한다. 비유하자면 보내는 주소에 따라 어느 물류센터를 이용해서 택배상자를 보낼지 담당하는 택배회사이다. 최적의 경로로 전달하는 방법을 정의한다.
  • OSI7계층에서는 네트워크 계층이라고 부른다. 대표적인 프로토콜은 인터넷프로토콜 IP이다. 이는 즉슨, IP주소만을 이용한다. TCP 세그먼트로 쪼개진 데이터를 패킷으로 다시 쪼개서 호스트 투 네트워크 계층으로 전달한다.
  • 네트워크 액세스 또는 host-to-network 계층 (Network Access Or Host-To-Network Layer)
  • 주요 프로토콜은 HTTP, SMTP, FTP이다. 각각 HTML문서, 이메일, 파일을 주고받는 것을 정한다. 전송되는 데이터의 내용을 정의한다.

IP주소

  • DHCP Dynamic Host Configuration Protocol
  • 서버들은 고정된 IP주소를 사용한다. 하지만 LAN과 무선에 연결된 컴퓨터는 부팅 시 DHCP서버로부터 IP주소를 할당받는다. 보통 라우터 장비에 해당 기능이 탑재된다.
  • 내부 네트워크 주소
  • 공유기 내부에서 사용하는 주소이다. 데이터가 공유기를 거쳐 공유기에서 할당해준 내부 네트워크 주소로 보내진다.
  • 로컬 루프백 주소
  • 127.0.0.1 → 이는 컴퓨터가 자신을 가르키는 주소이다. 이 주소의 호스트네임은 localhost이다.
  • 브로드캐스트 broadcast
  • 넓게 퍼진다는 의미. 로컬 네트워크 내부에 있는 모든 노드에게 데이터 패킷이 수신된다. 예를 들어, pc가 부팅될 때, DHCP서버를 찾기 위해 브로드캐스트 주소로 특정메세지가 전송된다. 무슨 말이냐면 컴퓨터를 켰을 때, 이 주변 노드들에게 “DHCP 서버 있나요? 저에게 IP주소를 할당해주세요!”라는 메세지를 모두에게 보내는 것이다. 그리고 이 메세지는 로컬 영역을 넘어가지 않는다.

port 번호

어떤 패킷은 카카오가 받아야 하고, 어떤 패킷은 네이버가 받아야 한다. 포트번호를 사용하는 어플리케이션에 데이터 패킷이 전달되어야 한다.

포트번호는 물리적인 부품이 아니라 단지 가상의 번호이다. 한 컴퓨터에서 실행되는 여러 통신 앱을 구별하기 위해 존재한다.

The Internet

  • 네트워크 주소 변환 Network Address Translation이는 내부 네트워크 IP주소와 ISP로부터 할당받은 public IP주소를 사용한다. 흔한 예로 무선 IP공유기가 있다.
  • 외부와 연결된 IP 네트워크를 이용하려면 internet 주소 블럭을 할당 받아야 한다. 성공회대하는 254개의 IP주소를 할당받아서 사용할 수 있지만 이는 너무 부족하다. 이를 해결하기 위한 것이 NAT기술이다.
  • 프록시 서버방화벽은 전송계층이나 인터넷 계층에서 하는 반면, 프록시 서버는 애플리케이션 계층에서 함.
  • 내부 로컬 네트워크 서버와 외부 네트워크 사이의 중계자 역할을 한다. 로컬에서 외부로 직접 연결 요청을 하는 것이 아니라 로컬 프록시 서버에 요청하면, 프록시 서버에서 외부 네트워크에 요청하고 그 응답을 다시 내부에 보내주는 식이다.
728x90
반응형