1 부 TCP 컴퓨터 네트워크

A, TCP 프로토콜

참조 (References) : newcoder
TCP / IP 프로토콜, TCP 및 UDP의 차이 및 특성

1, 4 층 모델

응용 프로그램 계층 : 응용 프로그램을 포함하는 전송 계층에 데이터를 전송합니다. 주요 프로토콜은 HTTP, SMTP, FTP, DNS 등이다.
전송 계층 : 응용 프로그램에 대한 책임이있는 응용 프로그램 사이의 캡슐화의 방식 정보 흐름에서 통신. 주요 프로토콜은 TCP, UDP입니다.
네트워크 계층 : 다른 호스트 사이의 링크 층 통신, IP 패킷으로 패킹 전송 스트림 층. 주요 프로토콜은 IP입니다.
링크 계층 : 네트워크 계층의 IP 패킷을 수신하는 네트워크 전송 프레임에 캡슐화되고, 네트워크로부터 수신 된 물리적 프레임은 네트워크 계층의 IP 패킷을 추출한다.

2, 신뢰성

1). 일련 번호, 승인, 재송신 타임 아웃

각 패킷은 상기 수신기가 시퀀스 번호에 의해 분류 할 수 있고, 시퀀스 번호가 상기 수신 된 데이터 세그먼트는, 상기 수신기는, 해당 수신 확인 문자 ACK를 반환 일반적 ACK 번호 + I를 수신 한 다음에 수신 할 것으로 예상하다 첫 번째 데이터 바이트 세그먼트 시퀀스 번호, 일정 시간 동안 송신 측 (이 시간 (2) 내에 통상적 * RTT (라운드 트립 시간 구간) + 오프셋 값)가 확인 응답을 수신하지 않는 경우, 대응하는 데이터 패킷 그것은 잃어버린 재전송 간주됩니다.

2) 흐름 제어

슬라이딩 창 : 보낸 사람의 수신기의 광고 창 크기, 보낸 사람이 너무 많은 데이터 전송 시간을 방지합니다.
보낸 사람이 너무 빨리 데이터를 전송하면 수신자는 데이터가 손실되는,받을 너무 늦을 수 있습니다. 소위 흐름 제어는 송신자의 전송 속도는 시간이 수신자가 수신 할 수 있도록, 너무 빨리 아니다 허용하는 것입니다.
슬라이딩 윈도우 내의 데이터 패킷이 직접 전송 될 수있을 때 오른쪽인지 투과 창의 이동을받은 후 창 왼쪽.

3) 혼잡 제어

혼잡 윈도우 : 전송로에서 사용되는 윈도우의 막힘을 방지하기 위하여 송신기.
윈도우 사이즈 선택 :
슬로우 스타트 : 시작 창합니다 (CWND)의 1이 (상기 RTT를 통해) 수신 확인 응답을 수신 할 때마다 설정되고, 혼잡 윈도우의 크기 * 2; 경우 패킷 재송신 타임 아웃 기간을 상기 임계 값 ( SSTHRESH) 현재 창 크기의 절반으로 설정, 창 크기를 1로 설정 한 후 천천히 시작합니다.
혼잡 회피 : 보통 65536 (2 ^ 16)로 설정 느린 시작 임계 값을 설정. 정체 윈도우 크기는하지 (2)에 의한이 임계 값, 그러나 각각 +1 도달 할 때, 현재의 윈도우 사이즈의 절반의 임계 값을 설정하는 세그먼트 재전송 타임 아웃, 윈도우 사이즈가 느린 시작 후, 1로 설정 될 때.
빠른 재전송 : 3 번 즉시, 재전송을 중복 ACK를받을 수 있습니다. 예를 들어, 세 번 (1001)는 (1001)의 시작은 상기 재전송 데이터 세그먼트 (1001) 시작받지 않은 수단의 승인을 받았다.
빠른 복구 : 는 ACK 세 반복, 고속 재전송을 시작, 빠른 복구 시작을받을 수 있습니다. 임계 값이 +3 새로운 임계 전류 윈도우 혼잡 윈도우 크기의 절반 크기를 설정 (앞서 설명한 세 수신 세 단열 3없이 일부를 전송). 그런 다음 각각의 확인, 혼잡 윈도우 +1을받은 반복합니다. 새로운 데이터가 ACK를 확인하면, 창 크기는 다음 SSTHRESH에 혼잡 회피를 설정합니다.

3 세 방향 핸드 셰이크

참조 : 네와 TCP 세 방향 핸드 셰이크 이해하고 흔들며 얼굴 질문 (매우 포괄적)

전송 계층 프로토콜이 TCP 인 경우 기반 접속이 송신기를 설치하고, 수신기는 3 개 개의 패킷은 3- 방향 핸드 쉐이크 불렸다 전송된다.
제 악수 송신자가 SYN = 1 (SEQ ID NO 동기화) 초기 시퀀스 번호 서열 = X (임의)을 전송한다. 연결을 설정하기 위해받는 사람의 요청을 알려주십시오. 클라이언트는 입사 SYN_SENT의 확인 응답에 대한 연결 대기 요청 상태.
둘째 악수 : 수신기는 SYN 전달 단부 (송신 ACK = X + 1) 동안 송신 스스로 인정하면 SYN = 1, 서열 = Y (랜덤). 설명 수신기는 연결 메시지의 수신을 인정합니다. 서버는 입력 SYN_RECV의 상태를.
셋째 악수, 수신기 응답 SYN + ACK 패킷 송신 ACK = Y + 1, 서열 = X + 1이다. 이 때, TCP 연결이 성공합니다. 에 클라이언트와 서버 설립 된 상태입니다.

세 방향 핸드 셰이크는 왜? 대신에 두 번 또는 네 번?
이것은 에러를 생성하여, 서버 세그먼트 버스트 접속 요구 패킷을 방지하는 데 실패 하였다.
예를 들어, 노드 인해 서버의 도착 지연의 네트워크 내의 클라이언트 제 악수 세그먼트 서버가 확인 응답을 보낼 때, 연결을 구축 이입. 더 세 번째 핸드 셰이크가 없기 때문에 그러나 클라이언트가이 시간에 연결을 요청하지 않았다, 그 다음 서버가 클라이언트가 데이터를 보낼 때까지 기다려야 할 것이다, 승인을 무시합니다.

(4) 네 웨이브

제 파장 : 클라이언트는 FIN = 1, 서열 = U 연결을 해제하기위한 패킷을 송신한다 . 연결을 해제 요청합니다. 클라이언트 입사 FIN_WAIT1 (1 개 착신 대기) 상태.
2 파동 : 서버 = V = U + 1을 연결 해제 메시지, 확인 메시지가 ACK를 수신하고, 그 자신의 시퀀스 번호 서열을 가져온다. 이 경우, 서버에 클라이언트 커넥트 연결이 끊어 방향이었다, 클라이언트는 데이터를 보낼 계속되지 않습니다. 에서 절반 가까이 합니다 (FIN_WAIT2) 상태. 그러나 서버는 클라이언트가 여전히 수용 할 수 있으며, 데이터를 전송한다. 클라이언트는 서버 연결 해제 메시지를 기다립니다. 에 서버 CLOSE_WAIT (폐쇄 대기) 상태입니다. 클라이언트는 입력 확인 요청 수신 FIN_WAIT2 (2 종료 대기) 상태를.
세 번째 파형 : 마지막 서버 데이터는 전송 된 클라이언트 버전에 연결 FIN = 1, U = ACK 패킷 전송 + 1, 서열 = w한다. 확인에 대한 클라이언트 기다립니다. 서버는 입사 LAST_ACK 응답 메시지 클라이언트 기다리고 (최종 확인) 상태.
네 번째 물결 : 클라이언트가 확인에 보낸 연결 해제 메시지를 수신하고 입력 TIME_WAIT 상태. ACK = + 1, 배열 w = U + 1이다. 서버는 즉시 가까운 확인 메시지 TCP 연결이 즉시 입력받을 CLOSED 상태. 클라이언트는 다른 2 * MSL (최대 세그먼트 수명) 오프 직후에 근접 접속을하지 않지만, 확인 응답 메시지를 전송한다. 마지막 확인 메시지가 손실 될 수 있기 때문에 서버가 확인 메시지, 서버 것입니다 시간 제한 재전송 FIN을 수신하지 않은 경우에, 그래서, 대기. 따라서, 서버는 이전 클라이언트에 비해 TCP 연결이 끊어집니다. 마지막으로, TCP 연결의 클라이언트 해지 입력 CLOSED 상태.

5는 폐쇄, 반 개방 상태 동안 개방

참조 : TCP-IP 의견 : TCP의 반 개방 접속과 동시에 개방 폐쇄하면서
동시에 개방 :
동시에 액티브 오픈 두 애플리케이션은 SYN_SENT 상태로 SYN 패킷을 전송하는 단계를 포함한다. 그들은 모두 반대편 SYN, SYN 패킷을 전송하고 다음 SYN_RECV 상태로 진입, 타방에 ACK 패킷을 전송 받았다. 서로의 SYN 및 ACK 패킷을 수신 한 후, 직접 접속이 확립 된 상태를 설립 입력.

닫는 동안 :
양측은 또한 FIN 패킷을 전송하는 FIN_WAIT1 상태가 종료 주도권을 쥐고. 당사자의 영수증이 서로의에게 FIN 입력시 폐문 상태를 다음 확인에 대한 ACK를 전송하고 TIME_WAIT 상태를 입력합니다. 마지막으로 마감했다.

반 개방 :
비정상적인 가까운 (단선, 전원 꺼짐)로 인해 다른 하나는 지식없이 다른 반 열린 연결이 시간. 당사자가 데이터 통신을 수행하지 않는 경우, 당사자는 여전히 발생 이상을 감지하지 않습니다 반대편에 연결되어 있습니다. 당신이 데이터를 전송해야하는 경우, 사실, 그것은 RST 패킷 (리셋 패킷)을 반환합니다 존재하지 않는 연결을받은 후 여기가 연결을 재 구축 할 필요에 강제 가까운이 시간을 연결했다.

추천

출처www.cnblogs.com/KirinSB/p/12602036.html