728x90

한양대학교 이석복 교수님의 2017년 2학기 컴퓨터 네트워크 강의를 듣고 정리한 글입니다.

 

 

목차


DNS 가 UDP 기반으로 동작하는 이유

HTTP, DNS 둘 다 Application Layer Protocol 로서 Transport Layer Protocol 인 TCP 와 UDP 를 사용한다. HTTP 가 TCP 기반이라는 것은 잘 알려져 있다. 그렇다면 DNS 는 어떤 프로토콜을 사용할까 ? 직관적으로 생각하면 데이터가 유실되면 안 되기 때문에 TCP 를 사용할 것만 같다. 하지만  현재 DNS 는 UDP 를 사용한다. 그렇다면 데이터 유실을 감수하고도 왜 DNS 는 UDP 기반으로 동작하는 것일까 ? 실제 TCP 는 UDP 에 비해 데이터를 담고, 보내는 전송 과정에서 딜레이가 있다. DNS 는 단지 아주 크기가 적은 데이터인 주소만 알면 되는데, TCP 는 너무 오래 걸린다. 그럼  데이터 유실 문제는 어떻게 할까 ? HTTP 커뮤니케이션에서는 HTTP Response 내 데이터 양이 매우 많을 수도 있고, 대량의 데이터가 유실되는 것은 큰 문제가 될 수 있다. 그러나 DNS 의 경우 DNS Query 내 Response 에 들어가는 데이터 자체가 매우 작다. 호스트 네임을 전송하고, IP 주소를 받아오는 것이 끝이므로 데이터 자체가 몇 바이트 채 되지 않는다. 유실될 확률이 적을 뿐더러, 유실이 되더라도 큰 부담이 없다. 무엇보다 UDP 기반으로 동작하는 것이 빠르고, TCP 보다 현실적으로 훨씬 효율적이다. 따라서 DNS는 현재 UDP 기반으로 동작한다.

 

 


소켓 (Socket)

  • An interface between applicatioin and network
    • The application creates a socket
    • The socket type dictates the style of communication
      • reliable vs best effort
      • connection-oriented vs connectionless
  • Once configured, the application can
    • pass data to the socket for networt transmission
    • receive data from the socket (transmitted through the networt by some other host)

 


소켓의 종류 (Two essential types of sockets)

SOCK_STREAM

  • a.k.a. TCP
  • reliable delivery
  • in-order guaranteed
  • connection-oriented
  • bidirectional

 

SOCK_DGRAM

  • a.k.a.  UDP
  • unreliable delivery
  • no order guarantees
  • no notion of "connection"
    • app indicates dest, for each packet
  • can send or receive

 

 


Socket Functions (TCP case)

TCP 기반의 소켓 통신을 위한 C 언어 함수에 대해 알아본다.

 

 

 

아래와 같은 순서로 함수를 호출하여 클라이언트와 서버를 연결한다.

 

TCP Server 

  • socket() :이 함수를 call 하며 Socket API 를 사용을 시작한다. socket 함수의 파라미터로 TCP Socket, UDP Socket 을 정할 수 있다.
  • bind() :  생성한 Socket 을 몇 번 port 에 장착할지 정한다.
  • listen() : 서버에 특화된 함수이다. 이 소켓을 듣는 용도로 쓰겠다는 것이다. 즉, 서버이므로 액션을 취하는 것이 아니라 클라이언트를 기다리는 것을 의미한다.
  • accept() : bloking 함수이다. 클라이언트로부터 Request 가 올 때까지 기다린다.

 

blocks until connection from client

 

TCP Client

  • socket() : 역시 Socket 을 시작한다.
  • connect() : 상대 Server 에 TCP connection 을 맺는다. 서버 주소 등이 들어간다. bloking 함수이다.

 

TCP three-way handshaking

 

연결 후, TCP Client 는 write()  를 통해 데이터를 요청하고, TCP Server 는 read() 를 통해 데이터를 처리하는 것을 반복한다.

두 함수 역시 blocking  함수이다.

 

통신 완료 후, close() 를 통해 소켓을 종료한다.

 

 

UDP 기반 소켓 통신은 간단하다. Server 측에서 Socket 을 열고 Bind 하면, Client 측에서도 Socket 을 열고 바로 통신하면 된다.

 

 


Reference

 

WuT Com-Server: TCP/IP sockets application

Are you satisfied with our site but still have suggestions for improvement? Leave your comments here:

www.wut.de

 

728x90

'CS > Network' 카테고리의 다른 글

애플리케이션 레이어 (Application Layer) : HTTP 와 DNS  (0) 2023.06.27
Transport Layer : TCP와 UDP  (2) 2022.07.11
728x90

캐시 일관성이란 각각 클라이언트의 로컬 캐시 데이터와 메인 공유 메모리의 데이터가 모두 일치하는 것을 의미한다. 캐시 일관성이 지켜지지 않는 상황을 두고 캐시 일관성 문제라고 한다.각 클라이언트가 자신 만의 로컬 캐시를 가지고 다른 여러 클라이언트와 메모리를 공유하고 있을 때, 캐시의 갱신으로 인해 데이터 불일치 문제가 발생할 수 있다. 이러한 문제를 방지하고, 캐시 일관성을 유지하기 위해서 사용하는 방법 중 하나는 Conditional GET 이다.

한양대학교 이석복 교수님의 2017년 2학기 컴퓨터 네트워크 강의를 듣고 정리한 글입니다.

 

 

목차


캐시 일관성 (Cache Coherence)

 

 

캐시 일관성이란 각각 클라이언트의 로컬 캐시 데이터와 메인 공유 메모리의 데이터가 모두 일치하는 것을 의미한다. 캐시 일관성이 지켜지지 않는 상황을 두고 캐시 일관성 문제라고 한다. 각 클라이언트가 자신 만의 로컬 캐시를 가지고 다른 여러 클라이언트와 메모리를 공유하고 있을 때,  캐시의 갱신으로 인해 데이터 불일치 문제가 발생할 수 있다. 이러한 문제를 방지하고, 캐시 일관성을 유지하기 위해서 사용하는 방법 중 하나는 Conditional GET 이다.

 

 

Conditional GET

don't send object if cache has up-to-date cached version

  • no object transmission delay
  • lower link utilization

 

 if-modified-since: <date>  HTTP 요청 헤더는 날짜와 시간 정보를 담고 있으며, 조건부 요청이다. 서버는 지정된 날짜 이후 수정이 되었다면 HTTP Status 200 과 함께 요청된 리소스 (Object)를 돌려준다. 하지만 만약 수정되지 않은 리소스에 대한 요청은 리소스 없이 HTTP Status 304 (Not Modified) 응답을 한다.

 

여기까지는 HTTP 프로토콜에 대한 이야기이다.

이제부터 또 다른 애플리케이션 프로토콜인 DNS 에 대해 알아본다.

 


DNS (Domain Name  System)

How to map between IP address and name, and vice versa ?

  • distributed database : implemented in hierarchy of many name servers
  • application-layer protocol : hosts, name servers communicate to resolve names 

 

프로세스와 프로세스 간의 커뮤니케이션을 위해서는 다른 머신에 존재하는 프로세스를 지칭하기 위해 주소가 필요하다. 즉,  인터넷 상의 한 컴퓨터에서 다른 컴퓨터로 데이터를 주고 받으며 통신하기 위해서는 주소를 알아야 한다. IP 주소와 Port 번호가 바로 해당 주소라고 할 수 있다. Port 번호는 통상적으로 고정된 번호가 있다. 예를 들어 HTTP 는 80으로 고정되어 있다. 그러나 IP 주소는 32 bit 로 이루어진 고유한 주소이다. 이를 일일이 기억하기는 어렵다. 친구들에게 연락하기 위한 전화번호를 일일이 외우기 힘든 것처럼 말이다. 그래서 마치 전화번호부와 같이 알아보기 쉬운 영단어 (Name Server)를 각 주소와 매핑시키자는 생각에서 DNS 개념이 생겨났다. 예를 들어 구글의 Name Server는  www.google.com  이고, IP Address는 123.xxx... 인 것이다. 이는 좋은 방법이지만 문제는 세계의 모든 서버 정보가 저장된 하나의 데이터베이스에 Access 하여 사용하기 어렵다는 것이다. 데이터도 무수히 많고, 검색 시간도 방대하다. 또한, 비유를 하자면 DNS는 상대방에게 전화를 걸기 위한 준비 운동과 같다. 핵심은 상대방에게 전화를 거는 것이지만 이 DNS는 전화를 걸기 위해 전화번호부를 찾아보는 부가적인 행동이기 때문이다.

 

분산 시스템

무엇보다 만약 정전으로 인해 서버가 잠시 다운된다면 전세계 사람들은 웹 브라우저를 사용하는데 어려움을 겪게 될 것이라는 치명적인 문제 (SPOF)를 안고 있다. 따라서 지금은 분산 시스템으로 구조화되어 존재한다.

 

 

" SPOF (single point of failure, 단일 장애점) "

시스템 구성 요소 중에서, 동작하지 않으면 전체 시스템이 중단되는 요소를 말한다.

 

 

DNS Query 

도메인 이름을 웹 브라우저에 입력할 때 최종 사용자를 어떤 서버에 연결할 것인지를 제어한다.

이 요청을 쿼리라고 부른다.

DNS Query 방법에는 두 가지가 있다.

 

반복적 질의 (Iterative Query)

최종 IP 주소를 받을 때까지 요청과 응답을 계속해서 Local DNS 서버가 반복한다. 클라이언트 입장에서는 Root 에 접근할 일이 거의 없다.

 

재귀적 질의 (Recursive Query)

사용자가 Local DNS 서버에 Query 를 보내면 Local DNS 서버가 Root Name 서버에 Query를 보내고, Root Name 서버는 자신의 서버에 없다면 해당 TLD 서버에 요청하는 식으로, 실제 도메인 정보를 가지고 있는 서버까지  Query가 이동하여 IP 주소를 재귀적으로 얻는다.

 

실제 DNS 서버는 반복과 재귀를 함께 사용한다.

 

재귀적 DNS 가 트래픽을 웹 애플리케이션에 라우팅하는 방법

 

도메인 체계

 

 

💡 DNS : a distributed, hierachical database

client wants IP for www.amazon.com  

  • client queries root server to find com DNS server
  • client queries .com DNS server to get amazon.com DNS server
  • client queries amazon.com DNS server to get IP address for www.amazon.com  

 

💡 DNS : root name servers

contacted by local name server that ccan not resolve name 

  • contacts authoritative name server if name mapping not known 
  • gets mapping
  • returns mapping to local name server

 

💡 TLD, authoritative servers

top-level domain (TLD) servers

  • responsible for com, org, net, edu, aero, jobs, museums, and all top-level country domains (e.g. uk, fr)
  • network solutions maintains servers for .com TLD
  • educause for .edu TLD

 

authoriative DNS servers

  • organization's own DNS server(s), providing authoritative hostname to IP mappings for organization's named hosts
  • can be maintained by organization or service provider
  • second-level domain (SLD) servers

 

 

DNS records

distributed db storing resource records (RR)

RR format : (name, value, type, ttl)

 

권한 있는 DNS 서버에 있는 명령으로서, 도메인에 연계된 IP 주소 및 해당 도메인에 대한 요청의 처리 방법에 대한 정보를 제공한다. 이 레코드는 DNS 구문이라고 하는 일련의 텍스트 파일로 구성된다. DNS  레코드에는 일반적으로 Name, Value, Type, TTL 이 있다.Type 에 따라 레코드가 의미하는 바가 결정이 된다. 여러 type 중, A 와 NS 가 있다.

 

type = A

  • name is hostname
  • value is IP address

 

type = NS

  • name is domain
  • value is hostname of authoritative name server for this domain

 

🔎 TTL (Time to live) 
 컴퓨터나 네트워크에서 데이터의 유효 기간을 나타내기 위한 방법이다. 

DNS 에서 권한 있는 네임서버는 특정 리소스 레코드의 TTL 값을 설정한다. 재귀적 (recursive) 캐시 네임서버가 권한있는 네임서버에 질의를 보낼 때, 캐시 네임서버는 그 레코드를 TTL 값에 해당하는 시간동안 캐시에 저장해 둔다. 

추후 스터브 리졸버(stub resolver)가 캐시 네임서버에 동일한 레코드에 대한 질의를 보냈을 때, 해당 레코드의 TTL 값이 아직 만료되지 않았다면 캐시 네임서버는 권한있는 네임서버에 질의를 보낼 필요 없이 캐시에 저장된 정보를 이용해 바로 응답을 하게 된다. 네임서버는 특정 도메인이 존재하지 않음을 나타내는 NXDOMAIN 응답에 대해서도 TTL 값을 가질 수 있다. 다만 이 경우에는 일반적으로 그 값이 최대 3시간 정도로 짧다.

TTL 값이 짧으면 상위의 권한있는 네임서버에 가해지는 부하가 커진다는 단점이 있지만, 반면에 메일 교환 레코드(mail exchange record)와 같이 주소 변경에 민감한 서비스에 적합하다는 장점을 가진다. 이 때문에 특정 서비스의 주소가 옮겨지는 경우, 이로 인한 혼란을 최소화하기 위해 DNS 관리자는 관련 레코드의 TTL 값을 낮춘다.

 

 

+ 읽어볼 글

 

DNS란? (도메인 네임 시스템 개념부터 작동 방식까지) - 하나몬

이 게시물의 중요 포인트 DNS(도메인 네임 시스템)이 사람이 읽을 수 있는 도메인 이름(www.hanamon.kr)을 IP 주소로 변환하는 시스템이라는 것은 쉽게 알 수 있습니다. 이번 글에서는 이렇게 도메인

hanamon.kr

 

 


Reference

 

캐시 일관성 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. -->

ko.wikipedia.org

 

If-Modified-Since - HTTP | MDN

If-Modified-Since HTTP 요청 헤더는 조건부 요청으로 서버는 지정된 날짜 이후 수정 된 경우에 200 과 함께 요청된 리소스를 돌려 줍니다. 만약 수정되지 않는 리소스에 대한 요청시, 리소스 없이 304 응

developer.mozilla.org

 

DNS란 무엇입니까? – DNS 소개 - AWS

12개월 동안 AWS 프리 티어에 액세스하고 연중무휴 24시간 고객 서비스, 지원 포럼 등을 비롯한 AWS Basic Support의 기능을 사용할 수 있습니다. 현재 Amazon Route 53는 AWS 프리 티어에서 제공되지 않는다

aws.amazon.com

 

[Web] DNS와 작동원리

⬛ DNS(Domain Name System)란? IP 주소는 IPv4 기준 12개 숫자와 .으로 구성되어 있어 외우기가 힘들다. 이를 좀 더 알아보기 쉽게 'naver.com', 'google.com'과 같이 문자와 .으로 표현한 주소를 도메인 이름(Domai

codybuilder.com

 

한국인터넷정보센터(KRNIC)

도메인 소개, 등록 및 사용, IP주소, AS번호, DNS 정보, 관련규정 제공

xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e

 

타임 투 리브 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 타임 투 리브(Time to live, TTL)는 컴퓨터나 네트워크에서 데이터의 유효 기간을 나타내기 위한 방법이다. TTL은 계수기나 타임스탬프의 형태로 데이터에 포함되며,

ko.wikipedia.org

 

 

728x90
728x90

End point 간 신뢰성 있고, 효율적인 데이터 전송을 담당하는 계층이다. 프로토콜(TCP, UDP)로 구성되어 흐름 제어, 혼잡 제어, 오류 제어 등을 담당한다. 순차 번호 기반의 오류  제어 방식을 사용한다.

목차

  1. 전송계층
  2. TCP  
  3. UDP

 


전송계층 (Transport Layer)

End point 간 신뢰성 있고, 효율적인 데이터 전송을 담당하는 계층이다. 프로토콜(TCP, UDP)로 구성되어 흐름 제어, 혼잡 제어, 오류 제어 등을 담당한다. 순차 번호 기반의 오류  제어 방식을 사용한다.

 

전송계층이 없다면?

  • 데이터의 순차 전송이 원활 x
  • Flow (흐름 문제) : 송수신자 간의 데이터 처리 속도 차이
  • Congestion (혼잡 문제) : 네트워크의 데이터 처리 속도 

 


TCP (Transmission Control Protocol)

  • 클라이언트와 서버가 연결된 상태에서 신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
  • 일반적이고 대중적인 방식
  • 신뢰성이 높고 속도가 느림
  • 연결 지향 : 상대가 데이터를 받았는지 확인하면서 통신하는 방식
  • 데이터 순차 전송을 보장
  • 패킷의 손실, 중복, 순서변경이 없음을 보장
  • 흐름 제어, 혼잡 제어, 오류 감지
    • Flow Control (흐름 제어): 송신 및 수신 속도를 일치시킴
    • Congestion Control (혼잡 제어): 네트워크 혼잡시 데이터 전송 속도를 강제로 줄임
    • Error Detection (오류 감지)

 

Segment : TCP 프로토콜의 PDU

* PDU : Protocol Data Unit 각 계층에서 헤더와 데이터를 합친 부분을 말한다. 계층마다 부르는 이름이 다르고, 3계층인 네트워크 계층 PDU는 패킷(Packet)이라고 부른다.

전송 계층에서는 세션 계층에서 전달된 데이터를 받아 실질적인 전송을 위해 일정 크기로 나눈다. 이렇게 나누어진 데이터에는 출발지 포트(보낸 이), 목적지 포트(받는 이), 순서 번호, 오류 검출 등이 헤더로 붙게 되는데 이것을 세그먼트라고 부른다. 세그먼트는 전송 계층의 TCP 프로토클이 응용 계층의 데이터 단위인 메시지를 받아 작은 조각으로 분할한 데이터 단위이다. 즉, TCP 프로토콜에 따라 분할된 데이터에 TCP 헤더가 붙어 캡슐화된 전송 계층의 패킷이 세그먼트이다. 이 세그먼트는 인터넷 계층으로 전송된다.

 

TCP 헤더

출처 : https://en.wikipedia.org/wiki/Transmission_Control_Protocol

SYN : TCP가 Connection을 연결할 때 쓰는 플래그 비트

FIN : Connecion 연결 후 끊어낼 때 쓰는 플래그 비트

ACK : 데이터 전송을 받는 사람이 다시 전송할 때 제어하는 플래그 비트



 

TCP의 3 way-handshake (Connection 연결)

[STEP 1]

SYN 비트를 1로 설정해 패킷 송신

A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태가 되는 것이다.

 

[STEP 2]  

SYN, ACK 비트를 1로 설정해 패킷 송신

B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.

 

[STEP 3]

ACK 비트를 1로 설정해 패킷 송신

A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다. 

 

 

 

TCP의 데이터 전송 방식

1. Client가 패킷 송신

2. Server에서 ACK 송신

3. ACK를 수신하지 못하면 재전송

 

 

TCP의 4 way-handshake (Connection close)

[STEP 1]

데이터를 전부 송신한 Client가 FIN 송신

클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.


[STEP 2] 

Server가 ACK 송신, Server에서 남은 패킷 송신 (일정 시간 대기)

서버는 일단 확인메시지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 TIME_WAIT상태다. 

 

[STEP 3]

Server가 FIN 송신

서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다. 

 

[STEP 4]

Client가 ACK 송신

클라이언트는 확인했다는 메시지를 보낸다.

 

만약 Server에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 FIN패킷보다 늦게 도착하는 상황"이 발생한다면 어떻게 될까? 

 

Client에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 있다면 이 패킷은 Drop되고 데이터는 유실될 것이다. 

이러한 현상에 대비하여 Client는 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거치게 되는데 이 과정을 "TIME_WAIT" 라고 한다.

 

 

 

TCP 상태도

 

TCP의 문제점

  • 매번 Connection을 연결해서 시간 손실 발생 (3 way-handshake)
  • 패킷을 조금만 손실해도 재전송

 


UDP (User Datagram Protocol)

  • TCP보다 신뢰성이 낮지만 전송 속도가 빠른 프로토콜
  • 신뢰성이나 정확성보다는 효율을 중시
  • 비연결 지향: 상대가 데이터를 받았는지 확인하지 않고 일방적으로 통신하는 방식
  • 데이터 순서를 보장 x
  • Error Detection (오류 감지)만 있음
  • 비교적 데이터의 신뢰성이 중요하지 않고 빠른 처리가 필요할 때 사용 (ex) 실시간 스트리밍)

 

User Datagram : UDP 프로토콜의 PDU 

UDP Header

출처 : https://en.wikipedia.org/wiki/User_Datagram_Protocol

TCP Header처럼 복잡하지가 않다. TCP처럼 전송을 위해 포트 번호가 있고, 에러 검출을 위한 Checksum이 있다.

 

 

 

UDP의 데이터 전송 방식

1. Client가 패킷 송신

Connection이 없기 때문에 확인도 안하고 그저  전송하기 위해 열어두기만 한다.

 

 

 

UDP의 문제점

  • 데이터의 신뢰성이 없다.
  • 의미있는 서버를 구축하기위해서는 일일이 패킷을 관리해주어야 한다.

<출처 및 참고자료>

 

Network | 전송 계층 (TCP, UDP)

OSI_Model종단 간(End-To-End) 통신을 다루는 계층으로 종단 간 신뢰성 있고 효율적인 데이터를 전송한다.상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해준다.프로토콜(TCP, UDP)

velog.io

 

[ 네트워크 쉽게 이해하기 22편 ] TCP 3 Way-Handshake & 4 Way-Handshake

우선  TCP의 3-way Handshaking 에 대하여 알아보겠습니다. * TCP 3-way Handshake 란? TCP는 장치들 사이에 논리적인 접속을 성립(establish)하기 위하여 three-way handshake를 사용한다. TCP 3 Way Handshake..

mindnet.tistory.com

 

쉽게 이해하는 네트워크 17. TCP 프로토콜의 기능 및 특징 - 패킷 분할과 연결형 통신

TCP 프로토콜의 기능, 특징 - 세그먼트, 연결형 통신 TCP 프로토콜의 기능과 특징 전송 계층의 대표적인 프로토콜인 TCP는 신뢰할 수 있고 정확한 데이터를 전달하기 위해 연결형 통신을 사용하는

better-together.tistory.com

 

TCP의 헤더에는 어떤 정보들이 담겨있는걸까?

저번에 HTTP/3는 왜 UDP를 선택한 것일까? 포스팅을 진행하며 TCP에 대해 간단한 언급을 했었지만, 해당 포스팅에서는 기존의 HTTP에서 사용하던 TCP에 어떤 문제가 있었는지에 집중해서 이야기했었

evan-moon.github.io

https://en.wikipedia.org/wiki/TransmissionControlProtocol

 

728x90

+ Recent posts