[Server Study] TCP와 UDP

Seohyun-kim·2022년 5월 8일
0
post-thumbnail

새로운 인터넷 어플리케이션을 만들 때 첫번 째 결정해야 하는 것 중 하나는 UDP 혹은 TCP 중 어느 것을 사용할지를 결정하는 것이다.

OSI 7계층에서 Transport Layer(전송계층)에 속하는 프로토콜인 TCP와 UDP 에 대해 조금 더 자세히 알아보고자 한다.


TCP(Transmission Control Protocol)

  • 항상 단일 송신자와 단일 수신자 사이의 점대점(Point-to-point)임

  • 연결 지향형 서비스

    • 애플리케이션 계층 메세지를 전송하기 전에 TCP는 클라이언트와 서버가 서로 전송 제어 정보를 교환하도록 함

    • 이 Hand shaking 과정이 클라이언트와 서버에 패킷이 곧 도달할 것이니 준비하라고 알려주는 역할을 함

    • Hand Shaking 단계를 지나면, TCP 연결이 두 프로세스의 소켓 사이에 존재한다고 얘기함

    • 이 연결은 두 프로세스가 서로에게 동시에 메세지를 보낼 수 있기에 Full-Duplex(전이중) 연결이라고 함

    • 애플리케이션이 메세지 전송을 마치면 연결을 끊어야 함

  • 신뢰적인 데이터 전송 서비스

    • 통신 프로세스는 모든 데이터를 오류없이 올바른 순서로 전달하기 위해 TCP에 의존함
    • TCP는 애플리케이션의 한쪽이 바이트 스트림을 소켓으로 전달하면 그 바이트 스트림을 손실하거나 중복되지 않게 수신 소켓으로 전달함
    • 데이터에 loss가 없도록 하기 위해 구조가 복잡하고 헤더 size도 더 큼

  • TCP는 혼잡제어(Congestion Control) 방식, 즉 통신하는 프로세스의 직접 이득보다는 인터넷의 전체 성능 향상을 위한 서비스를 포함
    • TCP의 혼잡 제어 방식은 네트워크가 혼잡상태에 이르면 프로세스 속도를 낮춤
    • 각 TCP연결이 네트워크 대역폭을 공평하게 공유할 수 있게끔 제한하려고 시도함
  • Connection- Oriented
    • 바로 데이터를 보내는 것이 아니라 Handshaking을 한 후에 보냄

  • 보안의 관점에서 보자!
    • TCP나 UDP는 암호화를 제공하지 않음
    • 암호화 되지 않은 평문은 송신자와 수신자 사이의 모든 링크를 흘러가게 되는데 중간에 어떤 링크에서나 탐지되고 발견될 가능성이 높음
    • TCP를 강화한 SSL(Secure Sockets Layer)을 개발함
    • SSL은 TCP가 하는 모든 것을 할 뿐만 아니라 암호화, 데이터 무결성 그리고 종단 인증을 포함하는 중요한 프로세스 대 프로세스 보안 서비스를 제공함


UDP(User Datagram Protocol)

  • 최소의 서비스 모델을 가진 간단한 전송 프로토콜 (깔꼼)

  • 할 수 있는 최선을 다하지만 보장은 하지 않음

  • 비 연결형

    • 두 프로세스가 통신을 하기 전에 Hand Shaking을 하지 않음
  • 비 신뢰적인 데이터 전송 서비스

    • 하나의 프로세스가 UDP 소켓으로 메세지를 보내면 UDP는 그 메세지가 수신 소켓에 도착하는 것을 보장하지 않음❌
    • 게다가 수신 소켓에 도착하는 메세지들의 순서가 뒤바뀔 수도 있음
  • 혼잡제어 방식을 포함하지 않음
    - UDP 송신 측은 데이터를 원하는 속도로 하위계층(네트워크 계층)dmfh qhsof tn dlTdma



Hand Shake가 뭐길래?

위에서 언급했듯
TCP는 장치들 사이에 접속을 Establish 하기 위해 3-way handshake 를 사용함

2-way handshake 은?

  • 요청을 보내고
  • 요청이 정상적으로 돌아오면
  • 실질 데이터를 전송하는 방법임

2-way handshake 가 무슨 문제점이 있는데?

  • 요청을 보내고, 요청에 대한 응답이 정상적으로 돌아오지 않았다면
  • 송신자는 다시 똑같은 요청을 재전송 할 것임
  • 그 요청을 이전과 다른 연결로 생각해서 문제 발생 가능성이 있음

그럼 어떻게 해야돼? - 3-way handshake

  • 일반적으로 TCP연결을 초기화 할 때 사용함
  1. client가 연결에 대한 요청 SYN을 보내고
  2. Server가 SYN에 대해 요청을 수락한다는 SYNACK를 보낸다
  3. client가 잘 받았다고 ACK를 보내고 연결이 이루어 짐
  4. 데이터 송/수신

4-way handshake 도 있다고?

  • 일반적으로 TCP연결이 종료될 때 사용됨
  1. client가 연결을 종료하겠다는 FIN을 전송
  2. Server가 알겠다고 일단ACK를 보냄
    • 이 상태에서 data 아직 전송 가능함)
    • client는 서버가 close 를 할 때까지 기다림
  3. Server가 연결 해지 준비 다 되었다고 FIN을 보냄
  4. client는 알겠다고 ACK보냄
  5. 연결 종료


References
[컴퓨터 네트워킹 하향식 접근 - James F.Kurose]

0개의 댓글