이 영역을 누르면 첫 페이지로 이동
나눔코딩 블로그의 첫 페이지로 이동

나눔코딩

페이지 맨 위로 올라가기

나눔코딩

02. 기술면접 - 네트워크 - TCP & UDP

  • 2021.09.28 11:54
  • ∞. 기술 면접/2. 네트워크
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다

TCP 와 UDP

- 네트워크 계층 중 전송 계층 (Transport Layer)에서 사용하는 프로토콜

[출처] https://mangkyu.tistory.com/15


📌 TCP (Transmission Control Protocol)

SYN(Synchronization:동기화) - S : 연결 요청 플래그
ACK(Acknowledgement) - Ack : 응답
PSH(Push) - P : 밀어넣기
FIN(Finish) - F : 연결 종료 요청

- Stateful (상태성)
- 인터넷 상에서 데이터를 메시지 형태 (세그먼트 segement 라는 블록 단위) 로 보내기 위해 IP 와 함께 사용하는 프로토콜
- TCP 와 IP 를 함께 사용하는 데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다.
- 스트림(Stream) 전송으로 전송 데이터의 크기가 무제한이다.
- 연결형 서비스로 가상 회선 방식을 제공한다 (서버와 클라이언트는 1대1로 연결된다)
   - 3-way handshaking(핸드 쉐이킹) 과정을 통해 연결을 설정하고 4-way handshaking 을 통해 연결을 해제

연결 종료 4-way handshaking]

- 흐름제어 및 혼잡에러를 제공한다.
  - 흐름제어 (전송 속도 조절과 많은 양 요청을 제어)
     - 데이터를 송신하는 곳과 수신하는 곳의 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지하는 것
     - 송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내 수신하는 곳에서 문제가 일어나는 것을 막는다
   - 혼잡제어 (많은 패킷 수 넘침 방지 - 많은 사용자가 요청할 시 패킷도 많음 | 너무 많으면 조금만 전송함)
                 (그래도 ddos 공격처럼 대량의 패킷을 날리는 경우 그 패킷을 처리하기 위해 서버는 마비됨)
      - 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것
      - 정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막는다
   - 높은 신뢰성을 보장한다
   - UDP 보다 속도가 느리다 (이러한 기능은 CPU를 사용하기 때문에 속도에 영향을 주는 것입니다.)
   - 전이중(Full-Duplex), 점대점(Point to Point) 방식이다
       - 전이중
           - 전송이 양방향으로 동시에 일어날 수 있다
        - 점대점
            - 각 연결이 정확히 2개의 종단점을 가지고 있다
         - 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다 
            (손실된 경우 재전송 요청을 하기 때문입니다 | 멀티와 브로드는 UDP 기반으로 함)
    - 연속성보다 신뢰성있는 전송이 중요할 때에 사용된다 (파일 전송과 같은 경우에 사용됩니다) (신뢰성 > 성능)

#패킷
인터넷 내에서 데이터를 보내기 위한 경로배정(라우팅)을 효율적으로 하기 위해서 데이터를 여러 개의 조각들로 나누어 전송을 하는데 이때, 이 조각을 패킷이라고 합니다.

  Header   송신자 IP 주소
  수신자 IP 주소
  프로토콜 (http, https 등)
  패킷 번호 (Packet Number)
  96 bit
  Payload   데이터 가 담기는 공간   896 bit
  Trailer   네트워크 유형에 따라 다름 일반적
  으로 패킷 끝 도달 알리는 비트와 모든
  패킷을 완전히 수신되었는지 확인할
  수 있는 CRC(Cyclic Redundary Check)
  
  32 bit
더보기
https://kongit.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%8C%A8%ED%82%B7Network-Packet%EC%9D%B4%EB%9E%80-%EC%A0%95%EC%9D%98-%ED%8C%A8%ED%82%B7-%EC%86%90%EC%8B%A4
TIP
TCP 프로토콜을 이용하여 외부 데이터베이스 포트번호를 열어두면 접근할 수 있다

📌 UDP (User Datagram Protocol)

- 데이터를 데이터그램 단위로 처리하는 프로토콜
- Stateless (무상태성)
- 비연결형 서비스로 데이터그램 방식을 제공한다 (데이터 그램이란 독립적인 관계를 지니는 패킷이라는 뜻)
   - 연결을 위해 할당되는 논리적인 경로가 없다
   - 그렇기 때문에 각각의 패킷은 다른 경로로 전송되고, 각각의 패킷은 독립적인 관계를 지니게 된다.
   - 이렇게 데이터를 서로 다른 경로로 독립적으로 처리한다.
- ★정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다
- UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
- 신뢰성이 낮다
- TCP 보다 속도가 빠르다
- 신뢰성보다는 연속성이 중요한 서비스, 예를 들면 실시간 서비스(streaming)에 사용된다 - 멀티캐스팅, 브로드캐스팅
  (실제로 socket 방식은 무상태성이며, header jwt token 방식을 이용하여 식별한다)

# 요약
- UDP에는 연결 자체가 없어서(connect 함수 불필요) 서버 소켓과 클라이언트 소켓의 구분이 없다.
- 소켓 대신 IP를 기반으로 데이터를 전송한다.
- 서버와 클라이언트는 1대1, 1대N, N대M 등으로 연결될 수 있다.
- 데이터그램(메세지) 단위로 전송되며 그 크기는 65535바이트로, 크기가 초과하면 잘라서 보낸다.
- 흐름제어(flow control)가 없어서 패킷이 제대로 전송되었는지, 오류가 없는지 확인할 수 없다.
- 파일 전송과 같은 신뢰성이 필요한 서비스보다 성능이 중요시 되는 경우에 사용된다. (신뢰성 < 성능)

참고
- UDP 와 TCP 는 각각 별도의 포트 주소 공간을 관리하므로 같은 포트 번호를 사용해도 무방하다. 즉, 두 프로토콜에서 동일한 포트번호를 할당해도 서로 다른 포트로 간주한다
- 또한 같은 모듈(UDP or TCP) 내에서도 클라이언트 프로그램에서 동시에 여러 커넥션을 확립한 경우에는 서로다른 포트 번호를 동적으로 할당한다 (동적할당에 사용되는 포트번호는 49,152 ~ 65,535 이다) 
  -> 컴퓨터에서 클라이언트A(크롬 브라우저), 클라이언트B(크롬 브라우저) 로 커넥션을 해도 동적으로 포트 할당

 

관련 질문

저작자표시

'∞. 기술 면접 > 2. 네트워크' 카테고리의 다른 글

06. 기술면접 - 네트워크 - 쿠키, 세션, 로컬 스토리지, 세션 스토리지  (0) 2021.09.30
05. 기술면접 - 네트워크 - GET 과 POST  (0) 2021.09.30
04. 기술면접 - 네트워크 - CORS  (1) 2021.09.30
03. 기술면접 - 네트워크 - HTTP 와 HTTPS 프로토콜  (0) 2021.09.29
01. 기술면접 - 네트워크 - OSI 7 계층  (0) 2021.09.27

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 05. 기술면접 - 네트워크 - GET 과 POST

    05. 기술면접 - 네트워크 - GET 과 POST

    2021.09.30
  • 04. 기술면접 - 네트워크 - CORS

    04. 기술면접 - 네트워크 - CORS

    2021.09.30
  • 03. 기술면접 - 네트워크 - HTTP 와 HTTPS 프로토콜

    03. 기술면접 - 네트워크 - HTTP 와 HTTPS 프로토콜

    2021.09.29
  • 01. 기술면접 - 네트워크 - OSI 7 계층

    01. 기술면접 - 네트워크 - OSI 7 계층

    2021.09.27
다른 글 더 둘러보기

정보

나눔코딩 블로그의 첫 페이지로 이동

나눔코딩

  • 나눔코딩의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (316)
    • ∞. 읽은 거리 (3)
    • ∞. 기술 면접 (61)
      • 1. 자료구조 (0)
      • 2. 네트워크 (9)
      • 3. 운영체제 (11)
      • 4. 데이터베이스 (13)
      • 5. 디자인 패턴 (0)
      • 6. 알고리즘 (0)
      • 7. 자바 (15)
      • 8. 자바스크립트 (7)
      • 9. 스프링 (5)
      • 10. 시큐리티 (1)
      • 11. 기타 (0)
      • 12. Vue (0)
    • ∞. 웹개발 유용한 사이트 (14)
    • ∞. 트러블 슈팅 + TIL (7)
    • 00. 출발 (9)
    • 01. 엑셀 (9)
      • 기초 (4)
      • 컴활 1급 (4)
      • VBA (0)
    • 02. 엑세스 (9)
      • 기초 (5)
      • 컴활 1급 (4)
    • 04. Oracle (1)
      • 기초 (1)
    • 03. JAVA (8)
      • 기초 (7)
      • 객체지향 프로그래밍 (0)
    • 05. HTML (13)
      • 기초 (1)
      • css (10)
      • sass (0)
      • less (0)
    • 06. Javascript (16)
      • 기초 (13)
      • ES6 모듈 (2)
      • Canvas (0)
    • 07. JSP (0)
      • 기초 (0)
    • 08. jQuery (0)
      • 기초 (0)
    • 09. BootStrap (1)
      • 기초 (0)
      • v4 - Layout (1)
    • 10. Spring (30)
      • 기초 (3)
      • 실험 (4)
      • MVC (1)
      • BOOT (6)
      • Security (10)
      • Lib (Library) (2)
      • 벤치마킹 (0)
      • JUnit5 (2)
      • DevTools (0)
      • Socket (1)
      • Batch (0)
      • Mobile (0)
      • WebFlux (0)
      • Cloud (0)
      • Thymleaf (0)
      • Actuator (0)
      • 성능 테스트 (1)
    • 11. JetBrains (34)
      • 기초 (1)
      • IntelliJ IDEA (33)
      • WebStorm (0)
      • Pycham (0)
    • 12. API (0)
      • 기초 (0)
      • 네이버 API (0)
      • 카카오 API (0)
      • 구글 API (0)
      • 인스타그램 API (0)
    • 13. AutoHotkey (1)
    • 14. Python (8)
      • 기초 (3)
      • Selenium (2)
      • Beautiful Soup (0)
      • openpyxl (1)
      • Pyqt5 (0)
      • Deep learning (open CV) (0)
      • Geocoder (0)
      • Anaconda (0)
      • DeepLearning (0)
      • Jupyter Nootbook (0)
    • 14.5. R (0)
    • 15. JMeter (0)
      • 다운로드 (0)
    • 16. Vue JS (23)
      • 기초 (3)
      • Vue 2 (15)
      • Vue 3 (5)
      • Vuetify 2.5.8 (0)
    • 17. Git (12)
      • 기초 (8)
      • ItelliJ IDEA (4)
      • SourceTree (0)
    • 18. AWS (5)
      • 기초 (2)
      • Jira (3)
    • 19. Naver Cloud Platform (0)
    • 20. Google Cloud Platform (0)
      • 기초 (0)
      • stt & tts (0)
    • 21. Kotlin (0)
    • 22. Android (0)
      • 기초 (0)
      • Java (0)
      • Kotlin (0)
      • Flutter FrameWork (0)
    • 23. Clean Code [JAVA] (1)
    • 24. BuildTool (1)
      • Maven (1)
      • Gradle (0)
    • 25. 자료 구조와 알고리즘 (18)
      • JAVA (1)
      • Java Script (1)
      • 프로그래머스 (0)
      • 백준 알고리즘 (0)
      • 나의 알고리즘 (14)
      • Brilliant 공부 (0)
    • 26. React (1)
      • 기초 (0)
      • 강의 정리 (1)
    • 27. PostMan (0)
      • 기초 (0)
    • 28. 프로그래머스 (9)
    • 29. Leet Code (0)
    • 30. MySQL (3)
      • 기초 (2)
      • 문제 (1)
    • 73. GraphQL (0)
    • 74. Nuxt JS (0)
    • 75. Electron (0)
    • 76. UX &amp; UI Design Tool (0)
      • 기초 (0)
      • Axure (0)
      • Sketch (0)
      • Figma (0)
    • 77. MarkDown (1)
      • 기초 (1)
    • 78. Tomcat (1)
      • 메모 (1)
    • 79. Element JS (0)
    • 80. Parallax JS (0)
      • 기초 (0)
    • 81. Player JS (0)
      • 기초 (0)
    • 82. Smart Maker (0)
    • 83. Vim (0)
      • 기초 (0)
    • 84. Linux (0)
      • 기초 (0)
      • Centos 7 (0)
      • Ubuntu (0)
    • 85. Node JS (2)
      • 기초 (1)
      • WebRTC (0)
      • NVM (1)
    • 86. Propeller JS (0)
    • 87. FullPage JS (0)
      • 기초 (0)
    • 88. 아두이노 (0)
    • 89. Tensorflow (0)
    • 90. 웹 패킷 분석 (0)
    • 91. 크롬 개발자도구 (0)
    • 92. 디자인 패턴 (7)
      • 생성(Creational) (3)
      • 구조(Structral) (1)
      • 행위(Behavioral) (2)
      • SOLID 패턴 (0)
    • 95. Linux Shell Script (0)
    • 96. 구글 애널리스틱 (0)
    • 97. ffmpeg (0)
    • 98. ShareX (1)
    • 자료실 (0)
    • 기타 (2)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 졵
  • 엑셀 기타작업
  • 엑셀 기본작업
  • 엑셀 글씨
  • 엑셀 분석작업
  • 깁
  • 엑셀 표시형식
  • 엑셀 가운데맞춤

나의 외부 링크

  • 비전공자 개발자
  • 자바 디자인 패턴
  • 자바 디자인 패턴
  • 스프링 블로그
  • 해킹보안 & 웹 관련
  • ERD 생성
  • 전문 기술 블로그
  • Servlet에 대한 개념없이 스프링을 했네요?
  • 스프링 FitlerChainList
  • 알고리즘 파워 블로그

정보

THE HEYDAZE의 나눔코딩

나눔코딩

THE HEYDAZE

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © THE HEYDAZE. Designed by Fraccino.

티스토리툴바