。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

CS

2.2 TCP와 UDP

quarrrter 2023. 11. 29. 23:16

TCP와 UDP는 전송 계층에서 사용하는 대표적인 프로토콜이다. 

 

TCP란

전송계층에 해당하는 네트워크 프로토콜로, 연결형 서비스를 지원하고 데이터의 신뢰성을 보장한다. 

 

  • 송신부와 수신부의 연결을 확인하는 연결형 서비스다
  • 패킷 교환 방식은 패킷이 전달되는 회선이 정해져 있는 가상 회선 방식이다.
  • 패킷의 전송 순서가 보장된다
  • 패킷의 수신 여부를 확인한다
  • 송신부와 수신부는 1:1 통신을 한다
  • 데이터 손실이 없음을 보장하므로 신뢰성이 높다
  • 데이터의 송수신 속도가 느리다.

 

*패킷 교환 방식 : 가장 많이 사용하는 데이터 통신방식

1. 가상 회선 방식: 데이터를 주고받기 전에 패킷을 전송할 경로인 가상 회선을 설정해서 모든 패킷을 같은 경로로 전송한다.

2. 데이터그램 방식: 패킷마다 최적의 경로로 전송되는 방시으로, 송신부에서 보낸 패킷의 순서와 수신부에 도착하는 패킷의 순서가 다를 수 있다.

 

 

TCP 핸드셰이킹

TCP에서는 연결형 서비스를 지원하기 위해 송신부와 수신부를 연결하는 과정을 거친다.

연결 시작할 때는 : 3-way 핸드셰이킹

연결을 종료할 때는 : 4-way 핸드셰이킹을 한다.

핸드 셰이킹 과정에서는 송신부와 수신부 간 연결을 제어 및 관리하도록 flag 값을 주고 받는다.

  • SYN: Synchronization(동기화)의 약자, 연결을 생성할 때 사용
  • FIN: Finish, 연결을 끊을 때 사용
  • ACK: Acknowledgment(승인), 데이커를 전송하면 수신자가 받았음을 알려 줄 때 사용
  • RST: Rest(초기화), 연결을 재설정할 때 사용
  • PSH: Push, 빠른 응답이 필요한 데이터를 응용 계층으로 즉시 전송할 때 사용
  • URG: Urgent, 다른 데이터보다 우선순위가 높은 데이터를 전송할 때 사용

 

 

[3-way 핸드셰이킹]

데이터를 본격적으로 주고 받기 전, 상대방 컴퓨터와 세션을 수립하는 과정으로 송수신자 모두 데이터를 주고 받을 준비가 되었음을 보장.

1. 송신부 - > 수신부 : SYN(N)

2. 수신부 -> 송신부 : ACK(N+1) + SYN(M)

3. 송신부 -> 수신부 : ACK(M+1)

*임의의 숫자: N, M

 

 

[4-way 핸드셰이킹]

TCP 연결을 해제할 때 이뤄지는 과정 

1. 송신부 >> 수신부 : FIN

2. 수신부 >> 송신부 : ACK

3. 수신부 >> 송신부 : FIN

4. 송신부 >>> 수신부 : ACK

 

***

세션이 연결되면 일정 시간이 경과한 후 TCP Keep Alive 패킷을 던져 연결 유지 상태를 확인할 수 있다. 연결을 유지하길 원하는 쪽에서 보내며, 패킷에 대한 응답을 받으면 시간을 처음부터 다시 측정하고, 응답을 못 받으면 연결을 종료한다. 동일한 송수신부로부터 재요청이 오는 경우 불필요한 3way 핸드셰이킹을 줄일 수 있고, 불필요한 연결(좀비 커넥션)을 방지할 수 있다.

 

 

 

TCP 제어 방법

TCP의 데이터 신뢰성을 보장하기 위한 제어 방법으로 흐름 제어, 혼잡 제어, 오류 제어가 있다. 

 

흐름제어: 데이터 송수신부와 수신부에서 데이터 처리 속도의 차이 때문에 생기는 데이터 손실을 방지하는 방법

혼잡제어: 송신부의 데이터 전달 속도와 네트워크 속도 차이로 데이터 손실이 발생하는 것을 방지하기 위한 방법

(혼잡: 네트워크에 패킷 수가 과도하게 증가하는 증상, 쌓여서 일정 시간 응답을 못 받으면 패킷 재전송하여 악순환 야기)

오류제어: 데이터에 오류 또는 유실이 발생할 때 데이터의 신뢰성을 보장하기 위해 오류를 제어하는 방식 

 


UDP

User Datagram Protocl 사용자 데이터그램 프로토콜 

전송 계층에 해당하는 네트워크 프로토콜로 송신부와 수신부 간 연결을 지원하지 않고 데이터그램 형태의 통신을 지원한다. 

TCP의 3way 같은 과정없이 패킷을 바로 송수신 하는데, 신뢰성이 낮지만 속도가 빠르다. 

 

  • 송신부와 수신부의 연결이 보장되지 않는 비연결형 서비스다.
  • 패킷이 서롣 다른 회선으로 교환될 수 있는 데이터그램 패킷 교환 방식이다.
  • 송신부에서 전달한 패킷 순서와 수신부에서 받은 패킷 순서가 다를 수 있다.
  • 패킷의 수신 여부를 확인하지 않는다.
  • 1:1 통신, 1:N, N:N 통신 모두 가능하다
  • 데이터의 신뢰성이 낮다.
  • 데이터의 전송 속도가 빠르다.

 

UDP의 오류 검출 

최소한의 신뢰성을 보장하기 위해 체크섬 방식으로 오류를 검출할 수 있다. 

체크섬을 만들기 위해 데이터를 모두 더하고 오버플로되는 캐리가 발생하면 해당 캐리를 떼서 데이터에 다시 더한 후 1의 보수를 취해 체크섬을 만든다.

UDP송신부는 UDP의 헤더, IP 헤더의 일부 정보(발신 IP주소, 수신 IP 주소, 프로토콜 ID등)와 데이터로 체크섬 값 생성.

이때 생성한 체크섬 값을 UDP 헤더의 체크섬 영역에 넣어 수신부에 보내고, 수신부는 체크섬을 포함한 모든 값을 더해 비트가 1이 나오는지 확인하고, 1이라는 건 송시부와 동일한 체크섬 값이 나온다는 뜻임. ... 

100%오류 검출은 아니며, 선택사항이므로 송신부에서 0으로 체크섬 값을 보내면 수신부는 계산하지 않음. 

 

*캐리: 2진수의 덧셈 연산 시 자릿수가 넘어가는 것

*1의 보수: 각 자릿수의 값이 모두 1인 수에서 주어진 2진수를 빼면 나오는 수. 0101의 1의 보수 : 1010

'CS' 카테고리의 다른 글

2.4 REST  (0) 2023.12.04
2.3 HTTP / HTTPS  (0) 2023.12.01
2.1 네트워크 계층  (1) 2023.11.28
1. 운영체제 질문  (0) 2023.11.25
1. 운영체제 정리  (1) 2023.11.25