본문 바로가기

CS/네트워크

TCP/IP

기본적으로 인터넷 프로토콜 상에서의 데이터 전송은 unreliable하다.

따라서 데이터를 안정적으로 보낼 수 있는 방법이 필요했는데, 그것이 바로 TCP(Transmission control protocol)이다.

unreliable은 데이터가 유실/손상 될 수 있고, 순서가 보장되지 않는 경우를 말한다.

 

TCP/IP Stack

1. Port

16bits로 이루어진 이루어진 숫자 (0~65535)

데이터를 주고 받기 위해서는 상대방 포트를 식별해야 하는데 인터넷 상에는 수많은 프로세스와 그 프로세스가 갖고 있는 포트들이 있기 때문에 포트만으로는 식별하기가 무척 어렵다.

따라서 IP를 통해 Host를 유니크하게 식별하고, Host 내의 포트는 각각 다른 번호를 부여하여 유니크하게 식별하는 방법인 Socket이 등장한다.

2. Socket

인터넷 상에 존재하는 각 Port를 유니크하게 식별하기 위한 주소 (IP + Port number)

3. Connection

프로세스 간의 안정적이고 논리적인 통신 통로

한 쌍의 Socket으로 Connection을 유니크하게 식별한다.

<protocol, src ip address, src port, dest ip address, dest port>

또한 하나의 Socket은 여러 개의 Connection에서 사용될 수 있다.

프로세스 간의 Connection을 연결할 때 3 Way-HandShake를 사용하며, 닫을 때 4 Way-HandShacke를 사용하여 Connection을 닫는다.

3 Way-Handshake

  • SYN 플래그를 지정한 세그먼트를 B에게 전송
  • B는 긍정 응답 표시로 10에 1을 더한 11과 함께 A에게 전송
  • A의 순서 번호는 1이 증가하며, 긍정 응답으로 1을 더한 51 전송

4 Way-Handshake

  • 해제하고자 하는 프로세스에서 FIN 플래그를 지정하여 요구한다.
  • FIN 플래그를 받은 프로세스에서는 긍정 응답을 보낸다.
  • 이때 A 프로세스는 FIN-WAIT 상태가 되고, B는 CLOSE-WAIT 상태가 된다.
  • 이후 통신이 끝나면 B 프로세스는 A에게 FIN 플래그를 전송
  • A는 긍정의 응답을 B에게 전송

 

TCP Keep-Alive

위와 같이 각 프로세스는 ACK를 통해 패킷 도착 여부를 확인한다.

이처럼 서로의 연결을 ACK를 통해 확인하는 과정을 TCP Keep-Alive라고 한다.

 

TCP Keep-Alive는 OS를 통해 관리되며, ACK를 정상적으로 받지 못하면 OS측에서 TCP 연결을 종료한다.

 

4. Transport Layer

Multiplexing

여러 Socket으로 부터 데이터를 수집하여 각각 세그먼트(TCP) 또는 데이터그램(UDP)으로 변환 후 Internet Layer로 내려보내는 것

Demultiplexing

Internet Layer로부터 받은 세그먼트 또는 데이터그램에 있는 payload를 적절한 Socket으로 전달하는 것

'CS > 네트워크' 카테고리의 다른 글

HTTP와 HTTPS 프로토콜  (0) 2025.03.21
프로토콜과 OSI 7 Layer  (0) 2025.03.06
네트워크 기초  (0) 2025.03.06