본문 바로가기

ComputerScience/Network

[Network] 프로토콜 표준 스펙에서 정의한 Socket(소켓), Port(포트), TCP connection(연결) 개념

OSI 7 Layer, TCP/IP Stack

  • 네트워크 모델은 OSI 7 레이어와 TCP/IP 스택 두 가지로 구성되는데, TCP/IP 스택은 인터넷에서 실제 사용되는 프로토콜로 OSI 7 레이어는 네트워크 시스템의 개념적 모델이다.
  • TCP/IP 스택은 IETF에서 관리하며, TCP, UDP, IP 프로토콜의 표준 스펙은 RFC문서에 정의되어 있다.
  • TCP, UDP는 Transport 레이어에, IP 프로토콜은 Network 레이어에 속하는 프로토콜로 호환이 가능하다.
  • Socket, Port, TCP 커넥션은 TCP/IP 스택이 발전하면서 나온 개념으로, 시스템 레벨에서 관리되는 네트워크 기능을 지원한다.

TCP/IP 프로토콜 스택에서 Application layer와 Transport layer

  • Transport, internet, link 레이어는 하드웨어/펌웨어 OS 레벨에서 구현/관리하며 네트워크 기능을 지원하는데 목적이다.
  • Application layer는 지원받은 네트워크 기능을 사용하는데 목적이 있다.
  • Application 레이어와 Transport 레이어 사이에 있는 소켓과 포트에 대한 개념과 역할을 이해해야 한다.

Socket과 Port

  • Socket과 Port는 어플리케이션에서 시스템(Transport layer)으로 데이터 전송을 위한 연결 통로를 뜻한다.
  • TCP/IP 스택 기술이 개발되던 1970~1980년대 초반부터 사용되었다.
  • 소켓이 연결된 프로세스는 네트워크 상의 다른 프로세스에게 데이터를 송수신할 수 있다.
  • 데이터 전송을 위해 연결된 통로가 없으면, 네트워크 기능을 사용할 수 없다.

Port: 프로세스와 연결된 데이터 패스 혹은 데이터 채널

  • 포트는 프로세스와 연결된 데이터 패스 혹은 데이터 채널 역할을 하는 예를 말한다.
  • 한 시스템 내에 여러 개의 포트가 있을 수 있기 때문에, 각 포트를 유니크하게 식별하기 위해, Port name을 통해 구분한다.
  • 프로세스 하나에 두 개 이상의 포트가 연결될 수 있다.

️1970~1980년대, 신뢰할 수 없는 인터넷 프로토콜 위에 안정적인 TCP 프로토콜 개발

  • 1970~1980년대에는 TCP/IP 스택의 프로토콜이 개발되고 정립되는 시기였다.
  • 프로세스끼리 통신하기 위해 포트가 필요하며, 이를 위해 인터넷 프로토콜이 데이터를 안정적으로 주고받게 하는 프로세스 간 통신 프로토콜인 TCP가 개발되었다.
  • Internet 프로토콜은 구조가 단순하여 속도가 빠르다는 점이 있지만, 데이터를 무결성과 순서를 보장하지 않는다는 특징이 있어서 Network 레이어 위에 Transport 레이어에서 동작하는 TCP 프로토콜을 통해 안정적인 데이터 전송을 실현하였다.

️ TCP(Transmission Control Protocol) 

  • TCP에서 말하는 Connection 은 프로세스 간 안정적이고 논리적인 통신 통로로, Connection을 열고(3-way connection) 데이터를 주고 받은 후 Connection을 닫는다. (4-way connection)
  • 이는 물리적인 통신 통로의 반대 개념이며, 논리적인 통신 통로는 Socket(소켓), Port(포트), TCP connection(연결) 개념을 포함한다.
  • 전송 과정에서 순서가 있고, 에러 체크를 포함한다.

TCP 3-way connection (TCP 3-Way Handshake)

이미지 출처: https://sjlim5092.tistory.com/35

1. SYN (Synchronization):

  • 클라이언트는 SYN 패킷을 서버에 보낸다. 이 때 ISN_client와 같은 sequence number를 포함시킨다.
  • 클라이언트는 SYN_SENT state에 진입한다. 

2. SYN-ACK (Synchronization-Acknowledgment

  • 서버는 클라이언트의 SYN 패킷 요청을 받고, SYN과 ACK를 함께 포함한 패킷을 클라이언트에게 전송한다.
  • 서버는 자체적으로 랜덤한 sequence number를 생성한다.
  • 서버는 SYN-RECEIVED state에 진입한다. 

3. ACK (Acknowledgment):

  • 클라이언트는 SYN-ACK 패킷을 받고 ACK을 서버에 보낸다.
  • 클라이언트는 ESTABLISHED state에 진입한다.
  • 서버는 클라이언트가 보낸 ACK 패킷을 받고 ESTABLISHED state에 진입한다.
  • 양쪽의 연결이 설정되어 데이터 전송이 가능해진다.

3-Way connection(HandShake)의 목적

  • sequence number는 양쪽에서 동기화하여 데이터의 정확한 전송과 순서를 유지한다.
  • SYN, SYN-ACK 패킷을 통해 양쪽이 통신이 가능한지의 상태를 확인하여 안정적인 연결을 확보한다. 

TCP 4-Way Handshake (Connection Termination)

이미지 출처: https://sjlim5092.tistory.com/37

1. FIN (Finish):

  • 클라이언트가 연결을 종료하고자 FIN 패킷을 보낸다.
  • 클라이언트는 FIN-WAIT-1 state에 진입한다.

2. ACK (Acknowledgment):

  • 서버는 클라이언트로부터 FIN 패킷을 받고 ACK 패킷을 보낸다.
  • 서버는 CLOSE-WAIT state에 진입한다.

3. FIN (Finish):

  • 서버가 연결을  닫을 준비가 되면, FIN 패킷을 보낸다.
  • 서버는 LAST-ACK state에 진입한다.

4. ACK (Acknowledgment):

  • 클라이언트는 서버로부터 FIN 패킷을 받고 마지막으로 ACK 패킷을 보낸다.
  • 클라이언트는 TIME-WAIT state 에 진입한다.
  • 이제 양쪽 모두 연결이 완전히 종료된다.

 

4-Way Connection(Handshake)의 목적

  • 양쪽이 통신의 종료를 확인한 후 종료하므로 데이터 손실이 없도록 한다.

Port

  • 인터넷 상에서 프로세스 간 통신을 하기 위해서는 상대방 프로세스의 포트를 식별할 수 있어야 함.
  • 이를 위해 TCP와 UDP에서는 포트 넘버를 16비트 숫자로 정의함.
  • 포트 넘버는 0에서부터 65,535 사이의 값을 가지며, 이것을 부르는 용어는 'Port' 또는 'Port number'가 있음.
  • 포트가 가지는 의미는 프로세스와 연결된 데이터 패스 혹은 데이터 채널을 의미할 수도 있고, 포트 넘버를 식별하기 위한 값일 수도 있음.
  • 이러한 이유로, 포트라는 용어는 의미에 따라 다르게 사용됨.

인터넷 상에서 어떻게 Port를 유니크하게 식별할까?

  • 포트 넘버는 인터넷상에서 포트를 유일하게 식별할 수 없으므로, 이에 추가적인 원소가 필요하다고 생각됨.
  • 그 때문에 호스트의 Internet Address(=IP)가 유일하게 식별할 수 있는 대상이므로, Host와 Port Number의 조합으로 Socket이 등장하는데, Socket은 인터넷상에서 유일해야 한다.
  • TCP/IP 스택에서 Socket은 Port를 유일하게 식별할 수 있는 '주소'로 볼 수 있으며, 또한 각각의 Socket은 인터넷상에서 유일해야 하는 특징이 있다.

Connection과 Socket

  • TCP에서 Connection은 유니크하게 식별해야 한다.
  • 한 커넥션에 대한 처리를 판단하기 위해, 커넥션은 하나의 소켓 쌍으로 식별 가능해야한다.
  • 이 소켓은 컴퓨터의 IP 주소와 포트 넘버를 가지고 있으며, 소켓 쌍이 유일하므로 한 커넥션도 유일하게 식별 가능하다.
  • 따라서 커넥션 연결에 요청하는 쪽과 받는 쪽 각각의 source와 destination 소켓이 있으며, source는 요청하는 쪽, destination은 받는 쪽을 의미한다.  
  • 각 소켓은 여러 커넥션에서 동시에 사용될 수 있으므로, 하나의 소켓은 여러 커넥션의 사용이 가능하다.
  • 한 프로세스에서 이용되는 서비스를 여러 프로세스가 공유할 수 있기 때문에, 해당 서비스를 제공하는 소켓은 다른 컴퓨터에 위치한 다른 프로세스와 커넥션하기 위해 사용될 수 있다.

UDP (User Datagram Protocol)

  • TCP와 더불어 같은 레이어의 UDP 프로토콜은 connectionless 프로토콜로, 연결을 맺고 있지 않고 데이터를 직접 주고 받는다.
  • UDP는 인터넷 프로토콜 위에서 동작하며, 소켓 개념 또한 IP 주소와 포트 넘버를 합친 형태이다.
  • 표준 문서에는 소켓이라는 단어가 빠져 있어서 UDP 표준 문서에서 'Socket'이라는 단어를 찾을 수 없지만, 실제로 UDP에서도 Socket 개념을 사용한다.
  • UDP는 간단한 에러체크 정도만 하고, 세밀한 체크는 하지 않는다.
  • UDP는 port number란 개념에서 TCP와 크게 차이가 없기 때문에 이후 자연스럽게 소켓 개념을 사용하기 시작한다.

Socket 개념을 이용한 TCP/IP 통신

  • TCP/IP 스택에서 Socket은 포트를 식별하기 위한 주소로 사용된다.
  • 소켓은 TCP와 UDP 프로토콜에 의해 사용되며, TCP 안에서만 사용되던 소켓 개념이 UDP까지 확장되면서 <protocol, ip address, port number)으로 유니크하게 식별된다.
  • 같은 IP 주소와 포트를 가진 프로세스 들끼리는 프로토콜이 달라야 소켓을 지정할 수 있다.
  • IP 주소가 다르면서 프로토콜과 포트 넘버가 같은 경우, 하나의 컴퓨터도 여러 개의 IP 주소로 소켓을 열 수 있다.
  • 인터넷상의 다른 프로세스들이 TCP통신을 위한 IP와 포트 번호를 할당하여 Connection을 맺고, 이런 Connection은 유일해야 한다.
  • 프로세스 각각은 IP 주소와 포트 번호를 가지고 있다.
  • 각 컴퓨터의 IP 주소와 포트 번호를 통해 이루어진 TCP 커넥션들은 소켓의 쌍으로 표현될 수 있어 유니크한 커넥션이어야 한다.
  • 소켓은 <src IP, src Port, dest IP, dest Port>의 구조로 이루어져있다.

Unique한 Connection을 식별하기

  • IP 주소와 port number를 비교하여 유니크한 커넥션을 식별한다.
  • IP 주소가 같으나 port가 다르면 유니크한 커넥션으로 본다.

참고 자료

https://youtu.be/X73Jl2nsqiE?si=8bfwucXJ8WWufjbo