네트워크/네트워크 핵심이론 - 기초

Ch03. L4 수준 대표주자 TCP와 UDP - TCP

webmaster 2024. 10. 28. 13:47
728x90

TCP와 UDP

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

Network 7계층 기반 설명

  • TCP, UDP에서 사용하는 데이터 단위는 Segment,Datagram이다.
  • TCP는 수신측에서 항상 연결대기를 하고 있다.
    • 프로세스가 OS에 특정 포트의 Socket을 사용한다고 요청하고, 이를 허용하게 되면 Socket이 열리고 그때부터 통신이 가능하다.
    • 만약 허용되지 않은 Socket으로 요청이 오면, 운영체제 수준에서 연결을 못받아준다는 응답이 간다.

TCP 연결 과정

3-way-Handshaking

  • 3 way Handshaking 과정에서 사용되는 데이터 단위는 Segment이다.
    • 이 과정에서 사용되는 데이터는 Payload가 없이 IP/TCP 만 전달된다.
  • 과정 순서
    • Syn 과정에서 랜덤하게 뽑은 Sequence 번호를 Server에 전달한다.
    • Server도 랜덤하게 뽑은 Sequence 번호와 Client에게 전달받은 Sequence번호 + 1 값을 Client에 응답한다.
    • 다시 Client는 Server에게 전달받은 Sequence번호를 +1하여 Server에 전달한다.
  • Client는 Sync응답을 받았을 때, Established 상태가 되는데, 서버는 이 때, ACK 요청을 받지 못하기 때문에 Established 상태가 아니다.
    • ACK 요청을 받고 난 후, Server는 Established 상태가 된다.
  • 3-way-handshake는 쉽게 정책을 교환하는 것인데, Sequence, MSS(Maxium Segment Size) 등 값을 교환한다.
    • 해당 Size에 맞춰서 Client가 Segment를 전달한다.

TCP 연결 종료 과정

4-way-handshake
TCP 상태 변화

  • 마지막 ACK를 보낸 뒤, TimeWait -> Close가 되면 Socket 자원이 회수가 되는 것이다.
  • Server Application이 연결을 끊는게 아니라, Client에게 연결 끊기도록 유도를 해야지만 Time_Wating상태를 줄일 수 있다.
  • Active close: TCP 연결 해제 요청한 쪽, 그러니까 트래픽을 전송(request)하고 정상적으로 전송 되었으면 연결을 끊는 쪽
  • Passive close: TCP 연결 해제 요청을 받은 쪽, 트래픽을 받는 쪽(api 서버라고 치면 클라이언트에게 응답을 주는 쪽)

TCP, UDP Header 형식

TCP Header 형식

TCP Header 형식

  • Sequence Number는 Data가 전달이 되다고 하면 해당 Byte 만큼 Sequence Number가 증가한다.
    • Data 크기가 100 Byte면, Sequence Number + 100 값 전달
  • Flag는 TCP의 상태를 알려준다.
  • Window Size는 여분의 크기이다. 
    • 네트워크 속도가 처리속도를 역전해 버린 경우 Zero Window가 발생하고, 이는 프로그램에서 문제를 해결해야한다.

UDP Header 형식

UDP Header 형식

  • 혼잡 제어를 하지 않고 그냥 전달한다.
  • 영상 송출 서비스 같이 여러 클라이언트가 스트림 데이터를 전달받을 때, 하향 편준화해서 데이터를 받을 필요가 없다.(UDP 사용)
  • 게임 서버 같은 경우 UDP 프로토콜을 사용하며, TCP 혼잡제어 로직을 직접 구현한다. 
    • TCP 프로토콜을 사용해서 모든 데이터를 안전하게 받는것 보다, 사용자가 데이터가 조금 사라지더라도 유연하게 게임을 이용하는것이 더 중요하기 때문

 

728x90