본문 바로가기

CS 과목(CS科目)/네트워크(ネットワーク)

Socket(소켓), Port(포트) 는 TCP/IP Stack 발명 과정에서 탄생

네트워크 모델에는 대표적으로 아래 2개가 있다. 

1. OSI 7 Layer : [개념적인] 모델!!

2, TCP/IP Stack : OSI 7 Layer를 바탕으로 실제로 구현되어서, 인터넷에서 사용되고 있는 Protocol.

-> TCP,UDP는 TCP/IP Stack의 transport layer에 속한 개념이고, IP는 internet layer에 속한 개념이다. 

 

- TCP/IP는 크게 2개의 Level로 분리 가능-

 

시스템 레벨 : OS, 하드웨어 등의 Level이며, Application에서 만약 네트워크를 [사용]하려고 할 때, 네트워크 기능을 [지원]

하는 역할

애플리케이션 레벨 : 네트워크 기능을 [사용]하는 레벨(OS,네트워크 카드 등으 하드웨어가 그 사용을 [지원]한다)

 

- 포트(Port) -

위와 같이 하나의 프로세스가 있다고 하자. 

이 프로세스는 네트워크 기능을 [사용]하여, 다른 인터넷 상의 노드와 통신을 하고 싶어 한다. 

이떄에, 프로세스에서 보내고 싶어 하는 데이터를 보내는 소위 [데이터 통로]가 필요하다. 

그래야지 그 데이터를 시스템 레벨로 흘려 보내서, 시스템이 [지원]하는 네트워크 기능을 [지원]받아 데이터를 송/수신

할 수 있기 때문이다.

이와 같이 프로세스와 연결된 data path, data channel을 Port라고 한다.

(port는 8080과 같이, 숫자가 아닌가? 라고 생각을 할 수 있지만, 개발될 당시의 Port의 뜻은 위와 같다.

뒤에서 port의 의미에 대해서 정확히 설명할 거임)

 

OS는 각 Port를 식별하기 위하여 port에 naming을 한다(이게 port number ) 

그러나 이 naming은 OS마다 달랐다.(지금은 아니다)

 

물론 위와 같이 하나의 프로세스에 2개 이상의 Port개 붙을 수 있다. .

그러나 설명을 위해 하나의 프로세스에는 하나의 Port가 붙는다고 가정하고 설명을 하겠다.

 

TCP(Transmission Control Protocol)의 탄생

TCP/IP Stack이 없었던 옛날이나 지금이나, 시스템 레벨의 internet protocol은 데이터를 [신뢰]할 수 없없다. 

1. 목적지에 데이터가 이동하는 중에 데이터 손실

2. 패킷의 순서가 섞이는 경우

- > 1,2의 경우, 전송된 데이터가 원본 데이터와 같다는 그 어떠한 보장이 안 된다 

그래서, Process 간 통신에 있어서 [신뢰]할 수 있는 데이터 통신 프로토콜이 필요했는데,

그것이 바로 Transmission Control Protocol(TCP)이다. 

TCP는 internet layer 위인 transport layer의 Protocol이다. 

(TCP Connection : 두 호스트의 Connection을 열기 위한 3-way, 데이터 전송, 두 호스트의 Connectino을 닫기 위한 4-way

Connection-Oriented : 위와 같이 Connectino을 기반으로 데이터를 주고 받고 하는 것)

 

Q. 호스트에서 다른 호스트의 프로세스에 데이터를 보낼 때,어떻게 하면 Port를 UNIQUE하게 식별을 할 수 있을까?라는

의문이 생긴다. 

호스트와 호스트 사이에는 수많은 노드들이 있고, 그 노드들 안에도 수많은 프로세스와 수많은 포트가 존재할 것이다. 

어떻게 하면, 목적지 호스트의 Port를 유니크하게 식별하여 오류없이 제대로 된 곳으로 데이터를 보낼 수가 있을까?

(참고로 옛날에는 os마다 port를 식별하는 방법이 달랐으나, 현재는 port를 식별하는 방법을 통일을 하였다.)

사전 지식

1. port(number)은 16비트 구성 : 0~65535

->number에 ()를 친 이유는, port number라고도 부르지만, 그냥 port라고도 부를 떄가 있기 떄문이다. 

그래서 우리가 port라는 용어를 들었들 때, data-path로써의 port와 port number로써의 port인지 맥락을 잘 파악해야 한다. 

2. port (number)만으로는 port(data-path로서의 port)를 유니크하게 식별하기가 어렵다

-> 65535까지밖에 표현을 못한다. 

3. IP(Internet Address라고 당시에는 불렀다고 함)

-> 각 호스트를 유니크하게 식별 가능 

Solution : [IP Address] + [Port Number]로 data-path로서의 Port를 유니크하게 식별하도록 개발!!

이게 바로 Socket이다.

Socket [IP Address] + [Port Number]이며, 인터넷 상의 Port(data-path)를 유니크하게 식별하는 [주소]

(고로, Socket은 인터넷 상에서 유니크한 주소여야 한다)

 

TCP Connection과 Socket의 관계

TCP Conncetion은 [한 쌍]의 Socket으로 만들어지며, 유니크하게 식별이 된다. 

-> 컴퓨터의 시스템 레벨에서는 안정적인 데이터 전송을 위하여 TCP Connection을 유니크하게 식별할 수가 있어야지만

하나의 작업 단위를 하나의 Connection을 통해 데이터 송/수신을 하여 해결할 수가 있다. 

시스템 레벨이 Connectino을 유니크하게 식별하는 방법은 해당 컴퓨터의 [IP Address + Port Number],

즉 [한 쌍의] Socket을 하나의 Connectino의 식별자로 보는 것이다. 

즉, TCP Connection == [한 쌍의]Socket 주소

ex) A Connectino == <src_IP,src_Port, dest_IP, dest_Port>

참고로, 한 쌍이 아닌, [하나]의 socket은 동시에 여러 connection들에서 사용될 수 있다. 

예를 들어, 위 그림의 오른쪽 컴퓨터에 또 다른 제3의 컴퓨터가 TCP Connectino을 맺어야 한다고 하자. 

(우리는 보통, 2개 이상의 컴퓨터로부터 데이터를 전달 받는다)

이때, 그 둘 컴퓨터 사이에 Conncetino을 만들어야 하는데, 그러기 위해서는 

오른쪽 컴퓨터의 Socket 주소가 필요하다. 

즉, 어떤 하나의 Sokect은 여러 Connectino에 의해 사용될 수가 있다 

 

그러나 이후에, 자연스럽게 사람들이 UDP에서도 Socket 개념을 사용하기 시작!

고로, TCP에서만 Socket을 사용하던 시절에는

Socket : <IP,Port>였지만, 

TCP뿐 아니라 UDP에서도 Socket을 사용하는 현재는

Socket : <Protocol,IP,Port>로 정의가 된다.