설립 (세 방향 핸드 셰이크 네 파) TCP 연결

나는 마지막으로 쓰여 긴급는 용어 좀 더 전문의 형제 설명 https://blog.csdn.net/qq_38950316/article/details/81087809   이 약간의 오타 (형제

우리는 볼 수 있습니다. 나는 모든 후, 그들은 큰 고장이며,이 더 잘 이해 될 수있다 참조

세 방향 핸드 셰이크! 

  세 방향 핸드 셰이크 정말 정확하지 않습니다. 공식 문서에서 TCP 연결의 전체 과정의 핸드 셰이크 핸드 셰이크 TCP 연결 설정을 설명하는 것입니다.

  우리는 단지 TCP 연결을 설정 한 손을 잡아 수 있습니다 . 그래서 왜 연결을 설정하는 세 방향 핸드 셰이크입니까? 사실, 그것은 보낼 세 배 세 가지 메시지를 우리는 말할 수는 3 방향 핸드 셰이크 패킷은

 

 

 에있는 클라이언트와 서버 시작 ① 폐쇄 상태 , 클라이언트는 오픈에 주도권을 쥐고 서버에 메시지를 보낼 수 있습니다. SYN = (동기) 및 서열 = X 실시 메시지 1 (일련 번호는 자신의 일련 번호는 계속 증가 할 것입니다있다)

이 때, 클라이언트는 다음과 같습니다 SYN-SENT 상태

PS : 아마 봐

  동기화 SYN : 직렬 연결 설정을 동기화. 수단 SYN = 1, ACK = 0 때 :이 접속 요구 패킷 세그먼트이다. 만약 응답 메시지 세그먼트에 연결 합의, 즉 = 1 SYN, ACK = 1. 따라서, SYN = 1이 접속 요청 또는 접속 승인 메시지임을 나타낸다. TCP 연결 건설 생산은 핸드 쉐이크 SYN 플래그의 완료 후 설정됩니다 경우에만 SYN 플래그는 0으로 설정됩니다.

    SEQ ID NO 서열 : 데이터 세그먼트 순서 표시를위한 4 바이트, 모든 데이터는 일련 번호, 지역에 의해 발생 된 난수의 첫 번째 바이트에서 컴파일되고 송신 된 바이트 TCP 연결; 바이트 ED 일련 번호 후, 각 세그먼트는 일련 번호가 할당된다 수득; 서열 데이터 세그먼트 번호의 첫번째 바이트의 시퀀스 번호이다.

 

 

 

  ② 그 다음에 열려 우리의 서버 수동 청취 클라이언트에 대한 대기는 메시지를 첫 번째 핸드 셰이크를 보낼 수 있습니다.  

클라이언트에 의해 전송 된 메시지를 수신 한 후, 클라이언트는 즉시 보낼 확인 메시지 ---------------  상기 ACK =한다. (1), SYN =. 1, SEQ = Y, (소문자 ) ACK. 1 = X +

(대문자) ACK는 인지 비트가 1 경우, 0 경우, 직접 무시할 수 있습니다. 코드 확인 패킷, 이해가되지 않습니다이다

이 경우, 서버는 SYN-RECV의 상태에

 

  ③ 패킷이 ACK = 1, 인정 인 유효 비트를 갖는, ACK = Y + 1을 참조하면, 인 응답 메시지

  즉, '나는 당신의 확인 메시지를받은 것을 인정'   

  서버는 우리가 클라이언트를 받았는지 메시지를 보내는 우리의 클라이언트, 확인, 확인인가 

  서버 측이 클라이언트가 보낸 메시지를 만드는 데 사용되는 연결을 확인하기위한 것입니다, 내가 서버를받은, 당신의 클라이언트를 확인하기 위해이 메시지를 전송하는 서버는 클라이언트가되지 수신?

  이 때, 클라이언트 서버를 통해 설립 (TCP 연결 성공 상태)

  

 

세부 : ①seq = X ③seq = X + 1에 대한 설명 ③ 클라이언트 패킷을 보내기 전에, 또 다른 메시지를 보낼 시간이없는 수

 

서버는 다음 확인 메시지를 수신 한 후, TCP 연결이 설정됩니다  

나는 질문이? 물론, 실행이 ①②, TCP 연결이 설정 될 때, 다시 왜 클라이언트는 또한 과거에 확인 메시지를 전송?

 

이러한 요청 메시지가 자신의 방식으로 전송 될 수 있기 때문에 ① 비효율적이된다. 이 오류는 역할 아니라고하지 않습니다.

그러나 때문에 요청 패킷의 결과로 어떤 이유로 네트워크에 네트워크에서 발생한 것을  차단 거주 하지만, TCP 연결이 시간 초과 재전송 메커니즘

따라서 ① 요청 패킷은 서버가 수신하지 않습니다, 도착하지 않습니다. 이 중 하나를받을 수 없습니다, 서버는 또 다시 그냥 클라이언트로 전송 ① 요청 패킷의 요청 메시지를 전송합니다 생각합니다.

그리고 단지 조각 요청 메시지는 네트워크를 유지합니다. 클라이언트는 따라서 TCP 연결을 설정, 다시 TCP 연결을 설정하는 유사한 요구, 그들이받은 서버 한 다음 확인 ② ③ 확인을 보냅니다

 

우리는 TCP 연결이 연결 후에 실행, 성공적으로 구축하기 위해 아첨, 그것은 밖으로 파괴

그러나, 단지 링크가 있음을, 우리의 네트워크가 갑자기 열 수있는 네트워크를 유지하고, 그 링크를 강제로 또 다른 항목입니다뿐만 아니라 서버에 도달하기 위해

서버는 다시 클라이언트에게 확인 메시지를 보내드립니다받습니다. 이 시간이 아닌 경우 ③ 확인 메시지가 다음 TCP 연결이 설정됩니다.

그러나 이것은 우리가 연결 설정이 필요하지 않습니다. 우리는 요구 패킷 전에 다시 통과하기 때문에, 접속을 확립하고 해제된다.

그래서 더는 ③ 다시 연결합니다, 우리는이 연결이 필요하지 않습니다이 없습니다.

당신은 일단 ③ 서버에서 전송 된 승인 패킷은, 내가받은 후 클라이언트 쪽은 말할 것이다 : 나는 아를 보내지 않았다. 그럼 그냥 조각 '연결'을 처리하지 않습니다

 

 

흔들며 네

상태가 종료하기 전에 내장되어 있습니다

 

 

 

① 클라이언트 헤더 FIN = 1에서 수행되는 '접속 해제 메세지'를 전송하고, SEQ = U U 시퀀스는       FIN 종료 : 접속 해제하십시오. FIN = 1 나타냄 세그먼트의 데이터 송신 장치는 송신 된, 상기 전송 연결 릴리스

② 메시지, 서비스를받은 후, 노하우에 대한 고객의 요구가 끊어집니다. 나는이 검증 서열 대신에, 당신에게 확인 메시지, ACK = 1 v 전송, ACK = U +1

  클라이언트는이 방향으로 TCP 서버 연결이 끊어졌습니다 "패킷, 클라이언트 --- 수신 만료

  클라이언트 "---이 방향 또는 서버에 연결할 수 있습니다 

③ 그러나 우리는 과거에 통과하지 못한 데이터 서버가있을 수 있습니다, 당신은, 패킷을 재전송 FIN 필요 = 1, ACK = 1, 서열 = w, ACK = U + 1 세부 사항 : ① 서열 = V ③ 서열의 정상 = w 중간 불연속 설명하기 w + 1, V는

  이 클라이언트 서버 연결이 끊어이다

④ 서버가 우리로부터들을 수 없습니다 ④ 확인 메시지를, 서버는 우리가 보내고있는 것을 알 수 ③ 자신의 다음 서버가 다시, 나는 종료 할 ③ 전송받지 못했습니다. 의는 왜 최대 패킷 발생 기간 2MSL을 설정하려는

  그렇지 않으면, 클라이언트가 종료 한 서버는 또한 당신에게 망치를 보내?

  클라이언트는 연결 해제 메시지 서버 + 1 W 응답, ACK = 1, ACK = 전송해야 수신하고, 자신의 일련 번호 서열은 = U + 1은,이 경우, 클라이언트 (시간 WAIT 입사 시간 대기) 상태입니다. TCB의 취소 클라이언트가 폐쇄 상태에 들어가기 전에, 대응하는 때 TCP 연결이 시간에 공개되지 않은 점에 유의, 2MSL (최대 세그먼트 수명) 시간을 거쳐야한다.

 

 

시간 닫는 십자 핸드 인 경우 [1] 왜 문제가 세 방향 핸드 쉐이크에 접속된다?

A : 단말기가 SYN 서버 클라이언트 단말기 접속 요청 메시지를 수신하면 SYN + ACK 패킷을 직접 전송 될 수 있기 때문에. 상기 ACK 메시지는 응답을 위해 사용되며, SYN 패킷 등을 동기화하는데 사용된다. 서버 측 FIN 패킷이 수신 될 때 연결이 아마 소켓, 그것은 첫 번째 ACK 패킷 만 응답, 말했다 클라이언트 측, 수있는 근접 즉시하지 않습니다, 폐쇄 "당신은 내가받은 FIN 메시지를 보냅니다." 내 모든 서버 메시지의 끝을 통해 전송 만 할 때까지, 나는 FIN 패킷을 보낼 수 있기 때문에 함께 보낼 수 없습니다. 그것은 4 단계 핸드 셰이크를 필요로한다.

[질문 2] 2MSL을 통해 이동하는 이유는 TIME_WAIT 상태 필요 (최대 세그먼트 수명) CLOSE은 상태로 돌아갑니다?

A : 논리적으로는, 네 개의 패킷이 전송되었지만, 우리는 CLOSE 상태로 바로 이동할 수 있지만, 우리는 네트워크의 환상이 신뢰할 수 있고, 마지막 ACK가 손실이있을 수 있습니다. TIME_WAIT 상태가 재전송 ACK 패킷에 사용됩니다 그래서 손실 될 수 있습니다. 최종 ACK 응답 클라이언트를 보내하지만, ACK가 손실 될 수 있습니다. , FIN 세그먼트하여 전송이 반복됩니다 어떤 ACK 경우 서버. 클라이언트는 가까운 즉시,이 서버는 ACK를 수신 확인해야 수 없습니다. 클라이언트는 ACK를 송신 한 후에 TIME_WAIT 상태가된다. 클라이언트 2MSL 시간 대기, 타이머를 설정합니다. 당신이 그 시간 내에 다시 FIN을받을 경우, 클라이언트가 ACK 2MSL을 다시하고 다시 기다립니다. 이른바 2MSL 두 번 MSL (최대 세그먼트 수명)입니다. MSL 최대 생존 기간이 2MSL이 전송되는 네트워크의 세그먼트와 반응하기 위해 필요한 최대 시간을 의미한다. 2MSL 때까지 클라이언트가 다시 FIN을받지 못한 경우, 클라이언트가 ACK가 성공적으로 TCP 연결을 수신 된 결론을 내렸다.

[질문 3] 왜 두 방향 핸드 셰이크를 사용하여 연결할 수없는 이유는 무엇입니까?

A : 완전한 두 가지 중요한 기능을 3 방향 핸드 셰이크는 양쪽 데이터를 (양측이 준비되어 서로를 알아) 보낼 준비를해야하지만, 또한 당사자가 핸드 셰이크 중에 초기 시퀀스 번호, 일련 번호를 협상 할 수 있도록 그것은 전송 및 인정된다.

       이제 두 손을 필요로하는 세 방향 핸드 셰이크에 넣고, 교착 상태가 발생할 가능성이 높습니다. 예로서, 컴퓨터 C와 S 사이의 통신을 고려 S는 C로 가정 연결 요청 패킷을 송신하고, 수신 된 패킷이 S이며, 상기 확인 응답 패킷을 전송. 계약에 따라 두 사람은 S는 데이터 패킷을 전송하기 시작, 연결이 성공적으로 설립되었습니다 고려, 손을 흔들었다. 그러나 S 응답 패킷의 경우 C는 전송 손실, 그리고 S가 준비가되었는지, 나는 종류의 설립의 일련 번호를 S 모르는 알 수 없습니다, C S도 의심의 여지가 자신의 연결 요청 패킷을 받았는지. 이 경우, C는 연결이 바로 연결 확인 응답 패킷을 기다리고, S에 의해 전송 된 데이터 패킷을 무시하고, 성공적으로 확립되어 있지 않다 간주합니다. S 개의 타임 아웃 패킷을 전송 한 후 반복해서 동일한 패킷을 송신한다. 이 교착 상태를 만듭니다.

[4] 당신이 연결을 설정하지만, 클라이언트가 갑자기 고장 경우 어떻게 문제를 할까?

TCP는 오류가 발생할 경우 분명히, 클라이언트, 서버는 대기, 자원 낭비에 지킬 수없는, 또한 연결 유지 타이머입니다. 마다 서버는 상기 타이머의 설정 시간을 재설정 클라이언트의 요청은 보통 2 시간이다 두시간 클라이언트로부터 데이터를 수신하지 않은 경우, 서버는 그 후, 매 75 검출 메시지 세그먼트를 전송 받는다 초를 보낼 수 있습니다. 아직 응답하지 않았습니다 연속 10 개 프로브 패킷을 전송하는 경우, 서버는 실패로 간주 고객을 가져오고, 그들은 연결을 닫습니다

 

추천

출처www.cnblogs.com/hope192168/p/11923394.html