연결 설정

 

- 송신자와 수신자는 세그먼트를 교환하기 전에 연결 설정(Handshaking)을 한다.

 

- TCP 변수 초기화 : 순서번호, 버퍼 및 흐름제어 정보(수신윈도우)

 

- 클라이언트 : 연결 요청


Socket clientSocket = new Socket("hostname", "port number");



- 서버 : 클라이언트 연결 승인


Socket connectionSocket = welcomeSocket.accept();



 

 

3-Way Handshake

 

- 1단계 : 클라이언트는 SYN 비트 플래그(flag)를 설정하고 서버에 SYN 세그먼트를 전송한다. 최초의 순서번호를 기술한다.

* SYN 세그먼트 : 연결 요청 때에만 세그먼트의 헤더에 flag필드에 1비트의 값을 가진 세그먼트로, 데이터는 없다.

 

- 2단계 : 서버는 SYN 세그먼트를 받고, 클라이언트에게 SYNACK 세그먼트를 전송한다. 서버는 TCP 버퍼와 변수를 할당한 뒤, 서버의 최초 순서번호를 기술한다.

 

- 3단계 : 클라이언트는 SYNACK를 받고, ACK 응답을 서버에게 보낸다. 클라이언트는 TCP 버퍼와 변수를 할당한다. ACK응답에는 데이터가 포함될 수 있다.

 





 

 

 

연결 해제

 

- 클라이언트와 서버 각각 서로에게 FIN 세그먼트를 전송한다.

 

- FINACK는 하나의 세그먼트에 같이 포함될 수도 있다.

 

- 클라이언트가 연결을 종료하는 경우를 가정해본다.


ClientSocket.close();



- 1단계 : 클라이언트는 세그먼트 헤더에 FIN비트 플래그(flag)를 설정하고, 서버에 FIN 세그먼트를 전송한다.

 

- 2단계 : 서버는 FIN 세그먼트를 받고, ACK 세그먼트를 전송한다. 연결을 종료하고, FIN 세그먼트를 클라이언트에게 전송한다.

 

- 3단계 : 클라이언트는 서버로부터 FIN 세그먼트를 받고, ACK 세그먼트를 서버로 전송한다. 이후 대기 시간(timed wait)동안 기다린 후, 연결 종료된다.

 

- 4단계 : 서버는 클라이언트로부터 ACK 응답을 받고, 연결 종료된다.

 







 

+ Recent posts