[네트워크] TCP와 UDP

JUNHO YEOM·2022년 10월 16일
0

Network

목록 보기
20/25

인터넷 프로토콜 스택의 4계층

애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층

TCP와 UDP

  • TCP에만 연결(Connection, Session) 개념이 있다.
  • 연결은 결과적으로 순서 번호로 구현된다.
  • 연결은 '상태(전이)' 개념을 동반한다.
  • TCP는 배려남, UDP는 배려가 없는 남자에 비유할 수 있다.

OSI 7 Layer, 사용 예시와 식별자


TCP 연결 방식

전송 제어 프로토콜(Transmission Control Protocol)

특징

  • 연결 지향적 - 3 way handshake(논리적인 연결입니다)
  • 데이터 전달 보증
  • 순서 보장(TCP/IP 패킷 정보에 검증을 위한 정보가 포함되어 있어서 보장됩니다)
  • 신뢰할 수 있는 프로토콜
  • 대부분의 web 통신에 사용되는 프로토콜

Client

  • Active하게 연결하는 주체

Server

  • 연결을 대기함

연결 방식

  • Client에서 어떤 서버에 연결하려고 할 때
  • Socket에 TCP Port번호를 부여해서 연결을 시도함
  • Server는 Listen상태에서 보통 80번 TCP Port를 열어 놓고 대기함.

연결을 시도하기 위해 IP번호+ 포트번호를 알아야 한다.


TCP 연결과 연결 종료

3way handshaking 연결

  • 서버와 클라이언트를 논리적으로 연결하는 과정
  • 연결 과정에서 Sequence number와 MSS(Maximum Segment Size)를 교환한다.
  • IP Header, TCP Header만 존재하고 Payload가 없는 통신 연결만을 위한 Segment가 오고 가게된다.

  1. 클라이언트에서 랜덤으로 Sequence number를 만듦, 그리고 자신의 Sequence number(1000)를 서버에 보냄

  2. 서버는 클라이언트의 Sequence number를 받고, 자신이 랜덤으로 만든 Sequence number(4000)를 보냄, 서버는 클라이언트의 Sequence number를 잘 받았다는 의미로 클라이언트의 1000번에 1을 더해서 1001번을 보냄

    • 클라이언트는 이때, 서버와 연결되었다고 판단함.
  3. 클라이언트는 서버의 Sequence number 4000번을 잘 전달 받았다는 의미로 4001번을 다시 서버에 보냄.

    • 서버는 이때 클라이언트와 연결되었다고 판단함.

Sequence number와 MSS 정책이 함께 교환되는 것을 기억하자.


4way handshaking 연결 해제

  1. 클라이언트가 서버에 연결을 끊자는 의미로 서버에 FIN + ACK를 보낸다.
  2. 해당 응답으로 서버가 ACK를 리턴한다.
  3. 서버가 클라이언트에 연결을 끊자는 의미로 클라이언트에 FIN + ACK를 보낸다.
  4. 해당 응답으로 클라이언트가 ACK를 반환한다.

TIME WAIT

연결을 끊자고 요구한 쪽에 TIME WAIT이 발생한다. (연결, 해제 모두 클라이언트가 동적이다)
TIME WAIT이 발생한 동안에는 Socket의 Port가 불필요하게 낭비되기 때문에
많은 요청을 받는 서버보다 클라이언트가 연결 해제 요청을 하도록
어플리케이션을 설계해야 한다.


TCP Header 형식

Source port : 16bit
Destination port : 16bit
Port 번호는 2의 16제곱 -2개임 (65533개)
Sequence number: 연결, 해제 할 때 사용하는 일련번호
Data가 이동할때는 Data가 100bytes라고 했을 때 숫자가 100씩 증가함.
Data offset: 옵션이 있는지,
Flag: 상태를 설명하기 위한 부분(ACK, SYN, FIN등)
Window Size: TCP 수준의 Data가 오고갈 때 남은 여유 공간
Checksum: Data 손실 여부 확인하는 부분


UDP Header 형식

특징

  • 기능이 거의 없음
  • 연결지향 보장 X
  • 데이터 전달 보장 X
  • 순서 보장 X
  • PORT
  • Check sum(메시지가 제대로 왔는지 검증 하는 역할)
  • 애플리케이션에서 추가 작업 필요

장점

속도가 빨라요

Http3에서 사용되면서 TCP보다 더 높은 수준의 최적화가 가능한 장점이 부각되었어요

UDP 방식

  • 클라이언트를 배려하지 않는 통신 방식
  • 혼잡도 고려하지 않음
  • 연결 여부 고려하지 않음

IPTV의 영상 송출같은 경우는 연결을 고려하여 하향 평준화 할 필요가 없음
게임 같은경우 TCP연결을 사용하게 되면 속도가 하향 평준화됨.
UDP를 사용해야 속도가 느려지지 않음.


TCP 연결이라는 착각

파일 다운로드 중 LAN 케이블을 분리했다가 다시 연결하면 TCP 연결은 어떻게 될까?

  • 재전송 타이머의 기본 근사값은 대략 3초다, 하지만 대부분 운영채제의 재전송 타이머는 보통 1초 미만이다.
  • 재전송 타이머 만료 후에도 확인 응답을 받지 못한 경우 Segment를 재 전송하고 RTO(Retransmission Time-Out)값은 두 배로 증가한다.
  • 예를 들어 1초 -> 2초 -> 4초 -> 8초 -> 16초 간격으로 재전송 한다
  • 보통 최대 5회 전송을 시도하고 5회 이상 모두 실패할 경우 전송 오류가 발생한다.

연결이 끊기는 경우 충격이 발생했다고 한다.
버퍼는 네트워크의 연결이 끊기는 경우 충격을 완화시킨다. (이미 데이터를 미리 가져와 둠으로)
유선 연결은 직접적인 유선을 해제할 경우 충격이 발생하지만,
무선 연결의 경우 매우 빈번하게 발생할 수 밖에 없다.(Wifi 설치 장소에서 이동할 경우 등)


참고

널널한 개발자 - 외워서 끝내는 네트워크 핵심이론 기초

0개의 댓글