▶ 연결 설정
- 송신자와 수신자는 세그먼트를 교환하기 전에 연결 설정(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 세그먼트를 전송한다.
- FIN과 ACK는 하나의 세그먼트에 같이 포함될 수도 있다.
- 클라이언트가 연결을 종료하는 경우를 가정해본다.
ClientSocket.close();
- 1단계 : 클라이언트는 세그먼트 헤더에 FIN비트 플래그(flag)를 설정하고, 서버에 FIN 세그먼트를 전송한다.
- 2단계 : 서버는 FIN 세그먼트를 받고, ACK 세그먼트를 전송한다. 연결을 종료하고, FIN 세그먼트를 클라이언트에게 전송한다.
- 3단계 : 클라이언트는 서버로부터 FIN 세그먼트를 받고, ACK 세그먼트를 서버로 전송한다. 이후 대기 시간(timed wait)동안 기다린 후, 연결 종료된다.
- 4단계 : 서버는 클라이언트로부터 ACK 응답을 받고, 연결 종료된다.
'Network > OSI 3-4 계층' 카테고리의 다른 글
9. Network Layer and Router - 네트워크 계층과 라우터의 기능 (0) | 2017.04.22 |
---|---|
8. Congestion Control - TCP의 혼잡 제어 (3) | 2017.04.20 |
6. Fast Retransmit and Flow Control - 빠른 재전송과 흐름 제어 (1) | 2017.04.19 |
5. TCP Segment, Timeout, RTT, ACKs, and Sender/Receiver Event - TCP의 기본 개념과 송,수신측의 상황 (0) | 2017.04.19 |
4. Reliable Data Transfer in TCP - TCP에서의 신뢰성 있는 데이터 전송 (0) | 2017.04.12 |