[TIL] TCP와 UDP

krkorklo·2022년 8월 30일
0

TIL

목록 보기
16/29
post-thumbnail

TCP와 UDP

데이터를 보내기 위해 사용하는 프로토콜

TCP

  • 연결형 서비스를 지원하는 프로토콜로 패킷을 추적 및 관리를 진행
  • 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking을 통해 연결을 해제
  • UDP보다 속도는 느리지만 신뢰성을 보장
  • 서버 소켓은 연결만을 담당
  • 서버와 클라이언트는 1:1로 연결
  • 스트림 전송으로 전송 데이터의 크기가 무제한
  • 패킷에 대한 응답이 필요하기 때문에 성능이 낮음
  • 손실된 경우 재전송을 요청하기 때문에 스트리밍 서비스에 적절하지 않음

UDP

  • 비연결형 서비스로 데이터를 데이터그램 단위로 처리
  • 정보를 주고받을때 정보를 보내고 받는다는 신호 절차가 없음
  • UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
  • TCP보다 속도가 빠르지만 신뢰성이 낮음
  • 신뢰성보다 연속성이 중요한 스트리밍 서비스에 자주 사용
  • 연결이 없어 서버 소켓과 클라이언트 소켓의 구분이 없음
  • 소켓 대신 IP를 기반으로 데이터를 전송
  • 서버와 클라이언트가 1:1, 1:N, N:M 으로 연결이 가능
  • 데이터그램의 크기가 65535 바이트가 초과하면 잘라서 보냄
  • 흐름제어가 없어 패킷이 제대로 전송되었는지 확인이 불가

HTTP/1 동작 흐름

  1. 클라이언트에 웹서버 주소를 입력
  2. 클라이언트에서 연결할 서버의 도메인 주소를 검색
  3. 클라이언트에서 소켓을 열고 서버에 TCP 연결을 시도
  4. 해당 소켓에 HTTP 요청 메시지를 서버로 전송
  5. 서버에서 처리하고 HTTP 응답
  6. TCP 연결 종료

Stream과 Buffer

Stream

  • 배열이나 문자열과 같은 데이터 컬렉션으로 자료 입출력에 사용
  • 입출력 과정에서 Byte 단위의 데이터들이 자유롭게 움직일 수 있도록 중간 다리 역할
  • 입력과 출력을 동시에 처리할 수 없음 (단방향 통신)
  • 먼저 보낸 데이터를 먼저 받는 FIFO 구조
  • 입력 스트림
    • 입력 장치로부터 입력을 받고 도착지로 향하는 스트림
  • 출력 스트림
    • 프로그램을 시작점으로 출력 장치 및 프로그램을 목적지로 하는 스트림
  • 시작점 Source - 입력 Stream - 출력 Stream - 종착점 Sink

Buffer

  • Stream의 단점을 보완한 입출력의 최종 형태
  • 고정값이 아닌 가변적인 값을 받음
  • 입력받은 값을 버퍼에 저장해두었다가 버퍼가 가득 차거나 개행 문자가 나타나면 버퍼의 내용을 한 번에 전송 → 속도가 빠름
  • 스트림에서 버퍼를 사용하지 않는 경우에는 값이 즉시 전달되고, 버퍼를 사용하면 API 호출 횟수를 줄여 성능을 개선할 수 있음

참고자료
https://mangkyu.tistory.com/15
https://coding-factory.tistory.com/614
https://velog.io/@hidaehyunlee/TCP-와-UDP-의-차이
https://terianp.tistory.com/19
https://meetup.toast.com/posts/55

0개의 댓글