본문 바로가기

CS(ComputerScience)

Network, 통신 Model

728x90

Network, 통신 Model

 
통신 절차 각 계층을 나눠 표현한 것
OSI 7 Layer : 표준 통신 모델(참조 모델)
TCP/IP :  비표준 모델(실사용 모델)
 
Client : 컴퓨터, 노트북, 핸드폰, 아이패드 등
Server : 공유기, DNS, IP할당기(DHCP), 시간관리기(NTP), 게이트 웨이

Browser --- request ---> Server
Browser <--- response --- Server

 

🔎 Client와 Server는 어떻게 통신하나?

자원(데이터)를 교환하기 위한 TCP/IP 기반 프로토콜(HTTP)을 이용한다.
 
ㄱ. www.naver.com 입력
ㄴ. 도메인의 네임 부분을 DNS 서버에 검색해 도메인 네임에 해당하는 IP주소 찾아옴 (Get Address Info)
ㄷ. HTTP 프로토콜 사용해 URL정보와 찾아온 IP주소를 포함하는 HTTP 요청(Request) 메세지 생성. 생성된 메세지는 패킷으로 분할되어 TCP 프로토콜을 사용해 인터넷 망을 통해 해당 IP주소의 컴퓨터(서버)로 전송
ㄹ. 요청 메세지를 받은 컴퓨터(서버)는 웹 페이지 URL정보 중 PATH와 HTTP Method에 맞는 액션을 취한다.
ㅁ. 생성된 응답 데이터는 또 다시 HTTP프로토콜을 사용하여 HTTP 응답 메세지를 만들어 TCP 프로토콜을 사용해 인터넷 망을 통해 클라이언트(요청했던 컴퓨터)로 전송
ㅂ. 도착한 HTTP 응답 메세지는 웹 브라우저에 의해  브라우저 rendering과정을 거쳐 화면에 출력
 


HTTP 프로토콜 이해

http

📌 특징

1. 단방향성
서버가 먼저 응답을 보낼수 없고 클라이언트가 요청을 보내야만 응답할 수 있다.
2. 비연결성
클라이언트의 요청으로 서버와 연결된 후, 요청에 대한 응답 데이터를 전송하면 연결이 종료된다.
즉, 실시간 통신 불가능.


📌 단점

1. HTTP는 평문 통신(텍스트 기반)이기 때문에 도청이 가능
2. 통신 상대가 검증된 상대인지 확인하지 않기 때문에 위장이 가능
3. 완전성을 증명할수 없기 때문에 변조 가능하다.
--> HTTPS 등장


📌 HTTP Method

클라이언트가 웹 서버에게 요청의 목적이나 종류를 알리는 수단
GET, POST, PUT, PATCH, DELETE


📌 HTTP Status Code

클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주기 위한 정보
404 Not Found, ...
 


전반적인 통신 흐름

7계층응용계층(Application)Data애플리케이션 서비스 전송FTP, HTTP, SMTP, Telnet컴퓨터, 핸드폰
6계층표현계층(Presentation)문자코드, 압축 encoding, decoding
5계층세션계층(Session)통신 방식 결정 
4계층전송계층(Transport)Segment신뢰성있는 통신 구현portL4로드밸런스, 포트
3계층네트워크계층(Network)Packet다른 네트워크와 통신하기 위한 IP주소 결정packet, routing, forwarding라우터, 중계노드, IP주소
2계층데이터링크계층(Data Link)Frame물리주소 결정framing, switchingL2스위치, MAC주소
1계층물리계층(Pysical Layer)Bit물리적인 연결과 신호변아날로그 신호 ↔ 디지털 신호인코더/ 디코더
전반적인 통신 흐름

 

🔎 Packet이란?

전송될 데이터는 고유번호(file descriptor, 파일 식별자(file identifier))로 지정되어 있음.
데이터 조각, 데이터 비트를 의미한다.
네트워크를 거쳐 최종 수신지에 도착했을 때, 이 번호 순서대로 결합되어 원래 데이터를 완성!
 

🔎 Packet으로 나누는 이유가 뭘까?

커다란 데이터가 네트워크 대역폭(Bandwidth)를 너무 많이 차지하면, 비용↑ 속도↓ 더 많은 사용자를 접속시킬 수 없게 되어버린다. 그래서 패킷으로 데이터를 분할해 통신 흐름을 원할하게 해주는 것이다. 
 

🔎 그렇다면, file descriptor를 사용하는 이유가 TCP랑 관련 있을까?

패킷들을 가장 효율적인 방법으로 최종 목적지(대상 IP주소) 전송하기 위해 순서를 보장해줘야 한다. 

IP

IP는 필요한 프로토콜 패킷의 전달 여부를 보장하지 않고 순서 역시 보장하지 않는다.
다만, 최적의 경로를 선택하는 라우팅 기능만 수행한다.
그렇기 때문에, 패킷을 안전하게 전달해주고 혼잡제어, 흐름 제어를 해주는 TCP 라는 신뢰성 있는 연결지향형 프로토콜이 필요함. fIle descriptor는 TCP 소켓에 대한 파일 포인터와 같은 역할을 한다.
TCP는 fd를 이용해 데이터를 읽고 쓸 수 있는 것이다.


소켓 프로그래밍

 
HTTP의 경우, 클라이언트가 서버에 요청을 보내고 서버는 요청된 정보가 포함된 메세지로 응답합니다.
그러나, 응답을 보낸 후 연결이 닫히고 새 요청이 시작될 때까지 더 이상 통신할 수 없습니다.
즉, 클라이언트의 요청없이는 서버가 응답을 보낼 수 없는거죠!
 
소켓은 HTTP보다 우연하고 다양한 방법으로 소통할 수 있습니다.
소켓을 이용하면 클라이언트와 서버 모두 언제든지 데이터를 송신할 수 있습니다.
개발자가 응용 프로그램의 특정 요구 사항에 맞는 맞춤형 프로토콜 및 통신 채널을 만들 수 있는거죠!
유연성, 효율성 및 호환성 때문에 네트워크 프로그래밍에 널리 사용!
 

🔎 어떤 정보를 이용해 통신할까?

소켓 인터페이스

node를 링크에 연결해 통신 상대를 찾습니다.
바로, IP와 Port!
 

🔎 Echo server란?

소켓 데이터에서 들어오는 데이터를 수신한 다음 해당 데이터를 발신자에게 다시 에코하는 프로그램

소켓 인터페이스

🔎 그렇다면, 에코 서버를 사용하는 이유는?

프로그램이 소켓 연결을 생성하면 클라이언트와 서버 간에 데이터가 올바르게 전송되고 수신될 수 있는지 확인할 수 있습니다. 즉, 소켓 연결이 올바르게 작동하는지 빠르고 쉽게 확인할 수 있어 사용합니다.
소켓 기반 응용 프로그램의 디버깅 및 문제 해결에 유용하게 사용됩니다.
 

🔎 소켓 식별자를 사용하는 이유?

소켓 식별자

클라이언트와 서버 간의 열린 소켓 연결을 나타내는 고유 식별자로 listen() 작업을 수행하는데 사용됩니다.
소켓 연결에서 들어오는 연결을 수신하도록 서버 프로그램을 설정하기 위해 listen()함수와 함께 사용!
 

📄 tiny.c

// argc 인자의 개수
// grgv 실제 인자들을 포함하는 문자열 배열
int main(int argc, char **argv) {
  int listenfd, connfd;
  char hostname[MAXLINE], port[MAXLINE];
  socklen_t clientlen;
  struct sockaddr_storage clientaddr;

  /* Check command line args */
  // 프로그램이 실행될 때 포트 번호가 함께 전달되지 않으면 오류 출력
  if (argc != 2) {
    fprintf(stderr, "usage: %s <port>\n", argv[0]);
    exit(1);
  }

  // 인자로 받은 포트 번호로 소켓을 열고 listenfd에 할당
  // Open_listenfd 소켓 생성, 바인딩, listen() 함수 호출해 서버 소켓 열어줌.
  listenfd = Open_listenfd(argv[1]);
  while (1) {
    clientlen = sizeof(clientaddr);
    // connect file descriptor
    // Accept()는 브로킹 함수로, 클라이언트의 연결 요청이 올때까지 기다린다.
    connfd = Accept(listenfd, (SA *)&clientaddr,
                    &clientlen);  // line:netp:tiny:accept

    // 클라이언트의 IP주소와 포트 번호를 추출하여 hostname과 port에 저장
    Getnameinfo((SA *)&clientaddr, clientlen, hostname, MAXLINE, port, MAXLINE,
                0);
    printf("Accepted connection from (%s, %s)\n", hostname, port);

    // 실제 웹 서버가 하는 작업들
    doit(connfd);   // line:netp:tiny:doit

    // 클라이언트와의 연결 종료
    Close(connfd);  // line:netp:tiny:close
  }
}

listenfd : 소켓 식별자


용어 정리

 

IP란?

Internet Protocol Address (kernel code)
kernel code로 장치가 네트워크에 등록되는 시점에 할당되는 번호로, 이사가는 시점에 할당받는 집주소와 같은 의미다.
cf. 전세계적으로 보편화 되어있는 IP 버전 : 
IP4(32bit, 4개부분 8bit씩 10진수로 표현) → 256*256*256*256 = 43억개
확장성과 용량 면에서 한계를 보이는 IPv4 대체하는 버전 : 
IPv6(128bit, 8개부분 16vit씩 16진수로 표현) 43억 * 43억 * 43억 * 43억 개... 
 

TCP란?

Transmission Control Protocol (kernel code)
IP 위에서 동작하고 데이터 전달 & 순서 보장
흐름제어 + 혼잡제어 + TCP handshake
오류가 발생하면 데이터를 재전송할 수 있는 신뢰성 있는 연결지향형 프로토콜
 

TCP/IP란?

IP(인터넷 프로토콜) + TCP(전송제어 프로토콜)
TCP 기반 HTTP, FTP(전통적인 파일전송 서비스), 
SMTP 등 수많은 프로토콜이 IP위에서 동작하기에 묶어서 TCP/IP라고 함.
즉, 효율적으로 빠르게(IP) 보내면서 안전하게(TCP) 전달해주려는 목적
 

MAC 주소란? 

Media Access Control Address
장치가 생산될 때 제조사에서 할당해주는 고유 번호
 = 내가 태어날 때 할당받는 주민등록번호
 

WAN란?

Wide Area Network
서로 떨어져 있는 LAN 사이를 전용선 등으로 연결한 광역 네트워크

 


LAN란?

Local Area Network
사무실이나 빌딩처럼 비교적 좁은 범위의 네트워크
WIFI 공유기, 노트북-핸드폰 연결, 컴퓨터-프린트 연결ㄴㄴ
Ethernet : 가장 대중적인 LAN기술
 
 

File Descriptor란?

0이 아닌 정수로 표현되는 값으로 0 ~ OPEN_MAX까지의 값을 가질 수 있으며, 프로세서가 정규파일, 디렉토리, 소켓, 파이브, 블록 디바이스, 캐릭터 디바이스 등의 객체 파일에 접근할 때 쓰인다.
 

파일 디스크립터

 

DNS란?

Domain Name System
IP 주소를 사람들이 이해하기 쉽게 문자로 표현한 것
컴퓨터는 IP주소로 서로의 위치를 확인하고 통신.
도메인 네임은 식별할 수 없기 때문에, 
IP 주소에 도메인 네임을 할당하고 이를 관리하는 시스템을 DNS라고 한다.
localhost <---> 127.0.0.1

'CS(ComputerScience)' 카테고리의 다른 글

Pintos, Virtual Memory  (0) 2023.05.23
tiny 웹서버 구현  (0) 2023.04.19
명시적 가용 리스트 Explicit Free List  (0) 2023.04.13
묵시적 가용 리스트 Implicit Free List  (1) 2023.04.12
가상 메모리  (0) 2023.04.12