본문 바로가기

서버운영 (TA, ADMIN)/네트워크

[네트워크프로그래밍] 네트워크 기초

네트워크와 네트워킹


1) 네트워크 (네트워크에 필요한 구성 요소들)

- 케이블이나 전화선, 무선 링크 등으로 연결되어 동일한 프로토콜을 사용하는 디바이스들의 집합

- 디바이스: 네트워크에 열결해서 어떤 서비스를 이용하거나 제공할 수 있는것들의 총칭

- 디바이스들끼리 통신을 위해 연결이 되어 있음 (케이블 혹은 무선)

물리적으로 연결된다고 연결이 되는것이 아니라 디바이스들 사이에 서로 약속을 만들어놔야합니다.


2) 네트워킹 (네트워크 데이터를 서로 주고받는 과정 / 송수신)

- 네트워크에 연결된 디바이스들 간의 데이터 전송

컴퓨터 디바이스들 사이에 네트워킹을 하겠다면 데이터를 주고받아야 합니다. 다른 디바이스로 보내기도 하고 받기도 합니다. IO와 관련된 기본 개념을 습득합니다.


데이터란? 바이너리 데이터의 시퀀스

결국 디바이스간의 데이터 송수신 역시, 010011의 반복되는 데이터를 전달하는 개념입니다.

보내는쪽이나 받는쪽은 주고받는 데이터에 대한 이해가 있어야 하고 그 약속이 바로 프로토콜 입니다.


3) 네트워크 통신

- 주소: 통신노드 고유의 주소, 보내려고하는 컴퓨터의 목적지 주소(IP주소 + 포트번호)

- 데이터 전송: 패킷(헤더 + 바디), 보내려고하는 데이터의 한 단위.



OSI 7계층


OSI 7계층 기본 개념에 대해서는 짚고 넘어가는것이 좋습니다. 가장 최상위가 애플리케이션 계층, 제일 하단은 물리적 계층(전선, 시그널 등등)이며,  궁극적으로 개발자는 최상위단 네트워크와 관련된 프로토콜에 대해서만 알고 있으면 됩니다.



애플리케이션 계층: 엔드유저 사용자와 컴퓨터가 통신하는 곳(일반 응용 서비스)

프리젠테이션 계층: 한 시스템의 애플리케이션에서 보낸 정보를 다른 시스템의 애플리케이션 계층에서 읽을 수 있게 하는 곳 (MIME, 암호화)

세션 계층: 애플리케이션간 세션 구축, 관리, 종료시키는 역할 (TCP/IP 세션)

트랜스포트 계층: 데이터 전송 서비스 제공 (신뢰적 전송)

       애플리케이션 계층에서 전달한 데이터를 목적지 프로세스까지 전달하는 역할을 하는 프로토콜

네트워크 계층: 두 원격 시스템간 연결성과 경로 선택 제공(라우팅 프로토콜)

데이터 링크 계층: 네트워크 계층으로부터의 메시지를 비트로 변환(맥 레이어)

물리 계층: 데이터 패킷을 전기 신호나 광신호로 바꾸어 송수신(물리, 전기적 신호로 변환)

프레젠테이션, 세션 레이어가 있다고 예전엔 분리를 하였으나 결국 프레젠테이션 계층과 세션 계층도 애플리케이션 계층에서 사용하게 되므로, 애플리케이션 계층과 크게 다름이 없어 3개의 계층을 묶어서 애플리케이션 계층이라고 합쳐 부르기도 합니다.


세션이란, 디바이스와 디바이스간의 한 단위 통신 트랜잭션이라고 볼 수 있습니다. 트랜잭션 단위를 하나의 세션이라고 말합니다. 전화를 걸었을때 전화를 하고 있는 동안이 하나의 세션이 되는 것입니다.


트랜스포트 계층은 개발자가 직접 컨트롤하는 부분이 아니라, OS가 컨트롤하는 부분입니다. 애플리케이션 계층에서 목적지만 지정해준다면 트랜스포트 계층의 도움을 받아 목적지까지 전달되게 됩니다. 물론, 트랜스포트 계층이 제대로 동작하려면 아래 네트워크, 데이터링크, 물리 계층이 잘 동작해야합니다. 대표적인 프로토콜 종류로는 TCP와 UDP가 있습니다.


네트워크 계층의 프로토콜은 IP(Internet Protocol)입니다. 그래서 일반적으로 TCP/IP 통신이라 함은 트랜스포트 계층과 네트워크 계층의 통신을 아우르는 말입니다.


트랜스포트 계층과 네트워크 계층 모두 목적지까지 데이터를 전송하는 역할을 수행한다고 하는데, 둘 간의 차이점은 무엇일까요? 실제로 두개의 역할은 비슷하지만, 차이점이 있습니다. 애플리케이션 계층에서 데이터를 보내고, 라우터를 거쳐 목적지 컴퓨터(IP Address를 보고)까지 도작하게 만들어주는건 네트워크 계층의 역할합니다. 그렇게 네트워크 계층의 역할이 마무리 되고, 트랜스포트 계층은 디바이스가 데이터를 받았을때, 이 머신에서 돌고있는 프로그램 중에 어떤 프로그램으로 전달해줘야하는지를 결정해줍니다(수신자 입장). 그 결정의 기준은 포트번호 입니다. 



인터넷 프로토콜


1) 네트워크(최초의 인터넷에서 사용한 프로토콜 / 네트워크의 역사)

- ARPANET(1969) + NSFNET(1986) -> 인터넷 (1990~)

- 소규모 메일, FTP, 뉴스그룹 -> WWW (1991)

2) IP(Internet Protocol)

- 네트워크 계층에서 데이터의 효율적 전송

- 호스트에 대한 주소체계와 패킷 라우팅 담당

- IP 주소: 32비트 정보 (일부는 네트워크, 일부는 호스트) : 목적지 정보를 보는 용도

3) ICMP (Internet Control Message Protocol)

- IP에 내장된 오류처리, 보고 메커니즘을 추가한 프로토콜

- IP에 이상한 정보가 발생했을때, 상황 모니터링 프로토콜

4) TCP (Transmission Control Protocol)

- 트랜스포트 계층의 신뢰적 전송을 위한 프로토콜

- 연결지향 프로토콜 (전화와 유사)

- 데이터 송수신 전에 소켓을 통한 연결 필요

- 소켓/포트로 동시에 여러개의 연결을 지원

   * HTTP(80), SMTP(25), POP3(110), FTP(20,21)

- 네트워크 상황에 따라 패킷전송속도 조절도 가능한 유연성을 지님

- 모든 데이터가 안전하게 주고받아야하는 애플리케이션에서 사용

5) UDP (User Datagram Protocol)

- 트랜스포트 계층의 신뢰성없는 전송 프로토콜

- 비연결지향 프로토콜 (편지 배달과 유사)

- 음악, 동영상 스트리밍, 멀티미디어 데이터 전송 등에 적합

- TCP보다는 유연성이 떨어지는 프로토콜이지만, 가볍다


실제 네트워크 프로그래밍을 할때는 TCP, UDP 중에서 어떤 프로토콜을 가지고 통신을 할 것인지 선택할 수가 있습니다. 개발자가 개발하는 프로그램 종류에 따라서 선택되게 됩니다. 멀티미디어 어플리케이션에서는 UDP를 사용한다고 설명하였으나, TCP를 사용하는 경우도 많은 편입니다.



인터넷 애플리케이션 프로토콜


아래는 애플리케이션 레이어에서 표준으로 지정된 주요 프로토콜들입니다. 표준으로 지정되어있기때문에 이 프로토콜 규약만 지키면, 해당 프로토콜을 쓰는 레이어들은 통신이 가능합니다.

1) Telnet

- 원격 컴퓨터 접근 프로토콜 (포트 23)

2) FTP (File Transfer Protocol)

- 파일 전송 표준 프로토콜 (포트 21: 접속관리, 포트 20: 전송)

3) POP3 (Post Office Protocol Version 3)

- 이메일 수신 프로토콜 (포트 110)

4) IMAP (Internet Message Access Protocol)

- 로컬컴퓨터에서 이메일에 접근하기 위한 프로토콜 (포트 143): 받을때

- POP3와 차이 : 제목/송신자만 보고 실제 메일을 로컬로 내려받을지 결정, 서버에 폴더 및 메시지 관리

5) SMTP (Simple Mail Transfer Protocol)

- 메일 송수신 프로토콜 (주로 송신에 이용) (포트 25): 보낼때

6) HTTP (HyperText Transfer Protocol)

- WWW 환경에서 유용한 문서 전송 프로토콜 (포트 80)

- Stateless 프로토콜: 클라이언트가 서버로 접속하여 정보요청하면, 서버는 적절한 응답후 접속 종료.


표준이 아닌 프로토콜들에는 페이스북(회사 자체 제작 프로토콜), SMS, 게임이 대표적인 예입니다.



TCP/IP 스택




애플리케이션 레이어에는 자체 프로토콜을 포함한 상당히 다양한 프로토콜이 존재하는 반면, 전송계층에서는 TCP/IP 두가지 프로토콜만 존재합니다.



각 레이어에서는 패킷에 자신의 레이어에 해당하는 헤더정보를 덧붙이거나 떼는 역할을 하게 됩니다. TCP의 경우는 자신에 해당하는 헤더정보를 붙이게 됩니다. 헤더정보에는 각 레이어들이 수행되야할때 필요한 정보들을 담고 있습니다. 



소켓과 포트


네트워크 프로그래밍을 하게되면 만나게 되는 소켓, 포트에 대한 설명입니다.

1) 소켓

- 애플리케이션에서 네트워크를 위한 통신 채널(애플리케이션과 트랜스포트 레이어 사이 매개)

2) 포트

- 16비트 값으로 애플리케이션의 소켓 식별을 위해 사용

- 1~1023까지 IANA에서 관리(예약된 포트번호 입니다)

- 1~511: FTP,TELNET등 표준 TCP/IP 애플리케이션용

- 512~1023: 운영체제를 위해 예약

- 일반 애플리케이션에서는 1024이상의 포트 사용

네트워크 프로그래밍을 하는 사람의 입장에서 내가 만든 프로그램을 다른사람의 프로그램과 통신을 하게 만들려면, 트랜스포트계층의 TCP, UDP 이용하여야 합니다. 대부분 프로그래밍 API에서는 네트워크 위한 API를 제공합니다. 아때 소켓의 형태로 제공합니다. 소켓 API를 사용하면 트랜스포트 레이어 서비스를 받을 수 있습니다. 




소켓을 이용한다는 말은 즉슨, 트랜스포트레이어 계층의 도움을 받겠다는 의미와 동일합니다. 소켓에는 TCP 소켓과 UDP 소켓이 존재합니다. 


포트를 가지고 소켓 식별이 가능합니다. 포트를 식별한다는 말은 곧 프로세스를 식별한다는 의미가 됩니다. 트랜스포트 레이어에서 데이터를 받으면 어느 프로그램을 가는지를 결정하는데, 각 애플리케이션이 갖고있는 포트를 보고 전달하게됩니다. 애플리케이션은 포트를 열고있으며, 데이터를 주고받기 위해 소켓에 포트번호가 지정되어 있습니다.



보안


1) 방화벽 (Firewall)

- 인터넷에서 각 도메인의 내부 네트워크를 외부 해킹, 바이러스로부터 보호

- 일반적인 방화벽 시스템은 보안 유지를 위한 시스템과 인터넷 사이에 설치되는 프록시 서버로서,

  사전에 등록된 IP 주소만 접근이 가능하도록 관리.

- 방화벽에서 사용하지 않는 서비스의 포트들을 모두 닫아 외부 경로를 최대한 차단.


시스템 관리자가 오픈한 포트 혹은 지정한 IP에 대해서면 요청을 받을 수 있습니다.