TCP(3 Way Handshake), UDP?

정종화·2021년 12월 15일
0

TCP, UDP가 뭐야?

  • 전송계층에서 사용하는 프로토콜로써, 목적지 장비까지 전송한 패킷을 상위의 특정 응용 프로토콜에게 전달하는 것에 목적이 있다.
  • 간단하게 설명하자면 전송계층에서 사용하는 프로토콜이다 라고 생각하면 될 것 같다.

그렇다면 전송계층은 뭐야?

  • OSI 7계층의 한 부분에 속하고 양 끝단(End to End)의 사용자들이 신뢰성 있는 데이터를 주고받을 수 있도록 하게 해주어 상위 계층에서 데이터 전달의 유효성, 효율성을 생각하지 않도록 해준다.

그러면 프로토콜은 또 뭐고?

  • 복수의 컴퓨터 사이나 중앙 컴퓨터와 단말기 사이에서 데이터 통신원활하게 하기 위해 필요한 통신 규약이다. 신호 송신의 순서, 데이터의 표현법, 오류 검출법 등을 정한다.
  • 간단히 말해 하나의 통신 규약이라고 생각하면 될 것 같다.

TCP(Transmission Control Protocol)가 뭔지 설명해줘.

  • 네트워크 계층 중 전송계층에서 사용하는 프로토콜이다.
  • 데이터 전송 시 데이터를 보내는 곳과 받는 곳 간에 연결을 미리 구축하여 신뢰성있는 데이터 송수신을 보장하는 연결 지향형 프로토콜이다.
  • 신뢰성 있는 데이터 송수신이라고 하면 흐름제어, 혼잡제어, 에러검출 등이 가능하다는것인데,
  • 흐름제어라고 하면 데이터의 처리속도를 조절하여 수신자의 버퍼 오버플로우를 방지한다는 의미이다. (송신하는 곳에서 감당이 안되게 많은 데이터를 빠르게 보내서 수신하는 곳에서 문제가 일어나는 것을 막을 수 있다.)
  • 혼잡제어라고 하면 네트워크 내의 패킷 수넘치게 증가하지 않도록 방지한다는 의미이다. (정보의 소통량이 과다하면 패킷을 조금만 전송하여 혼잡 붕괴 현상이 일어나는 것을 막을 수 있다.)
  • 흐름제어나 혼잡제어는 받는곳 즉 우리가 사용하는 컴퓨터라고 치면 컴퓨터는 사람의 뇌처럼 한계가 있기 때문에 너무 빠르게 데이터를 보내오거나 너무 많은 양의 데이터를 보내오면 문제가 발생할 수도 있기에 위와같은 제어가 필요한것이다.
  • 신뢰성 높은 전송이라 함은, 데이터의 순서를 유지할 수 있고, 중복을 방지할 수 있다는 말이 된다. (데이터를 보낼 시 순서가 뒤바뀌는 문제를 방지할 수 있고, 중복된 데이터를 송수신하는 문제를 방지할 수 있다.)
  • 에러가 발생할 경우 이를 감지하고 필요 시 데이터재전송 할 수 있게 된다.
  • HTTP, Email, File Transfer 등에서 많이 사용되고 있다.

UDP(User Datagram Protocol)가 뭔지도 설명해줘.

  • TCP와 마찬가지로 네트워크 계층 중 전송계층에서 사용하는 프로토콜이다.
  • TCP와는 다르게 데이터 전송 시 보내는곳과 받는곳 간에 따로 미리 연결구축하지 않는 단방향 데이터 흐름을 가지고 있는 비연결형 프로토콜이다.
  • TCP와는 달리 신뢰성을 보장하지 않기에 데이터 송수신의 순서를 보장한다거나 중복을 방지하지 못하고, 흐름제어혼잡제어하지 못한다.
  • 다만 UDP 헤더에 있는 Checksum 필드를 통해 최소한의 오류는 검출할 수 있다.
  • TCP보다 빠르다는 장점이 있지만, 패킷 손실이 발생할수 있다는 단점도 가지고 있다.
  • DNS, Broadcasting (실시간 동영상 서비스) 등에서 많이 사용되고 있다.

3 Way Handshake는 또 뭐야?

  • 3 Way-Handshake 란, 전송제어 프로토콜(TCP)에서 통신을 하는 장치간 서로 연결잘 되어있는지 확인하는 과정/방식이다. 더 쉽게 말하자면 송수신자(데이터를 주고 받는 두 사람이라고 생각한다면)사이에 연결을 확인하는 과정이다.

  • TCP 프로토콜연결지향적이기 때문에 데이터 전송 시 상대방이 내 신호를 받을 수 있는지 확인하고 전송을 하게 되는데 이때 보내는 곳에서 받는 곳이 신호를 잘 받을 수 있는 지를 확인하는 것이 3 way handshake 이다.

  • 간단히 설명하자면 아래와 같다.
    1단계 : (송신자수신자에게) 들림?
    2단계 : (수신자송신자에게) ㅇㅇ, 너도 들림?
    3단계 : (송신자수신자에게) ㅇㅇ, 나도 잘 들림 굿굿.

  • 조금 더 자세히 설명해보자면 아래와 같다.
    1단계 : 송신자가 수신자에게 SYN, 즉 Synchronize Sequence Number 라는 임의의 랜덤 숫자(Seq Number)가 포함되어있는 연결 요청을 보내게 된다.

    2단계 : 수신자가 요청을 수락하고, 송신자에게도 SYN 연결요청을 전송한다. 이 때 수신자가 송신자에게 보내는 SYN에는 ACK, 즉 Acknowledgement number가 포함되어 있는데, 이 번호는 처음에 받은 SYN에 있는 Seq Number에 +1한 값을 가지게 된다. 이 ACK가 포함된 새로운 SYN을 송신자에게 전송함으로서 먼저 보내준 SYN은 잘 받았고, 보내주는 ACK가 담긴 새로운 SYN은 잘 받았는지 다시 물어보게 된다.

    3단계 : 송신자가 ACK가 담긴 새로운 SYN을 잘 받았다는 의미로 또 다시 새로운 SYN을 송신자에게 보내게 되는데 이때도 마찬가지로 수신자로부터 받은 Acknowledgement number(ACK)에 +1한 값을 가지는 ACK를 보낼 SYN에 담아 같이 전송하게 된다. 이렇게 됨으로써 송신자와 수신자간의 연결이 확립되는것이다.

그럼 왜 2 Way Handshake로는 안되는거야?

  • TCP양방향 연결이기 때문에 송신자나 수신자 모두 서로에게 자신의 존재를 알리고 대답을 얻어야된다. 그런데 2 Way로만 하게 되면 송신자는 수신자로부터 답을 얻기때문에 수신자의 존재를 알 수 있지만 수신자는 송신자에게 자신의 존재가 잘 알려졌는지 답을 얻지 못하게 되어 확실한 답을 얻을 수 없기 때문에 3 Way Handshake가 필요한것이다.
profile
Hello?

0개의 댓글