패킷은 정보 기술에서 패킷 방식의 컴퓨터 네트워크가 전달하는 데이터의 형식화된 블록이다. 패킷은 제어 정보와 사용자 데이터로 이루어지며, 페이로드라고도 한다.
특정 동작을 수행할지 말지 결정하는 (보통 1비트인) 변수를 플래그라고 부른다
TCP FLAG 6가지 구성, 이 패킷의 FLAG 값에 따라서 세션 연결과 해제, 데이터 전송과 거부, 세션 종료 등과 같은 기능이 나뉘어진다.
각각 1비트로 TCP segment field안에 CONTROL BIT, FLAG BIT로 정의되어 있다.
URG | Urgent, 긴급데이터
Urgent Pointer 필드에 값이 채워져있음을 알림
송신측 상위 계층이 긴급데이터라고 알려주면, URG를 1로 설정 & 순서에 상관없이 먼저 송신
ACK | Acknowledgement, 응답
확인응답 필드에 확인응답번호(Acknowledgement Number) 값이 셋팅됐음을 알림
상대방으로부터 패킷을 받았다는 걸 알려주는 패킷. 받은 사람이 보낸 사람 시퀀스 번호에 길이 또는 데이터의 양을 더한 것과 같은 ACK를 보낸다. 일반적으로 +1. 이를 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송하거나 다음 패킷을 전송한다. TCP 연결 시작 후 모든 세그먼트에는 항상 이 비트가 1로 셋팅(유효)
PSH | Push, 밀어넣기
상호작용이 중요한 프로토콜의 경우 빠른 응답이 중요한데, 이 때 받은 데이터가 즉시 목적지인 OSI 응용 계층으로 전송하도록 하는 FLAG. 대화형 트래픽에 사용. 버퍼가 채워지길 기다리지 않고 전달.
RST | Reset, 강제 연결 초기화
재설정을 하는 과정이며, 양방향에 동시에 일어나는 중단 작업이다. 비정상적인 세션 연결 끊기. 이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용한다.
SYN | Sychronization, 동기화
TCP에서 세션을 성립할 때 가장 먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는데에 사용되며, 초기에 시퀀스 번호를 보내게 된다.
FIN | Finish, 연결 종료 요청
세션 연결을 종료시킬 때 사용되며 더이상 전송할 데이터가 없을을 나타낸다.
TCP는 정확한 전송을 보장한다. 그렇기 때문에 전송 전, 논리적인 접속을 성립하기 위해 3way handshake 과정을 진행한다. 3번의 통신과정이 정상적으로 진행되면 연결이 성립된다.
연결 해제시에는 4번의 통신을 주고 받고, 정상적으로 완료되었을 때 논리적 해제가 성립되었다고 판단한다.
클라이언트가 서버에게 연결 해제를 요청(FIN=1)한다.
서버는 FIN을 확인하고, 이에 대한 응답(ACK=1)을 보낸다.
남은 데이터가 있을 수 있기 때문에 server는 바로 해제하지 않고 CLOSE WAIT 상태가 되어 남은 데이터를 모두 보낸다.
모든 데이터를 전송한 후에 서버는 연결 종료 플래그(FIN=1)를 보낸다.
클라이언트는 FIN을 확인하고, 서버에게 응답(ACK=1)한다.
아직 서버에서 다 수신받지 못한 데이터가 있을 수 있으므로 TIME WAIT 상태가 된다. 응답을 받은 서버는 소켓을 닫고, 클라이언트는 TIME WAIT 시간이 끝나고 자동으로 소켓을 닫는다.