Today I Learned

TCP/IP 소켓 프로그래밍(4) 본문

TCP IP

TCP/IP 소켓 프로그래밍(4)

처니형 2022. 8. 16. 20:04

01. TCP/IP 프로토콜 스택을 4개의 계층으로 구분해 보자. 그리고 TCP 소켓이 거치는 계층구조와 UDP 소켓이 거치는 계층구조의 차이점을 설명해보자.

- 인터넷 프로토콜 기반 소켓의 경우, 데이터 전송방법에 따라서 TCP 소켓과 UDP 소켓으로 나뉜다. 특히 TCP 소켓의 경우 연결을 지향하기 때문에 '스트림 기반 소켓'이라고도 이야기한다.

- TCP 소켓이 거치는 계층 구조는 LINK - IP - TCP - APPLICATION 계층순이다.

- UDP 소켓이 거치는 계층 구조는 LINK - IP - UDP - APPLICATION 계층 순이다.

 

 

 

02. TCP/IP 프로토콜 스택 중에서 LINK 계층과 IP 계층이 담당하는 역할이 무엇인지 설명해보자. 그리고 이 둘의 관계도 함께 설명해보자.

LINK 계층

- LINK 계층은 물리적인 영역의 표준화에 대한 결과이다. 이는 가장 기본이 되는 영역으로 LAN, WAN, MAN과 같은 네트워크 표준과 관련된 프로토콜을 정의하는 영역이다.

IP 계층

- IP 계층은 데이터의 전송을 위해 목적지로 데이터를 전송하기 위해서 '어떤 경로를 거쳐갈 것인가?'를 해결하는 계층이다. 이 계층에서 사용하는 프로토콜이 IP(Internet Protocol)이다. 

- IP 자체는 비 연결지향적이며 신뢰할 수 없는 프로토콜이다. 즉, 오류발생(데이터 손실 등)에 대한 대비가 되어있지 않은 프로토콜이 IP이다.

03. TCP/IP 프로토콜 스택을 4개의 계층(또는 7개의 계층)으로 나누는 이유는 무엇인가? 이를 개방형 시스템에 대한 설명과 함께 답해보자.

OSI Layer

- 네트워크는 소프트웨어만 가지고 해결할 수 있는 문제가 아니다. 소프트웨어가 존재하기 전에 하드웨어적으로 시스템이 구축되어 있어야 하고, 그러한 물리적 환경을 기반으로 각종 소프트웨어적인 알고리즘을 필요로 한다.

- 즉, '인터넷을 통한 효율적인 데이터의 송수신'이라는 이슈의 해결을 위해 많은 분야의 전문가가 필요하며, 이들간의 상호 논의로 만들어진 다양한 약속이 필요하다. 따라서 이 문제는 작은 문제로 나눠서 해결하는 것이 효율적이다.

- 문제를 영역별로 나눠서 해결하다 보니 프로토콜이 여러 개 만들어졌으며, 이들은 계층구조를 통해서 상호간에 관계를 맺게 되었다.

개방형 시스템

- 프로토콜을 계층화해서 얻게 되는 장점으로 가장 중요한 것은 표준화 작업을 통한 '개방형 시스템(Open System)'의 설계이다. 표준이라는 것은 감추는 것이 아니라 활짝 열고 널리 알려서 많은 사람이 따르도록 유도한 것이다.

- 랜카드를 예를 들어 설명하자면, 모든 랜카드 제조사가 LINK 계층의 표준을 따르기 때문에 우리는 랜카드를 구매하는데 별 어려움이 따르지 않는다. 이것이 바로 개방형 시스템의 장점이다.

04. 클라이언트는 connect 함수호출을 통해서 서버로의 연결을 요청한다. 그렇다면 클라이언트는 서버가 어떠한 함수를 호출한 이후부터 connect 함수를 호출할 수 있는가?

- listen 함수가 호출되어야 클라이언트는 연결요청을 위해서 connect 함수를 호출할 수 있다(이전에 connect 함수가 호출되면 오류 발생).

05. 연결요청 대기 큐라는 것이 생성되는 순간은 언제이며, 이것이 어떠한 역할을 하는지 설명해보자. 그리고 accept 함수와의 관계도 함께 설명해보자

- listen 함수가 호출되면, 문지기 역할을 하는 서버 소켓이 만들어지고, listen 함수의 두 번째 인자로 전달되는 정수의 크기에 해당하는 대기실이 만들어진다. 이 대기실을 가리켜 '연결요청 대기 큐'라고 한다.

- 서버 소켓은 문지기 역할을 하기 때문에 자리를 비워서는 안된다. 때문에 클라이언트와의 데이터 송수신을 위해서 소켓을 하나 더 만들어야 한다. 이는 accept 함수가 우리를 대신해준다.

- accept 함수는 '연결요청 대기 큐'에서 대기중인 클라이언트의 연결요청을 수락하는 기능의 함수이다. 따라서 accept 함수는 호출성공 시 내부적으로 데이터 입출력에 사용할 소켓을 생성하고, 연결요청을 한 클라이언트 소켓에 연결까지 이뤄진다.

06. 클라이언트 프로그램에서 소켓에 주소정보를 할당하는 bind 함수호출이 불필요한 이유는 무엇인가? 그리고 bind 함수를 호출하지 않았을 경우, 언제 어떠한 방식으로 IP주소와 PORT번호가 할당되는가?

- 클라이언트 소켓의 주소정보는 connect 함수호출 시 자동으로 소켓에 IP와 PORT가 할당된다. 따라서 클라이언트 프로그램을 구현할 때에는 bind 함수를 명시적으로 호출할 필요가 없다.

- 언제? connect 함수가 호출될 때

- 어디서? 운영체제에서, 보다 정확히 표현하면 커널에서

- 어떻게? IP는 컴퓨터(호스트)에 할당된 IP로, PORT는 임의로 선택해서!

'TCP IP' 카테고리의 다른 글

TCP/IP 소켓 프로그래밍(5)  (0) 2022.08.18
TCP/IP 소켓 프로그래밍(3)  (0) 2022.08.09
TCP/IP 소켓 프로그래밍(2)  (0) 2022.08.05
TCP/IP 소켓 프로그래밍(1)  (0) 2022.08.04
Comments