티스토리 뷰

Computer Network 공부를 하다보면 용어가 참 많고, 용어들간의 연결이 복잡하게 얽혀 있어 어렵게 느껴진다.

 

그래서 네트워크의 레이어 별로 용어를 정리하고 조금씩 정리를 해보려 한다.

 

추가적인 용어나 잘못된 내용 관련해서 댓글을 달아 주시면 너무너무 감사드리겠습니다 !! :)

 

...

 

레이어 별로 정리하기 전에 몇가지만 짚고 시작하겠다.

 

Internet

'네트워크의 네트워크'를 구현하여 모든 컴퓨터를 하나의 통신망 안에 연결 (Internet Network) 하고자 하는 의도에서 Internet 탄생.
'정보의 바다'라고 불리면서 컴퓨터가 서버와 클라이언트로 연결되어 TCP/IP를 이용해 정보를 주고 받게 되었음.

 

기본 용어들

  • 노드(Node) : 컴퓨터 네트워크 상에 연결된 장치
  • 호스트(Host) : 고유 IP 주소를 가진 노드 (+ 여러 프로세스를 가지고 있다고 생각하자.)
  • 홉(Hop) : 한 노드에서 다음 노드간 거리의 단위
  • 프로토콜(Protocol) : 데이터 통신의 규약 (끝에 P붙은 애들은 다 프로토콜이라 생각하면 됨
  • 데이터그램(Datagram) : Segment, Packet 등으로 쪼개지는 사용자의 데이터

 

Why Layers ??

 

계층별로 담당 구역을 나누어 서로의 일에 집중할 수 있다. 

 

계층별 데이터 캡슐화

쉽게 이해하기 위해서 예시를 들어보자.

 

서울시 마포구 서교동 월드컵로 10길 로 우편물을 보내는 상황이다.

 

먼저 전국에서 서울시(MAC addr)를 찾고 : Data Link Layer

마포구(IP addr)를 찾아  : Network Layer

월드컵로(Port)를 찾은 뒤

10길(Socket)에 도착하여 : Transport Layer

메일을 전달한다. : Application Layer

 

 

 

자 이제 시작해보겠습니다

 

(+ 생각보다 길어져서 분량이 꽤 많네요.. 스크롤 화이팅 !)


# Application Layer

웹 브라우저 등 사용자의 요청을 받고 그에 대한 응답을 담당하는 Layer.

요청, 응답 에러가 발생하면 그에 대한 확인만 가능!

1. HTTP

HyperText Transfer Protocol 의 약자로 하이퍼텍스트 문서를 교환하기 위하여 사용된 통신 규약이다. 웹 브라우저의 표준 프로토콜이고 정의가 잘 되어있어 일반적인 서버와의 통신에도 이용한다. 

 

HTTP는 Client/Server방식으로 Client가 Request 메시지를 보내고 Server가 Response 메시지로 응답하는 단순한 구조로 동작한다. 그리고 이는 TCP/IP 를 기반으로 하는데, 그 이유는 각각 전송/네트워크 레이어 단계에서 다루도록 하겠다.

 

HTTP에서 Server는 주로 다수의 Client의 Request를 처리해야 하기 때문에 2가지 특징을 가지고 있다.

 

먼저 HTTP는 연결 상태를 유지하지 않는 비연결성 (Connectionless) 프로토콜이다. 연결을 유지하게 되면 리소스가 낭비되고 다른 Client들에 대한 Response가 지연되기 때문에 Server에서 Response가 진행되면 연결을 끊는다 (상황에 따라 Connection 비용을 아끼기 위해 keep-alive 옵션을 통해 재활용하기도 한다)

 

그리고 Server도 하나의 Host(Device)이기 때문에 자원 낭비의 문제로 Client의 정보를 저장하지 않고 Stateless하다. 그렇다면 자동 로그인과 같이 사용자 정보는 어떻게 저장하고 있을까? 주로 Cookie, Session 을 이용하여 Client측에서 정보를 저장하도록 한다.

 

2. DNS

Domain Name System의 약자로, Host의 네트워크 주소를 사람이 이해하기 쉬운 도메인 이름으로 바꾸거나 그 반대의 변환을 수행한다.

 

예를 들어,  192.168.1.0과 같은 IP 주소를 www.example.com 과 같이 도메인 이름으로 변환해준다. 참고로 우리가 원하는 프로세스를 실행시키기 위해서는 Port 번호를 알아야하는데 DNS는 Port라는 걸 모르고 단지 IP만 변환해준다. 

 

읭?  그래서 DNS 를 사용하고 싶다면 80번 포트를 디폴트로 생각하고 호스팅해야한다 = 약속 !

 

3. DHCP

Dynamic Host Configuration Protocol 의 약자로, Host가 Network상에서 어떻게 IP를 부여(정확히 임대)받는 지에 대한 프로토콜이다. (IP는 고유하지만 고유하지 않다 .... 현재 나의 네트워크 환경에 따라 바뀔 수 있는 것. 자세한건 Network Layer에서...)

 

아래는 DHCP Client-Server 의 시나리오를 나타낸 그림이다.

왜 Server에게 요청을 하는지.. 그 Server는 누군지... Network Layer에서 다 설명하겠다..

 

일단 지금은 그림만 이해하는 걸로 !

 

 

4. Socket

Socket은 어플리케이션과 네트워크 간의 Interface 이다. 두 타입으로 (TCP, UDP) 나뉘며 그에 따라 기능차이가 있다. 

HTTP 에서의 데이터 단위는 Message 라고 하였다. 그리고 실제로 호스트간 통신은 각 호스트 내의 프로세스간의 데이터 통신이다.

 

그렇다면 Process가 이 Message를 어떻게 목적지로 보내는 걸까? Port넘버 만 보고??

 

Port는 네트워크 통신에 있어서 Host 내부적으로 프로세스가 할당받는 고유한 값.
Socket이란 프로세스가 네트워크 통신을 하려면 반드시 열어야 하는 '문'.

 

Server의 경우를 생각해보자. 위에서 DNS는 IP 변환 기능뿐이며 서버는 80번 포트를 디폴트로 한다고 하였다. 즉, 서버는 포트를 하나만 할당받는다고 볼 수 있다. 

 

Q. 그렇다면 TCP 기반의 HTTP 에서는 한번에 한 프로세스 간의 통신밖에 안되는 걸까??

 

...

 

말이 안되겠쥬?

 

하나의 프로세스는 하나의 Port넘버를 지정받지만 여러개의 Socket을 가질 수 있다. 

 

이런 이유 때문에 하나의 프로세스는 하나의 포트만으로 여러 Host들의 요청을 처리할 수 있게 되는 것이다.

 

오... 뭔가 해결이 되어가는 것만 같 .... 나 ?

 

Socket은 IP주소, 포트 넘버, 프로토콜로 구별을 하지만 이 또한 중복이 일어날 수도 있다.

 

Q. 그렇다면 Socket은 어떻게 구별이 될까??

 

... 이는 TCP, UDP 간의 차이와 함께 설명해야 하기에 Transport 레이어에서 설명을 이어가겠다 

 (TCP, UDP 차이 설명...) 

 


 

# Transport Layer

Message(사용자의 요청)을 담아 원하는 Socket 으로 전송해주는 Layer.

하위 계층에서 올라온 Packet Error 및 Loss를 감지하고 그에 대한 핸들링도 담당! (재전송 등)

 

1. Multiplexing, Demultiplexing

원하는 Socket 으로 보내기 위한 과정 (Multiplexing) 과 Segment 에서 넘어온 정보를 받는 (Demultiplexing) 과정에 대해서 알아보자.

 

1.1. Multiplexing

  • Socket을 거쳐 내려온 상위 레이어의 Message들을 모은다.
  • Header에 도착 Socket addr를 담는다.
  • Segment단위로 포장하여 보낸다.

 

1.2. Demultiplexing

전달받은 Segment 를 Header의 정보대로 적절한 Socket으로 전달한다.

 

 

(De)Multiplexing에는 연결지향과 그렇지 않은 두가지 방식이 있다. 각각의 특징에 대해서 살펴보자

 

1.2.1. Connectionless demux

아래 그림은 UDP 소켓의 Demultiplexing 동작 방식이다.

세그먼트의 Header에는 Source Port 넘버와 Destination Port 넘버에 대한 정보만 있어 이 정보만으로 Socket 을 찾아간다.

즉, 동일한 Source Port 와 Destination Port 라면 서로 다른 Segment들도 같은 소켓으로 전달된다. 

1.2.2. Connection-Oriented Demux

아래의 그림은 TCP 소켓의 Demultiplexing 동작 방식이다.

위의 Connectionless와의 차이점은 세그먼트 Header에 Source IP와 Destination IP 에 대한 정보가 추가된 것이다.

 

즉, 동일한 Source Port 와 Destination Port 를 가졌다 하더라도 S-IP, D-IP 값이 다르다면 서로 다른 소켓으로 전달된다.

 

때문에 세그먼트 수와 연결 소켓 수가 1:1로 대응하여 그 수가 많아지게 되며 비용적으로 부담이 생기긴 하지만 신뢰성이 보장된다. 

 

UDP, TCP 에 대한 언급이 나왔는데...

 

TCP 는 Reliable Data Transfer 을 제공한다는 차이점이 있다.

 

이에 대해서 먼저 알아보자.

 

2. Reliable Data Transfer Protocol

먼저 왜 RDT (Reliable Data Transfer) 가 필요한지 알아보기 위해 unreliable 채널과 비교해 보자

 

Reliable Channel vs Unreliable Channel

Unreliable 하게 전송을 하게 되면 Message Error 와 Message Loss 에 대한 처리를 기대할 수 없다..

 

그렇다면 RDT 에서는 이 두 가지 이슈를 어떻게 처리를 할까?

 

2.1. Mechanisms for Packet Error

Error detection, Feedback (ACK, NACK), Retransmission, Sequence Number

Sender

  • Packet 에 Seq#를 부여한다.
  • 해당 Seq#가 잘 도착했는지 확인(Feedback : Duplicate ACK or NACK)한다.
  • Retransmission(재전송)한다.

Receiver

  • Packet 이 중복되었는지 확인한다.
  • Packet 에서 에러가 검출(Error Detection : checksum)되면 Feedback(Duplicate ACK or NACK) 을 보낸다.

 

2.2. Mechanism For Packet Loss

Timeout

Time-Out 을 하는 타이밍은.... 나름 이상적으로 세팅 되어있다고 가정하고 (정해진 타이밍이 없다. 이상적인 계산으로 있을뿐)

Sender

  • Time-Out 이 발생하면 해당 Packet 을 Retransmission 한다.
  • 하지만 단지 ACK 가 늦게 오는 거라면 ? Duplicate 가 발생
  • Seq# 가 있기 때문에 Receiver 측에서 무시할 수 있다.

여기까지 RDT 에 대해서 알아보았다.

 

하지만 현실세계에서 (TCP에서) Packet 을 저렇게 한개씩 보낸다면 우리는 답답해 죽고 말 것이다..

Real World Packet Transfer

현실에서는 한번에 대량으로 Packet 을 쏟아 붓는 Pipelined protocol 을 사용한다.

 

... 위의 방식들로는 우리가 원하는 전송 속도를 보장하긴 어려워 보인다.

 

이를 해결하기 위해 Go-Back-NSelective Repeat 메커니즘이 있다.

 

 

2.3. Go-Back-N

Sender

  • N (window size) 만큼의 Packet 을 한번에 보낸다.
  • ACK(n) 이 오면 Seq# n까지 잘 받았다는 의미이다 = Cumulative ACK
  • 타임아웃이 발생하면 timout(n), n이상의 window size 만큼 재전송한다.

 

window size = 4

위의 그림은 pkt2 가 누락되어서 (ACK1만 계속 온다..) 타임아웃이 발생하고 pkt2부터 pkt5까지 window size 만큼 재전송하는 시나리오이다. 

 

Go-Back-N 은 Receiver 측의 매커니즘이 간단해진다는 장점이 있지만, Packet Loss 가 빈번한 환경에서는 매우 비효율적일 수 있다.

 

2.4. Selective Repeat

  • ACK0 : 단지 0을 받았다는 의미이다. Go-Back-N에서의 ACK와 의미하는 바가 다르다 != Cumulative ACK
  • Receiver 에도 버퍼를 두어 window size 만큼 Packet 이 찼을 때 상위 계층으로 전송한다.
  • ACK가 오지 않은 Packet 에 대해서 개별적으로 재전송한다.
  •  
  Go-Back-N Selective Repeat
장점

구현 간단

Receiver 측 저장공간(버퍼) 필요 X

Single Timer 사용

유실된 패킷만 재전송한다.
단점 window size 만큼 재전송 하기 때문에 유실 됐을 때 오버헤드가 크다

구현 복잡

receiver 측 저장공간(버퍼) 필요

window 안의 모든 Packet 에 대한 Timer 필요

 

3. TCP

지금 까지 RDT 에 대해서 알아보았는데, 모두 TCP 를 이해하기 위한 과정이었다.

TCP 에서는 신뢰성 있는 통신을 보장하는 것이 중요하고 이를 위한 몇가지 특징들을 알아보자.

프로토콜은 일종의 편지봉투이다. 주소를 나타내는 Header의 정보를 보는 것이 중요하다.

 

3.1. Reliable Data Transfer

TCP는 위에서 설명한 RDT 를 따르기 때문에 보내는 Packet 의 무결성과 순서를 보장한다.

 

그리고 한쌍의 Socket 간의 통신만 책임진다. (point-to-point)

 

3.2. Pipelined

TCP는 Pipelined Segments를 전송하고 Go-Back-N과 Selective Repeat 이 혼합된 형태이다.

TCP seq# and ACKs

 

Cumulative ACK

Go-back-N 과 마찬가지로 Cumulative ACK 을 사용하여 몇번째 까지 받았는지 Feedback 한다.

Fast Retransmit

Timeout 이 터지기 전에 한 Packet 에 대해서 중복된 3개의 ACKs를 추가로 받으면 재전송한다 (3 Duplicate ACKs)

Flow Control

ACK에 Receiver의 가용 버퍼 (받을 수 있는 양) 를 보내 Packet 이 유실되지 않도록 한다.

Congestion Control

Timout, 3 Duplicate ACK 로 Packet Loss를 감지했을 때 window size 를 줄여 Network의 혼잡을 제어한다.

(why? 네트워크 혼잡은 모든 사용자들에 의해서 결정되기 때문에 혼잡한 상황=packet loss가 일어나면 전송량을 줄여 혼잡을 방지한다.)

Timeout : Series1, 3 Duplicate ACK : Series2

+ 참고 : Threshold 값으로 수렴하게 되기 때문에 TCP 에서 모든 사용자의 네트워크 점유율은 Fair 하다고 볼수 있다.

 

3.3. Connection-Oriented

TCP 는 두 Host가 연결되어 있음을 보장한다.

 

연결준비 (3-Way Handshaking)

-> 시작하자

<- ㅇㅋ

-> 보내기 시작

 

연결종료(4-Way Handshaking)

-> 끝내자

<- ㅇㅋ

<- 남은것들 다 받아

-> 받음

 

4. UDP

TCP 와 비교하여 상당히 간단한 Header 정보를 가지고 있다.

UDP 에서는 TCP의 RDT, Flow Control, Congestion Control, Connection-Oriented 를 제공하지 않는다.

신뢰할 수는 없지만 Overhead가 적어 많은 요청이 필요한 DNS, VoIP 등에 사용된다. 

 


 

# Netwok Layer

Transport Layer에서 보내고자 하는 Packet을 목적지에 도착시키는 역할을 한다.

 

1. Datagram Networks

전송될 Packet 의 모든 경로를 아는 것(Circuit-switching) 이 아닌 Packet 단위로 그때 그때의 목적지를 찾아가는 (Packet-switching) 방식이다. 여러 이유로 IP는 이걸 선택.

++ 패킷단위로 쪼개서 보내기 때문에 패킷의 재조합 작업 필요. (Framentation, Reassembly)

end-end 와 Routers

 

1.1. Router

기본적으로 Network Layer 까지만 가진 멍청한 Node이다.

 

들어온 Packet 의 IP address를 보고 다음 Node로 전송하는 역할만을 담당한다. (예외 : Gateway).

 

하나 이상의 NIC 를 가지고 있고 Subnet 을 형성한다.

1.2. Forwarding, Routing

Forwarding 은 Packet 의 Header 를 보고 Forwarding Table 을 이용하여 목적지로 보내는 역할을 한다. 

이러한 Forwarding Table 은 Routing Algorithm 을 통해 생성된다.

 

2. IP Address

Datagram 은 링크계층의 데이터 최대크기 MTU를 기준으로 분할되어 전송된다.

전송계층에서는 Port 번호까지 나타났지만 네트워크 계층에서는 해당 Host 의 NIC(Network Interface Card) 에 해당하는 IP 주소가 나타난다.

 

1.1. Hieararchical Addressing : IP Prefixes

IP Address 는 32-bit 주소 체계이며, Network(Subnet)와 Host 부분으로 나뉜다.

Network(Subnet) 부분은 /24 의 형태 또는 Subnet Mask 를 통해 범위를 파악할 수 있다.

부분을 나눔으로써 Scalability 확보

 

3. Subnet

Network를 쪼개는 단위이고 Router를 거치지 않고 서로 접근이 가능한 Host 들의 집합이다.

3개의 NIC 를 가진 Router 를 통해 3개의 Subnet 이 형성.

...

 

현재 IP 주소 체계는 IPv4로 2^32, 약 40억개의 Host를 수용할 수 있다.

 

우리 개인만 하더라도 노트북, 스마트폰, 태블릿 등 여러 네트워크 디바이스가 있고 AWS, Google 등 클라우드 서비스를 하는 곳은 셀 수도 없을 정도의 Host 가 있을 텐데....

 

40억개... 턱없이 부족하다.

 

4. NAT

NAT(Network Address Translation) 는 일종의 트릭을 이용하여 위의 문제를 해결하고 있다.

외부(subnet 밖)에서 보면 오른쪽에 있는 Host들이 모두 138.76.29.7 라는 IP 주소를 가진 것처럼 보인다.

그렇다면 외부에서 해당 Subnet의 Host에 접근할 때 어떻게 구분을 할까?

 

-> Router의 Port 번호를 통해 Subnet 의 Host들을 구분한다 !

 

+ 참고 : Network Layer 에서 Transport Layer 에 해당하는 port 를 까본다 -> Layer Violation

+ 참고 : 80번 포트를 사용하는 Server는 NAT 내부에서 사용할 수 없다. 고정적인 Port 가 아니기 때문.

 

...

 

IP는 Host 를 구분하는 주소체계이지만 이는 Host 자체의 고유한 값은 아니다.

 

wtf..

 

NAT에서 살펴 보았듯 Subnet 에 위치한 내 IP는 전세계에서 유일한 것이 아니고 재사용 되는 주소이다.

 

그렇다면 동적으로 할당을 받는 다는 의미인데...

* DHCP

위의 Application Layer에서 소개한 DHCP 가 이를 해결해 주는 것이다.

 

Network Layer 측면에서 이해하자면,

 

Application Layer까지 가진 똑똑한 Router, GWR(Gate Way Router) 가 있다. (기존 Router는 Network Layer 까지만!)

 

이 Router는 DNS, DHCP, NAT, Firewall 등의 서비스를 제공하는 일종의 서버이자 Router의 기능도 가지고 있다.

 

그래서 이 Router 의 Subnet 내의 Host들은 위의 기능들을 제공받을 수 있는 것이다.

 


# Data Link Layer

한 Node 에서 다음 Node 로 가는 것에 대한 책임을 진다. (NIC 를 통한 데이터 전송)

 

네트워크 자원을 공유하고 있기 때문에 이에 대한 에러 처리, 조율 등이 필요하다.

1. MAC Address

IP 는 동적으로 할당받는 주소라고 하였다. 특정 시점에서는 IP로 Host를 대표할 수 있겠지만 고유한 값이 될 수는 없다.

 

Link Layer 관점에서 우리는 물리적인 NIC를 식별하여 Frame 을 보내야 한다.

 

NIC 고유 식별정보가 바로 MAC(Media Access Control) Address이다.

 

...

 

우리는 이제 이 MAC 주소를 보고 Frame 을 전송시켜야한다.

 

다음 Node의 MAC Address 는 어떻게 알 수 있을까??

2. ARP

ARP(Address Resolution Protocol)은 네트워크 상에서 IP 주소를 물리적 네트워크 주소(MAC addr)로 바인딩 시켜준다.

 

메커니즘을 살펴보자

  • Host는 목적지가 어디든 일단 GWR 와 소통을 시작한다.
  • DHCP 를 통해 내 IP를 할당받고 + GWR IP 도 받는다.
  • GWR IP 를 알게된 Host 가 Frame Broadcasting 을 하면
  • GWR 는 자신의 MAC Addr를 response해준다
  • ARP Table (IP -> Mac) 이 채워치고 Frame이 완성된다.

+ 원하는 목적지 NIC 에 도착할 때까지 Frame의 src, desti 의 MAC addr은 계속 바뀌지만 Packet 의 src, desti의 IP addr은 바뀌지 않는다 !

 

 

 

 

 

... ps. 레이어별 요약 등 추후 업데이트할 예정입니다 ! 부족한 부분 댓글로 알려주시면 바로 반영하겠습니다 :)

'Computer Science > Network' 카테고리의 다른 글

[Network] Session, Cookie 총정리  (0) 2019.07.22
댓글
공지사항