[컴퓨터 네트워크] 자세한 TCP 기본

1. TCP 개념

[! 참고]
또한 전송 제어 프로토콜로 알려진 TCP (전송 제어 프로토콜).
TCP 프로토콜은 연결 지향, 신뢰할 수있는 바이트 스트림 기반 전송 프로토콜입니다. 통신 할 때 TCP를 기반으로 통신 당사자가 TCP 연결을 구축하는 데 필요한 세 방향 핸드 셰이크는 네 개의 파를 통과 할 필요가에서 분리 할 때, 통과하는 연결을 설정합니다.

1.1 TCP 헤더

TCP 헤더

TCP 헤더를 들어, 다음 필드는 중요하다 :

  • 序列号 (서열 번호)은 TCP 시퀀스 번호를 접합함으로써, 패킷들이 순서대로 전송되는 패킷의 시퀀스 번호의 끝을 보장

  • 确认号 (승인 번호),이 번호는 수신 측에서 수신 된 데이터의 바이트의 개수는 원하는 번호, 일련 번호는 데이터가 수신되었는지를 나타내고있다 나타낸다

  • 窗口大小 (윈도우 사이즈), 또한 데이터 용량이 흐름 제어, 수신 방법을 나타내는

  • 标识符
    • ACK = 1 :이 필드는 유효한 응답 개수 필드가 나타낸다. 또한, TCP는 연결가 ACK로 설정해야 후에 전송 된 모든 세그먼트를 제공한다.
    • SYN = 1 = 1 SYN, ACK = 0, 현재의 세그먼트가 접속 요구 패킷 인 것을 나타내는 경우. SYN = 1, ACK = 1은 현재 세그먼트 응답 패킷 연결을 설정하는 것에 동의하는 것을 나타내는 경우.
    • FIN = 1 : 필드 세그먼트 해제 요청 메시지는 접속 인 것을 나타낸다.
    • URG = 1 :이 필드는 상기 데이터 패킷을 나타내는 데이터의 일부는 높은 우선 순위 데이터 패킷을, 긴급 정보를 포함하고, 긴급 포인터이 때 유효하다. 현재 패킷의 데이터 부분의 선두에 위치하는 일부 긴급 데이터, 긴급 데이터의 말미를 나타내는 긴급 포인터.
    • PSH = 1 :이 필드는 수신 단말기가 바로 오히려 버퍼가 제출 전에 가득 찰 때까지 기다리지 않고, 응용 계층 데이터를 푸시한다 나타낸다.
    • RST = 1 :이 필드는 현재의 TCP 연결이 불법 세그먼트를 거부 할 수 있습니다, 당신은 다시 설정 TCP 연결해야 할 수 있습니다 심각한 문제이며, 연결 요청을 거부 나타냅니다.

1.2 세 방향 핸드 셰이크

세 방향 핸드 셰이크

간단히 말해 :

  • 첫 번째 핸드 셰이크
    • SYN = 1, 서열 (클라이언트) = X
    • 클라이언트는 서버 세그먼트에 연결 요청을 보냅니다. 패킷 데이터 통신 세그먼트의 초기 시퀀스 번호를 포함하는 방법. 요청을 보낸 후, 클라이언트는 SYN-SENT 상태로 들어갑니다.
  • 제 악수
    • SYN = 1, ACK = 1, 횟수 = X + 1, 서열 (서버) = Y 확인
    • 서버 접속 요청 메시지 세그먼트를 수신 한 후 합의 연결이 확인 응답이 전송되면, 상기 응답은 또한 SYN-RECEIVED에 송신 완료 상태 후 초기 통신 시퀀스 번호에 자신의 데이터가 포함
  • 셋째 핸드 셰이크
    • ACK = 1, 횟수를 확인 = Y + 1, 서열 (클라이언트) = X + 1
    • 클라이언트가 응답 연결 동의를받은 후,뿐만 아니라 서버에 확인 메시지를 보낼 수 있습니다. 클라이언트 엔드 서버는 ESTABLISHED 상태로 진입 한 후, 다음 연결이 설정이 응답을 수신 상태를 설립 입력 한 후이 세그먼트를 만들었다.

1.3 왜 양방향 핸드 쉐이크를 사용하지?

[! NOTE]
주로 오류의 결과로, 연결 요청이 갑자기 서버에 송신 된 패킷을 실패 방지한다.

시나리오를 고려, 첫 번째 클라이언트는 요청을 전송하고 연결이 끊어되지 않지만, 체류 시간이 너무 깁니다. TCP 클라이언트가 확인 메시지가 아직 가지고 있기 때문에, 그 서버는 수신 서버에 메시지를 재전송하지 않습니다.
그리고 지금 첫 번째 요청은 요청이 폐기 된 서버에 도착하지만, 연결을 설정합니다.

세 방향 핸드 셰이크 경우,이 오류 메시지 경우에도 메시지 및 응답 확인 메시지의 조각의 실패에 의해, 서비스 종료를 보냈지만, 클라이언트는 다시 확인을 전송하지 않습니다. 서버가 확인을받지 않기 때문에, 우리는 클라이언트가 연결을 요청하지 않은 것을 알고있다.

연결을 설정하는 세 방향 핸드 셰이크를 왜 1.3, 그것은 네 번 할 수 없다

첫 번째 악수 :

Client什么都不能确认   
Server确认了对方发送正常

두 번째 악수 :

Client确认:自己发送/接收正常,对方发送/接收正常
Server确认:自己接收正常 ,对方发送正常

세 번째 악수 :

Client确认:自己发送/接收正常, 对方发送/接收正常
Server确认:自己发送/接收正常,对方发送/接收正常

따라서 송신자와 수신자 기능은 세 방향 핸드 셰이크를 통해 정상 확인뿐만 아니라, 네 배 이상 불필요한 것 같았다 될 수 있습니다

네 1.4을 흔들며

흔들며 네

TCP는 전이중 (full-duplex)이며, 양쪽 끝의 연결이 끊어 동안 FIN ACK를 보내야합니다.

  • 첫 번째 물결
    • 클라이언트 A는 데이터 전송이 완료되는 경우, 서버 B에 연결 해제 요청을 보낼 필요
  • 제 웨이브
    • B가 연결 해제 요청을받은 후에는 TCP 연결을 해제하기 위해 응용 프로그램 계층을 알려드립니다. 후 ACK 패킷을 전송하고, 입사 CLOSE_WAIT 상태, B에 대한 A는이 데이터를 수신하여 전송하지 않으며, 연결이 해제 된 나타낸다. 그러나,이 양방향 TCP 연결 A., 그것은 여전히 송신 할 수있는 데이터 B
  • 제 3의 물결
    • B가이 시간에 완료되지 않으면 그것은 완료 후 들어갑니다 A를 한 후, B를 연결 해제 요청을 전송, 데이터를 보낼 수있을 것입니다 LAST-ACK의 상태.
    • PS는 : 기술의 확인을 지연시킴으로써 (일반적으로 시간 제한, 또는 실수로 그 요구를 재전송 할 것이다 판단), 두 번째 및 세 번째 핸드 셰이크는 전송하는 ACK 패킷을 지연하기 위해 결합 될 수있다.
  • 넷째 웨이브
    • 이형 요청은 트랜스 폰더 B로 확인 응답을 전송 한 후에는 A 용으로 현재 수신 TIME-WAIT의 상태. 상태는 2MSL 계속 기간이 B의 재전송을 요청하지 않는 경우 그것을 진입, 시간 (최대 세그먼트 수명 시간은, 타임 아웃이 중단 될 네트워크의 라이브 세그먼트를 말한다) CLOSED 상태. B는 확인 응답을 수신하면, CLOSED 상태에 들어갈 것이다.

왜 1.5은 2MSL CLOSED 상태에 들어가기 전에 대기 시간, 시간 대기 상태로 전환하려면?

B는 확인 A가 응답을받을 수 있도록하기 위해. 네트워크 문제에 도달하지 않은 경우, B가 발생할 수 있기 때문에이 승인, 승인을 완료하면 CLOSED 상태로 직접 액세스가 제대로 닫을 수 없습니다.

A가 응답 한 후에 폐쇄 상태로 직접 ACK를 전송하고, 네트워크의 지연이있는 경우 응답이 B에 도달하지 못한 손실 또는 2MSL 인 경우 다음 B 대기 시간 제한은 FIN 패킷을 재전송되지만, 이때 A는 닫힌 및 B의 결과, 응답 A를 결코 제대로 닫히지 않습니다

1.6 왜 TIME_WAIT 상태

이 전이중 TCP 연결의 신뢰성있는 자료를 달성하기 위해 1.6.1에서 주문

이것은 TCP 최종 ACK ACK이 손실 방지 (타임 아웃의 다른 쪽 끝을 최종 FIN 재전송) 2MSL이의 또 다른 결과가 TCP 연결을 2MSL 대기하는 동안, 소켓 (고객 IP 연결을 정의하는 것입니다 기다릴 보낼 수 있습니다 주소 및 포트 번호, 서버 및 포트 번호의 IP 주소)를 더 이상 사용할 수 없습니다. 이 연결은 2MSL 종료 후 다시 사용할 수 있습니다.

1.6.2이 만료 사라 인해 네트워크에서 기존의 패킷을 만들려면

각각의 특정의 TCP 구현은 최대 세그먼트 수명 MSL을 선택해야합니다. 어떤 세그먼트가 네트워크 내에서 폐기되기 전에 가장 긴 시간이다.

1.7 이유는 세 방향 핸드 셰이크 가까이 연결이 실제로 그것을 흔들며 네 배, 연결을 설정하는 것입니다?

  1. 접속이 확립 된 후, 서버에 접속 요청을 설정하는 SYN 패킷의 수신 상태를 들으며 SYN ACK 패킷은 클라이언트에 보내졌다.

  2. 연결이 닫힐 때, 서버는 상대방이 더 이상 보낼 데이터를 의미하지만 그는 모든 데이터가 상대방에게 전송하지 수 있지만 또한, 데이터를 수신하는 것이 서로의 FIN 메시지를 수신

2. ARQ (재송신 타임 아웃) 프로토콜

[! NOTE]
승인 및 타임 아웃 메커니즘을 통해 데이터의 올바른 전달을 보장 ARQ 프로토콜을 포함 停止等待 ARQ하고连续 ARQ

2.1 ARQ 정지 대기

일반 전송 프로세스

B에 메시지를 보낼의 긴 기간은 전송을 중지하고 타이머를 시작하고 응답의 끝 대기, 타이머를 취소받은 피어 응답을 시간의 기간 타이머 내에서 다음 패킷을 전송해야합니다.

때 패킷 손실 또는 오류 :

패킷 전송 손실의 방법 인 : 백업 다시 데이터를 매번 보내는 것이 필요하므로 데이터의 타이머 설정 시간 손실 위에 이번에는 반응이 종료 될 때까지 전송된다.

전송시 오류 메시지 : 끝이 A면 재전송 메시지에 대한 대기를 포기합니다.

추신 : 일반 타이머 설정 시간은 RTT의 평균 시간보다 커야합니다.

ACK 타임 아웃되거나 누락 :

전송의 종료에 응답하여도 손실이나 타임 아웃이 발생하는 경우 일 수있다. 그래서 이상 시간 타이머 끝은 여전히 ​​패킷을 재전송한다. 이 시간은 단말기 B는 동일한 패킷의 수 및 그 다음 순번까지 A를 상기 응답 패킷을 전송하는 패킷을 폐기 재전송을 받았다.

이 프로토콜의 단점은 전송 효율이 좋은 네트워크 환경에서 엔드에 ACK 메시지마다 기다려야 로우이다.

2.2 연속 ARQ

연속 ARQ에서, 전송 단은 데이터가 연속 대기 시간을 감소시키고 효율을 향상시킬 수있는 정지 및 대기 ARQ 프로토콜에 비해 그래서, 응답이 수신되지 않는 경우의 윈도우 내에서 전송 될 수 있고, 전송 윈도우를 가진다.

2.2.1 누적 확인

연속 ARQ, 수신 측이 지속적으로 메시지를 받게됩니다. 중지하고 메시지를 수신 대기 ARQ는 응답으로 전송되는 경우, 자원의 낭비이다. 누적 응답으로 여러 메시지를 수신 한 응답 패킷을 통합 할 수 있음을 확인 하였다. 상기 ACK 패킷이 모든 시퀀스 번호는, 다음의 송신 데이터 시퀀스 번호 + 1을 수신하기 전에 데이터 전송의 끝을 알리는 데 사용된다.

그러나 확인 단점 중 한 곳입니다. 연속이 메시지를 수신, 당신은 패킷 시퀀스 번호 5를받은 후 발생할 수, 패킷의 순서 번호 6하지만, 메시지가 수신 된 후 7 번을받지 못한. 이 경우, ACK는이 보낸 사람이 자루에 의해 해결 될 수있다이 경우, 중복 된 데이터를 전송하게됩니다, 6 회신 할 수 있습니다.

2.2.2 슬라이딩 윈도우

상술 한 투과 창. 각각 사이드 윈도우를 전송하고 윈도우가 나타납니다 TCP에서, 창은 양쪽 끝을 유지합니다.

데이터를 포함하는 송신기 윈도우가 전송되지만 응답을 수신 및 전송 될 수 없다 그러나 데이터가 전송되지 하였다.

슬라이딩 창

전송 단은 남은 수신 윈도우의 윈도우 사이즈에 의해 결정된다. 수신기는 현재 남아있는 기록 응답 패킷 송신자의 창 크기 윈도우를 전송 한 후 응답이 값과 현재의 네트워크 정체의 크기에 따라 전송 윈도우의 크기는 끊임없이 변화하여 배치 수신 수신처.

보낸 사람이 응답 메시지를 수신하면 슬라이딩 윈도우를 따를 것

윈도우 흐름 제어 슬라이딩 깨달았다 . 메시지를 통해 수신기는 수신기가 시간에 데이터를 수신 할 수 있도록하기 위해, 전송 될 수있는 데이터를 보낸 사람을 알려줍니다.

흐름 제어 예

제로 창

메시지를 보내는 과정에서, 당신은이 나타납니다 종료하는 것을 제로 창을 발생할 수 있습니다. 이 경우, 송신기는 데이터 송신을 중지하고 영구 타이머를 시작한다. 피어 창 크기를 알릴 수 있도록 타이머는 주기적으로 피어에 요청을 보냅니다. 재시도 일정 수 이상 후, TCP는 연결을 해제 할 수 있습니다.

3. 혼잡 처리

[! NOTE]
정체와 수신 측 후자 작용 데이터를 받아들이도록 보장하기 위해 수신기에서 충분한 시간 제어 처리의 다른 흐름. 전 동안은 과부하 상황을 피하기 위해 과도한 정체 데이터 네트워크를 방지하기 위해 네트워크의 역할이다.

느린 시작, 혼잡 회피, 고속 재송신 및 고속 회복 : 혼잡 과정은 네 가지 알고리즘, 즉이 포함되어 있습니다.

TCP의 혼잡 제어

3.1 느린 시작 알고리즘

[! 참고]
느린 시작 알고리즘은, 정의에 의해, 네트워크 혼잡에 데이터 처음 리드 많은 양의 피할 전송하기 위해, 기하 급수적으로 1부터 확장 전송 윈도우의 시작 부분에 전송됩니다.

다음과 같이 시작 알고리즘 단계를 천천히

  1. 혼잡 윈도우를 (혼잡 윈도우)를 설정하는 초기 접속이 1 MSS (하나 개의 세그먼트에있는 데이터의 최대 양)이며
  2. 각각은 RTT가 있었다 (왕복 지연) 의지의 창 크기를 2 배로
  3. 지수 성장은 제한없이 확실히, 그래서 창 크기가 혼잡 회피 알고리즘을 시작 임계 값보다 큰 경우 임계 값 한계가있다

3.2 혼잡 회피 알고리즘

[! NOTE]
마다 전달 RTT 간단한 점과 비교하여 혼잡 회피 알고리즘 더하기 만 창 크기 때문에 천천히 최적의 값으로 크기 조정, 네트워크 정체의 기하 급수적 성장을 방지한다.

혼잡 회피

전송의 경우 힘 타이머가 만료하는 동안, TCP는이 시간 네트워크 정체가 바로 다음 단계를 수행 할 것이라고 생각합니다 :

  • 임계 값은 현재 혼잡 윈도우의 절반으로 설정
  • 1 MSS에 혼잡 윈도우
  • 시작 혼잡 회피 알고리즘

3.3 고속 재전송

빠른 재전송과 빠른 회복은 일반적으로 함께 나타납니다. 수신기의 경우 수신기는 (자루없이) 마지막 패킷 시퀀스 번호의 올바른 순서로 응답 메시지 순서가 표시받을 수 있습니다. 당신이 재전송 타이머를 기다리지 않고, 세 개의 중복 ACK를받은 경우 다시 만료하지만 빠른 재전송을 시작합니다. 알고리즘은 두 가지 유형으로 구분된다 :

4. TCP 요약

4.1 TCP 왜 그렇게 복잡해?

[! NOTE]
또한 최대한의 성능을 향상시켜, 신뢰성을 확보 할 필요가 있기 때문에

기구의 안정성을 보장 4.1.1

  • 체크섬
  • 일련 번호 (일련 도착)
  • 승인
  • 재전송 시간 제한
  • 연결 관리
  • 흐름 제어
  • 혼잡 제어

메커니즘의 성능을 향상 4.1.2

  • 슬라이딩 창
  • 빠른 재전송
  • 지연된 응답
  • 편승

4.2 타이머

  • 시간 제한 재전송 타이머
  • 연결 유지 타이머
  • TIME_WAIT 타이머

4.3 TCP 기반 응용 프로그램 계층 프로토콜

  • HTTP
  • HTTPS
  • SSH
  • 텔넷
  • FTP
  • SMTP

추천

출처www.cnblogs.com/fecommunity/p/11908872.html