본문 바로가기
CS/네트워크

TCP & UDP

qbang 2021. 9. 29.

전송 계층(Transport Layer)

End Point간 신뢰성있는 데이터 전송을 담당하는 계층이다. 

  • 신뢰성: 데이터를 순차적으로, 안정적으로 전달하는 것
  • 전송: 포트 번호에 해당하는 프로세스에 데이터를 전달하는 것

 

전송 계층의 중요성

만약 전송 계층이 없다면, 첫 번째로 데이터의 순차적 전송이 원활할 수 없다. 예를 들어서 송신자가 1,2,3 순서대로 데이터를 전송했는데 수신자는 송신자가 전송한 순서대로 데이터를 받지 않을 수도 있다.

두 번째로 송수신자 간의 데이터 처리 속도 차이때문에 흐름 문제가 생긴다. 예를 들어 수신자가 처리할 수 있는 데이터량을 초과한다면 데이터가 누락될 수 있다.

세 번째로 네트워크의 데이터 처리 속도에 따른 혼잡 문제가 발생할 수 있다.

 

TCP(Transfer Control Protocol)

전송 계층에서의 데이터 손실을 방지하기 위해 신뢰성있는 데이터 통신을 가능하게 해주는 프로토콜이 등장하였다. 

 

특징

  • Connection 연결(3 way-handshake), 양방향 통신
  • 데이터의 순차 전송을 보장
  • 흐름 제어(Flow Control)
  • 혼잡 제어(Congestion Control)
  • 오류 감지(Error Detection)

 

세그먼트

TCP 프로토콜의 프로토콜 데이터 단위(PDU)이다.

원래 Data를 TCP 프로토콜 안에서 내부적으로 자른 다음, TCP 헤더를 붙여 다음과 같은 형태를 완성한다.

위 조각 하나를 세그먼트라고 부른다.

 

TCP 헤더

출처: https://joycecoder.tistory com/13

ACK, SYN, FIN은 TCP 연결 제어 및 데이터 관리에 쓰이는 플래그 비트이다. ACK는 전송과 관련한 제어에 쓰이는 비트이다. SYN은 커넥션을 형성하는데 쓰이는 비트이고, FIN은 커넥션을 종료할 때 쓰이는 비트이다.

 

3way handshake(커넥션 연결)

출처: https://01010011.blog/2016/12/29/tcp-characteristics/

서버와 클라이언트를 예로 들면,

1. 클라이언트가 SYN 비트를 1로 설정하여 패킷 송신

2. 서버가 데이터를 받았다는 의미로 SYN, ACK 비트를 1로 설정하여 패킷 송신

3. 클라이언트가 ACK 비트를 1로 설정하여 패킷 송신

 

데이터 전송

양방향으로 커넥션이 수립되었으면 데이터의 전송 과정에 대해 알아보자.

1. 클라이언트가 패킷을 송신

2. 서버에서 데이터를 받았으면 ACK 송신

3. 클라이언트가 ACK를 수신하지 못했으면 데이터를 재전송

이러한 과정을 통해 TCP는 신뢰성있는 통신을 보장하고 있다.

 

4way handshake(커넥션 종료)

출처: https://gyoogle.dev/blog/computer-science/network/TCP%203%20way%20handshake%20&%204%20way%20handshake.html

1. 데이터를 전부 송신한 클라이언트가 FIN을 1로 설정하여 송신

2. Server가 ACK를 송신

3. Server에서 남은 패킷 송신(클라이언트는 일정 시간 대기)

4. Server가 FIN 송신

5. Client가 ACK 송신

 

TCP의 문제점

전송의 신뢰성은 보장하지만 매번 커넥션을 연결해서 시간 손실이 발생하고, 패킷을 조금만 손실해도 재전송을 해야 한다는 단점이 있다.

 

UDP(User Datagram Protocol)

TCP보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜이다. 

 

특징

  • Connectionless(3 way-handshake 없음)
  • 순차 전송, 흐름 제어, 혼잡 제어 없음
  • 오류 감지 있음
  • 비교적 데이터의 신뢰성이 중요하지 않을 때 사용(ex. 영상 스트리밍)

 

User Datagram

UDP 프로토콜의 프로토콜 데이터 단위(PDU)이다. TCP에서처럼 헤더를 붙이지만 데이터를 나누지 않고 만약 데이터를 나눠야 한다면 애플리케이션 계층에서 해야 한다.

 

UDP 헤더

출처: https://joycecoder.tistory.com/20?category=805481

UDP 헤더는 TCP 헤더에 비해 단순한 구조를 갖는다. 데이터를 보내는 쪽의 포트 번호, 오류 감지를 위한 Checksum 등이 있다.

 

데이터 전송

커넥션을 수립하는 과정이 없기 때문에 데이터를 보내는 쪽에서 패킷을 송신하면 끝난다.

참고

https://www.youtube.com/watch?v=ikDVGYp5dhg 

'CS > 네트워크' 카테고리의 다른 글

HTTP 상태코드  (0) 2021.10.06

댓글