인프런의 파이썬 프로그래밍 강의, 유튜브 강의를 참고하여 정리하였습니다.
네트워크 통신이란?
컴퓨터와 컴퓨터가 연결된 것을 네트워크라고 합니다. 그리고 컴퓨터 간 통신을 네트워크 통신이라고 합니다.
다음 과정을 통해 네트워크 통신이 이뤄집니다.
네트워크 통신과정
- 클라이언트가 서버에 요청을 하면 listner가 듣고 socket으로 넘겨준다.
- 서버는 클라이언트로부터 받은 요청에 대해 작업(데이터 베이스 작업 등..)을 한다.
- 작업 결과물을 다시 클라이언트로 보내준다.
여기서 패킷은 클라이언트와 서버 간 주고받고 하는 데이터 단위를 말한다.
이어서, 통신이 이뤄지기 위해선 몇가지 조건이 필요합니다.
네트워크 통신의 조건
- 컴퓨터 간 네트워크가 연결되어 있어야 합니다. → 당연히 매체가 연결되어 있어야 통신이 가능하겠죠?
- 각 컴퓨터의 주소, 즉 IP가 필요합니다.
- 통신 장치, 즉 소켓 socket이 필요합니다.
네트워크 통신 방식에는 다음 두가지가 존재합니다.
통신 방식
- TCP방식: 송신과 수신을 확인하는 방식 → 잘 전달됐는지 확인해야하기 때문에 통신속도가 UDP보다는 느림
- UDP방식: 송수신을 확인하지 않는 방식 → 상대방이 내 말을 듣든 말든 그냥 내 말만 하는 통신 방식이라고 생각하면 될 것 같네요
프로토콜이란?
다른 컴퓨터이더라도 서로 데이터를 통신하기 위해선 일종의 약속이 필요하겠죠?
프로토콜은 데이터 통신을 원활하게 하기 위해 필요한 통신 규약입니다.
특정 제품끼리만 통신이 가능한 프로토콜을 독점 프로토콜(IPX/SPX, AppleTalk)이라고 하고, 범용적으로 통신할 수 있는 프로토콜을 비독점 프로토콜(TCP/IP)이라고 합니다.
프로토콜의 3요소
프로토콜은 다음과 같은 요소로 구성됩니다.
- Syntax: 규약을 위한 문법이다. 예를 들어 전화번호는 다음과 같은 문법을 따른다. 031- 000-0000
- Semantics: 규약의 문법 대한 의미이다. 예를 들어, 전화번호에서 앞부분(031, 02…)은 지역번호를 의미한다.
- Timing: 두 기기 간 통신 순서와 속도를 제어하는 규정이다.
프로토콜의 기능
프로토콜은 다음과 같은 기능들을 제공합니다.
- 단편화와 재조립
너무 많은 데이터가 있을 경우, 패킷 단위로 잘라서 보내는 것을 단편화라고 한다.
데이터를 받는 기기에서 단편화된 데이터인 패킷을 다시 조립하는 것을 재조립이라고 한다.
- 캡슐화
데이터를 캡슐처럼 감싸는(제어정보 header를 부착하는) 기능이다. 데이터가 어떤 종류이냐에 따라서 캡슐화의 방식이 달라진다.
캡슐화를 하는 첫 번째 이유는 데이터가 손상되지 않게 하기 위해, 즉 데이터의 안정성을 보장하기 위함이다.
두 번째 이유는 데이터를 보안하기 위함이다. → 데이터가 그대로 드러나있는 것 보다는 포장되어 있는 것이 더 안전하겠죠?
- 연결 제어
연결형과 비연결형 통신을 제어하는(통신로를 개설, 유지, 종결하는) 기능이다.
연결형은 정보를 주고받는 기기 간 연결이 되어있어야 통신이 가능한 타입이다. 예로 ‘전화’를 들 수 있는데, 전화는 상대방이 전화를 받아야 내가 정보를 전달할 수 있는 구조이므로, ‘전화’는 연결형 통신이다.
반대로 비연결형은 기기 간 연결이 되어있지 않아도 통신이 가능한 타입이다. 예로 ‘편지’를 들 수 있는데, 편지는 전화와 달리 정보를 보내고픈 상대방과 연결이 되어있지 않아도 일방적으로 정보를 보낼 수 있다. 따라서 ‘편지’는 비연결형 통신이라고 볼 수 있다.
- 흐름 제어
데이터 양이나 통신속도 및 흐름이 수신 측의 처리 능력을 초과하지 않도록 제어하는 기능이다.
통신 역시 데이터를 주고받는 기기 간 속도가 맞아야한다. 한 쪽이 통신 속도가 빠르고, 다른 쪽이 통신 속도가 느리면 데이터의 흐름이 정상적이지 않을 것이다.
따라서 한 쪽이 느리면 다른 쪽도 느리게 통신하도록 맞추거나, 혹은 빠른 쪽이 데이터를 한번 보내고 느린 쪽이 처리를 끝낼 때까지 기다리거나 하는 등의 방식을 통해 흐름을 제어할 수 있다.
- 오류 제어
데이터 전송 중 발생하는 오류를 검출하고 정정하는 기능이다.
데이터가 손실되었을 경우 다시 보내달라고 요청하거나, 수신자가 직접 수정하는 방식 등을 통해 오류를 제어할 수 있다.
- 동기화
두 통신 객체의 상태(시작, 종료 등)를 일치시키는 기능으로, 동기식과 비동기식이 존재한다.
동기식 동기화는 시간대를 맞추는 동기화로, 지정된 시간에 맞춰 객체 간 상태를 동기화를 하는 방식이다.
비동기식 동기화는 데이터가 들어오는 순서대로, 즉 데이터 중심으로 동기화하는 방식이다.
- 주소지정
발생지, 목적지와 같은 주소를 명기해 데이터를 정확히 전달하는 기능이다.
캡슐화할 때 붙이는 제어정보에 주소를 붙인다. 즉 택배에 송장을 붙이는 것 처럼, 데이터에 IP주소 혹은 mac주소를 붙여서 주소를 명기한다.
- 다중화
하나의 통신로를 여러개로 나누거나, 혹은 여러개의 통신로를 하나의 통신로로 변환시켜 다수의 노드가 동시에 통신로를 사용할 수 있도록 하는 기능이다.
도로를 생각해보자. 하나의 도로를 하나의 자동차가 온전히 소유하여 다니는 경우는 없다. 일반적으로는 여러 대의 자동차가 하나의 도로를 공유하게 된다. 이처럼 네트워크 통신에서도 한 채널(도로)을 여러 노드(자동차)가 공유하는데, 이를 가능토록 해주는 것이 다중화 기능이다.
프로토콜의 종류
계층 | 프로토콜 | 설명 |
---|---|---|
Application | HTTP | WWW 상에서 주고 받는 프로토콜로, 주로 웹 상에서 html 문서 및 페이지를 주고 받는데 쓰인다. 80포트를 사용한다. |
HTTPS | HTTP의 보안 강화버전이다. SSL이나 TLS프로토콜을 통해 세션을 암호화 및 강화하며 443포트를 이용한다. | |
FTP | TCP/IP프로토콜을 이용해 서버와 클라이언트 간 파일 전송을 담당하는 프로토콜이다. | |
Telnet | 인터넷 또는 로컬에서 연결을 위해 쓰이지만, 보안 문제로 현재는 SSH로 대체되고 있다. | |
SMTP | 인터넷 환경에서 이메일을 보내기 위해 사용되며 25번 포트를 이용한다. SMTP를 이용해 메시지를 받고 TCP를 이용해 전송하는 방식을 사용한다. | |
Transport | TCP | 통신, 인트라넷과 같이 인터넷 환경이 가능한 컴퓨터 환경에서 실행되는 애플리케이션 정보를 세션 연결 하에 에러 없이 전송한다. 전송 도중 세션 연결이 끊어지면 전송하는 데이터 정보를 받아볼 수 없다. 주로 안정성이 요구되는 애플리케이션에서 사용된다. |
UDP | 데이터 교환을 위해 사용되며 별도 세션 연결 없이 전송된다. 따라서 오류 제어가 지원되지 않아 안정성이 요구되지 않는 애플리케이션(실시간 전송 등)에서 주로 사용된다. | |
Presentation | ASCII, MPEG, JPEG, MIDI | |
Session | NetBIOS, SAP, SDP, NWLink | |
Network | IP, IPX | |
Data Link | Ethernet, Token Ring, FDDI, Apple Talk |
Uploaded by N2T