DEV Community

Chan
Chan

Posted on Edited on

TCP와 UDP

TCP

Transmission Control Protocol의 약자이다. OSI Model 기준으로 L4에 해당하는 프로토콜이다.

UDP

User Datagram Protocol의 약자이다. OSI Model 기준으로 L4에 해당하는 프로토콜이다.

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)