전통문화대전망 - 전통 미덕 - TCP 패킷이란 무엇입니까?
TCP 패킷이란 무엇입니까?
TCP 프로토콜의 주요 목적은 호스트 간에 매우 신뢰할 수 있는 패킷 교환 전송 프로토콜을 구현하는 것입니다. 이 기사에서는 프로토콜 표준 및 일부 구현 방법에 대해 설명합니다. 컴퓨터 네트워크는 현대 사회에서 필수적이기 때문에 TCP 프로토콜은 주로 네트워크가 신뢰할 수 없는 상황에서 통신을 완료하는 것으로 군대에 특히 유용할 수 있지만 정부와 상업 부문에도 동일하게 적용됩니다. TCP 는 신뢰할 수 있는 종단 간 접속 지향 프로토콜입니다. 다양한 네트워크 애플리케이션을 지원합니다. TCP 는 기본 서비스가 너무 많이 필요하지 않습니다. 하위 계층은 다양한 하드웨어로 구성된 네트워크에서 실행할 수 있는 신뢰할 수 없는 데이터그램 서비스만 제공할 수 있다고 가정합니다. 다음 그림은 계층에서 TCP 의 위치를 보여 주며, 그 아래는 IP 프로토콜입니다. TCP 는 IP 프로토콜이 제공하는 서비스에 따라 크기가 다양한 데이터를 전송할 수 있으며, IP 프로토콜은 데이터를 세그먼트화하고 다양한 네트워크를 통해 전송할 책임이 있습니다.
TCP 위에는 앱이 있고, 아래는 IP 프로토콜이다. 상위 인터페이스는 운영 체제 중단과 유사한 일련의 호출을 포함합니다. 상위 계층 애플리케이션의 경우 TCP 는 비동기적으로 데이터를 전송할 수 있어야 합니다. 하위 인터페이스가 IP 프로토콜 인터페이스라고 가정합니다. 신뢰할 수 없는 네트워크에서 연결 지향 신뢰할 수 있는 데이터 전송을 위해 TCP 는 안정성 및 흐름 제어 문제를 해결하고, 상위 계층 어플리케이션에 여러 인터페이스를 제공하고, 여러 응용 프로그램에 동시에 데이터를 제공하는 동시에 TCP 는 연결 문제를 해결해야 TCP 가 연결 지향 연결이라고 할 수 있습니다. 마지막으로 TCP 는 통신 보안 문제도 해결할 수 있어야 합니다.
네트워크 환경에는 게이트웨이 (또는 기타 디바이스) 를 통해 연결된 네트워크가 포함됩니다. 네트워크는 LAN, 메트로폴리탄 지역 네트워크 또는 WAN 이 될 수 있지만, 그것들이 무엇이든 그룹 교환을 기반으로 해야 합니다. 호스트마다 프로토콜마다 포트 번호가 다르며, 한 쌍의 프로세스가 이러한 포트 번호를 통해 통신합니다. 이러한 통신에는 컴퓨터의 I/O 작업이 포함되지 않고 네트워크의 작업만 포함됩니다. 네트워크의 컴퓨터는 패킷 전송의 소스 및 대상 노드로 간주됩니다. 특히, 컴퓨터의 여러 프로세스가 동시에 통신할 수 있다는 점에 유의해야 한다. 이때 포트 번호로 구분되며 프로세스 a 로 전송된 데이터는 프로세스 b 에서 수신하지 않습니다 .....
데이터를 전송하기 위해 프로세스는 TCP 를 호출하여 데이터와 해당 매개변수를 TCP 로 전송하므로 TCP 는 데이터를 대상 TCP 로 전송합니다. 물론 이는 TCP 패킷을 IP 패킷에 캡슐화하고 네트워크를 통해 전송하여 이루어집니다. 수신측 TCP 는 데이터를 수신한 후 상위 계층 어플리케이션과 통신하며 TCP 는 수신된 데이터 시퀀스의 정확성을 보장합니다. 하층 합의가 정확한 순서를 보장하지는 못할 수도 있지만. 여기서 설명해야 할 것은 게이트웨이가 이 가방을 받은 후 가방을 뜯어 목적지에 도착했는지 확인할 수 있다는 것이다. 그렇지 않다면 어떤 노선을 통해 목적지에 도착해야 합니까? 결정되면 게이트웨이는 다음 네트워크에서 프로토콜에 따라 TCP 패킷을 재캡슐화하고 전송하며 필요한 경우 패킷을 여러 세그먼트로 나눈 후 전송합니다. 이 착륙 검사 과정은 시간이 많이 걸리는 과정이다. 위에서 TCP 전송의 기본 프로세스를 볼 수 있습니다. 물론 구체적인 과정은 훨씬 더 복잡할 수 있습니다.
TCP 를 구현하는 호스트에서 TCP 는 하나의 모듈로 볼 수 있으며 파일 시스템과 크게 다르지 않습니다. TCP 는 또한 운영 체제의 일부 기능을 호출 할 수 있습니다. TCP 는 네트워크를 직접 다루지 않으며 네트워크를 제어하는 작업은 특수 장치 구동 모듈에 의해 수행됩니다. TCP 는 IP 인터페이스만 호출하고 IP 는 TCP 에 필요한 모든 서비스를 제공합니다. 다음 그림을 통해 TCP 프로토콜의 구조를 보다 명확하게 볼 수 있습니다.
위에서 설명한 바와 같이 TCP 연결은 신뢰할 수 있고, 패킷 전송 순서는 보장되며, 보장 순서는 일련 번호로 보장됩니다. 응답 패킷에는 수신자가 해당 일련 번호를 가진 패킷을 준비했음을 나타내는 일련 번호도 포함되어 있습니다. TCP 가 패킷을 전송할 때 패킷을 재전송 대기열에 넣고 카운터를 시작합니다. 패키지에 대한 확인 메시지를 받으면 대기열에서 해당 패키지를 제거하고 타이머가 시간 초과될 경우 패키지를 다시 보내야 합니다. TCP 가 반환한 확인 메시지는 최종 수신자가 데이터를 받는다는 것을 보장하지 않습니다. 이는 수신자의 책임입니다.
TCP 전송에 사용되는 각 채널에는 포트 레이블이 있습니다. 이 레이블은 각 TCP 터미널에 의해 결정되기 때문에 TCP 가 고유하지 않을 수 있습니다. 이 값의 고유성을 보장하기 위해 네트워크 주소와 포트 번호의 조합을 사용하여 고유한 식별 목적을 달성해야 합니다. 우리는 이것을 소켓이라고 부르며 양쪽 끝에 있는 소켓을 연결하여 연결을 식별합니다. 로컬 소켓은 서로 다른 외부 소켓과 통신할 수 있으며 이 통신은 전이중입니다.
로컬 포트에 OPEN 명령과 외부 소켓 매개 변수를 전송하여 연결을 설정하면 TCP 는 이름을 반환하여 연결을 표시합니다. 나중에 사용자가 이 이름을 사용하여 연결을 표시해야 하는 경우 해당 연결을 표시합니다. 이 연결에 대한 정보를 저장하기 위해 전송 제어 블록 (TCB) 이라는 것이 있다고 가정합니다. OPEN 명령은 또한 접속이 활성 또는 수동 대기 요청인지 여부를 지정합니다. 다음으로, 우리는 구체적인 기능을 다룰 것이다. TCP 데이터 세그먼트는 인터넷 데이터그램으로 전송됩니다. IP 패킷 헤더에는 소스 및 대상 주소를 포함한 다양한 정보 필드가 포함되어 있습니다. TCP 헤더는 인터넷 헤더 뒤에 위치하여 TCP 프로토콜별 정보를 제공합니다. 다음 그림은 TCP 헤더 형식을 보여 줍니다.
소스 포트: 16 비트 :
대상 포트: 16 비트
일련 번호: 32 비트. SYN 이 나타나면 시퀀스 코드는 실제로 초기 시퀀스 코드 (ISN) 이고 첫 번째 데이터 바이트는 ISN+1입니다.
확인 코드: 32 비트. ACK 제어 위치가 있는 경우 이 값은 수신할 패키지의 시퀀스 코드를 나타냅니다.
데이터 오프셋: 데이터가 시작되는 위치를 나타내는 4 자리 숫자입니다.
예약됨: 6 비트, 0 이어야 함
제어 비트: 6 비트;
창: 16 비트;
패리티 비트: 16 비트;
우선 순위 포인터: 16 비트, 우선 순위 데이터 뒤의 바이트;
옵션: 무한 길이; 그러나 길이는 바이트로 기록해야 합니다. 옵션의 구체적인 내용은 특정 명령과 함께 표시됩니다.
채우기: 가변 길이, 채우기 내용은 0 이어야 합니다. 이는 데이터의 시작 부분에 있는 머리와 오프셋의 조합이 32 로 나눌 수 있도록 하기 위한 것입니다.
앞서 언급했듯이 TCB 에 저장된 변수에는 발신자, 수신자의 소켓, 사용자의 전송 및 수신 버퍼 포인터 등이 포함됩니다. 또한 일련 번호 송수신과 관련된 몇 가지 변수가 있습니다.
시퀀스 변수 보내기
SND. UNA- 확인되지 않은 전송
SND. NXT- 다음 보내기
SND. WND- 전송 창
SND. 업스트림 전송 우선 순위 포인터
SND. Wl 1- 마지막 창 업데이트의 세그먼트 일련 번호입니다.
SND. WL2- 마지막 창 업데이트의 세그먼트 확인 번호.
ISS- 초기 전송 일련 번호
일련번호를 접수하다
RCV 입니다. NXT- 다음 수신
RCV 입니다. WND- 다음 수신
RCV 입니다. 업스트림 수신 우선 순위 포인터
IRS- 최초 입고 일련번호
다음 그림은 전송 시퀀스에서 변수 간의 관계를 이해하는 데 도움이 됩니다.
현재 세그먼트 변수
사이그. SEQ 세그먼트 일련 번호
사이그. ACK 세그먼트 확인 표시
사이그. 렌즈 세그먼트 길이
사이그. WND 세그먼트 창
사이그. 업스트림 세그먼트 비상 포인터
사이그. PRC- 할인 우선순위
접속 프로세스는 LISTEN, SYN-SENT, SYN-RECEIVED, ESTABLISHED, FIN-WAIT- 1, fin 등 일련의 상태로 표시됩니다 해제는 연결이 없음을 나타내며 각 상태는 다음과 같은 의미를 갖습니다.
LISTEN- 원격 TCP 포트에서 연결 요청을 수신합니다.
SYN-SENT- 접속 요청이 전송된 후 일치하는 접속 요청을 기다립니다.
SYN-RECEIVED- 접속 요청을 수신 및 보낸 후 접속 요청 확인을 기다립니다.
ESTABLISHED- 사용자에게 데이터를 전송할 수 있는 열린 연결을 나타냅니다.
FIN-WAIT- 1- 원격 TCP 에 대한 연결 끊기 요청 또는 이전 연결 끊기 요청 확인을 기다리고 있습니다.
FIN-WAIT-2- 원격 TCP 에서 연결 끊기 요청을 기다리고 있습니다.
닫기-대기-로컬 사용자의 연결 끊기 요청을 기다립니다.
끄기-원격 TCP 에서 연결 중단을 확인할 때까지 기다립니다.
LAST-ACK- 원래 원격 TCP 로 전송된 접속 중단 요청의 확인을 기다립니다.
TIME-WAIT- 원격 TCP 가 접속 중단 요청 확인을 받을 수 있도록 충분한 시간을 기다립니다.
끄기-연결 상태 없음
TCP 연결 프로세스는 사용자가 열기, 보내기, 수신, 닫기, 중단, 상태 등의 프롬프트를 호출하는 상태 전환입니다. 을 눌러 섹션을 인쇄할 수도 있습니다 전송되는 데이터 세그먼트, 특히 SYN, ACK, RST 및 FIN 을 포함하는 데이터 세그먼트 을 눌러 섹션을 인쇄할 수도 있습니다 또 다른 하나는 시간 초과입니다. 위에서 언급한 metropolis 에서 TCP 상태가 변경되었습니다.
다음 그림은 TCP 상태 전환을 보여 주지만 오류 조건 및 오류 처리는 포함하지 않습니다. 이 숫자를 일반적인 해석으로 사용하지 마라.
3.3. 일련 번호
TCP 연결에서 보낸 각 바이트에는 일련 번호가 있습니다. 그들은 번호가 있기 때문에 영수증을 확인할 수 있습니다. 일련 번호의 확인은 누적됩니다. 즉, 사용자가 X 의 확인 메시지를 받으면 X 이전 (X 제외) 의 모든 데이터가 수신되었음을 의미합니다. 각 데이터 세그먼트의 바이트는 다음과 같이 정렬됩니다. 첫 번째 바이트는 헤더 뒤에 이 순서로 정렬됩니다. 우리는 실제 시퀀스 공간이 제한되어 있다는 것을 기억해야 한다. 크긴 하지만 한계가 있어요. 범위는 0 에서 2 까지의 32 승 빼기 1 입니다. 프로그래밍에 익숙한 사람들은 두 단락이 연속적인지 여부를 계산할 때 왜 2 의 32 승을 모델로 사용해야 하는지 알고 있을 것이다. TCP 가 수행해야 하는 일련 번호 비교 작업 유형은 다음과 같습니다.
(a) 전송되었지만 확인되지 않은 일련 번호를 확인합니다.
(b) 모든 일련 번호가 수신되었는지 확인합니다.
(c) 다음 단락에 포함되어야하는 일련 번호를 결정합니다.
데이터 전송 TCP 에 대한 확인을 받으려면 확인을 처리할 때 다음과 같은 비교 작업을 수행해야 합니다.
SND. UNA = 가장 먼저 확인된 일련 번호;
SND. NXT = 보낼 다음 일련 번호;
사이그. ACK = TCP 의 승인을 받고 TCP 가 기대하는 다음 일련 번호를 수신합니다.
사이그. SEQ = 데이터 세그먼트의 첫 번째 일련 번호;
사이그. LEN = 데이터 세그먼트에 포함 된 바이트 수;
사이그. SEG 세그. LEN- 1 = 데이터 세그먼트의 마지막 일련 번호입니다.
다음 관계에 유의하십시오.
SND. UNA< 세이거. ACK = & ltSND 입니다. NXT
데이터 세그먼트의 일련 번호가 확인 번호 값보다 작거나 같으면 전체 데이터 세그먼트가 확인됩니다. 데이터를 수신할 때 다음과 같은 비교 작업이 필요합니다.
RCV 입니다. NXT = 예상 일련 번호 및 수신 창의 가장 낮은 가장자리;
RCV 입니다. NXT+RCV 를 누릅니다. WND- 1 = 마지막 일련 번호와 수신 창의 가장 높은 가장자리;
사이그. SEQ = 첫 번째로 받은 일련 번호;
사이그. SEG 세그. LEN- 1 = 마지막으로 받은 일련 번호
위의 양은 다음과 같은 관계가 있습니다.
RCV 입니다. NXT =< 사이그. SEQ <RCV 입니다. NXT+RCV 를 누릅니다. WND 또는 rcv.nxt =
테스트의 첫 번째 부분은 데이터 세그먼트의 시작 부분이 수신 창에 있는지 확인하고, 두 번째 부분은 데이터 세그먼트의 끝 부분도 수신 창에 있는지 확인하는 것입니다. 위 두 가지 검사 중 하나를 통과하면 창에 필요한 데이터가 포함되어 있음을 의미합니다. 실제 상황은 더 복잡할 수 있습니다. 0 창과 0 데이터 세그먼트가 있기 때문에 다음과 같은 네 가지 상황이 있습니다.
세그먼트 길이
수신 창
실험
사이그. SEQ = RCV 입니다. NXT
& gt0
RCV 입니다. NXT =< 사이그. SEQ <RCV 입니다. NXT+RCV 를 누릅니다. 분류: WND
& gt0
받아들일 수 없다
& gt0
& gt0
RCV 입니다. NXT =< 사이그. SEQ <RCV 입니다. NXT+RCV 를 누릅니다. WND 또는 rcv.nxt =
수신 창의 크기는 0 일 수 있습니다. 창이 0 일 때 ACK 정보를 수신하는 데만 사용되므로 TCP 의 경우 데이터를 전송하는 동안 크기가 0 인 창을 사용하여 데이터를 수신할 수 있습니다. 수신 창의 크기가 0 인 경우에도 TCP 는 모든 수신 정보의 RST 및 URG 필드를 처리해야 합니다.
또한 일부 제어 레이블을 암시적으로 사용하여 데이터 세그먼트를 안정적으로 재전송 (또는 확인) 함으로써 특정 제어 정보를 보호합니다. 제어 정보는 세그먼트 데이터 공간에서 전송되지 않으므로 암시적으로 지정된 일련 번호를 사용하여 제어해야 합니다. SYN 과 FIN 은 보호가 필요한 제어량이며 접속이 설정 및 해제된 경우에만 사용됩니다. SYN 은 첫 번째 실제 데이터 사이의 데이터로 간주되고 FIN 은 마지막 실제 데이터 이후의 데이터입니다. 세그먼트 길이 (SEG). LEN) 에는 데이터 및 일련 번호 공간이 포함됩니다. SYN 이 나타나면 SEG 입니다. SEQ 는 SYN 의 일련 번호입니다.
초기 일련 번호 선택
이 프로토콜은 특정 연결의 재사용을 제한하지 않습니다. 연결은 소켓 쌍으로 정의됩니다. 새로운 접속 인스턴스는 접속의 또 다른 복구로 정의되므로 문제가 발생합니다. TCP 가 이전 접속의 다른 복구에서 여러 데이터 세그먼트를 가져온 것으로 확인되면 어떻게 될까요? 이 문제는 연결이 빠르게 열리고 닫힌 후 또는 메모리 이유로 종료된 후 빠르게 설정된 후에 특히 두드러집니다.
혼동을 피하기 위해 사용자는 접속 사용을 재개할 때 일련 번호 혼동을 피해야 합니다. 일련 번호의 정확성을 보장해야합니다. TCP 가 실패하더라도 이전 일련 번호가 무엇인지 알 수 없습니다. 새 접속을 생성할 때 새 32 비트 ISN 을 선택할 수 있는 새로운 ISN (initial sequence number) 생성기가 생성됩니다. 생성기는 32 비트 시계의 하위 바이트와 관련이 있으며 하위 바이트의 새로 고침 빈도는 약 4 마이크로초이므로 ISN 주기 시간은 약 4.55 시간입니다. 따라서 네트워크 패킷의 최대 생존 시간 (MSL) 은 4.55 시간 미만이므로 ISN 이 고유하다고 생각할 수 있습니다. 각 접속에는 전송 일련 번호와 입고 일련 번호가 있습니다. 초기 송신 일련번호 (ISS) 는 송신 TCP 에 의해 선택되고 초기 수신 일련번호는 접속 설정 중 생성됩니다.
접속 또는 초기화할 접속의 경우 두 TCP 는 서로의 초기 일련 번호로 동기화해야 합니다. 이는 제어 비트 SYN 과 초기 일련 번호를 교환하여 수행됩니다. 우리는 SYN 이 있는 데이터 세그먼트를' SYNs' 라고 부른다. 여기서는 더 이상 동기화 과정을 반복하지 않습니다. 각 당사자는 자신의 일련 번호를 보내고 상대방의 일련 번호 확인을 반환해야 합니다.
1) a->; 우리의 일련 번호는 X 입니다.
2) a < 우리의 일련 번호가 확인되었습니다.
3) a < -B SYN 상대방의 일련 번호는 y 입니다.
4) 답->; B ACK 은 상대방의 일련 번호를 확인합니다.
위의 단계 2 와 3 은 결합 될 수 있으며 3 단계가 될 수 있으므로 3 메시지 핸드쉐이킹이라고 부를 수 있습니다. 일련 번호가 글로벌 시계와 무관하기 때문에 TCP 는 ISN 을 선택할 수 있는 다양한 메커니즘을 가질 수 있기 때문에 이 절차가 필요합니다. 첫 번째 SYN 을 받은 수신자는 연결에 사용된 최신 일련 번호 (일반적으로 불가능) 를 기억하지 않는 한 이 데이터 세그먼트가 지연되었는지 알 수 없으므로 발신자에게 확인해야 합니다.
TCP 가 네트워크에 아직 존재하는 기존 세그먼트가 아닌 방금 보낸 데이터 세그먼트에 의해 생성되었음을 확인하기 위해 TCP 는 MSL 시간 동안 침묵을 유지해야 합니다. 이 문서에서는 MSL=2 시간이라고 가정합니다. 이는 엔지니어링 요구사항에서 나온 것입니다. 만약 사용자가 가능하다고 생각한다면, 그는 MSL 을 바꿀 수 있다. TCP 가 재초기화되고 메모리의 일련 번호가 사용 중인 경우 기다릴 필요는 없지만 사용 중인 일련 번호가 현재 일련 번호보다 큰지 확인해야 합니다.
일련 번호를 유지하지 않고 호스트에 장애가 발생하면 MSL 시간 동안 데이터 세그먼트를 보내지 않아야 합니다. 이 상황은 아래에서 설명하겠습니다. TCP 구현은 이 규칙을 준수하지 않을 수 있지만 이전 데이터는 새 데이터로 수신되고 새 데이터는 이전 데이터로 거부될 수 있습니다.
데이터 세그먼트가 형성되어 출력 대기열에 들어갈 때마다 TCP 는 시퀀스 공간에 값을 할당합니다. TCP 의 다중 복사 감지 및 시퀀스 알고리즘은 모두 이 주소 공간에 의존하며, 상대방이 송수신할 때까지 출력 대기열에 있는 패킷은 2 32 개를 넘지 않습니다. 모든 중복 데이터 세그먼트가 삭제됩니다. 이 규정이 없으면 여러 데이터 세그먼트에 동일한 일련 번호가 할당되므로 혼란이 발생할 수 있습니다. 데이터 세그먼트의 일련 번호는 데이터 세그먼트의 바이트 수와 같습니다.
일반적으로 TCP 는 전송할 다음 일련 번호와 아직 확인되지 않은 가장 오래된 일련 번호를 유지합니다. 확인 없이는 더 이상 사용하지 마세요. 이것은 위험할 수 있으며, 시퀀스 공간이 매우 큰 것도 바로 이 목적을 위한 것이다. 2M 네트워크의 경우 시퀀스 공간을 다 소모하는 데 4.5 시간이 걸립니다. 데이터 세그먼트의 최대 생존 시간은 10 분의 1 초밖에 되지 않기 때문에 충분한 공간이 남게 됩니다. 100M 네트워크에서는 5.4 분, 조금 짧지만 괜찮습니다.
TCP 를 구현할 때 일련 번호를 저장할 공간이 없으면 중복 패킷을 지우지 못할 수 있습니다. 따라서 이러한 유형의 TCP 구현은 실패 후 MSL 시간을 기다리여 중복 패킷이 제거되도록 하는 것이 좋습니다. 일련 번호를 보유하는 TCP 구현에서 이러한 상황이 발생할 수 있습니다. TCP 가 다른 TCP 접속에서 사용 중인 일련 번호를 선택할 때 호스트에 갑자기 장애가 발생하면 문제가 발생할 수 있습니다. 이 문제의 본질은 호스트가 자신이 얼마나 고장났는지, 중복 복제본이 아직 네트워크에 있는지 모른다는 것이다.
이 문제를 해결하는 방법은 MSL 시간을 기다리는 것입니다. 그렇지 않으면 다른 당사자가 데이터를 잘못 수신할 위험이 있습니다. 대기 시간은 "자동 시간" 이라고도 합니다. 구현자는 사용자가 대기 여부를 선택할 수 있지만 사용자는 MSL 시간을 기다릴 필요가 없습니다.
3.4. 연락 설정
세 개의 메시지 핸드쉐이킹은 연결을 설정하는 데 사용됩니다. 쌍방이 동시에 SYN 을 보내도 상관없다. 양측은 이 SYN 에 확인이 없다는 것을 알게 될 것이기 때문에 이 상황을 알게 될 것이다. 일반적으로 이 상황을 해결하기 위해' 재설정' 세그먼트를 보내야 합니다. 세 가지 메시지 핸드셰이크는 연결 실패 가능성을 낮췄다. 다음은 예입니다. 꺾쇠 괄호에서 yes 는 데이터 세그먼트의 내용과 태그입니다. 나는 다른 것을 말하지 않을 것이다.
2 행, TCP A 는 SYN 초기화 일련 번호를 전송하여 일련 번호100 이 사용됨을 나타냅니다. 행 3, TCP B 는 일련 번호가 10 1 인 A 의 데이터 세그먼트를 확인하는 확인을 제공합니다. 네 번째 줄에서는 TCP A 가 확인을 하고, 다섯 번째 줄에서는 확인을 하고 일부 데이터를 보냅니다. ACK 정보는 일련 번호 공간의 일련 번호를 차지하지 않기 때문에 행 4 의 일련 번호는 행 5 의 일련 번호와 동일합니다. 동시 요청은 아래 그림과 같이 약간 복잡합니다.
세 가지 메시지 핸드셰이킹을 사용하는 주된 이유는 만료된 데이터 세그먼트의 사용을 방지하기 위한 것입니다. 이를 위해서는 새로운 제어 메시지 RESET 을 도입해야 합니다. TCP 처리 비동기 상태를 수신하면 재설정을 받은 후 수신 상태를 반환합니다. TCP 가 ESTABLISHED, FIN-WAIT- 1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, last 상태를 처리하는 경우 우리는 다음에 후자의 상황을 상세히 설명할 것이다.
위의 예를 통해 TCP 연결이 만료된 데이터 세그먼트의 간섭에서 어떻게 복구되는지 확인할 수 있습니다. 4 행과 5 행의 RST (리셋 신호) 를 확인합니다.
반개방 연결 및 기타 이상
한쪽이 다른 쪽을 거치지 않고 연결을 닫거나 쌍방이 동기화할 수 없는 경우 이를 반개방 연결 상태라고 합니다. 한쪽이 데이터 전송을 시도하면 연결이 자동으로 재설정됩니다. 그러나 이런 상황은 결국 비정상이다. 상응하는 처리를 받아야 한다. A 의 연결이 닫혀 있으면 b 는 모릅니다. B 가 A 로 데이터를 전송하려고 하면 TCP 연결이 잘못되어 현재 연결을 종료해야 한다는 재설정 신호가 수신됩니다.
두 프로세스 A 와 B 가 서로 통신할 때 A 의 TCP 가 실패하고 A 는 운영 체제에 의존하여 TCP 의 존재를 지원한다고 가정합니다. 일반적으로 이 경우 복구 메커니즘이 작동합니다. TCP 가 복구되면 A 는 복구 지점부터 작업을 시작할 수 있습니다. 이렇게 하면 A 는 연결을 열고 여전히 열려 있다고 생각되는 이 연결에서 데이터를 전송할 수 있습니다. 이때 A 는 로컬 (즉, A 의) TCP 에서 "연결이 열리지 않았습니다." 라는 오류 메시지를 받습니다. A 의 TCP 는 SYN 이 포함된 데이터 세그먼트를 전송합니다. 다음 예에서는 이 프로세스를 보여 줍니다.
위의 예에서 갑이 받은 메시지는 아무것도 확인하지 않았다. 이때 A 가 뭔가 잘못되었다는 것을 발견하고 RST 에 제어 메시지를 보냈다. 또 다른 경우는 A 가 실패하고 B 는 여전히 데이터 전송을 시도한다는 것입니다. 다음 예는 이러한 상황을 보여 줍니다. 2 행에서 a 는 b 가 보낸 메시지를 이해하지 못합니다 .....
아래 예에서 갑을 쌍방은 수동적으로 연결되어 SYN 정보를 기다리고 있다. 기한이 지난 패킷을 을 측에 보낼 때 을 측이 응답하게 한다. 그러나 응답을 받은 A 는 문제가 있음을 발견하고 RST 제어 정보를 전송하고 B 는 수동 수신 상태를 반환합니다.
현실의 상황이 너무 많다. RST 제어 정보를 생성하는 몇 가지 규칙을 나열해 보겠습니다. 일반적으로 수신되는 정보가 원하는 정보가 아닐 때 RST 를 생성합니다. 확실하지 않으면 RST 제어 정보를 쉽게 보내지 마십시오. 다음과 같은 세 가지 상황이 있습니다.
연결이 더 이상 존재하지 않고 보낸 메시지가 RST 가 아닌 경우 RST 를 반환해야 합니다. SYN 이 존재하지 않는 접속을 거부하려는 경우 이 방법을 사용할 수 있습니다. 도착 정보에 ACK 필드가 있는 경우 반환된 RST 정보는 ACK 필드에서 일련 번호를 얻을 수 있습니다. 이러한 필드가 없으면 RST 일련 번호는 0 으로 설정되고 ACK 필드는 일련 번호와 도달 세그먼트 길이의 합계입니다. 연결은 여전히 닫혀 있습니다.
접속이 비동기 상태 (LISTEN, SYN-SENT, SYN-RECEIVED) 이고 전송되지 않은 패킷에 대한 확인이 수신되거나 수신된 데이터 세그먼트의 보안 수준이 연결을 설정할 수 없는 요구 사항을 충족하는 경우 RST 를 보냅니다. SYN 이 확인하지 않고 수신된 데이터 세그먼트의 우선 순위가 필요한 우선 순위보다 높은 경우 로컬 우선 순위를 높이거나 (사용자 및 시스템 사전 허가) RST; 를 높입니다. 보내야 한다 수신된 데이터 세그먼트의 우선 순위가 필요한 우선 순위보다 낮은 경우 일치하는 것으로 간주됩니다. 물론 상대방이 우선 순위가 잘못되었다는 것을 발견하면 다음 패키지에서 우선 순위를 높인다고 해도 일치하지 않습니다. 접속이 이미 SYN 에 들어간 경우 수신되는 데이터 세그먼트의 우선 순위는 로컬 우선 순위와 같아야 합니다. 그렇지 않으면 RST 가 전송됩니다. 도착 정보에 ACK 필드가 있는 경우 반환된 RST 정보는 ACK 필드에서 일련 번호를 얻을 수 있습니다. 이러한 필드가 없으면 RST 일련 번호는 0 으로 설정되고 ACK 필드는 일련 번호와 도달 세그먼트 길이의 합계입니다. 연결은 이전과 동일한 상태로 유지됩니다.
연결이 동기화된 경우 (ESTABLISHED, FIN-WAIT- 1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, last- 보안 수준, 우선 순위 등의 문제로 인한 경우 RST 신호를 보낸 다음 꺼짐 상태로 들어갑니다.