26 May 2020

TCP 3-way-handshake & 4-way-handshake

TCP 3-way-handshake


3-way-handshake란

tcp 3-way-handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에

먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.


순서

1. Client -> Server tcp SYN

2. Server -> Client tcp SYN ACK

3. Client -> Server tcp ACK

SYN: synchronize sequence numbers
ACK: acknowledgment


3-way-handshake 과정


3way


1. 클라이언트는 서버에 접속을 요청하는 SYN패킷을 보낸다. 이때 클라이언트는 SYN/ACK 응답을 기다리는

SYN/SENT상태가 된다.


2. 서버는 SYN요청을 받고 클라이언트의 요청을 수락한다는 ACK와 SYN 패킷을 발송하고 클라이언트가 다시

ACK패킷으로 응답하기를 기다린다. 이때 서버는 SYN_RECEIVED상태가 된다.


3. 클라이언트는 서버에게 ACK를 보내고 이후 서버와 연결이 이루어지고 데이터가 오가게된다.

이때 서버의 상태는 established상태이다



4-way-handshake란


세션을 종료하기 위해 수행되는 절차


순서

1. Client -> Server FIN

2. Server -> Client ACK

3. Server -> Client FIN

4. Client -> Server ACK


4way


4-way-handshake 과정


1. 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.

2. 서버는 일단 알겠다는 ACK를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태를 TIME_WAIT라고 한다

3. 서버가 클라이언트와의 통신이 끝났으면 연결이 종료됬다고 클라이언트에게 FIN플래그를 보낸다.

4. 클라이언트는 확인 했다는 ACK를 서버로 보낸다.

만약 Server에서 FIN을 전송하기 전에 전송한 패킷이 여러가지 이유로 FIN패킷보다 늦게 도착한다면 Client에서 세션을 종료시킨 뒤에 뒤늦게 도착하는 패킷이 있다면 이 패킷은 drop되고 데이터는 유실 될 것이다 이러한 일에 대비하여 Client는 Server로부터 FIN을 수신하더라도 일정시간(default 240초)동안 세션을 남겨놓고 남은 패킷이 도착하기를 기다리는데 이 과정을 TIME_WAIT라고 한다.


TCP flags 종류 정리

SYN -연결 요청 플래그

통신 시작 시 세션을 연결하기 위한 플래그


ACK -응답 플래그

송신 측으로부터 패킷을 잘 받았다는 것을 알려주기 위한 플래그


FIN - 연결 종료 플래그

더 이상 전송할 데이터가 없고 세션 연결을 종료시키겠다는 플래그


RST(reset) - 연결 재설정 플래그

비정상적인 세션을 끊기위해 연결을 재설정 하는 과정


PSH(push) - 넣기

버퍼가 채워지기를 기다리지 않고 받는 즉시 전달한다. 버퍼링 없이 7Layer의 응용프로그램에게 바로 전달하는 플래그


URG(urgent) - 긴급 데이터 플래그

긴급한 데이터의 우선순위를 다른 데이터의 우선순위보다 높혀 긴급하게 전달하는 플래그


Tags:
0 comments