Computer Science/Network

[Network] 네트워크 계층과 네트워크 간의 연결

HJChung 2021. 5. 2. 17:57

모두의 네트워크 <네트워크 구조 이해하기; 네트워크 계층: 목적지에 데이터 전달하기> 를 읽고 정리한 내용입니다.

 

다른 네트워크에 있는 목적지로 데이터를 연결하기 위해서는 네트워크 계층의 기술이 필요

데이터 링크 계층에서는 이더넷 규칙을 기반으로 같은 네트워크에 있는 컴퓨터로는 데이터를 전송할 수 있지만, 다른 네트워크 간의 통신을 가능하게 하기 위해선는 네트워크 계층이 필요. 

 

1. IP 

1)  IP 헤더

네트워크 계층에는 IP(Internet Protocol) 프로토콜이 있다.  네트워크 계층에서 캡슐화를 할 때 아래 그림과 같은 IP 헤더를 붙이고, 이렇게 데이터에 IP 헤더가 추가된 것을 IP 패킷이라고 한다. 

이미지 출처: https://ddooooki.tistory.com/17

여기에 Source IP address(출발지 IP 주소), Destination IP address(도착지 IP 주소)가 있다. 이 외의 정보들은 [TCP/IP] 3. 인터넷 계층의 모든 것(1): IP프로토콜, IP패킷, IP헤더의 구조에 자세히 설명되어져 있다. 

 

2) IP 프로토콜의 한계

1. 비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷은 전송한다. 

2. 비신뢰성: 중간에 패킷이 사라지거나 패킷이 순서대로 안오면?

3. 프로그램 구분: 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?

이런 문제를 아래와 같은 방식으로 TCP가 해결해준다. 

3) TCP/IP

TCP(Transmission Control Protocol; 전송 제어 프로토콜)의 특징

- 연결 지향: 연결이 잘 되어있는지 확인 후 메세지를 보인다. 어떻게? TCP 3 way handshake

클라이언트와 서버 모두 SYN(접속 요청)을 보내고 양측에서 ACK(요청 수락)이 오면 데이터 전송이 가능한 상태라는 것을 확인. 논리적 연결. 

출처:  https://mindnet.tistory.com/entry/네트워크-쉽게-이해하기-22편-TCP-3-WayHandshake-4-WayHandshake  [Mind Net]

- 데이터 전달 보증: 만약 전송 데이터가 누락된다면 그렇다는 것을 알 수 있다. 

클라이언트에서 데이터를 전송했는데, 서버에서 응답이 없다면 데이터 전달에 문제가 생겼다는 것을 알 수 있다. 

- 순서 보장: TCP에는 전송제어 정보, 순서정보, 검증 정보.. 등이 있다. 클라이언트가 패킷 1, 2, 3 순서로 서버에 전송했는데, 서버에 패킷 2, 3, 1순서로 도착했다면 서버는 패킷 2부터 다시보내달라고 클라이언트에게 요청한다.

출처: 모든 개발자를 위한 HTTP 웹 기본 지식

 

출처: 모든 개발자를 위한 HTTP 웹 기본 지식

 

4) IP 주소의 구조

IP주소는 어떤 네트워크의 어떤 컴퓨터인지를 구분할 수 있도록 하는 주소이다. 

  • 버전 정보: IP 주소는 IPv4 버전과 IPv6 버전이 있다.  IPv4주소는 32비트로 되어있어서 IP주소를 약 43억개 만들수 있다. 그러나 IP주소가 부족해질 위험때문에 128비트로 되어있는 iPv6가 나왔다. 
  • 네트워크 ID와 호스트 ID: IP주소는 어떤 네트워크의 어떤 컴퓨터인지 구분 할 수 있도록 하는 주소이다. 그래서 IP주소는 '어떤 네트워크'인지를 나타내는 네트워크 ID와 '해당 네트워크의 어떤 컴퓨터인지'를 나타내는 호스트 ID로 나눠져있다. 
    • IP 주소의 class: IPv4(32bit)를 기준으로 어떻게 비트를 나눠 할당하느냐에 따라 네트워크의 class를 구분할 수 있다.A~E클래스가 있으며 일반적으로 A~C 클래스를 사용한다.
      • A 클래스: 대규모 네트워크 주소로, 네트워크 ID가 처음 8bit, 호스트 ID가 다음 24bit
      • B 클래스: 중형 네트워크 구조로, 네트워크 ID가 처음 16bit, 호스트 ID가 다음 16bit
      • C 클래스: 소규모 네트워크 구조로, 네트워크 ID가 처음 24bit, 호스트 ID가 다음 8bit
  • public IP와 Private IP: 전세계 어디서나 WAN을 통해 내 공유기로 접속할 수 있게 하는 IP(그림에서 59.6.66.238에 해당)는 public IP address 라고 하며 그리고 LAN내에서만 사용가능한 Ip 들(그림에서 192.168.0.2, 3, 4 등에 해당하는 것)을 private IP address라고 한다. 

 

 

이미지 출처: https://bit.ly/3aQNVbN

 

이미지 출처: https://bit.ly/3aQNVbN

2. Subnet

네트워크를 분할하는 것을 subneting, 분할된 네트워크를 subnet이라고 한다. 

A클래스에서 subneting전이 네트워크 ID (8bit), 호스트 ID (24bit)라고 하면, A클래스를 subneting하면 네트워크 ID (8bit), 서브넷 ID, 호스트 ID 로 나눠지게 된다. (원래 호스트 ID로 사용되던 비트가 서브넷 ID가 됨)

 

 

3. Router, Routing table

라우터는 네트워크를 분리할 수 있다. 

 

이미지 출처: https://bit.ly/3xIUXcf

목적지인 IP 주소까지 어떤 경로로 데이터를 보낼지 결정하는 것을 라우팅이라고 한다. 

데이터의 목적지(어떤 네트워크의 어떤 컴퓨터인지)가 정해지면 해당 목적지까지 어떤 경로로 가는 것이 좋은지 라우팅 테이블(routing table)이 있어서 경로 정보를 등록하고 관리한다. 

 

4. Gateway

네트워크를 분할한 다음에 한 네트워크에서 다른 네트워크로 접속하려고 할 때 네트워크의 출입구를 지정하고 일단 라우터로 데이터로 전송하는데 이 네트워크의 출입구에 해당하는 것이 default gateway이다.

 

5. NAT(Network address translation)

공유기에 연결된 내 노트북의 Ip는 192.168.0.4 private IP address이다. 여기서 외부(예를 들어 구글이라 치자)에 접속하려면 어떻게 해야할까?

1. 먼저 Gateway address 로 요청을 보낸다. 

보니까 LAN내의 IP로 보내는 요청이 아니네? 그러면 WAN을 통해서 외부 IP로 요청을 보내야 한다. 

2. 먼저 해당 요청을 보낸 private IP address을 기록한다. 

3. 그 후 Network Address Translation(NAT) 기술을 통해 public IP address로 바꿔서 외부 IP로 요청을 보낸다. 

4. 그리고 외부 IP로부터 응답이 public IP address로 오면, 

5. 이 공유기는 앞서 기록해놓은 실제 요청을 보낸 private IP address로 응답을 전달해준다.