개인/리눅스

프로토콜의 기능과 TCP/IP 구조

OmeGa2 2020. 2. 1. 18:00

프로토콜은 무엇일까?

컴퓨터들은 상호간에 통신을 하기 위해서 미리 정해놓은 규칙이 있다. 서로 무작위로 통신하기 된다면 데이터를 서로 전달하면서 손실이 발생하거나 제대로 전달받더라도 읽어들이지 못하는 등 여러 문제가 생길 수 있다.

 

컴퓨터 상호간의 데이터를 원활하게 주고 받을 수 있도록 정해놓은 규칙을 통신규약이라고 한다. 통신규약에는 접속방식이나 데이터의 전달방식 및 자료의 형식과 전송속도 등을 포함한다.

 

 

프로토콜의 구성요소

▶ 구문 : 데이터의 구조나 형식

▶ 의미 : 전송의 조작이나 오류제어 등 제어정보

▶ 순서 : 메시지의 통신속도나 순서제어

통신 프로토콜에서 기본적인 구성은 세 가지로 구분할 수 있다. 구문에서는 데이터의 구성이 어떻게 되어있는지와 코딩방법이나 신호레벨 등 데이터 자체의 형식을 말한다. 의미부분에는 데이터를 구체적으로 제어하기위한 방법이나 처리방법 및 에러발생시 대처법과 같은 정보가 포함된다. 순서는 말그대로 데이터를 주고받을 속도제어와 순서를 관리한다.

 

 

 

프로토콜의 기능

두 매체가 서로 통신하기위한 프로토콜에는 종류가 많으며 각자 하는 역할과 기능이 다양하다. 그 중 대표적으로 사용되는 프로토콜의 기능 몇가지만 알아보려고 한다.

 

 

① 주소지정

컴퓨터가 다른개체로 데이터를 전송할 경우 상대방의 주소를 알아야한다. 주소지정방식에는 대표적으로 IP가 있다. IP는 네트워크에서 다른 개체를 식별하기 위한 주소를 부여하고 사용자가 별도로 변경할 수 있다.

 

 

 

② 순서지정

프로토콜의 기본요소 중 하나로, 데이터단위 (패킷이나 세그먼트)의 통신을 할 때 전송순서를 명시한다. 만약 전송시 오류가 발생할 경우 해당 데이터가 뭔지 구분할 수 있으며 전체적인 흐름제어를 할 때에도 사용한다.

 

 

 

 

③ 단편화와 재조립

데이터를 전송할 때 용량이 커서 한번에 보내기 힘든 경우에 사용한다. 이 경우 대용량 파일의 패킷을 일정크기로 분할해서 전송한 후 수신측에서 원래대로 합치는 방식으로 전달한다.

 

 

 

④ 흐름제어

송신측에서 전달된 데이터의 양이나 속도를 제어하는 기능이다. 수신측에서 허용할수 없는 용량의 데이터를 보낼경우, 데이터 손실이나 오류 등 여러 문제점이 생길 수 있다.

 

이를 방지하기위해 흔히 사용하는 두 가지 방법이 있다. 송신측에서는 전송을 멈추고 수신측의 응답을 기다리는 [정지-대기] 방식이나, 수신측에서 한번에 허용할 수 있는 용량을 미리 물어보는 [슬라이딩윈도우] 방식을 사용한다.

 

 

⑤ 오류제어

데이터 교환시 발생하는 오류를 확인하는 기능이다. 보통 패리티비트 방식으로 오류를 검출하며 오류가 발견되어 처리되는 방식으로는 오류가 발생한 부분만 송신측에 재전송을 요청하거나, 수신측에서 직접 오류를 복구할 수도 있다.

 

 

⑥ 연결제어

데이터를 전송할 때는 연결 / 비연결 두 가지 방식을 사용한다.

연결형 방식에는 TCP가 주로 사용되며 연결 후 지속적인 통신이 일어나고 수신측와 응답을 주고받기 때문에 순서가 보장된다. 반면, 비연결방식으로는 UDP가 사용되며 수신측의 응답을 받지않고 수신측에서 일방적으로 데이터를 전송한다. 

 

 

⑦ 동기화

데이터를 주고받는 두 매체가 전송시 타이머나 인자값 등 자원을공유하는 것이다. 예를들면 동기화된 두 매체가 서로의 데이터나 인자값을 일치시킨다. 이후 한쪽의 데이터를 삭제한 뒤 다시 동기화를 이루면 반대쪽에도 데이터가 지워진다.

 

 

⑧ 캡슐화

프로토콜에서 캡슐화는 데이터를 전송하기 전 OSI 각 계층에서 송수신자의 주소나 오류검출코드 등 러 제어정보를 덧붙이는 것을 말한다. 데이터를 전송하면 OSI 최상위 계층인 응용계층에서 물리계층까지 내려오면서 필요한 제어정보를 추가한다.

 

 

 

프로토콜 번호

자주 사용되는 프로토콜은 번호를 지정해서 구분한다.

시스템이 전송 프로토콜에 대한 인식을 하기위해 데이터를 송신할 때 사용된 관련 프로토콜들은 번호를 사용해서 적어보낸다. 또한 프로토콜은 응용프로그램을 서로 구분하기 위해 포트번호를 사용한다. 리눅스에서 사용하는 프로토콜 번호는 /etc/protocols 에서 확인할 수 있다.

 

 

포트번호

▶ 20번 : FTP-data 전송

▶ 21번 : FTP 제어

▶ 22번 : SSH

▶ 23번 : telnet

▶ 53번 : DNS 서비스에서 사용

▶ 80번 : HTTP에서 사용

▶ 110번 : POP3

▶ 143번 : IMAP

▶ 443번 : HTTPS

응용프로그램에서 전송되는 데이터들은 각각 포트를 할당받아 데이터를 주고받는다. 번호로 관리되는 포트는 0~65535번까지 사용된다. 특히 주요 포트번호들은 0~1023번 사이에 지정되어 있어 시스템에서 사용하고 있다.

 

사용자가 다른 매체에 원격으로 접속할 때 22번 SSH프로토콜을 사용하며 FTP로 파일을 주고받을 때는 21,22번 두 개를 모두 사용한다. 우리가 사용하는 브라우저로 www에 접속할 때는 80번 HTTP를 사용하며 최근에는 보안이 강화된 443번 HTTPS를 사용하기도 한다.

 

 

소켓(Socket)이란?

네트워크에서 컴퓨터들이 연결되어 통신하기위해 중간지점인 접점이 생긴다. 이 접점은 인터넷 프로토콜이나 IP주소 와 포트번호 등으로 구성되어 소켓이라고 불린다. 프로그램은 데이터를 주고받기 위해 소켓을 생성하고 데이터를 교환하기 위한 통로로 사용한다.

 

 

 

 

 

 

TCP/TP 프로토콜

우리의 컴퓨터는 각자 IP주소를 할당받아 인터넷을 사용해서 데이터를 주고받는다. 이때 가장 많이사용하는 프로토콜은TCP/IP라고 하며 TCP와 IP의 합성어이다. 인터넷 프로토콜중 가장 중요한 역할을 하며 컴퓨터 기종에 관계없이 정보교환이 가능하도록 만들어주는 프로토콜이다. 

 

TCP의 역할은 IP에 의해 만들어진 패킷의 전송흐름을 담당하는데 패킷이 올바른 목적지로 가도록 제어하며 중간에 유실되지 않도록 한다. IP는 전송하려는 자료를 패킷으로 나누고 목적지 주소를 지정한 뒤 운반한다. 

▶ TCP/IP : 기종에 관계없이 정보교환을 가능하게 만드는 프로토콜

▶ TCP 의 역할 : 패킷의 전송흐름 담당

▶ IP의 역할 : 자료의 운반

 

 

TCP/IP 의 4계층

▶ 응용계층    : HTTP, SMTP, POP3, IMAP 등

▶ 전송계층    : TCP, UDP 등

▶ 인터넷계층 : IP, ICMP, ARP 등

▶ 네트워크 인터페이스 계층 : 이더넷, 토큰링 등

가장아래 네트워크 인터페이스 계층에서는 물리적인 장비에 프레임을 올리는 역할을 한다. 상위계층에서 받은 패킷을 프레임으로 만들어 물리적인 회선에 올리면 수신측에서 데이터를 받아 패킷으로 변환해서 상위계층으로 전달한다.

송신(상위계층 → 네트워크 인터페이스) ▶ 물리장치 ▶ 수신(네트워크 인터페이스 → 상위계층)

 

 

인터넷 계층에서는 상위계층에서 받은 패킷을 목적지로 전달하는 역할을 주로 처리하며 패킷의 손상여부는 상위계층에서 처리한다. 인터넷계층의 ARP 프로토콜은 필요할 떄 목적지의 주소를 찾으며, IP프로토콜이 패킷의 분할,조립을 통해 전송하는 역할을 수행한다.

 

전송계층은 응용계층의 데이터를 받아 세그먼트로 만들어 수신자에게 전달한다. 데이터를 전송할 때 연결/비연결 두 가지 방식이 있으며 필요에 따라 흐름제어, 다중화와 같은 서비스를 제공하기도 한다. 연결지향 전송방식에는 TCP를 사용하며 연결된 두 매체는 서로 신호를 주고받으며 안정성있는 데이터 전송이 이루어진다. 반면 비연결지향 전송방식에는 UDP가 주로 쓰이는데 신호를 목적지에 전송하기만 하고 무사히 전달되었는지 확인하거나 오류수정은 하지않는다.

 

응용계층은 연결된 프로세스간의 통신이 이루어지며 주로 사용자의 프로그램에서 사용된다. 전송계층의 프로토콜을 이용해서 사용자간의 연결을 확보하고 파일을 전달하거나 원격접속 및 메일 송수신 등 다양한 서비스가 이루어진다.