본문 바로가기
JAVA

네트워크의 기본

by 융디's 2024. 4. 27.
728x90
네트워크의 기본

네트워크의 기본

@2024.04.22

집(IP) 안에 여러 개의 방(Port)이 존재한다.

IP

💡
인터넷에 연결된 모든 장치에 할당된 고유 주소로 데이터가 올바른 목적지로 전달되도록 도와준다.

IPv4

💡
32bit의 길이를 가지고 2의 32승 개의 IP를 표현한다. (약 43억 개)
  • 10진수로 주소를 표기하며, 주소는 8bit씩 3개의 옥텟으로 구성
  • IP의 개수 고갈 문제로 IPv6가 등장
    • 2의 128승 개
    • 16진수로 주소를 표기하며, 16bit씩 8개 필드로 구성되어 있다.

서브넷 마스크

💡
IP 주소에 대한 네트워크 ID와 호스트 ID를 구분해 주는 역할을 수행한다.
  • IP 주소 = 네트워크 ID + 호스트 ID
  • 네트워크 ID : 하나의 조직, 그룹으로 Host들을 관리하기 위해 사용
    • Network 범위를 지정하여 관리
  • 호스트 ID : 호스트를 개별적으로 관리하기 위해 사용
  • IP Class
    • A Class
      • 범위: 0.0.0.0 ~ 127.255.255.255
      • 기본 서브넷 마스크 : 255.0.0.0 (또는 /8)
    • B Class
      • 범위: 128.0.0.0 ~ 191.255.255.255
      • 기본 서브넷 마스크 : 255.255.0.0 (또는 /16)
    • C Class
      • 범위: 192.0.0.0 ~ 223.255.255.255
      • 기본 서브넷 마스크 : 255.255.255.0 (또는 /24)
    • D Class : IPv4 주소 공간에서 멀티캐스트용으로 예약된 클래스
      • 범위 : 224.0.0.0 ~ 239.255.255.255
      • 서브넷 마스크가 존재하지 않는다.

공인 IP

💡
인터넷 사용자의 로컬 네트워크를 식별하기 위해 ISP(인터넷 서비스 공급자)가 제공하는 IP 주소로 외부에 공개되어 있는 IP 주소
  • 공인 IP는 전 세계적으로 유일한 IP 주소
  • 외부에 공개되어 있기에 인터넷에 연결된 다른 PC로부터 접근이 가능하다. ⇒ 보안 취약
    • 방화벽 등의 보안 프로그램 설치 권장

사설 IP

💡
일반 가정이나 회사 내 등에 할당된 네트워크 IP 주소로, 가상 IP 또는 로컬 IP라고도 불린다.
  • IPv4의 주소 부족으로 등장한 서브넷팅된 IP
  • 외부에서 사설 IP로 직접 접근할 수 없고, 라우터에 1개의 공인 IP가 할당되고, 라우터에 연결된 개인 PC는 사설 IP를 각각 할당받아 인터넷에 접속할 수 있다.
  • 라우터에 의해 로컬 네트워크 상의 PC나 장치에 사설 IP가 할당된다.
  • 사설 IP 주소 대역
    • Class A : 10.0.0.0 ~ 10.255.255.255
    • Class B : 172.16.0.0 ~ 172.31.255.255
    • Class C : 192.168.0.0 ~ 192.168.255.255
공인 IP사설 IP
할당 주체ISP(인터넷 서비스 공급자)라우터(공유기)
할당 대상개인 또는 회사 서버(라우터)개인 , 회사
고유성인터넷상에서 유일하나의 네트워크 안에서 유일
공개 여부내/외부 접근 0내부만 접근 0
외부 접근 X

Port

💡
호스트 내의 특정 프로세스 또는 서비스를 식별하는 번호로, 특정 IP 주소에서 여러 서비스가 동시에 실행될 수 있으므로, 포트 번호는 이러한 서비스를 구분하는 데 사용된다.

소켓 프로그래밍

💡
서버와 클라이언트 간의 연결을 설정하고 데이터 전송을 가능하게 한다.
  • 소켓 : 네트워크 상에서 데이터를 주고받기 위한 끝점
    • 서버 소켓 : 연결을 수신 대기
    • 클라이언트 소켓 : 서버에 연결을 시도

프로토콜

💡
데이터 전송 시 준수해야 할 규칙과 표준의 집합
  • 네트워크 프로그래밍에서 주요 사용되는 프로토콜은 TCP와 UDP이다.

TCP(TransmissionControl Protocol)

💡
네트워크 통신에서 가장 널리 사용되는 프로토콜 중 하나
  • 데이터의 순서와 신뢰성이 중요한 애플리케이션에 적합
    • 웹 페이지 로딩, 파일 전송, 이메일 전송 등
  • 특징
    • 신뢰성 있는 데이터 전송
      • 데이터가 목적지에 정확하고 안전하게 도착하도록 보장
      • 잘못된 데이터나 손실된 데이터는 재전송
    • 연결 지향적
      • TCP 통신을 시작하기 전에 클라이언트와 서버 간에 연결이 설정되어야 한다.
      • 이 연결은 통신이 끝날 때까지 유지
    • 순서 보장
      • 데이터는 전송된 순서대로 도착
      • 만약 순서가 바뀌면 원래의 순서대로 재정렬
  • 작동 방식
    1. 3-Way Handshake
      • TCP 연결은 3단계로 구성
      • 이 과정을 끝으로 양쪽 모두 데이터를 보내고 받을 준비가 되었음을 확인하고 데이터의 전송이 이루어진다.
      Client                 Server
        |                       |    1. 클라이언트 -> 서버 : SYN(SYN_SENT)
        |        1. SYN         |      - 클라이언트가 서버에 연결을 요청하기 위해 SYN 패킷을 보낸다    
        |---------------------->|      - 클라이언트는 초기 sequence number를 랜덤하게 선택하여 SYN 패킷의 헤더에 포함시킨다.
        |                       |    
        |      2. SYN-ACK       |    2. 서버 -> 클라이언트 : SYN-ACK(SYN_RECEIVED
        |<----------------------|       - 서버는 클라이언트의 SYN을 받으면, 클라이언트에게 수락이라는 응답하기 위해 SYN-ACK 패킷을 보낸다.
        |                       |       - 서버는 자체적으로도 랜덤한 초기 sequence number를 선택하여 이를 SYN-ACK 패킷의 시퀀스 번호로 사용합니다.
        |       3. ACK          |       - 서버는 클라이언트로부터 받은 SYN 패킷의 sequence number에 1을 더한 값을 ACK 번호로 사용합니다.
        |---------------------->|											
        |					      |    3. 클라이언트 -> 서버 : ACK(ESTABLISHED)
      								   - 클라이언트는 서버로부터 받은 SYN-ACK 패킷에 대한 확인응답으로서 ACK 패킷을 보낸다.
      								   - 클라이언트는 자체적으로도 랜덤한 초기 sequence number를 선택하여 이를 ACK 패킷의 시퀀스 번호로 사용
      								   - 클라이언트는 서버로부터 받은 SYN-ACK 패킷의 sequence number에 1을 더한 값을 ACK 번호로 사용
    1. 데이터 전송
      • 연결이 설정되면 데이터가 작은 단위(세그먼트)로 나누어져 전송된다.
    1. 연결 종료
      • 데이터 전송이 완료되면 연결을 종료한다.

UDP(User Datagram Protocol)

💡
인터넷상에서 데이터를 전송하기 위한 다른 방식의 프로토콜로,
TCP와 달리
연결이 없는 프로토콜로, 데이터 전송 시 연결 설정 과정이 없다.
  • TCP보다 빠른 전송이 가능하나, 신뢰성과 순서를 보장할 수 없다.
  • 자바에서는 java.net package DatagramSoketDatagramPack 클래스를 사용하여 구현
  • 특징
    • 비 연결성
      • 연결 설정을 하지 않고, 데이터를 보내는 측에서 받는 측으로 직접 데이터를 전송
    • 속도
      • 연결 설정이 없기 때문에, TCP보다 전송 속도가 빠르다.
    • 비 신뢰성
      • 데이터의 도착을 보장하지 않으며, 데이터가 손상되거나 순서가 바뀌어 도착할 수 있다.
  • 작동 방식
    • 데이터는 데이터그램이라는 작은 패킷으로 전송
    • 각 데이터그램은 독립적으로 처리되며, 이전의 데이터 그램과의 연관성이 없다.
    • 송신자는 데이터그램을 네트워크에 보내고, 수신자는 도착하는 데이터 그램을 수집한다.
  • 예시 : 실시간 비디오 스트리밍, 온라인 게임, VolP(음성 통신) 등

728x90

'JAVA' 카테고리의 다른 글

UDP 프로그래밍  (0) 2024.04.27
TCP 프로그래밍  (1) 2024.04.27
멀티 스레드  (2) 2024.04.27
java.io 패키지  (0) 2024.04.27
데코레이터 패턴  (1) 2024.04.27