서버 : socket() 생성 → bind() 소켓 주소할당 → listen() 연결요청 대기상태 → accept() 연결허용 → read/write() 데이터 송수신 → close() 연결종료
클라이언트 : socket() 생성 → connect() 연결요청 → read/write() 데이터 송수신 → close() 연결종료
3-way handshake : TCP 연결
서버 listen() 상태
1) 클라이언트 connect(), C->S 접속요청 패킷 SYN(M) 전송
2) 서버 accept(), S->C 요청 수락 패킷 ACK(M+1), SYN(N) 전송
3) 클라이언트 connect(), C->S 요청 수락 확인 패킷 ACK(N+1) 전송
연결 성립 (Established)
4-way handshake : TCP 해제
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 로 정의 되어 있다.
SYN(Synchronization:동기화) - S : 연결 요청 플래그
TCP 에서 세션을 성립할 때 가장먼저 보내는 패킷, 시퀀스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용되며 초기에 시퀀스 번호 (ISN) 를 보내게 된다.
시퀀스 랜덤인 이유
Connection시 사용하는 포트는 유한 범위 내 사용되고 시간이 지나면 재사용 됨
= 두 통신 호스트가 과거 사용된 포트 번호쌍을 사용할 가능성이 있음
>>> SYN의 시퀀스가 순차적일 경우 서버에서는 SYN으로 패킷 구분하므로 이전 Connections에서 오는 패킷으로 인식 가능
ACK(Acknowledgement) - Ack : 응답
상대로부터 패킷을 받았다는 걸 알려주는 패킷, 다른 플래그와 같이 출력되는 경우도 있음
수신자가 송신자 시퀀스 번호에 길이 또는 데이터 양을 더해 ACK를 전송 (일반적으로 +1)
ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송 하거나 다음 패킷을 전송
FIN(Finish) - F : 연결 종료 요청
세션 연결을 종료시킬 때 사용. 더이상 전송할 데이터가 없음을 나타냄
RST(Reset) - R : 연결 종료
재설정(Reset)을 하는 과정, 양방향에서 동시에 일어나는 중단 작업
비 정상적인 세션 연결 끊기. 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용
PSH(Push) - P : 밀어넣기
받은 데이터를 버퍼가 채워지기를 기다리지 않고 (버퍼링 없이) 즉시 목적지인 OSI 7 Layer 의 Application 계층으로 전송
TELNET 과 같은 상호작용, 빠른 응답이 중요한 프로토콜(대화형 프로토콜)에 사용
URG(Urgent) - U : 긴급 데이터
Urgent pointer가 유효한 것인지를 나타냄. 긴급 데이터로 다른 데이터에 비해 우선순위가 높아야 함
(ex. ping 명령어 실행 도중 Ctrl+c 입력)
Placeholder
패킷의 플래그에 SYN, FIN, RST, PSH등의 플래그가 설정 되어 있지 않은 경우 세팅됨
ACK플래그와 함께 사용되기도 함
Reference
'CS Interview > Network' 카테고리의 다른 글
HTTP & HTTPS / GET & POST (HTTP METHOD) (0) | 2021.05.06 |
---|---|
[TCP] 흐름제어, 혼잡제어, 오류제어/ 슬라이딩 윈도우, ARQ (GBn, SR), AIMD (0) | 2021.05.06 |
TCP와 UDP (0) | 2021.05.04 |