Jin's Dev Story

[네트워크] TCP & UDP 본문

CS 지식/[네트워크]

[네트워크] TCP & UDP

woojin._. 2023. 7. 17. 14:27

 

TCP

  • 연결 지향형 프로토콜로 신뢰성있는 데이터 전송을 보장
  • 신뢰적인 연결방식
  • 서버와 클라이언트의 함수 호출 순서가 중요

서버 : socket() 생성 → bind() 소켓 주소 할당 → listen() 연결 요청 대기 상태 → accept() 연결 허용 → read/write() 데이터 송수신 → close() 연결 종료

클라이언트 : socket() 생성 → connect() 연결 요청 → read/write() 데이터 송수신 → close() 연결 종료

 

서버와 클라이언트의 차이

  • 클라이언트 소켓 생성 후 서버로 연결을 요청하는 과정에서 차이가 존재
  • 서버는 listen() 호출 이후부터 연결 요청 대기 큐를 만들어 놓고, 그 이후에 클라이언트가 연결 요청을 할 수 있음
  • 이때 서버가 바로 accept()를 호출할 수 있는데, 연결되기 전까지 호출된 위치에서 블로킹 상태에 놓이게 됨

특징

  1. 연결형 서비스로 가상 회선 방식을 제공
  2. 3 way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제
  3. 흐름 제어 및 혼잡 제어
  4. 높은 신뢰성을 보장
  5. UDP보다 속도가 느림
  6. 전이중(Full-Duplex), 점대점(Point to Point) 방식
  • 흐름 제어 : 송신 측과 수신 측의 데이터 처리 속도 차이 조절해줌
  • 혼잡 제어 : 네트워크 내의 패킷 수가 넘치게 증가하지 않도록 방지하는 것

TCP 서버 특징

  1. 서버 소켓은 연결만 담당
  2. 연결과정에서 반환된 클라이언트 소켓은 데이터의 송수신에 사용되는 서비스로 가상 회선 방식 제공
  3. 서버와 클라이언트는 1대 1 연결
  4. 스트림 전송으로 전송 데이터의 크기 무제한
  5. 패킷에 대한 응답을 해야하므로 성능 낮음
  6. 스트리밍 서비스에 불리(손실된 경우 재전송 요청하기 때문)

UDP

  • 무접속 프로토콜로 빠르지만, 데이터의 유실 가능성이 존재

특징

  1. 비연결형 서비스로 데이터그램 방식을 제공
  2. 정보를 주고 받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않음
  3. UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
  4. 신뢰성이 낮음
  5. TCP보다 속도가 빠름

UDP 서버 특징

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

'CS 지식 > [네트워크]' 카테고리의 다른 글

[네트워크] HTTP & HTTPS  (0) 2023.07.17
[네트워크] GET & POST  (0) 2023.07.17
[네트워크] 대칭키 & 공개키  (0) 2023.07.17
[네트워크] TCP 3 way handshake & 4 way handshake  (0) 2023.07.17
[네트워크] OSI 7계층  (0) 2023.07.17