TCP 3-way hand shaking
TCP/IP프로토콜 통신을 하는 응용프로그램이 데이터를 전송하기 전에 정확한 전송을 보장하기 위해 상대방과 세션을 수립하는 과정
- Client > Server : TCP SYN Server : LISTEN, Client : SYN_SENT
- Server > Client : TCP SYN+ACK Server : SYN_RECEIVED
- Client > Server : TCP ACK Server, Client : ESTABLISHED
SYN : 'synchronize sequence numbers'
ACK : 'acknowledgment'
출처 : [1] https://notes.shichao.io/unp/ch2/
TCP 4-way Handshaking
세션을 종류하기 위해 수행되는 절차 (FIN, ACK, FIN, ACK 주고받음)
- 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송
- 서버는 확인메시지를 보내고 자신의 통신이 끝날때까지 대기 (TIME_WAIT)
- 서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN 전송
클라이언트는 확인했다는 메시지 전송
출처 : [1] https://notes.shichao.io/unp/ch2/
TCP State
CLOSED
연결되지 않은 상태
소켓의 초기 시작 상태
연결이 종료됨 (연결 없음)
SYN-SENT
SYN 세그먼트를 보내고, ACK를 기다리는 상태
- LISTEN
- SYN 세그먼트를 기다리며, 대기중인 상태
- 서버가 SYN 세그먼트를 수신하면, SYN+ACK 세그먼트를 송신하고는 이후, SYN-RECEIVED 상태로 전이됨
SYN-RECEIVED
SYN 세그먼트(연결 요청)을 받고, 자신의 SYN(즉, SYN+ACK 세그먼트)으로 응답한 상태
이때부터, 상대방에서 ACK 세그먼트를 기다리는 상태
상대방의 ACK 세그먼트가 수신되면 ESTABLISHED 상태로 전이됨
ESTABLISHED
연결 성립 상태
두 종단 간에 양방향 데이터 전송이 가능
종단 각각 자신 및 상대 ISN(초기순서번호)를 알게 됨
양단 간에 TCP 옵션에 의해 부가적인 정보가 전달됨
CLOSE-WAIT
TCP가 어플리케이션 종료를 기다림
이 상태에서 계속 데이터를 상대에게 보낼 수 있음
LAST-ACK
서버는 자신이 송신한 FIN 세그먼트에 대한 ACK 세그먼트를 기다림
FIN-WAIT-1
자신이 보낸 FIN 세그먼트에 대한 ACK를 기다리고, 또한 상대측 FIN을 기다림
자신은 더이상 데이터를 보낼 수 없지만, 상대측으로부터 오는 데이터는 계속 가능 상태
FIN-WAIT-2
FIN 세그먼트를 송신하고, 상대측은 이에 대한 ACK를 송신
Closing
상대로부터 FIN 세그먼트를 받고 ACK를 보냈지만, 자신의 FIN 세그먼트에 대한 ACK는 받지못함
TIME-WAIT
최대 세그먼트 수명(MSL,Maximum Segment Lifetime)의 2배를 기다림
지정된 시간이 지나면, Closed 상태로 전이됨
Client는 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240초) 동안 세션을 남겨놓고 잉여 패킷을 기다리는 과정
Reference
'Computer Science' 카테고리의 다른 글
JVM 메모리 구조 (JVM Memory structure) (0) | 2017.09.30 |
---|---|
DB 트랜잭션 (Transaction)의 ACID 속성과 분산시스템 BASE 속성 (0) | 2017.09.30 |
OOP(객체 지향 프로그래밍) 5원칙 및 특성 (0) | 2017.09.30 |
Java 자료구조 비교 (0) | 2017.09.30 |
TCP vs UDP (0) | 2017.09.30 |
OSI 7 계층 (OSI 7 Layer) (0) | 2017.09.29 |
프로세스와 스레드(Process vs Thread) (0) | 2017.09.29 |
64비트와 32비트의 차이 (0) | 2017.09.29 |
퀵 정렬, 퀵 소트(Quick Sort) (0) | 2017.09.21 |
계수정렬, 카운팅 소트(Counting Sort) (0) | 2017.09.21 |