서버 listen() 상태
1. 클라이언트 connect(), C->S 접속요청 패킷 SYN(M) 전송
2. 서버 accept(), S->C 요청 수락 패킷 ACK(M+1), SYN(N) 전송
3. 클라이언트 connect(), C->S 요청 수락 확인 패킷 ACK(N+1) 전송
Established 상태
1. C->S 연결 종료요청 FIN FLAG 전송
2. S->C 종료 수락 메시지 ACK 전송
일시적 TIME_OUT (데이터를 모두 보낼 때 까지)
3. S->C 연결 종료 FIN FLAG 전송
4. C->S 확인 메시지 ACK 전송
서버 소켓 연결 close(), 클라이언트 일정 시간 동안 TIME_WAIT (잉여패킷 대기)
TCP flag(URG, ACK, PSH, RST, SYN, FIN)
FLAG 순서 - | URG | ACK | PSH | RST | SYN | FIN |
각각 1비트로 TCP 세그먼트 필드 안에 CONTROL BIT 또는 FLAG BIT 로 정의 되어 있다.
TCP 에서 세션을 성립할 때 가장먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용되며 초기에 시퀀스 번호 (ISN) 를 보내게 된다.
시퀀스 랜덤인 이유 Connection시 사용하는 포트는 유한 범위 내 사용되고 시간이 지나면 재사용 됨 = 두 통신 호스트가 과거 사용된 포트 번호쌍을 사용할 가능성이 있음 >>> SYN의 시퀀스가 순차적일 경우 서버에서는 SYN으로 패킷 구분하므로 이전 Connections에서 오는 패킷으로 인식 가능
상대로부터 패킷을 받았다는 걸 알려주는 패킷, 다른 플래그와 같이 출력되는 경우도 있음수신자가 송신자 시퀀스 번호에 길이 또는 데이터 양을 더해 ACK를 전송 (일반적으로 +1)
ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송 하거나 다음 패킷을 전송
연결 종료 요청세션 연결을 종료시킬 때 사용. 더이상 전송할 데이터가 없음을 나타냄
연결 종료재설정(Reset)을 하는 과정, 양방향에서 동시에 일어나는 중단 작업
비 정상적인 세션 연결 끊기. 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용
받은 데이터를 버퍼가 채워지기를 기다리지 않고 (버퍼링 없이) 즉시 목적지인 OSI 7 Layer 의 Application 계층으로 전송
TELNET 과 같은 상호작용, 빠른 응답이 중요한 프로토콜(대화형 프로토콜)에 사용
긴급 데이터Urgent pointer가 유효한 것인지를 나타냄. 긴급 데이터로 다른 데이터에 비해 우선순위가 높아야 함 (ex. ping 명령어 실행 도중 Ctrl+c 입력)
Placeholder : 패킷의 플래그에 SYN, FIN, RST, PSH등의 플래그가 설정 되어 있지 않은 경우 세팅됨
ACK플래그와 함께 사용되기도 함