컴퓨터 시스템

네트워크 프로토콜(IP / TCP/ UDP)

bewisesh91 2021. 12. 21. 17:54
728x90

IP(Internet Protocol)

IP(Internet Protocol)은 송신 호스트와 수신 호스트가 패킷 교환 네트워크에서 데이터를 주고 받는데 사용하는 규약을 의미한다.

호스트의 주소 지정과 패킷 분할 및 조립 기능을 담당한다. 이때 패킷이란 인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을

효율적으로 하기 위해서 데이터를 여러 개의 조각들로 나누어 전송하는데 이때 이 조각을 패킷이라 한다. 다시 말해, IP의 역할은

지정한 IP 주소에 패킷이라는 통신 단위로 데이터를 전달하는 것이라고 할 수 있다. 그러나 IP는 패킷을 받을 대상이 없거나 서비스

불능 상태여도 패킷을 전송하며(비연결성), 전송 과정 중간에 패킷이 사라졌는지, 정확하게 전달 되었는지 확인하지 않는다(비신뢰성).

TCP(Transmission Control Protocol)

TCP(Transmission Control Protocol)는 연결 지향형 프로토콜이다. 연결 지향적 프로토콜이란 클라이언트와 서버가 연결된

상태에서 데이터를 주고받는 프로토콜을 의미한다. 클라이언트가 연결 요청을 하고, 서버가 연결을 수락하면 통신 선로가 고정되고,

모든 데이터는 고정된 통신 선로를 통해서 순차적으로 전달된다. 따라서 TCP는 데이터를 정확하고 안정적으로 전달할 수 있다.

 

TCP의 특징

 

  • 연결형 (connnection-oriented) 서비스로 연결이 성공해야 통신이 가능하다.
  • 연결의 설정(3-way handshaking)과 해제(4-way handshaking)
  • 데이터의 경계를 구분하지 않는다(바이트 스트림 서비스).
  • 데이터의 전송 순서를 보장한다(데이터의 순서 유지를 위해 각 바이트마다 번호를 부여).
  • 신뢰성있는 데이터를 전송한다(Sequence Number, Ack Number를 통한 신뢰성 보장).
  • 데이터 흐름 제어(수신자 버퍼 오버플로우 방지) 및 혼잡 제어(패킷 수가 과도하게 증가하는 현상 방지)
  • 전이중(Full-Duplex, 양방향 전송), 점대점(Point to Point, 연결 종단점이 2개) 서비스
  • UDP보다 전송속도가 느리다.

연결(3-way handshaking, 왼쪽), 해제(4-way handshaking, 오른쪽)

연결 과정

 

  1. 클라이언트에서 서버에 연결 요청을 하기위해 SYN(Synchronize sequence number) 데이터를 보낸다.
  2. 서버에서 해당 포트는 LISTEN 상태에서 SYN 데이터를 받고 SYN_RCV로 상태가 변경된다.
  3. 그리고 요청을 정상적으로 받았다는 대답(ACK, Acknowledgement)와 클라이언트도 포트를 열어달라는 SYN 을 같이 보낸다.
  4. 클라이언트에서는 SYN+ACK 를 받고 ESTABLISHED로 상태를 변경하고 서버에 ACK 를 전송한다.
  5. ACK를 받은 서버는 상태가 ESTABLSHED로 변경된다. 

 

해제 과정

 

  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송한다.
  2. 서버는 일단 ACK를 통해 확인 메시지를 보내고, 자신의 통신이 끝날 때까지 기다린다.
  3. 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 플래그를 전송한다.
  4. 클라이언트는 ACK를 통해 확인 메시지를 보내고, 일정시간 동안 TIME-WAIT 상태에 빠진다.
  5. 클라이언트로부터 ACK를 받은 서버는 소켓을 닫고 TCP 세션이 종료된다.

연결 종료를 3-way가 아닌 4-way로 하는 이유는 클라이언트가 데이터 전송을 마쳤다고 하더라도 서버는 아직 보낼 데이터가 

남아있을 수 있기 때문이다. 따라서 일단 클라이언트의 FIN에 대한 ACK만 먼저 보내고, 데이터를 모두 전송한 후에 자신도 FIN

메시지를 보낸다. 또한 클라이언트가 서버로부터 FIN을 수신하더라도 일정시간 세션을 유지하는 이유는 서버에서 FIN을

전송하기 전에 클라이언트가 전송한 패킷이 라우팅 지연이나 패킷 유실로 인한 재전송 등으로 해당 ACK 패킷이 FIN 패킷보다

늦게 도착하는 상황을 대비해야 하기 때문이다.

UDP(User Datagram Protocol)

UDP(User Datagram Protocol)는 비연결형 지향형 프로토콜로 데이터를 독립적인 관계를 지니는 패킷인 데이터그램 단위로

처리한다. 데이터그램은 신뢰성보다는 연속성이 중요한 서비스, 예를 들면, 실시간 스트리밍 서비스에 자주 사용된다. 정보를

주고 받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않으며 데이터의 경계를 구분한다. 또한 일대일, 일대다, 다대다 

통신이 가능하며 TCP와 비교하여 신뢰성 있는 데이터의 전송을 보장할 수 없는 방식이다.