kakasoo

[TCP/IP] TCP/IP 프로토콜 스택 (2) 본문

프로그래밍/네트워크

[TCP/IP] TCP/IP 프로토콜 스택 (2)

카카수(kakasoo) 2020. 7. 15. 16:08
반응형

오늘은 여기까지...

 


 

 

LINK 계층부터 차례대로 올라가면서 이야기를 해보도록 하자.

LINK 계층은, 물리적인 영역의 표준화에 대한 결과라고 한다, 이는 가장 기본이 되는 LAN,WAN,MAN 을 의미한다.

우리가 랜선 랜선 하는 그 랜, 즉 물리적인, 소프트웨어가 아닌, 하드웨어적인 연결을 의미한다.

(꼭 하드웨어라고 할 수는 없겠다, 노트북은 무선으로도 망에 연결되어 사용되긴 하니까, 어쨌든 망을 의미한다.)

망이 연결되었다면, 이제 우리는 IP 계층에 접근할 수 있다.

 

IP 계층에서 우리는 이제 데이터를 송신할 수 있게 된다, 그런데 우리가 앞서 서버와 클라이언트 소켓을 만들며 경험했던 것과 같이, 해야 할 작업들이 있다.

IP에서 세부적인 프로토콜을 정해줄 필요가 있다, 이 과정에서 우리는 IPv4를 선택한 것이고,

 

TCP/UDP 계층에서 우리는 데이터를 전송만 하면 된다, 여기서 어떤 방법으로 데이터를 전송할 것인가에 따라 TCP와 UDP로 나뉜다는 이야기를 앞전에 한 바 있다.

데이터를 하나의 묶음으로서 생각하고 연결지향적인 전송을 한다면 TCP, 비 연결지향적인 전송을 한다면 UDP 였다.

당연히 TCP가 신뢰성 있는 데이터의 전송을 담당한다.

자세하게 이야기해보자.

IP에서는 오로지 하나의 데이터 패킷 (데이터 전송의 기본 단위)이 전송되는 과정에만 중심을 두고 있다.

만약 여러 개의 데이터 패킷이 전송된다면 전송의 순서와, 확실성에 대해서 신뢰할 수 없게 된다.

TCP는 이런 것을 방지하고자, 만들어진 데이터 전송 방법인데, 각 호스트 간에 전송 여부를 확인하는 것을 의미한다.

 

연결지향형의 경우는 중간에 데이터를 소멸시키지 않고, 전송 순서대로 수신되며, 데이터의 경계가 존재하지 않는다.

이미 우리가 hello 라는 메세지를 전송하는 코드를 보았을 텐데,

말하자면 char data[] = "hello, world!" 라는 데이터를 전송했을 때 배열 자체를 전송하고 버퍼를 통해 읽는 셈이다.

따라서 다시 특징을 볼 때, 전체 데이터를 보냈으니 소멸될 것이 없을 것이고, 차례대로 읽힐 것이며, 경계도 없다.

(소켓에는 자체적으로 버퍼가 존재한다, 버퍼가 가득찰 경우에는 송신을 멈추기 때문에 데이터 손실이 없다.)

 

앞서 위와 같이 설명한 적이 있다. (물론 내가 설명한 거다, 책을 읽고 내가 이해한 대로.)

이번에 말하는 연결은, 데이터 간의 연결을 구현하기 위한, 호스트 간의 연결이라고 생각하면 좋을 거 같다.

A에서 B로 전달한 데이터 패킷이 제대로 전달되었는지, B에서 확인하여 알려준다,

만약 전송되지 않았음을 확인한다면 다시금 재 전송을 요청한다.

정리하면, TCP와 UDP 모두 데이터 전송 방식을 약속한 것이며, 이 과정에서 TCP는 확인 절차를 포함시킨 프로토콜이다.

(여담이지만, TCP와 UDP를 한 PORT에 동시 구현도 가능할 것이다.)

 

마지막 APPLICATION 계층.

프로그래머가 소켓을 다루는 과정에서 발생하는 새로운 데이터 송신 규약, 약속 등을 통칭하는 말이다.

대부분의 네트워크 프로그래밍은 APPLICATION 프로토콜의 설계 및 구현이 상당 부분을 차지한다고 한다.

반응형