TCP와 UDP 프로토콜의 차이점과 원리

 
 

최근에 나는 TCP와 UDP의 원리와 차이점을 다시 인식하고 간단하게 요약했다.

1. 기능

우선, tcp와 udp는 모두 전송 계층에서 작동하며 프로그램 간에 데이터를 전송하는 데 사용됩니다. 데이터에는 일반적으로 파일 유형, 비디오 유형, jpg 이미지 등이 포함됩니다.

둘, 차이점

TCP는 연결 기반이며 UDP는 연결이 없습니다.

tcp 전송 데이터는 안정적이고 신뢰할 수 있으며 높은 네트워크 통신 품질이 필요하고 파일 전송, 이메일 전송, 웹 페이지 탐색 등과 같이 상대방에게 정확하게 전송되어야 하는 시나리오에 적합합니다.

udp의 장점은 빠르지만 패킷 손실이 발생할 수 있어 높은 실시간 성능을 요구하지만 소량의 패킷 손실에 대한 요구 사항이 많지 않은 시나리오에 적합합니다. 예: 도메인 이름 조회, 음성 통화, 라이브 비디오 등 udp의 또 다른 매우 중요한 애플리케이션 시나리오는 다음과 같은 터널 네트워크입니다. VXLAN

예를 들어 사람들 사이의 통신: UDP 프로토콜은 상대방에게 편지를 쓰는 것과 같습니다.편지를 보낸 후에는 상대방이 편지를 받았는지, 편지 내용이 완전한지, 적시에 피드백을 얻을 수 없습니다.TCP 프로토콜은 통화 통신과 같으며 이 일련의 프로세스에서 적시에 피드백을 얻을 수 있으며 상대방이 제때 수신하도록 할 수 있습니다. 아래 그림과 같이:

3. TCP 통신 프로세스:

tcp는 위의 프로세스를 어떻게 보장합니까?

3단계 핸드셰이크, 전송 확인 및 4방향 웨이브의 세 단계로 나뉩니다 . 3방향 핸드셰이크는 연결을 설정하는 프로세스입니다.

4, 3방향 핸드셰이크:

클라이언트가 서버에 연결을 시작할 때 먼저 연결 요청 데이터 패킷을 보내고 과거에 "당신과 연결을 설정할 수 있습니까?"라고 묻습니다. 이 데이터 패킷을 SYN 패킷이라고 합니다. 피어가 연결에 동의하면 SYN+ACK 패킷으로 응답하고 클라이언트가 수신한 후 ACK 패킷을 보내면 연결이 설정됩니다. 이 과정에서 3개의 데이터 패킷이 서로 전송되기 때문에 이를 3방향 핸드셰이크라고 합니다.

왜 둘이 아닌 3자 핸드셰이크인가?

만료된 요청 메시지가 갑자기 서버로 전송되어 오류가 발생하는 것을 방지하기 위함입니다  .

양방향 핸드셰이크를 사용하여 연결을 설정한다고 가정하면 클라이언트는 연결을 설정하기 위해 서버에 syn 패킷 요청을 보내는데 알 수 없는 이유로 서버에 도달하지 못하고 중간에 특정 네트워크 노드가 있습니다. 연결을 설정하기 위해 클라이언트는 syn 패킷을 다시 보내며 이번에는 데이터 패킷이 정상적으로 전달되고 서버가 syn+ack를 보낸 후에 연결이 설정됩니다.

그러나 첫 번째 데이터 패킷에 의해 차단된 네트워크가 갑자기 복구되고 첫 번째 syn 패킷이 서버로 전송됩니다. 이때 서버는 클라이언트가 새로운 연결을 시작한 것으로 간주하여 대기 데이터 상태로 들어갑니다. 클라이언트는 이를 두 개의 연결로 간주하고 클라이언트는 하나의 연결로 간주하여 일관성이 없는 상태가 됩니다. 서버가 세 방향 핸드셰이크 중에 최종 ack 패킷을 수신하지 못하면 자연히 서버는 연결이 성공적으로 설정된 것으로 간주하지 마십시오.

따라서 3방향 핸드셰이크는 본질적으로 신뢰할 수 없는 네트워크 채널 문제를 해결하는 것이며 신뢰할 수 없는 채널에서 안정적인 연결을 설정하기 위해 3방향 핸드셰이크 후 클라이언트와 서버 모두 데이터 전송 상태에 들어갑니다.

5. 데이터 전송

데이터 전송:

데이터 패킷은 전송을 위해 여러 패킷으로 분할될 수 있습니다. 패킷 손실 문제를 처리하는 방법 이러한 패킷은 다른 순서로 도착합니다. 순서가 맞지 않는 문제를 처리하는 방법은 무엇입니까?

이러한 문제에 대응하여 tcp 프로토콜은 각 연결마다 전송 버퍼를 설정하는데 연결이 설정된 후 첫 번째 바이트의 일련 번호는 0이고 이후 각 바이트의 일련 번호는 1씩 증가합니다. from 데이터 버퍼는 데이터의 일부를 취하여 송신 메시지를 형성하고 일련 번호와 길이는 tcp 프로토콜 헤더에 첨부됩니다.데이터를 수신한 후 수신측은 확인 메시지를 회신해야 합니다. 확인 메시지는 수신된 일련 번호에 길이를 더한 것과 같으며 다음 패킷 데이터 전송의 시작 시퀀스 번호입니다. 송신자는 연속적인 다중 패킷 데이터를 한 번 보낼 수 있으며, 수신자는 ack로 응답하기만 하면 됩니다. 그림과 같이:

6개 또는 4개의 파도:

 연결된 상태의 클라이언트와 서버는 모두 연결 종료 요청을 시작할 수 있으며, 이때 연결을 종료하려면 네 번의 핸드 웨이브가 필요합니다. 클라이언트가 연결 종료 요청을 시작했다고 가정하면 서버에 연결 종료를 알리는 FIN 패킷을 보내고 1 채움을 기다리며 종료에 들어갑니다.FIN 패킷을 수신한 서버는 ACK를 보냅니다. 종료 대기 상태에 진입했음을 나타내는 패킷, 클라이언트는 종료 대기 2 상태에 진입합니다. 이것은 두 번째 웨이브 입니다. 서버는 아직 보내지 않은 데이터를 보낼 수 있으며 클라이언트는 서버가 보낸 후에도 여전히 데이터를 받을 수 있습니다. 데이터, FIN 패킷의 패킷을 전송하고 마지막으로 확인 상태로 들어갑니다. 이것이 세 번째 웨이브 입니다 . 클라이언트는 ACK 패킷을 수신한 후 ACK 패킷을 복원하고 타임아웃 대기 상태로 들어갑니다. 타임아웃 기간이 지나면 연결이 완료됩니다. closed, 서버는 ACK 패킷을 수신한 후 바로 연결을 종료하는데, Wave 4번은 이번이 처음이다 .

클라이언트가 시간 초과를 기다리는 이유는 무엇입니까? 이는 클라이언트가 마지막 ACK 패킷을 보낸 후 연결을 해제한 것으로 간주하여 상대방이 ACK 패킷을 받았는지 확인하기 위함이며, ACK 패킷이 네트워크에서 유실되면 서버는 최종 확인 상태를 유지합니다. 일정 시간 동안 기다리면, 이때 서버는 ack 패킷을 받지 못했기 때문에 FIN 패킷을 다시 보내고 클라이언트는 FIN 패킷에 응답하여 ack 패킷을 다시 보내고 타임아웃 기간을 새로 고칩니다. 이 메커니즘은 세 번째 핸드셰이크와 동일합니다. 또한 신뢰할 수 없는 네트워크 링크에서 안정적인 연결 끊김 확인을 보장하기 위함입니다.

7. UDP 프로토콜

udp:우선 udp 프로토콜이 연결되어 있지 않습니다.데이터를 보내는 것은 간단한 데이터 패킷을 캡슐화한 다음 네트워크 카드에서 보내는 것입니다.데이터 패킷 사이에 상태 연결이 없습니다.처리 방법이 간단하기 때문에 udp, 결과적으로 성능 손실이 매우 적음 CPU의 경우 메모리 자원 사용량이 TCP보다 훨씬 적지만 UDP는 네트워크 전송 시 패킷 손실을 보장할 수 없으므로 UDP는 전송 측면에서 TCP보다 약함 안정.

따라서 tcp와 udp의 주요 차이점: tcp 전송 데이터는 안정적이고 신뢰할 수 있으며 높은 네트워크 통신 품질이 요구되는 시나리오에 적합하고 상대방에게 정확하게 전송되어야 합니다. 예를 들어 파일 전송, 이메일 전송, 웹 페이지 탐색 등 UDP는 속도가 빠르다는 장점이 있지만 패킷 손실이 발생할 수 있으므로 높은 실시간 성능이 필요하지만 패킷 손실이 많지 않은 시나리오에 적합합니다. 예: 도메인 이름 조회, 음성 통화, 라이브 비디오 등

udp의 또 다른 매우 중요한 애플리케이션 시나리오는 VXLAN과 같은 터널 네트워크입니다.

추천

출처blog.csdn.net/gp_911014/article/details/127545134