하루살이 개발일지

[CS] 네트워크에 대하여 본문

CS

[CS] 네트워크에 대하여

harusari 2024. 5. 1. 15:49

목차

 


OSI 7계층

개념

네트워크에서 통신이 일어나는 과정을 7단계로 나눈 것.

현재 인터넷은 각 계층의 역할이 합쳐지면서 TCP/IP 4계층 모델을 기반으로 한다.

(OSI 7계층 -> 이론적인 네트워크 작동 방식을 이해하는 데 도움이 됨, TCP/IP -> 실제 네트워크 환경에서 구현하기 효율적)

 

나눈 이유

통신이 일어나는 과정을 단계별로 보기 위해서.

단계 중 특정한 곳에 이상이 생기면 다른 단계와 독립적으로 그 단계를 수정하기 위해서.

 

프로토콜이란

메시지를 주고 받는 양식이나 규칙을 정의한 것. 계층별로 다르게 존재함

 

 

종류 (구조)

 

 

OSI 7계층은 물리 계층, 데이터 링크 계층, 네트워크 계층, 전송 계층, 세션 계층, 표현 계층, 응용 계층으로 구성되어 있음.

 

더보기

OSI 7계층의 구조

 

1. 물리 계층 (Physical Layer)

  • 데이터 단위 : 비트 (bit)
  • 프로토콜 : DSL, ISDN 등
  • 대표 장비 : 허브, 리피터
  • 장치 간 전기적 신호를 전달하는 계층. 데이터 프레임 내부의 각 bit를 한 노드에서 다음 노드로 실제로 이동시키는 계층

 

2. 데이터 링크 계층 (Data Link Layer)

  • 데이터 단위 : 프레임 (frame)
  • 프로토콜 : PPP, Ethernet, Token ring, IEE 802.11(Wifi) 등
  • 장비 : 스위치, 브릿지
  • 데이터를 프레임 단위로 한 네트워크 요소에서 이웃 네트워크 요소로 전송하는 계층 (물리 계층을 이용해 전송)
  • 인터넷의 경우 Ethernet이 대표적인데, Ethernet은 MAC 주소를 이용해 Node to Node, Point to Point로 프레임을 전송함

 

3. 네트워크 계층 (Network Layer)

  • 데이터 단위 : datagram, packet
  • 프로토콜 : IP, ICMP, ARP, RIP, BGP 등
  • 패킷을 한 호스트에서 다른 호스트로 라우팅하는 계층. (여러 라우터를 통해 라우팅, 그를 통해 패킷 전달)
  • 전송 계층에게 전달받은 목적지 주소를 이용해 패킷을 만들고 그 목적지의 전송 계층으로 패킷을 전달
  • 인터넷의 경우 IP 프로토콜이 대표적

 

4. 전송 계층 (Transport Layer)

  • 데이터 단위 : segment
  • 프로토콜 : TCP, UDP, SCTP 등
  • 상위 계층의 메시지를 하위 계층으로 전송하는 계층
  • 메시지의 오류를 제어하고, 메시지가 큰 경우 이를 나눠서(Segmentation) 네트워크 계층으로 전달. 그리고 받은 패킷을 재조립하여 상위 계층으로 전달
  • 대표적인 프로토콜은 TCP, UDP. (TCP : 연결 지향형 통신, UDP : 비연결형 통신 제공)

 

5. 세션 계층 (Session Layer)

  • 데이터 단위 : message
  • 프로토콜 : NetBIOS, TLS 등
  • 데이터 교환의 경계와 동기화를 제공하는 계층.
  • 세션 계층의 프로토콜은 연결이 손실되는 경우 연결 복구를 시도. 오랜 시간 연결이 안되면 세션 계층의 프로토콜이 연결을 닫고 다시 연결을 재개함.
  • 데이터를 상대가 보내고 있을 때 동시에 보낼지에 대한 전이중(동시에 보냄 ex. 전화기) / 반이중(동시에 보내지 않음 ex. 무전기) 통신을 결정할 수 있음
  • 인터넷 계층 구조에는 포함되어있지 않고 필요에 따라 응용 계층에서 지원하거나 어플리케이션 개발자가 직접 개발해야 함

 

6. 표현 계층 (Presentation Layer)

  • 데이터 단위 : message
  • 프로토콜 : ASCII, MPEG 등
  • 데이터의 암호화, 복호화와 같이 응용 계층에서 교환되는 데이터의 의미를 해석하는 계층
  • 응용 프로그램 <-> 네트워크 간 정해진 형식대로 데이터를 변환, 즉 표현함
  • 인터넷의 계층 구조에는 포함되어 있지 않고 필요에 따라 응용 계층에서 지원하거나 어플리케이션 개발자가 직접 개발해야 함

 

7. 응용 계층 (Application Layer)

  • 데이터 단위 : message
  • 프로토콜 : HTTP, SMTP, FTP, SIP 등
  • 통신의 최종 목적지로, 응용 프로그램들이 통신으로 활용하는 계층
  • 사용자에게 가장 가까운 계층이고, 웹 브라우저, 응용 프로그램을 통해 사용자와 직접적으로 상호작용함
  • 많은 프로토콜이 존재하는 계층으로, 새로운 프로토콜 추가도 매우 쉬움

 

 

 


 

TCP의 3-way-handshake 와 4-way-handshake

 

TCP란?

네트워크 계층 중 전송 계층에서 사용하는 프로토콜 중 하나. 신뢰성을 보장하는 연결형 서비스이다.

 

 

3-way-handshake와 4-way-handshake

3-way-handshake는 TCP 통신을 시작하기 전 논리적인 경로 연결을 수립하는 과정. 이를 통해 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장.

4-way-handshake는 논리적인 경로 연결을 해제하는 과정

 

 

3-way-handshake의 과정

 

A는 Client, B는 Server, A 프로세스가 B 프로세스에 연결을 요청

  1. A(Closed) -> B(Listen) : SYN(a) (연결 요청)
    • A가 연결 요청 메시지 전송 (SYN)
    • 이때, Sequence Number를 임의의 랜덤 숫자(a)로 지정하고, SYN 플래그 비트를 1로 설정한 segment를 전송함
    • 랜덤 숫자 a는 통신에서 메시지가 제대로 도착했는 지 확인하는 용도
  2. B(SYN_RCV) -> A(Closed) : ACK(a + 1), SYN(b) (요청 수락)
    • 연결 요청 메시지를 받은 프로세스 B는 요청을 수락하는 의미로 ACK(a+1), SYN(b) 메시지를 보냄
    • 받은 메시지에 대한 수락(ASK)에 대해서는 Acknowledgement Number 필드를 `Sequence Number + 1` 로 지정하여 표현. 이는 A의 메시지를 잘 받았다는 것을 확인하는 용도.
    • SYN(b)는 B가 A에게 연결 준비되었음을 알리며 자신의 무작위 숫자 'b'를 전송
  3. A(Established) -> B(SYN_RCV) : ACK(b+1) (통신 시작)
    • 마지막으로 프로세스 A가 수락 메시지를 보내 연결을 맺음 -> ACK(b + 1)
    • B의 숫자에 1을 더해 돌려줌. 이는 B의 요청을 잘 받았다는 것을 확인하는 답신 용도.
    • 이 단계에서 데이터를 전송할 준비가 되었다면 데이터 전송을 시작할 수 있음

 

최종적으로 A와 B 모두 Established상태가 됨. 즉 두 컴퓨터가 서로 연결이 완전히 성립되었다는 뜻.

 

 

4-way-handshake의 과정

 

 

4-way-handshake는 TCP의 연결 해제 과정을 나타낸 것이며, 연결을 안정적으로 종료하기 위해 필요하다.

 

  1. A(ESTABLISHED) → B(ESTABLISHED) : FIN (연결 종료 요청)
    • 클라이언트 A가 서버 B에게 연결을 종료하겠다는 FIN 플래그를 전송 (이때 sequence number를 전송)
    • 서버 B는 FIN 플래그로 응답하기 전까지 연결을 계속 유지하고, 플래그를 받은 B는 데이터를 추가로 받을 수 없음을 알게 됨
  2. B(CLOSE_WAIT) → A(FIN_WAIT_1) : ACK (요청 확인 및 데이터 전송 유지)
    • B는 연결 종료 요청(FIN)을 받은 후 요청을 확인했다는 의미로 ACK(Acknowledgement) 메시지를 보내고 자신의 통신이 끝날 때까지 기다림.
    • 이때 사용하는 ACK 플래그 비트는 1 (이는 '확인 메시지' 임을 나타냄)
    • Acknowledgement Number 필드는 A가 보낸 Sequence Number에 1을 더한 값으로 설정됨. 이는 B가 A의 데이터를 정상적으로 받았으며, 다음에 기대하는 데이터의 시작 번호임을 A에 알리는 것
    • B가 ACK 응답을 보낸 후 B는 자신의 상태를 'CLOSE_WAIT' 상태로 변경. 이는 B가 추가로 데이터를 전송할 수 있음을 의미하고, 모든 데이터 전송이 끝나기 전까지 연결을 유지함. 만약 B에게 보낼 데이터가 남아있으면, 이 시점에서 데이터를 계속해서 보낼 수 있음
    • A는 B로부터 ACK를 받고 'FIN_WAIT_1' 상태에서 'FIN_WAIT_2' 상태로 넘어감.
    • 이 상태에서 A는 B가 모든 데이터를 보내고 연결 종료 준비가 완료될 때까지 기다리는 역할.
    • A는 B로부터 추가적인 데이터가 도착할 수 있음을 고려해 일정시간동안 네트워크 상태를 유지하며 이를 'TIME_WAIT' 상태로 관리. 이는 네트워크 지연이나 패킷 손실에 대비해 모든 데이터가 안전하게 전송되었는지 확인하는 마지막 단계
  3. B(CLOSE_WAIT) → A(FIN_WAIT_2) : FIN (B의 연결 종료)
    • B는 데이터 전송이 완료되면 연결을 종료해도 좋다는 의미로 A에게 'FIN' 플래그를 전송
    • 이때 B는 'LAST_ACK' 상태로 이동하고 A는 'FIN_WAIT_2'에서 'TIME_WAIT' 상태로 이동
    • TIME_WAIT 상태는 A가 B로부터 모든 메시지를 받았는지 최종 확인하는 시간을 가지는 단계
  4. A(TIME_WAIT) → B(LAST_ACK) : ACK (종료 확인 및 연결 해제)
    • A는 B의 FIN메시지를 받고 이를 확인하는 ACK 메시지를 보냄
    • A가 ACK를 보내면 B는 모든 메시지가 전상적으로 전송되었다 판단하고 네트워크 연결을 완전히 종료
    • 이제 A와 B 모두 'CLOSED' 상태가 되어 연결이 완전히 종료

이 과정을 통해 두 컴퓨터는 서로에게 연결 종료의 의사를 명확하게 전달하고, 남아있는 데이터 전송을 완료한 후 안전하게 연결을 종료할 수 있음. 이러한 단계적 접근은 데이터 손실을 방지하고 각 단계에서 상대의 응답을 확인함으로써 통신의 정확성을 보장함

 

 

더보기

Sequence Number, Acknowledgement number

 

TCP 통신에서 사용되는 sequence number, acknowledgement number는 데이터 전송의 정확성과 신뢰성을 보장하는 데 필수적인 요소이다.

Sequence Number (시퀀스 번호)
- 정의: 각 바이트에 대해 고유한 번호를 부여하는 숫자
- 목적: 이 번호를 통해 TCP는 데이터 패킷의 순서를 정확하게 파악하고, 네트워크를 통해 전송되는 도중 순서가 뒤바뀌거나 일부 데이터가 손실될 때 이를 재정렬하거나 요청할 수 있음
- 예시: 만약 A가 B에게 100 바이트의 데이터를 전송하고 시작 시퀀스 번호가 1이라면, 다음 데이터 전송 시 시작 시퀀스 번호는 101이 된다.

Acknowledgement Number (확인 응답 번호)
- 정의: 수신자가 성공적으로 받은 마지막 시퀀스 번호의 다음 번호
- 목적: 이 번호를 보내는 것은 수신자가 지정된 번호 이전의 모든 데이터를 성공적으로 받았고, 다음 번호의 데이터를 기다리고 있다는 것을 발신자에게 알리는 용도로 사용됨
- 예시: B가 A의 데이터를 시퀀스 번호 100까지 받았다면, 그 응답으로 Acknowledgement Number를 101로 설정하여 다음 기대하는 데이터의 시작 번호임을 알린다.



이러한 시퀀스 번호 시스템 덕분에 TCP는 네트워크 상에서 데이터가 손실되거나 순서가 뒤바뀌는 상황에서도 각 데이터 조각의 정확한 위치를 파악할 수 있다. 만약 B가 시퀀스 번호 50부터 100까지의 데이터를 받지 못했다면, B는 A에게 시퀀스 번호 50부터 다시 데이터를 보내달라고 요청할 수 있다. 이를 통해 TCP는 데이터의 정확하고 신뢰성 있는 전송을 보장한다.

시퀀스 번호는 단순히 각 데이터 패킷의 시작 번호를 나타내는 것이 아니라, 그 패킷에 포함된 각 바이트의 순서까지 제어하는 중요한 역할을 한다. 이런 메커니즘 덕분에 TCP는 네트워크 오류에 강하고 신뢰성 있는 데이터 전송 방식을 제공한다.

 


 

 

TCP 와 UDP

 

TCP (Transmission Control Protocol)

말 그대로 전송 제어 프로토콜. OSI 7계층에서 4계층인 전송 프로토콜에 해당함.

Internet Protocol인 IP와 함께 사용. 흔히 TCP/IP라고 칭함.

 

TCP/IP에서 TCP는 데이터 조각들을 reliable하게 전송하기 위한 프로토콜이고, IP는 데이터를 빠르게 목적지까지 전송하기 위한 프로토콜. (TCP에서 이러한 데이터 조각들을 TCP Segment라고 칭함)

 

인터넷 상에서 이를 묶어 데이터 통신에 사용하는 것이 TCP/IP 프로토콜이다.

 

 

TCP Segment 구조

 

 

 

TCP의 특징

  1. 연결형 서비스
    • 연결형 서비스로, 가상회선방식을 사용 (3-way-handshake, 4-way-handshake)
    • 통신을 시작하기 전 논리적인 경로를 3-way-handshake를 통해 수립되고, 통신을 종료하기 전 논리적인 경로를 4-way-handshake를 통해 해제함
    • 이러한 방식을 Connect Oriented 방식이라고 부르기도 함
  2. 흐름 제어 (Flow Control)
    • 데이터의 처리속도를 제어
    • 이를 제어함으로써 수신자가 데이터를 받는 데 있어 오버플로우 발생을 방지
    • segment 구조에서 receiver가 얼만큼의 데이터를 받을 수 있는지에 대한 정보를 나타냄
  3. 혼잡 제어 (Congestion Control)
    • 네트워크 내에서 데이터 양을 제어함으로써 통신의 혼잡/부하가 생기는 것을 방지
  4. 전이중, 점대점 방식 (Full-Duplex, Point-to-Point)
    • 전이중 방식 : 양방향으로 전송/수신이 가능한 쌍방향 통신방식
    • 점대점 방식 : 통신을 하는 두 객체간 1:1 연결이 되어있는 방식
  5. Reliable한 Transmission

 

  • 위와 같이 timer가 만료되면, 재전송하는 등의 방식으로 TCP는 전송한 세그먼트의 도착을 보장
  • 즉 전송의 Reliability를 보장

 

 

UDP (User Datagram Protocol)

전송계층에 속해있으며, TCP와 달리 굉장히 단순함.

Connectionless Transport라고 불림

 

 

UDP Segment 구조

 

상대방이 데이터를 수신했는지 여부는 UDP에서 중요하지 않음

 

 

UDP의 특징

  1. 비연결형 서비스
    • Connectionless
    • TCP와 달리 논리적 경로를 수립할 필요가 없으므로 3-way-handshaking 같은 절차가 존재하지 않음
  2. 흐름제어X, 혼잡제어X, 데이터 전송보장X, 순서보장 X
    • TCP에서 제공하는 Reliability와 관련된 기능을 제공하지 않음
    • Checksum을 활용해 최소한의 오류만 검출함
    • 따라서, TCP와 비교해 빠른 속도와 적은 부하를 가짐
    • 실시간 스트리밍, DNS등에 사용됨 (신뢰성 < 속도, 성능인 경우 주로 사용)
  3. 점대점, 브로드캐스팅, 멀티캐스팅
    • TCP와 달리, 점대점 통신뿐만 아니라 1:N 관계의 브로드캐스팅 방식, N:M 관계의 멀티캐스팅 방식 모두 지원함

 


DNS round robin

DNS(Domain Name System) 이란?

인터넷에서 사이트 주소 (도메인 이름)를 IP주소로 변환하는 시스템.

예를 들어 www.google.com 를 웹브라우저에 입력하면 DNS 서버는 이 도메인 이름을 해당 사이트의 실제 IP주소로 변환해줌.

이 과정을 통해 사용자는 IP주소를 직접 기억할 필요 없이, 쉽게 웹사이트에 접근할 수 있음

 

DNS Round Robin이란?

DNS Round Robin은 부하 분산 방법의 하나로, DNS 서버가 여러 서버의 IP주소를 번갈아 가며 제공하면서 네트워크 트래픽을 여러 서버에 골고루 분산시키는 기능.

 

만약 www.google.com  의 도메인이 서로 다른 IP주소를 가진 여러 서버에 연결되어 있을 때, DNS 서버는 이 도메인에 대한 요청을 받을 때마다 다른 IP주소를 제공함. 이를 통해 하나의 서버에 과부하가 걸리는 것을 방지

 

이는 구현이 간단하고 비용 효율적이지만, 각 서버의 현재 부하나 상태를 고려하지 않기 떄문에 보다 정교한 부하 분산 방법이 필요한 경우는 다른 기술을 고려할 필요가 있음

 

 


웹 통신의 흐름

웹이란?

WWW (World Wide Web)의 약자로, 인터넷으로 연결된 컴퓨터를 통해 정보를 공유할 수 있는 공간을 의미

흔히 웹과 인터넷을 통용하여 사용하지만 이는 다른 개념

 

 

웹 통신

기본적으로 웹 통신은 HTTP 프로토콜을 사용해 통신함

통신의 주체는 크게 Client와 Server로 나눌 수 있음

  • Client : 서버에게 정보를 요청하거나 접속하고자 하는 주체 (ex. 브라우저)
  • Server : 클라이언트에게 정보 혹은 서비스를 제공하는 컴퓨터 혹은 시스템

이러한 클라이언트와 서버가 Request와 Response를 주고받으며 통신이 발생

 

 

IP주소와 도메인 이름

IP주소란, 컴퓨터들의 고유 식별번호. 127.0.0.1 과 같은 형태의 숫자로 나타남

현재는 .으로 구분된 각 자리에서 0~255를 나타낼 수 있는 32비트의 IPv4 프로토콜을 사용하고 있지만, 인터넷 사용자 수의 증가로 IP주소 부족 현상이 발생했고 이는 128비트의 IPv6가 등장하는 배경이 됨

 

도메인 이름이란, 사람이 쉽게 외울 수 있도록 IP주소를 어떤 문자로 표현한 것을 의미. 즉 naver.com 이 도메인 이름에 해당함

 

 

웹 통신 세부과정

1. 사용자가 주소창에  https://www.google.com/ (도메인 이름)을 입력

2. DNS를 통해 도메인 이름과 매핑되는 IP주소 획득

3. HTTP 프로토콜을 사용해 요청 (= HTTP Request) 생성

4. TCP 프로토콜을 사용해 서버의 IP주소 컴퓨터로 Request 전송

5. 서버가 클라이언트의 요청에 대한 응답 (= HTTP Response) 전송

6. 브라우저에 도착한 Response는 웹페이지를 나타내는 데이터로 변환되어 브라우저에 나타남

 

 


Reference

https://github.com/Seogeurim/CS-study/tree/main/contents/network