1. TCP란?
TCP는 전송을 제어하는 프로토콜이라는 뜻으로 TCP/IP 4계층의 트랜스포트계층에 해당한다.
일반적으로 TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면, TCP는 패킷을 추적및 관리하게된다.
TCP의 특징
- 연결형 서비스로 가상 회선방식을 제공
- 3-way handshaking과정을 통해 연결을 설정하고, 4-way handshaking을 통해 해제한다.
- 높은 신뢰성을 보장
- UDP에 비해 속도가 느리다
- 흐름제어, 혼잡제어
2. TCP 헤더
TCP 프로토콜은 신뢰성을 보장하기 위해서 헤더에 많은 정보를 포함하게 된다.
- Source Port : 출발지의 포트, 데이터를 보내는 컴퓨터의 포트 정보. 컴퓨터가 가질수 있는 포트개수로 사이즈가 2 바이트이다.
- Destination Port : 목적지의 포트
- Sequence Number : 송신 데이터의 일련번호를 담고있다.
- Acknowledgement Number : 이전의 데이터를 잘 받았다는 표시로 상대방이 다음에 전송할 일련번호를 담고있다. ACK 라고 표현한다.
- HLEN(Header Length) : 헤더의 정보를 담고있다
- Reserved : 예약된 비트, 나중을 위해 남겨두는 비트
- Control Flag
FLAG | 설명 |
URG (Urgent Pointer) |
Urgent Pointer의 필드가 유효하다는 의미의 FLAG |
ACK (Acknowledgement) |
수신확인 응답 ACK |
PSH (Request for push) |
송수신 버퍼에 있는 데이터를 즉시 처리요청하는 FLAG |
RST (Reset the connection) |
연결을 강제 중단. TCP가 유지되고 있을 때 이 FLAG를 사용하면 그 즉시 연결을 끊어버린다. |
SYN (Synchronized sequence number) |
연결 설정 FLAG |
FIN (Terminate the connection) |
정상 종료의 연결종료 FLAG |
- Window Size : 수신자에서 송신자로 보내는 수신자의 윈도우사이즈. 즉, 버퍼의 여유공간 크기를 의미한다.
- Checksum : 오류를 검사하기 위한 필드.
- Urgent Pointer : 긴급 데이터의 위치값을 담고있다.
3. TCP의 연결과정 (3-way handshake)
TCP 연결과정은 3단계 절차에 따라 연결이 성립되며, 이때 사용되는 FLAG는 SYN, ACK이다.
- Client 측에서 동기화를 위해서 SYN FLAG와 함께 Seqenece Number를 임의로 설정해서 전송 ISN은 최초의 Sequence Number를 의미한다. 아직 Server 측에서 데이터를 수신하지 않았으므로 Ack number는 비어있다.
이때 Client는 SYN패킷을 보낸 SYN_SENT상태, Server는 SYN패킷을 받은 SYN_RCVD상태이다.
- Server에서 동기화 요청을 받았으니 연결하자고 요청을 보낸다. Ack number를 Client에서 보낸 Seq Number에 +1 하여 다음 Sequence Number를 요구. 또한 자신도 ISN을 설정하여 다시 Client로 전송.
이때 Client의 상태는 연결확립(Established) 상태가 된다. - Client는 이에 대한 응답으로 서버에게 ACK number를 설정하여 보낸다. 이패킷을 전송한 후 Server도 연결 확인 상태가 된다.
4. TCP의 연결 종료과정 (4-way handshake)
TCP의 정상적인 연결 종료과정은 4단계에 걸쳐 이루어 지며, 이때 사용되는 FLAG는 FIN, ACK이다.
- 연결상태인 Client가 연결을 종료하기 위하여 FIN을 전송. 이때 Client의 상태는 FIN_WAIT_1 Server는 CLOSE_WAIT 상태가 된다.
- Server는 이에 대한 응답으로 ACK를 전송한다. 이때 Client의 상태는 FIN_WAIT_2 가된다.
- Server는 이후 소켓을 받는 시스템콜(close)을 호출할때까지 대기 상태로 있다가 소켓이 종료되면 FIN을 보낸다. 마지막 FIN과 함께 ACK를 전송하였으므로 LAST_ACK 상태가 된다.
- Server로부터 FIN을 받은 Client는 ACK 응답을 하여 2MSL(1분에서 4분) 만큼의 시간 이후 연결 종료(CLOSED) 상태가 되어 연결이 종료된다.
5. JAVA Socket 클래스를 활용한 TCP 통신
JAVA 에서는 TCP 통신을 하기위한 Socket 클래스를 제공한다.
이를 사용하여 간단하게 TCP 통신 프로그래밍을 하였는데 아래 포스팅 글에서 확인할 수 있다.
'네트워크' 카테고리의 다른 글
UDP (User Datagram Protocol) (0) | 2021.12.30 |
---|---|
네트워크의 공통 언어 TCP/IP (0) | 2021.12.30 |