CS 관련 지식 (네트워크) TCP, UDP, TCP 3,4 way handshake

링딩·2023년 3월 10일
0

Computer Science

목록 보기
1/49


전송계층에서 사용하는 프로토콜 ...TCP와 UDP

전송계층은 송수신자 간의 통신을 맡고 있는 계층이다. 곧 데이터의 전달을 뜻하는데 이를 주로 맡고 있는 프로토콜에 'TCP', 'UDP' 등이 있다.

여기서 보면 OSI 7계층 중 4계층에서 기능하고 있는 것을 알 수 있다.




1. TCP 정의

인터넷상에서 데이터를 '메시지 형태'로 전송을 제어하는 프로토콜(규약)


1-2. TCP 특징

  • 연결 지향 방식
    높은 신뢰성을 보장
    ㄴ 3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
  • 흐름 제어 및 혼잡 제어
    ㄴ> CPU를 사용해서 속도에 영향을 줌
  • UDP보다 속도가 느리다
  • 전이중(Full-Duplex), 점대점(Point to Point) 방식
  • 스트림 전송으로 전송 데이터의 크기가 무제한

곧 신뢰성이 필요한 중요한 전송일 때 사용한다는 거다.👍


Q. 연결 지향 방식?

A. 패킷을 전송하기 위한 논리적 경로를 배정한다.

Q. 3-way handshaking은?

A. 목적지와 수신지를 확실히 하여 정확한 전송을 보장하기 위해 세션을 수립하는 과정.


Q. 패킷이란?

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



2. UDP

(정의)

사용자 데이터그램 프로토콜(규약) 데이터를 데이터그램 단위로 처리하는 프로토콜


2-1. UDP 성질

  • 비연결형 프로토콜(규약)
    ㄴ> 연결을 위한 '논리적 경로' (x)
    => 패킷은 독립적, 서로 다른 경로로 독립적으로 처리됨. (순서가 바뀔 위험 ㅇ)
  • 신뢰성이 낮음
  • TCP에 비해 속도가 빠름
  • 정보를 주고 받을 때 신호절차를 거치지 않음.
  • 흐름제어 x
    ㄴ> 패킷이 전송오류 등을 확인할 수 없음
  • 연결성이 없어, 서버 소켓과 클라이언트 소켓의 구분이 없음.

신뢰 < 연속성
실시간 서비스(속도가 빠르면 좋은)... 에 이용


Q. 데이터 그램

A. 독립적인 관계를 지니는 패킷

Q. 흐름제어와 혼잡제어

A. 흐름제어 (버퍼 오버플로우 방지)
: 데이터 송수신 구간의 속도를 조절
A. 혼잡제어
: 패킷 수가 넘치지 않게 조절.





👀차이점


오늘날 실무에서는..?

실시간 서비스더라도 UDP 보다는 TCP 통신을 주로 이용한다고 함.
=> 왜냐하면 신뢰성을 기반으로 하기 때문.





🚦 TCP 3,4 way handshake

솔직히 TCP를 배웠다면 당연히 이도 알아야 할 것이다...

1. TCP 3 way handshake 정의

  • TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정이다.

  1. 클라이언트가 서버에게 SYN 패킷을 보냄 (sequence : x)

  2. 서버가 SYN(x)을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN 패킷을 보냄 (sequence : y, ACK : x + 1)

  3. 클라이언트는 서버의 응답은 ACK(x+1)와 SYN(y) 패킷을 받고, ACK(y+1)를 서버로 보냄





2. TCP 4 way handshake 정의

  • 연결 이후 모든 통신이 끝났다면 네트워크 연결을 해제하는 과정이다.

  1. 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다.

  2. 서버는 FIN을 받고, 확인했다는 ACK를 클라이언트에게 보낸다. (이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다)

  3. 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보낸다.

  4. 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다.
    (아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다.)

=> 서버는 ACK를 받은 이후 소켓을 닫는다 (Closed)

=> TIME_WAIT 시간이 끝나면 클라이언트도 닫는다 (Closed)



출처

망나니 개발자님

profile
초짜 백엔드 개린이

0개의 댓글