네트워크

네트워크

Tags
Network
Published
Author

네트워크 기본 구조와 원리

  • 프로토콜(protocol) : 인터넷 상에서 컴퓨터 간의 데이터를 주고 받기 위한 약속된 형식 ⇒ 통신규약
  • OSI 7 계층 : 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 구분하여 규정
    • ⇒ 프로토콜을 기능별로 구분
      notion image
  • 서버(Server) : 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 또는 프로그램
  • 클라이언트(Client) : 네트워크를 통하여 서버라는 다른 컴퓨터 시스템 상의 원격 서비스에 접속할 수 있는 응용 프로그램 또는 사용자 컴퓨터

주요 네트워크 프로토콜과 표준

  1. TCP/IP (Transmission Control Protocol/Internet Protocol)
      • 인터넷에서 가장 일반적으로 사용되는 프로토콜
      • TCP는 신뢰성 있는 데이터 전송을 담당
      • IP는 패킷 라우팅과 주소 지정을 처리
  1. HTTP (Hypertext Transfer Protocol)
      • 웹 페이지 요청과 응답을 처리하기 위한 프로토콜
      • 클라이언트가 서버에 요청, 서버는 요청에 대한 응답
  1. HTTPS (Hypertext Transfer Potocol Secure)
      • HTTP 보안 버전
      • 인증서를 사용하여 데이터의 안정성과 개인 정보 보호를 강화
  1. DNS (Domain Name System)
      • 도메인 이름과 IP 주소 간의 변환을 처리하는 프로토콜
  1. SMTP (Simple Mail Transfer Protocol)
      • 이메일의 전송을 처리하기 위한 프로토콜

네트워크 계층 전송 방식

  1. 유니캐스트 : 고유 주소로 식별된 하나의 네트워크 목적지에 1:1로 트래픽 또는 메시지를 전송하는 기술
  1. 멀티캐스트 : 하나 이상의 송신자들이 특정한 하나의 이상의 수신자들에게 데이터를 전송하는 기술
  1. 브로드캐스트 : 하나의 송신자가 같은 서브 네트워크 상의 모든 수신자들에게 전송하는 기술
  1. 애니캐스트 : 하나의 송신자로부터 토폴리지상의 잠재적인 수신자 그룹 안에서 가장 가까운 노드로 데이터그램을 전송하는 기술

TCP/IP 서버와 클라이언트

TCP/IP

모델
  1. Link Layer
    1. 디지털 데이터를 물리적인 전송매체로 보내는 변환/변조 그 신뢰성을 확보하는 처리를 수행
  1. Internet Layer
    1. 수신지가 되는 컴퓨터까지 통신 경로를 확보하는 처리를 수행
  1. Transport Layer
    1. 애플리케이션을 식별하고 그에 따라 통신을 제어
  1. Application Layer
    1. 사용자가 직접적으로 이용하는 애플리케이션의 네트워크 통신을 제어하는 처리를 수행

3Way HandShaking

notion image
1step : 클라이언트는 서버에 접속하기 전에 접속할 것을 미리 서버에게 신호를 보낸다.
2step : 수신한 서버는 클라이언트부터 접속에 대한 요청을 받았음을 클라이언트에 발송한다.
3step : 클라이언트는 서버로부터 자신의 요청이 수신되었음을 확인하고, 수신확인 메시지를 전송한 후 서버와의 통신을 시작한다.
  • 전송계층 (OSI 모델)
  • 운영체제의 일부로 구현되어 있음
  • 전송 방식
    • TCP(Transmission Control Protocol) : 에러검출, 재전송 등 데이터 신뢰성
    • UDP : 빠른 전송

TcpListener 클래스 메소드

시작
Start()
TcpListener 개체를 수신 대기 상태로 만듭니다.
중지
Stop()
TcpListener 개체를 중지합니다.
연결 수락
AcceptTcpClient()
클라이언트에서 연결 요청을 수락하고 연결된 TcpClient 개체를 반환합니다.
연결 대기
Pending()
연결을 수락할 수 있는 클라이언트가 있는지 여부를 나타내는 값을 반환합니다.

TcpClient 클래스 메소드

연결
Connect(string,int)
지정된 호스트와 포트 번호로 TCP 서버에 연결합니다.
네트워크 스트림
GetStream()
NetworkStream 개체를 반환하여 TcpClient와 연결된 네트워크 스트림을 가져옵니다.
소켓 닫기
Close()
TcpClient와 연결된 소켓을 닫습니다.

TCP 서버와 클라이언트

  • TCP 서버의 기본 구조
    • 대가상태 → 접속요청 → 데이터 전송
  • TCP 서버와 클래스
    • TcpListener : 연결과 TcpClient 객체 생성
    • TcpClient : 데이터 전송, 클라이언트 영역과 서버 영역이 데이터를 주고 받을 수 있도록 하는 객체
    • NetworkStream : TCP Client 객체가 1:1로 연결된 상태에서, 데이터를 주고 받을 수 있도록 과정을 구현
    • notion image
  • TCP 서버와 다수의 클래스
    • notion image

UDP 서버와 클라이언트

notion image
  • UDP 서버와 클래스
    • notion image
  • 비연결형
    • 클라이어트에서 어떠한 데이터를 보내면, UDP 서버는 즉각적으로 반응
    • ip 주소와 port 번호를 알면 데이터 전송 가능
  • 서버와 클라이언트 모두 사용
  • 그룹처리
notion image

Buffer

TCP는 통신시 데이터를 효율적으로 전송하기 위해 버퍼라고 하는 임시 데이터 공간을 사용

소켓 버퍼 동작 구조

notion image
  1. 클라이언트에서 서버에 보낼 데이터를 write한다.
  1. 데이터가 클라이언트송신 버퍼적재한다.
  1. 적재된 데이터가 서버의 수신 버퍼전송한다.
  1. 서버수신버퍼에 적재된 데이터를 read한다.
  1. 서버에서 클라이언트에게 응답할 데이터를 write한다.
  1. 데이터가 서버송신버퍼적재된다.
  1. 적재된 데이터가 클라이언트수신 버퍼전송된다.
  1. 클라이언트수신버퍼에 적재된 데이터를 read한다.

응용프로그램이 갑작스럽게 종료되어 세션이 끊긴다면 버퍼에 남아있는 데이터들은 어떻게 되는것일까?

 

Proxy(프록시)

‘대리’,’대신’이라는 뜻을 가지며, 프로토콜에 있어서는 대리 응답 등에서 사용하는 개념이다.
  • 클라이언트와 서버 사이에 존재하며, 중계기로서 대리로 통신을 수행하는 것을 proxy라고 하며, 그 중계 기능을 하는 주체를 Proxy Server라고 한다.

프록시 서버의 종류

  1. 포워드 프록시(Forward Proxy)
      • 기본적인 프록시
      • Client와 Server 사이에 위치하여 요청을 중계하며, 요청과 응답은 Proxy Server를 거친다.
      • 클라이언트를 감추는 효과가 있다.
  1. 리버스 프록시(Reverse Proxy)
      • 포워드 프록시와 다르게 Server들이 주로 내부망으로 구서오디며 프록시에게만 연결을 허용
      • 서비스를 위한 보안 채널을 구축
      • Client가 Server에 직접 접근이 불가능하므로, Reverse Proxy에서 요청을 적극적으로 중계하는 Loading Balancing(컴퓨터 자원들에게 작업을 나누는것을 의미)의 역할을 수행하기도 함

프록시 서버를 사용하는 이유

  • 개인정보를 보호할 수 있다.
  • 캐시를 사용해서 속도가 향상된다.
  • 로그를 기록,관리할 수 있다.
  • 접속을 우회할 수 있다.

HTTP

상태는 없고 세션이 있다.

headers

  • Host : 요청하려는 서버 호스트 이름과 포트번호
  • User-agent : 클라이언트 프로그램 정보
  • Referer : 바로 직전에 머물렀던 웹 링크 주소
  • Accept : 클라이언트가 처리 가능한 미디어 타입 종류 나열
  • If-Modified-Since : 여기에 쓰여진 시간 이후로 변경된 리소스 취득
  • Authorization : 인증 토큰을 서버로 보낼 때 쓰이는 Header
  • Origin : 서버 Post 요청을 보낼 때 요청이 어느 주소에 시작되었는지 나타내는 값
  • Cookie : 쿠키 값

Socket

네트워크 소켓은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점
notion image
bind() 시스템 콜
생성한 소켓에 실제 아이피 주소와 포트 번호를 부여하는 시스템 콜
  • 파라미터에 소켓의 파일 디스크립터를 포함
  • bind() 시스템 콜은 서버에서만 사용
listen() 시스템 콜
연결 요청을 받아들이는 시스템 콜
  • TCP에서만 사용
  • 최대로 받아주는 크기를 backlog로 설정 = TCP 백로그 큐의 크기
accpet() 시스템 콜
backlog qeue에서 syn을 보내와 대기 중인 요청을 선입선출로 연결해줌
  • 클라이언트의 주소 정보

서버

  1. 소켓 생성
  1. 바인딩(ip, port번호 설정)
  1. listen()으로 클라이언트 요청에 대기열을 만들어 몇개의 클라이언트를 대기시킬지 결정
  1. accept()로 클라이언트와 연결
  1. 데이터 송수신
  1. 소켓 닫기

클라이언트

  1. 소켓 생성
  1. 서버에 설정된 ip, port로 연결 시도
  1. accpet()로 클라이언트의 socket descriptor 반환
  1. 데이터 송수신
  1. 소켓 닫기

스트림 소켓

  • TCP(Transmission Control Protocol)을 사용하는 연결 지향방식의 소켓
  • 송수신자의 연결을 보장하여 신뢰성있는 데이터 송수신 가능
  • 데이터의 순서 보장
  • 소량의 데이터보다 대량 데이터 전송에 적합
  • 점대점 연결

데이터그램 소켓

  • UDP(User Diagram Protocol)을 사용하는 비연결형 소켓
  • 데이터의 순서와 신뢰성을 보장하기 어려움
  • 점대점 뿐만 아니라 일대다 연결도 가능

웹소켓

HTTP 통신을 이용하면 클라이언트에서 서버에 요청을 보내야만 서버에서 응답을 하는데 서버에서 요청을 받지 않으면 통신이 안된다. 이러한 문제점을 해결하기위해서 양방향 통신이 가능한 웹 소켓 통신을 이용해야함
notion image
  • 최초 접속시에만 http 프로토콜 위에서 handshaking을 하기 때문에 http header를 사용
  • 웹소켓을 위한 별도의 포트는 없고, 기존 포트를 사용
  • 프레임 으로 구성된 메시지라는 논리적 단위로 송수신
  • 메시지에 포함될 수 있는 교환 가능한 메시지는 텍스트와 바이너리 뿐