DEV Community

Chan
Chan

Posted on

tcp와 udp

tcp와 udp의 차이

tcp는 reliable data tranfer protocol, udp는 unreliable data transfer protocol이다.

Error Control & Retransmission

  • tcp: error detection과 error correction을 모두 수행한다. checksum이 올바르지 않다면 세그먼트를 재전송한다 지정된 시간 내 ack가 오지 않는다면 timeout이 되어 재전송이 발생한다.
  • udp: error detection만 수행한다. checksum이 올바르지 않다면 전송된 세그먼트를 버린다. timeout은 없다.

Handshake

  • tcp: connection open/close시 handshake를 한다.
  • udp: connection open/close시 handshake를 하지 않는다.

Congestion Control and Flow Control

Tcp는 sliding window를 통해 여러개의 세그먼트를 한번에 보낸다. congestion control과 flow control은 얼마나 많은 세그먼트를 한번에 보낼지 조절해주는 역할을 한다.

  • Congestion Control: 네트워크가 감당 가능한 만큼의 세그먼트만 보내는 방법이다. Congestion window를 보고 확인한다.
  • Flow Control: 수신자의 버퍼가 넘쳐 데이터 유실이 나지 않게 보내는 방법이다. Recevier window를 보고 확인한다.

tcp connection open이 3 way handshake인 이유

  • tcp는 full duplex이다. A->B 채널, B->A 별도로 존재하고, 송수신이 동시에 발생할 수 있다.
  • 안정적인 데이터 전송을 보장하기 위해서는 A->B 채널이 정상적으로 동작하는지, 그리고, B->A 채널이 정상적으로 동작하는지 확인이 필요하다. 그래서 SYN / SYN + ACK / ACK의 3 way handshake가 필요하다.

tcp connection close가 4 way handshake인 이유

A가 더이상 보낼 데이터가 없더라도, B는 보낼 데이터가 있을 때까지 기다려줘야 하기 때문에 4 way handshake를 한다. A는 송신 종료하고, B는 계속 송신을 하고 있는 이 상태를 half-close라고 한다.

  • A: B에게 자신은 더이상 전송할 데이터가 없다는 사실을 알려야 한다.(FIN)
  • B: A의 FIN을 제대로 받았다는 사실을 알려야 한다.(ACK)
  • B: A에게 자신은 더이상 전송할 데이터가 없다는 사실을 알려야 한다. (FIN)
  • A: B의 FIN을 제대로 받았다는 사실을 알려야 한다.(ACK)

B의 FIN과 ACK를 한번에 보낼 수 없는 이유

  • B가 자신의 데이터를 전부 보낸 뒤에 FIN과 ACK를 동시에 보낸다고 하자. 그러면 A는 그동안 B가 FIN 세그먼트를 제대로 받았는지 알 수 없기 때문에 timeout이 계속 걸려 FIN 요청을 보내버리는 등 사이드 이펙트가 발생할 수 있다.

Top comments (0)