위로 아래

TCP / UDP

차이점

  1. TCP : 정확하게 정보를 전달해야 할 때 사용
  2. UDP : 정확하진 않아도 될 때 빠르게 정보를 전달하기 위해 사용
  3. TCP와 UDP는 최종 수신 프로그램에 맞춰 결정된다 (이 데이터를 사용할 프로그램이 정확한 정보를 필요로하면 TCP로 프로토콜을 구성한다)
  4. TCP 80 포트번호 =/= UDP 80 포트번호 (둘이 포트 번호가 같아도 서로 다른 것)

 

 

 


TCP

TCP (Transmission Control Protocol)

  1. 정확하게 데이터를 전달해야할 때 사용된다
  2. 역할 : 신뢰할 수 없는 공용망에서도 정보 유실이 없는 통신을 보장
    1. 세션을 안전하게 연결
    2. 데이터를 분할
    3. 분할된 패킷이 잘 전송되었는지 확인
  3. 데이터들을 메모리에 유지하고 있다가, ACK 번호를 받고 통신이 잘 된 것을 파악하고 나서야 메모리에서 데이터를 제거한다.
  4. 중간에 유실이 있으면 시퀀스 번호와 ACK 번호를 비교해가며 메모리에 유지해놓은 데이터를 재전송한다.

 

패킷 전송 방식

  1. Sequence Number : 시퀀스 번호. 패킷에 번호를 부여. 순서가 바뀐 패킷 알아챔.
  2. ACK(Acknowledge) Number : 응답 번호. 패킷이 잘 전송되었는지 응답. 유실된 패킷 알아챔.
  3. Window Size : 전송 크기. 한꺼번에 얼마나 보내야 수신자가 잘 처리할 수 있는지 고려

 

슬라이딩 윈도

  1. RTT(Round Trip Time) : 왕복 지연시간. 송신자와 수신자 간 거리가 멀면, 패킷을 전송하고 ACK 응답 번호를 다시 받아 확인할 때까지 시간이 길어진다.
  2. Sliding Window : RTT가 크면 패킷을 하나만 보내고 ACK 응답 번호를 받는데 오래 걸리니까, 한 번에 여러 개의 패킷을 보내고 (윈도 사이즈를 크게 하고) ACK 응답 번호는 하나만 받는다. 

 

3방향 핸드셰이크

  1. TCP에서는 잘못된 통신으로 데이터가 버려지지 않도록, 3번의 패킷을 미리 주고받아 통신이 가능한지 확인한다.
  2. 서버 상태
    1. LISTEN 상태 (서버) : 클라이언트의 접속을 받아들여 서비스를 제공할 수 있는 상태
    2. SYN - SENT 상태 (클라이언트) : 통신을 시도하기 위해 서버로 Syn 패킷을 보낸 상태
    3. SYN - RECEIVE 상태 (서버) : 클라이언트의 Syn을 받은 상태. Syn, Ack로 응답한다.
    4. ESTABLISHED 상태 (클라이언트) : 서버의 Syn, Ack를 응답 받은 상태. 이에 대한 응답을 다시 서버로 보낸다.
    5. ESTABLISHED 상태 (서버) : ESTABLISHED 상태의 클라이언트의 응답을 받은 상태. 클라이언트와 서버가 모두 이 상태가 되면 연결이 성공적으로 완료된 것.

 

TCP 헤더에 들어가는 flag 종류

TCP 헤더

 

  1. 헤더에 플래그라는 값을 넣어, 초기 연결, 응답, 정상 종료, 비정상 종료 등의 통신 성질을 나타낸다.
  2. SYN : 연결 시작 용도. 연결이 시작될 때 1로 표시해서 보낸다.
  3. ACK : ACK 번호가 유효할 경우 1로 표시해 보낸다. (초기 SYN이 아닌 모든 패킷은 기존 메시지에 대한 응답이므로 ACK 플래그가 1이다)
  4. FIN : 연결 종료 시 1로 표시. 데이터 전송을 마친 후 정상적으로 양방향 종료 시 사용
  5. RST : 연결 종료 시 1로 표시. 연결 강제 종료를 위해 연결을 일방적으로 끊을 때 사용
  6. URG : 긴급 데이터인 경우 1로 표시
  7. PSH : 서버측에서 전송할 데이터가 없거나 데이터를 버퍼링 없이 응용 프로그램으로 즉시 전달할 것을 지시

 

 

 


UDP

UDP (User Datagram Protocol)

  1. 단순히 데이터를 보내는 역할만 한다
  2. TCP와는 달리 데이터 신뢰 통신을 위한 내용이 없다.
  3. 데이터가 유실되어도 그 상태로 처리해버린다. 
  4. UDP의 첫 데이터는 리소스 확보를 위해 인터럽트(Interrupt)를 거는 용도로 사용되고 유실된다.
  5. UDP 프로토콜을 사용하는 애플리케이션은 보통 연결 확립은 TCP 프로토콜의 3방향 핸드셰이크 등을 이용하고, 모든 준비를 마친 후 실제 데이터만 UDP를 이용한다.

 

사용되는 경우

  1. 응답 시간에 민감한 경우
    1. 신뢰성보다도, 시간에 맞추어 지속 전송해야하는 서비스에서 사용된다.
    2. 음성 데이터
    3. 실시간 스트리밍
    4. 화상 회의
  2. 응답을 받기가 어려운 경우
    1. 단방향으로 다수의 단말과 통신해 응답을 받기 어려울 경우
    2. 사내 방송 같은 멀티캐스트

헤더 정보

별 내용이 담겨 있지 않다