도당탕탕

TCP와 UDP 본문

Web

TCP와 UDP

backlo 2020. 1. 16. 00:57

INTRO

  1. 데이터 전송 방식
  2. TCP?
  3. UDP?
  4. 작동 원리 및 차이

데이터 전송 방식

  • 네트워크란 두대 이상의 컴푸터를 연결하고 서로 통신 할 수 있는 것을 말한다.
  • 즉 어떤 연결을 통해 컴퓨터의 자원을 공유하는 것이다.
  • 전송 계층에서 신뢰성 있는 데이터 전송을 담당한다.
    • 신뢰성 : 데이터를 순차적으로 안정적으로 전달
    • 전송 : 포트 번호에 해당하는 프로세스에 데이터를 전달
  • 전송 계층이 없다면?
    • 데이터 순차 전송이 원할하지 않는다.
    • 송수신자 간의 데이터 처리 속도가 차이가 나서 수신자의 처리할 수 있는 데이터량을 초과 할수 있는 문제가 일어날 수 있다.
    • 네트워크가 혼잡하여 데이터 처리 속도가 느려지는 문제가 일어난다.
    • 즉 데이터 손실이 발생
  • OSI 7계층, TCP/IP 4계층

osi 7layer tcp/ip 4layer

  • http에서 데이터를 어떻게 송수신 할까?
    • 송신포트(클라이언트)를 랜덤으로 맞추고 수신포트(서버)를 80으로 맞춘 뒤 웹 서버에 데이터를 전달한다.
    • 데이터를 잘받으면 서버에서 수신포트(80)으로 두고 랜덤으로 맞춘 송신포드에 보낸다.
    • 만약 클라이언트 방화벽에서 80포트를 닫으면 어떤 웹서버도 접속을 하지 못한다. 즉 어떤 패킷이라도 80포트로 나가면 탈락시킨다는 의미이다.

TCP

  • 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
  • 신뢰성 있는 데이터 통신을 한다.
  • 양방향 통신을 가능하게 해준다.

특징

  • 데이터의 순차 전송을 보장한다.
  • 혼잡 및 흐름을 제어한다.
  • 3-way handshake 과정을 통해 연결 하고 4-way handshaking을 통해 해제한다.
  • 전이중 및 점대점 방식을 사용한다.

흐름 원리

  • 3-way handshake : TCP Connection을 할 때
    • 클라이언트가 서버에게 SYN을 보낸다.
    • 서버에서 잘 받으면 클라이언트에게 ACK을 1로 설정하고 자신의 SYN을 같이 보낸다.
    • 서버에서 ACK + SYN을 받았으면 클라이언트는 ACK + Packet을 보낸다.

  • 서버와 클라이언트의 연결되고 나서 데이터 전송 순서
    • 클라이언트가 Packet을 준다.
    • 서버가 잘 받으면 ACK를 준다.
    • 만약 서버가 못받았을 경우 클라이언트에서 Packet을 계속 준다.
  • 4-way handshake : TCP Connection을 끊을 때
    • 클라이언트가 FIN을 1로 설정하고 서버에게 전달한다.
    • 서버가 클라이언트에게 ACK을 준다.
    • 서로 타임 웨이트를 가지고(못받은 데이터가 있을 수 있기 때문에) 이상 없을 경우 서버에서 FIN을 1로 설정해 클라이언트에게 보낸다.
    • 클라이언트가 FIN을 받으면 서버에게 ACK을 보낸다.

TCP 서버

  • 서버 소켓은 연결만 담당한다.
  • 스트림 전송으로 전송 데이터의 크기는 무제한이다.
  • 패킷에 대한 응답을 해야 하기 때문에 속도가 느리다.
  • 서버와 클라이언트는 1:1로 연결된다.
  • 연속성이 필요한 Streaming 서비스에 불리하다.(재전송 요청 성격 탓에)

TCP 세그먼트

  • 데이터를 보낼 때 작은 단위로 분할해 데이터를 보내는데 그 데이터 조각을 말한다.
  • TCP 헤더 + 클라이언트 데이터
  • TCP에서의 패킷이라 부른다.
  • 어플리케이션 단에서 실행한다.
  • header의 크기 : 20byte ~ 60byte

UDP

  • 데이터를 데이터그램 단위로 처리하는 프로토콜이다.
  • 비교적 데이터의 신뢰성이 중요하지 않고 연속성이 중요한 서비스에 사용한다.(비디오 스트리밍)

특징

  • 비연결형 서비스로 데이터그램 방식을 제공한다.
  • 정보를 주고 받을 때 신호절차가 없다.
  • TCP 속도 보다 빠르다.

흐름 원리

  • 클라이언트에서 서버에 데이터를 보내는 순서
    • TCP처럼 체크를 하지 않고 클라이언트에서 패킷을 바로 보냄
    • 최소한의 오류 검출을 한다.

UDP 서버

  • UDP에는 연결 자체가 없어 소켓 구분이 없다.
  • IP 기반으로 데이터를 전송한다.
  • 1:1, 1:N, N:N 방식을 사용한다.
  • 흐름제어가 없어서 패킷이 제대로 전송 혹은 오류가 있는지 확인할 수단이 없다.

TCP/UDP 구조 설명

  • Source Port : 패킷을 송신하는 시스템의 포트번호를 나타낸다. (80, 20,21...)
  • Destination Port : 패킷을 수신할 시스템의 포트 번호를 나타낸다.
  • CheckSum : 데이터가 전송 중에 손실되지 않고 원본과 동일한지 검사한다.

TCP

  1. ACK : 데이터를 받는 곳에서 제어 할 때 사용하는 Flag bit
  2. SYN : TCP가 Connection 연결을 할 때 사용하는 Flag bit
  3. FIN : Connection을 끊을 때 사용하는 Flag bit
  4. Sequence Number : 세그먼트 데이터의 순서번호를 표기한다.
  5. Acknowledge Number : 상대방으로부터 수신한 데이터의 바로 다음에 수신할 데이터 순서 번호를 나타낸다.
  6. TCP에서 CheckSum은 필수

 

UDP

  1. UDP에서는 CheckSum은 선택
  2. 만일 체크섬 값이 0으로 하면 수신측은 체크섬 계산을 하지 않아도 됨

정리

  • TCP, UDP의 특성을 파악하고 상황에 따라 적절한 프로토콜을 사용하자.
  • TCP, UD의 헤더에 대해 파악하면 성능 개선을 이룰 수 있다.

'Web' 카테고리의 다른 글

Http Request VS Response  (0) 2020.01.16
WebServer vs Was  (0) 2020.01.15
Comments