과목명 : 컴퓨터 통신(Computer communication)
수업일자 : 2022년 09월 05일 (월)
1. TCP/IP Protocol structure
- 인터넷을 통해 통신을 수행하는 개체는 크게 호스트(Host)와 라우터(Router)로 나눌 수 있습니다.
- 호스트(Host)는 최종 사용자(End-user)의 응용 프로그램을 수행하는 주체가 되며, 라우터(Router)는 호스트에서 생성된 데이터를 여러 네트워크를 거쳐 전송함으로써 서로 다른 네트워크에 속한 호스트 간에 데이터를 교환할 수 있게 하는 장비입니다.
- 라우터 - 라우터, 호스트 - 호스트가 통신하기 위해선 정해진 규칙과 절차를 지켜야 하는데 이를 통신 프로토콜(Communication protocol)이라고 합니다.
- 인터넷에서 사용하는 핵심 프로토콜은 TCP/IP로, 이를 비롯한 여러 프로토콜을 총칭하여 TCP/IP 프로토콜이라고 부릅니다.
1-1. 네트워크 접근 계층(Network access layer)
- 물리적 네트워크를 통한 실제 데이터 송, 수신을 담당하며 구성 요소로는 물리적인 신호를 처리해 데이터를 송, 수신하는 네트워크 하드웨어와 OS가 제공하는 장치 드라이버가 존재합니다.
- 네트워크 접근 계층에서는 하드웨어적으로 정의된 물리 주소(Physical address), 즉 이더넷 주소(Ethernet address)를 사용합니다.
1-2. 인터넷 계층(Internet layer)
- 인터넷 계층은 네트워크 접근 계층의 도움을 받아 데이터를 목적지 호스트까지 전달하는 역할을 담당하게 됩니다.
- 네트워크 접근 계층처럼 주소를 지정하는 방법이 요구되며 해당 계층에서는 하드웨어의 물리 주소 대신, 소프트웨어적으로 정의된 논리 주소인 IP 주소(Internet protocol address)를 사용합니다.
- 네트워크 접근 계층의 물리 주소와 무관한 단일 주소를 지정하는 IP 주소의 특성과 하드웨어 독립성 덕분에 TCP/IP 프로토콜은 다양한 네트워크 인프라에서 작동할 수 있으며 이를 통해 전세계적인 네트워크인 인터넷(Internet)이 생길 수 있었습니다.
- IP 주소는 통신에 참여하는 각 호스트들을 구분지을 수 있는 방법을 제공하지만 실제 통신을 하려면 전송 경로를 결정하고 그에 따라 데이터를 전달하는 절차가 필요한데 이를 라우팅(Routing)이라고 합니다. 라우팅(Routing)은 데이터를 목적지까지 최적의 조건을 이용하여 전달하는 방법을 가리키는 용어입니다.
1-3. 전송 계층(Transport layer)
- 최종 통신 목적지를 지정하고 오류 없이 데이터를 전송하는 역할을 담당하는 계층입니다.
- 데이터 통신의 최종 목적지는 목적지 호스트가 아닌, 해당 호스트에서 실행되고 있는 실행 중인 프로세스이므로, 전송 계층에서는 이에 알맞는 프로세스를 지정할 수 있는 주소 체계를 이용하는데, 이를 포트 번호(Port number)라고 합니다.
- 인터넷 계층의 IP가 제공하는 전송 서비스는 최선을 다하지만 신뢰성은 떨어진다(Unreliable)는 특징을 가지고 있습니다. 이에 따라 데이터에 문제 발생 시, 목적지까지 데이터가 도달하지 못하거나, 데이터의 내용이 손상되거나 소실되는 등의 상황이 발생할 수도 있습니다. 이러한 이유 때문에 전송 계층에서는 데이터의 손실, 또는 손상 여부를 검사하여 잘못된 데이터가 목적지까지 도달되는 일을 방지합니다.
- 전송 계층에 해당하는 TCP/IP 프로토콜로는 크게 TCP(Transmission Control Protocol), UDP(User Datagram Protocol)이 존재하며 특징을 표로 정리하면 아래와 같습니다.
TCP(Transmission Control Protocol) | UDP(User Datagram Protocol) |
연결형(Connection-oriented, CO) 방식의 Protocol - 연결 설정 후 통신 가능 |
비연결형(Connectionless, CL) 방식의 Protocol - 연결 설정없이 통신 가능 |
신뢰성 있는(Reliable)한 데이터 전송 - 데이터를 재전송할 수 있다. |
신뢰성 없는(Unreliable) 데이터 전송 - 데이터를 재전송하지 않는다. |
일대일 통신(Unicast) | - 일대일 통신(Unicast) - 일대다 통신(Broadcast, Multicast) |
데이터 경계를 구분하지 않는다. - 바이트 스트림(Byte-stream) 서비스 |
데이터 경계를 구분한다. - 데이터그램(Datagram) 서비스 |
< 표 : TCP, UDP Protocol의 특징 >
1-4. 응용 계층(Application layer)
- 응용 계층은 전송 계층을 기반으로 한 다수의 프로토콜(Telnet, FTP, HTTP, SMTP 등)과 이 프로토콜을 사용하는 응용 프로그램을 포함합니다.
- 이번 과목에서 다룰 소켓 프로그래밍(Socket programming)을 이용한 네트워크 프로그램도 응용 계층에 속하는 프로그램입니다.
2. 데이터 전송 원리
- 송신 측 호스트의 프로세스가 보내는 데이터를 수신 측 프로세스에게 전달하려면, 각 프로토콜에서 정의된 제어 정보(IP 주소, 포트 번호, 오류 체크 코드 등)가 필요합니다 제어 정보는 앞쪽에 붙는 헤더(Header)와 뒤쪽에 붙는 트레일러(Trailer)로 나뉩니다.
- 데이터는 이러한 제어가 정보된 결합된 형태로 전송되며 이를 패킷(Packet)이라고 합니다.
- 인터넷에 연결된 두 호스트가 TCP/IP 프로토콜을 이용하여 데이터를 교환하는 경우 패킷의 전송 형태는 송신 측 프로세스에서 보낸 데이터가 모든 계층을 지나면서 헤더 또는 트레일러 형태의 제어 정보가 덧붙어서 패킷이 생성됩니다. 이러한 과정을 캡슐화(Encapsulation)라고 합니다.
- 이 패킷이 수신 측에 도달하면 모든 계층을 지나면서 헤더 또는 트레일러 형태의 제어 정보가 제거되고 최종적으로 수신 측 프로세스가 데이터를 전달받게 됩니다. 이러한 과정은 역캡슐화(Decapsulation)라고 합니다.
- 이러한 특징 때문에 각 계층은 동일한 위치의 상대편 계층과 통신하는 것으로 간주할 수 있고 따라서 응용 프로그램을 위주로 개발하는 개발자는 주고받을 데이터의 형태에 집중하여 구현하고, 나머지는 운영체제가 제공하는 프로토콜이 처리할 수 있습니다.
3. IP 주소(Internet Protocol Address), 포트 번호(Port number)
- TCP/IP 프로토콜을 이용해 통신할 때는 IP 주소와 포트 번호를 사용합니다. 라우터가 라우팅을 하는 과정에선 IP 헤더에 포함된 수신자의 IP 주소를 사용하며 데이터를 받은 쪽에서 답장을 보낼 때는 IP 헤더에 포함된 송신자의 IP 주소를 사용하게 됩니다.
- 이러한 IP 주소는 인터넷에 존재하는 호스트을 유일하게 구분할 수 있는 체계이지만 통신의 최종 주체인 호스트에서 실행되고 있는 프로세스는 식별할 수 없는 문제를 가지게 됩니다. 따라서 최종 종착지인 프로세스를 구분하기 위해 포트 번호를 사용합니다.
- 단, 한 프로세스가 여러 개의 포트 번호를 사용하거나 둘 이상의 프로세스가 하나의 포트 번호를 이용하는 특성상, 포트 번호가 프로세스를 구분하는 식별자라기보다는, 하나 또는 둘 이상의 여러 프로세스를 나타내는 식별자로 보는 것이 일반적입니다.
4. 클라이언트(Client) - 서버(Server) Model
- 네트워크를 기반으로 하는 프로그램은 일반적으로 클라이언트-서버 모델(Client / Server model)로 작성하게 됩니다.
- 서비스를 요청(Request)하는 쪽이 클라이언트(Client), 클라이언트의 요청에 대한 서비스를 처리하는 쪽을 서버(Server)라고 합니다.
- 클라이언트가 서버에 접속하려면 서버의 IP 주소(또는 도메인명), 포트 번호를 알고 있어야 하나, 서버는 클라이언트의 주소를 알 필요가 없습니다. 클라이언트가 서버에 접속하기 위해 보낸 패킷의 정보에 클라이언트의 주소 정보가 모두 담겨있기 때문에 서버는 이 정보를 이용해 언제든지 해당 클라이언트에 데이터를 전송할 수 있습니다.
5.소켓(Socket)의 정의
- 소켓(Socket)은 컴퓨터 네트워크를 경유하는 프로세스 간 통신의 종착점입니다.
- 포트 번호(Port number)와 개념이 헷갈릴 수 있는데, 포트 번호는 네트워크를 통해 데이터를 주고받는 프로세스를 식별하기 위해 호스트 내부적으로 프로세스가 할당받는 고유한 값이며 만약 데이터가 정상적으로 호스트까지 도달했고 해당 데이터의 포트 번호가 8080이라면 해당 호스트에서 8080 포트를 할당 받은 프로세스를 찾아서 데이터를 해당 프로세스에게 전달하게 됩니다.
이에 대비되어 소켓은 프로세스가 네트워크를 통해서 데이터를 주고받으려면 반드시 열려있어야 하는 창구와 같은 개념으로 볼 수 있습니다.
- 송신 측, 수신 측 모두 소켓이 열려있어야 데이터를 전달할 수 있으며 최종 호스트까지 데이터가 도착한 상황에서 포트 넘버를 확인하여 해당 프로세스에게 데이터를 전달하는 과정에서 수신 측 프로세스도 소켓이 열려있어야 데이터를 전달받을 수 있습니다.
- 학부에서 수강했던 전공 수업 내용을 정리하는 포스팅입니다.
- 내용 중에서 오타 또는 잘못된 내용이 있을 시 지적해 주시기 바랍니다.
'전공 수업 > 컴퓨터 통신(Computer Communication)' 카테고리의 다른 글
[6주 차] - 도메인 이름 시스템과 이름 변환 함수, DNS 서비스의 클라이언트 동작 원리 (2) | 2022.10.04 |
---|---|
[5주 차] - Windows 소켓 주소 구조체 (1) (2) | 2022.09.27 |
[4주 차] - Windows 소켓 시작하기 (0) | 2022.09.19 |
[3주 차] - Windows 소켓, 간단한 서버 소켓 프로그램 작성 (0) | 2022.09.12 |
[1주 차] - 수업 개요 (0) | 2022.08.30 |
댓글