운영 및 유지보수 안전 링크를 설정하기 위한 TCP 3방향 핸드셰이크와 링크를 끊기 위한 4방향 웨이브의 분석 예

링크를 설정하기 위한 TCP 3방향 핸드셰이크와 링크를 끊기 위한 4방향 웨이브의 분석 예

May 11, 2023 pm 10:34 PM
tcp

차근차근.

먼저 TCP 프로토콜에 대해 간단히 소개하겠습니다.

TCP(전송 제어 프로토콜)는 연결 지향적이고 안정적인 바이트 스트림 기반 전송 계층 프로토콜입니다. 복잡하지만 프로그래머와 운영 및 유지보수 담당자 모두가 알아야 할 기본 기술입니다.

객체 지향 - 통신하기 전에 두 당사자가 미리 연결을 설정해야 합니다. 이는 실제 생활에서 전화를 걸어야 통신이 이루어지는 것과 같습니다.

신뢰성 - TCP 프로토콜에는 애플리케이션 데이터 분리, 재전송 메커니즘, 헤더 및 데이터 확인, 수신된 데이터 정렬 및 이를 수신 계층인 애플리케이션 계층으로 전달하는 등 통신 링크의 신뢰성을 보장하는 많은 규칙이 있습니다. end는 중복 데이터를 삭제하고 흐름 제어를 수행할 수 있습니다.

TCP 데이터는 다음 형식의 IP 데이터그램에 캡슐화됩니다.

링크를 설정하기 위한 TCP 3방향 핸드셰이크와 링크를 끊기 위한 4방향 웨이브의 분석 예

포함: 포트 번호 [16비트], 시퀀스 번호 [32비트], 오프셋 [4비트], 예약됨 [6비트], 플래그 [6비트], 창 크기(창) [16비트], 체크섬 [16비트], 비상 포인터 [16비트], TCP 옵션

여기서 참고할 사항:

  • TCP 패킷에는 IP 주소가 없으며 IP 계층에 있지만 소스 포트와 대상 포트.

  • TCP 연결에는 동일한 연결을 나타내기 위해 4개의 튜플(src_ip, src_port, dst_ip, dst_port)이 필요합니다. 정확히 말하면 5개의 튜플이고 그 중 하나가 프로토콜입니다. 하지만 여기서는 TCP 프로토콜에 대해서만 이야기하고 있으므로 여기서는 쿼드러플에 대해서만 이야기합니다.

  • Sequence Number는 패킷의 시퀀스 번호이며, 는 네트워크 패킷 재정렬 문제를 해결하는 데 사용됩니다.

  • 승인 번호는 ACK입니다 - 수신을 확인하는 데 사용되며, 패킷이 손실되지 않는 문제를 해결하는 데 사용됩니다.

  • Window는 Advertised-Window라고도 하는데, 이는 유명한 슬라이딩 윈도우(Sliding Window)이기도 하며, 흐름 제어를 해결하는 데 사용됩니다.

  • TCP 플래그는 패킷의 종류로 주로 TCP 상태 머신을 제어하는 ​​데 사용됩니다.

    URG: 비상 포인터가 유효합니다.

    ACK: 시퀀스 번호가 유효한지 확인합니다.

    PSH: 수신자는 이 세그먼트를 가능한 한 빨리 애플리케이션 계층에 전달해야 합니다.

    RST: 연결을 다시 설정합니다.

    SYN: 동기화 연결을 시작하는 데 사용되는 시퀀스 번호

    FIN: 발신자가 전송 작업을 완료합니다(적극적으로 닫음)

링크를 설정하기 위한 3방향 핸드셰이크

1 요청하는 쪽(클라이언트)이 SYN=1을 보냅니다. 클라이언트가 연결하려는 서버의 포트를 나타내기 위해 TCP는 SYN=1을 규정합니다. 데이터를 전달할 수 없지만 시퀀스 번호를 소비하므로 seq=x를 가정하여 초기 시퀀스 번호 seq를 임의의 숫자로 선언합니다.

2. 서버는 클라이언트 메시지 세그먼트를 확인하고 확인 시퀀스 번호를 ACK=x+1로 설정합니다. 동시에 클라이언트에 연결을 요청하고 SYN=1을 보내고 seq=y라고 가정하여 초기 seq 번호를 보냅니다.

3. 클라이언트는 서버 메시지 세그먼트를 확인하고 확인 시퀀스 번호를 보낸 다음 서버 ACK=y+1과의 연결 설정에 동의합니다.

이 세 가지 메시지 세그먼트로 연결 설정이 완료됩니다. 이 과정을 3방향 핸드셰이크라고도 합니다

네 번 흔들어 링크를 끊습니다

1. 호스트 1(클라이언트 또는 서버일 수 있음), 시퀀스 번호와 승인 번호를 설정하고 호스트 2로 메시지를 보냅니다. FIN 메시지 세그먼트를 보냅니다. 이때 호스트 1은 호스트 2로 보낼 데이터가 없음을 의미합니다. 호스트 2는 호스트 1이 보낸 FIN 메시지 세그먼트를 수신하고 응답합니다. 1 ACK 메시지 세그먼트인 승인 번호는 시퀀스 번호에 1을 더한 것입니다. 호스트 1은 FIN_WAIT_2 상태에 들어가고 호스트 1에게 보낼 데이터가 없으며 연결을 닫을 수 있음을 알립니다. 1 FIN 메시지 세그먼트, 연결 종료를 요청하고 호스트 2는 CLOSE_WAIT 상태에 들어갑니다.

4. 호스트 1은 호스트 2가 보낸 FIN 메시지 세그먼트를 수신하고 ACK 메시지 세그먼트를 호스트 2에 보냅니다. TIME_WAIT 상태; 호스트 2는 호스트 1로부터 ACK 세그먼트를 받은 후 연결을 닫습니다. 호스트 1은 2MSL을 기다린 후에도 여전히 응답을 받지 못합니다. 이는 호스트 1이 정상적으로 닫혔음을 증명합니다. 연결을 닫을 수도 있습니다.

이 시점에서 TCP의 네 번의 해체는 행복하게 마무리되었습니다.

링크 설정 및 연결 해제 아이콘은 다음과 같습니다.

3자 핸드셰이크인 이유를 분석해 볼까요?

링크를 설정하기 위한 TCP 3방향 핸드셰이크와 링크를 끊기 위한 4방향 웨이브의 분석 예잘못된 링크 요청 세그먼트가 갑자기 서버로 전송되어 오류가 발생하는 것을 방지하기 위해. 밤을 줘.

클라이언트가 보낸 첫 번째 연결 요청 세그먼트는 손실되지 않았지만 특정 네트워크 노드에 오랫동안 머물었기 때문에 연결이 해제된 후 일정 시간이 지나야 서버에 도달할 때까지 지연되었습니다. 이는 만료된 지 오래 된 메시지 세그먼트임이 밝혀졌습니다. 그러나 서버는 이 유효하지 않은 연결 요청 세그먼트를 수신한 후 클라이언트가 다시 보낸 새로운 연결 요청이라고 잘못 생각합니다. 따라서 클라이언트에게 확인 메시지 세그먼트를 보내고 연결 설정에 동의합니다. "3방향 핸드셰이크"를 사용하지 않는다고 가정하면 서버에서 확인 메시지를 보내기만 하면 새로운 연결이 설정됩니다. 클라이언트는 연결 설정 요청을 발행하지 않았으므로 서버의 확인에 주의를 기울이지 않으며 서버에 데이터를 보내지 않습니다. 그러나 서버는 새로운 전송 연결이 설정되었으며 클라이언트가 데이터를 보내기를 기다리고 있다고 생각합니다. 이런 식으로 서버의 많은 자원이 낭비됩니다. "3방향 핸드셰이크" 방법을 사용하면 위와 같은 현상이 발생하는 것을 방지할 수 있습니다. 예를 들어, 지금 상황에서는 클라이언트가 서버의 확인 메시지를 보내지 않습니다. 서버는 확인을 받을 수 없으므로 클라이언트가 연결 설정을 요청하지 않았다는 것을 알고 있습니다. "

이것은 매우 명확합니다. 서버가 영원히 기다리면서 리소스를 낭비하는 것을 방지합니다.

그렇다면 왜 4개의 웨이브가 있습니까?

TCP 프로토콜은 연결 지향적이고 안정적인 바이트 스트림 기반 전송 계층 통신 프로토콜입니다. TCP는 전이중 모드는 호스트 1이 FIN 세그먼트를 보낼 때 호스트 1이 보낼 데이터가 없음을 의미합니다. 그러나 이때 호스트 1은 모든 데이터가 전송되었음을 나타냅니다. 호스트 2가 ACK 메시지 세그먼트를 반환하면 호스트 1에 보낼 데이터가 없다는 것을 이미 알고 있지만 호스트 2도 FIN을 보낼 때 호스트 2는 여전히 데이터를 보낼 수 있습니다. 세그먼트가 발생하면 호스트 2는 보낼 데이터가 없으며 호스트 1에 보낼 데이터가 없다고 알리면 두 당사자 모두 기꺼이 TCP 연결을 중단할 것입니다.

네 번의 이별 동안 상태 변화를 이해해야 합니다.

위 내용은 링크를 설정하기 위한 TCP 3방향 핸드셰이크와 링크를 끊기 위한 4방향 웨이브의 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

win10에서 tcp/ip 프로토콜을 재설정하는 방법은 무엇입니까? Windows 10에서 TCP/IP 프로토콜 스택을 재설정하는 방법 win10에서 tcp/ip 프로토콜을 재설정하는 방법은 무엇입니까? Windows 10에서 TCP/IP 프로토콜 스택을 재설정하는 방법 Mar 16, 2024 am 11:07 AM

win10에서 tcp/ip 프로토콜을 재설정하는 방법은 무엇입니까? 실제로 방법은 매우 간단합니다. 사용자는 명령 프롬프트를 직접 입력한 다음 Ctrl+Shift+Enter 키 조합을 눌러 작업을 수행하거나 재설정 명령을 직접 실행하여 설정해 보겠습니다. 사용자에게 Windows 10에서 TCP/IP 프로토콜 스택을 재설정하는 방법에 대한 자세한 소개를 제공합니다. Windows 10에서 tcp/ip 프로토콜 스택을 재설정하는 방법 1. 관리자 권한 1. 단축키 win+R을 사용하여 실행 창을 직접 연 다음 cmd를 입력하고 ctrl+shift+enter 키 조합을 길게 누릅니다. 2. 또는 시작 메뉴에서 명령 프롬프트를 직접 검색하고 마우스 오른쪽 버튼을 클릭할 수도 있습니다.

Python에서 TCP를 사용하여 클라이언트와 서버 간의 대화를 구현하는 방법 Python에서 TCP를 사용하여 클라이언트와 서버 간의 대화를 구현하는 방법 May 17, 2023 pm 03:40 PM

TCP 클라이언트 지속적인 대화를 달성하기 위해 TCP 프로토콜을 사용하는 클라이언트 샘플 코드: importsocket#Client 구성 HOST='localhost'PORT=12345#TCP 소켓을 생성하고 서버에 연결 client_socket=socket.socket(socket.AF_INET,socket . SOCK_STREAM)client_socket.connect((HOST,PORT))whileTrue:#사용자 입력 메시지 가져오기=input("전송할 메시지를 입력하십시오:&

Jul 24, 2023 pm 05:18 PM

여기서 말하는 "연결 지향"이란 연결을 설정하고, 연결을 사용하고, 연결을 해제해야 함을 의미합니다. 연결 설정은 잘 알려진 TCP 3방향 핸드셰이크를 의미합니다. 연결을 사용할 때 데이터는 한 번의 전송과 한 번의 확인 형식으로 전송됩니다. 또한 우리의 일반적인 TCP 4파 웨이브인 연결이 릴리스되었습니다.

Java API 개발에서 TCP 통신을 위해 Netty4 사용 Java API 개발에서 TCP 통신을 위해 Netty4 사용 Jun 17, 2023 pm 11:18 PM

TCP는 컴퓨터 네트워크 통신 프로토콜의 일종이며 연결 지향 전송 프로토콜입니다. Java 애플리케이션 개발에서 TCP 통신은 클라이언트와 서버 간의 데이터 전송, 오디오 및 비디오의 실시간 전송 등과 같은 다양한 시나리오에서 널리 사용됩니다. Netty4는 서버와 클라이언트 간의 데이터 교환 프로세스를 최적화하여 보다 효율적이고 안정적으로 만들 수 있는 고성능, 확장성이 뛰어난 고성능 네트워크 프로그래밍 프레임워크입니다. TCP 통신에 Netty4를 사용하는 구체적인 구현 단계는 다음과 같습니다.

Java에서 단일 TCP 연결을 사용하여 여러 파일을 보내는 방법은 무엇입니까? Java에서 단일 TCP 연결을 사용하여 여러 파일을 보내는 방법은 무엇입니까? Apr 27, 2023 am 08:49 AM

하나의 TCP 연결을 사용하여 여러 파일을 보내는 방법에 대한 이 블로그가 있는 이유는 무엇입니까? 최근에 관련 내용을 읽은 적이 있는데, 단순히 소켓을 프로그래밍에 사용하는 것에는 문제가 없지만, 이는 몇 가지 기본 개념만 확립한 것뿐입니다. 여전히 실제 문제에 대해서는 아무것도 할 수 없습니다. 파일을 전송해야 할 때 데이터(바이너리 데이터)를 방금 보낸 것 같은데 파일에 대한 일부 정보(파일 확장자)가 손실되었습니다. 그리고 매번 하나의 파일을 보내는 데 하나의 소켓만 사용할 수 있고, 파일을 계속해서 보낼 수 있는 방법이 없습니다. (파일 전송을 완료하기 위해 스트림을 닫는 데 의존하기 때문에 실제로 파일의 길이를 알 수 없음을 의미합니다. , 하나의 소켓 연결이 파일을 나타내므로 파일만 보낼 수 있습니다.

리눅스 SIGPIPE 신호 리눅스 SIGPIPE 신호 Feb 19, 2024 pm 04:00 PM

TCP 통신 당사자 중 설명의 편의를 위해 다음에서는 통신 당사자를 A, B로 대체한다. TCP 프로토콜에 따르면 A가 연결을 끊은 후에도 B가 계속 데이터를 보내면 B는 A의 RST 응답을 받게 됩니다. B가 계속해서 데이터를 보내면 시스템은 SIGPIPE 신호를 보내 연결이 끊어졌음을 알리고 전송을 중단합니다. SIGPIPE 신호에 대한 시스템의 기본 처리 동작은 프로세스 B가 종료되도록 하는 것입니다. SIGPIPE 신호에 대한 운영 체제의 기본 처리 동작은 매우 비우호적입니다. TCP 통신은 두 개의 단방향 채널에 해당하는 전이중 채널이며 연결의 각 끝이 하나를 담당합니다. 반대쪽 끝이 "닫히면" 의도는 두 채널 전체를 닫는 것이지만 로컬 끝은 FIN 패킷만 수신합니다. TCP 프로토콜의 규정에 따르면,

TCP와 IP의 차이점은 무엇입니까 TCP와 IP의 차이점은 무엇입니까 Sep 04, 2023 pm 02:19 PM

TCP와 IP는 인터넷에서 서로 다른 두 가지 프로토콜입니다. 1. TCP는 전송 계층 프로토콜이고 IP는 네트워크 계층 프로토콜입니다. 2. TCP는 데이터 패킷의 분할, 정렬, 확인 및 재전송과 같은 기능을 제공합니다. 프로토콜은 데이터 패킷의 소스 및 대상 주소를 제공하는 역할을 합니다. 3. TCP는 연결 지향 프로토콜인 반면 IP 프로토콜은 연결이 없습니다. 4. TCP는 흐름 제어 및 혼잡 제어도 제공합니다.

면접관이 질문했습니다. TCP 연결은 몇 개의 HTTP 요청을 보낼 수 있습니까? 면접관이 질문했습니다. TCP 연결은 몇 개의 HTTP 요청을 보낼 수 있습니까? Feb 22, 2023 pm 12:00 PM

이런 고전적인 인터뷰 질문이 있었습니다. 브라우저에 URL을 입력하고 페이지가 표시되기까지의 과정에서 어떤 일이 발생합니까? 준비한 대부분의 학생들이 대답할 수 있다고 생각하지만, 계속해서 질문한다면 수신된 HTML에 수십 개의 이미지 태그가 포함되어 있다면 어떤 방식으로, 어떤 순서로, 몇 개의 연결이 설정되고, 다운로드할 때 어떤 프로토콜이 사용되는지 묻는 것입니다. 이 이미지들은 어때요?

See all articles