TCP 3 квитирование Протокол 4-й волны

Процесс рукопожатия Трехходовой

1. Клиент отправить запрос «открыть дверь Теперь, я хочу прийти» к серверу

2. Сервер посылает «Проходите, я принесу тебе открыть дверь» для клиента

3. Клиент послал очень вежливый «Спасибо, я приду в» сервер

Четыре процесс махал

1. Клиент посылает «час опаздывает, я уезжаю» на сервер, таких как сервер и отправить его

2. Сервер слышать, отправить «Я знаю, я посылаю вас из него» к клиенту, таким как клиент идет

3. После того как сервер, чтобы закрыть дверь, отправить «Я закрыл» для клиента, а затем ждать, пока клиент идти (~ Нима лицемерной ах)

4. Клиент отправить «Я знаю, что я ушел,» после того, как его собственный слева

формат TCP пакета


Рисунок выше подчеркивает необходимость несколько полеев:
  (1) Ссылка: Seq число , представляющей 32 бит, используемый для идентификации источника TCP к месту назначения передаваемого потока байт , на этот раз , чтобы пометить отправитель посылает данные.
  (2) номер подтверждения: номер Ack, что составляет 32, только флаг бит ACK равно 1, то поле номер подтверждения действителен, то Ack + 1 = Seq .
  (3) Флаги: в общей сложности шести, т.е. УРГ, АСК, PSH, RST, SYN, FIN , и конкретные значения заключаются в следующем:
  (А) УРГ: указатель срочности (срочный указатель) эффективный.

  (B) ACK: номер подтверждения действителен.
  (С) PSH: получатель должен быть сообщением прикладного уровня , как можно скорее.
  (D) , RST: сброс соединения.
  (Е) SYN: инициировать новое соединение.
  (F) , FIN: рилизинг соединения.

Конкретная схема последовательности операций, следующим образом:

Трехэтапного процесса (клиент мы используем А, на стороне сервера представлена ​​B)

Предпосылка: Инициатива по открытому, B пассивного открытия

TCP трехэтапного 
(1) Первый квитирование: флаг Клиент бит SYN установлен в 1 , случайно сгенерированного значение SEQ = J , и пакет отправляется на сервер, клиент вводит SYN_SENT состояние, ожидая подтверждения сервера. 
(2) Второй квитирования: Сервер принимает пакетные данные от флага бит запросы SYN = 1 знать клиент , чтобы установить соединение, флаги сервера . SYN и ACK установлены на 1, ACK = + J. 1 , значение генерируется случайным образом сл = к , и передает пакет данных для подтверждения запроса на соединение с клиентом, сервер входит SYN_RCVD состояние. 
(3) третье квитирование: Клиент получает подтверждение, проверку ACK ли J + 1, ACK равно 1 , то флаг правильно , если ACK установлен в 1, ACK = K + 1 , и пакет данных на сервер, сервер проверки того , если ск является K + 1, то ли ACK является 1 , если правильно, то соединение установлено, клиент и сервер входит установлено , состояние, завершить три рукопожатия, то вы можете начать передавать данные между клиентом и сервером.

SYN атака: 
процесс квитирования трехходового, сервер после отправки SYN-ACK, до получения соединения ACK TCP называется половина подключения клиента (полуоткрытого соединение), сервер SYN_RCVD состояние в это время, когда ACK принимаются, сервер в установленном состоянии. Клиент SYN атаки большое количество поддельного IP - адреса не существует в течение короткого времени, и продолжать посылать сервер SYN - пакет , сервер ответ на пакет подтверждения, и ждать подтверждения Клиента, так как адрес источника не существует, поэтому, сервер требует постоянного веса не волосы до истечения времени ожидания, кованный пакет SYN будет занимать время производства не очереди соединения, что приводит к обычным запросам SYN , поскольку очередь, отбрасывается, тем самым вызывая перегрузку сети или даже сбой системы. SYN атаку типичного DDOS атаки обнаружение SYN - атака очень просто, то есть, когда сервер Есть большое количество пола-соединенного состояния , а источник IP - адрес случайным образом , можно сделать вывод , что атака была SYN, используйте следующую команда позволяет ток: 
#netstat -nap | Grep SYN_RECV 

Четыре распадаться процесс (мы используем клиент А, на стороне сервера представлена ​​B)

Предпосылка: Активная замкнуты, B пассивное близко

TCP четыре волны 
из - за соединение TCP полнодуплексная, таким образом, каждое направление должно быть закрыто отдельно, этот принцип заключается в том, что , когда одна задачи завершения передачи данных, отправляя FIN разорвать соединение в этом направлении, получило плавник просто означает , что нет никаких данных о направлении потока, и что больше не будет получать данные, но по- прежнему иметь возможность передавать данные через TCP соединение , пока это направление также не отправить FIN. Для того, чтобы закрыть один из первого активного закрытия, в то время как другие выполняет пассивный закрытое, описание является случаем фиг. 
(1) Первая волна: Клиент посылает FIN = 1, передача данных для закрытия клиента к серверу, значение сла генерируются случайным образом = и, клиент входит в состоянии FIN_WAIT_1. 
(2) Вторая волна: Сервер получает FIN, ACK = 1 , чтобы послать клиент, номер подтверждения для получения числа изведа = и + 1 (то же самое SYN, F занимает порядковый номер), чтобы сгенерировать случайное значение SEQ = v, CLOSE_WAIT сервера в состояние. 
(3) Третья волна: Сервер отправляет FIN = 1, чтобы отключить передачу данных клиентского сервера, ACK = 1, SEQ = W , извед = и + 1; Сервер входит LAST_ACK состояние. 
(4) Четвертые волны: Клиент получает FIN, Клиент вводит TIME_WAIT состояния, АСК = 1 затем передает сервера на, получение номера подтверждения для числа + 1, извед = W + 1 , сло = и + 1; сервер введите CLOSED состояние, закончил четыре раза , и махнул рукой. 
Выше , является участником взять на себя инициативу , чтобы закрыть, другой пассивный случай закрыт, появится в реальной ситуации , в то же время выступил с инициативой закрыть

(2) Почему это три-рукопожатие , чтобы установить соединение, и закрыть соединение четыре раза размахивать? 
Это происходит потому , что сервер в СЛУШАЕТ состояние, полученные после установления запроса соединения SYN пакет, в SYN ACK и помещают в пакет , отправленный клиенту . Соединение закрывается, при получении друг друга FIN сообщение , которое просто означает , что другая сторона больше не передавать данные , но и получить данные, он не может владеть все данные передаются друг другу, поэтому свое собственное может закрыть сразу, вы можете также отправить некоторые данные (ACK) на другую сторону , а затем отправить FIN пакет на другую сторону согласиться , чтобы закрыть соединение в настоящее время, таким образом, своя собственная и FIN ACK обычно передается отдельно.

Опубликовано 407 оригинальные статьи · вона похвала 150 · просмотров 380 000 +

рекомендация

отblog.csdn.net/ds1130071727/article/details/102802458