1. TCP 개념
[! 참고]
또한 전송 제어 프로토콜로 알려진 TCP (전송 제어 프로토콜).
TCP 프로토콜은 연결 지향, 신뢰할 수있는 바이트 스트림 기반 전송 프로토콜입니다. 통신 할 때 TCP를 기반으로 통신 당사자가 TCP 연결을 구축하는 데 필요한 세 방향 핸드 셰이크는 네 개의 파를 통과 할 필요가에서 분리 할 때, 통과하는 연결을 설정합니다.
1.1 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 이유는 세 방향 핸드 셰이크 가까이 연결이 실제로 그것을 흔들며 네 배, 연결을 설정하는 것입니다?
접속이 확립 된 후, 서버에 접속 요청을 설정하는 SYN 패킷의 수신 상태를 들으며 SYN ACK 패킷은 클라이언트에 보내졌다.
연결이 닫힐 때, 서버는 상대방이 더 이상 보낼 데이터를 의미하지만 그는 모든 데이터가 상대방에게 전송하지 수 있지만 또한, 데이터를 수신하는 것이 서로의 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]
정체와 수신 측 후자 작용 데이터를 받아들이도록 보장하기 위해 수신기에서 충분한 시간 제어 처리의 다른 흐름. 전 동안은 과부하 상황을 피하기 위해 과도한 정체 데이터 네트워크를 방지하기 위해 네트워크의 역할이다.
느린 시작, 혼잡 회피, 고속 재송신 및 고속 회복 : 혼잡 과정은 네 가지 알고리즘, 즉이 포함되어 있습니다.
3.1 느린 시작 알고리즘
[! 참고]
느린 시작 알고리즘은, 정의에 의해, 네트워크 혼잡에 데이터 처음 리드 많은 양의 피할 전송하기 위해, 기하 급수적으로 1부터 확장 전송 윈도우의 시작 부분에 전송됩니다.
다음과 같이 시작 알고리즘 단계를 천천히
- 혼잡 윈도우를 (혼잡 윈도우)를 설정하는 초기 접속이 1 MSS (하나 개의 세그먼트에있는 데이터의 최대 양)이며
- 각각은 RTT가 있었다 (왕복 지연) 의지의 창 크기를 2 배로
- 지수 성장은 제한없이 확실히, 그래서 창 크기가 혼잡 회피 알고리즘을 시작 임계 값보다 큰 경우 임계 값 한계가있다
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