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)
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)
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가 다르면 유니크한 커넥션으로 본다.
참고 자료
'ComputerScience > Network' 카테고리의 다른 글
[Network] 웹 서버와, 웹 애플리케이션 서버 (+ Apache, Apache Tomcat, Nginx) (0) | 2024.07.22 |
---|---|
[Network] 프로토콜 표준과는 다르게 실제로는 소켓(Socket)이 어떻게 식별되는가? (0) | 2024.02.20 |
[Network] World Wide Web와 인터넷, HTTP의 역사 (0) | 2024.02.09 |
[Network] 네트워크와 인터넷부터 ISP까지 (0) | 2024.02.06 |
[Network] Network, Protocol, Protocol Stack, OSI 7 계층 (0) | 2024.01.17 |