[TCP 통신]
- TCP (Transmission Control Protocol) : 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
* 가상회선 패킷 교환 방식 : 각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착하는 방식
[3-way-handshake, 4-way-handshake]
1. 둘의 차이?
- 3-way-handshake는 TCP의 연결 과정
- 4-way-handshake는 TCP의 연결 해제 과정
* TCP는 위와같은 과정이 있어 신뢰성이 있지만 느리고, UDP는 위와 같은 과정이 없어서 신뢰성이 없지만 빠르다
2. 포트 상태 정보
- CLOSED : 포트가 닫힌 상태
- LISTEN : 포트가 열린 상태로 연결 요청 대기중
- SYN_RVC : SYN 요청을 받고 상대방의 응답을 기다리는 중
- ESTABLISHED : 포트 연결 상태
3. 플래그 정보
- TCP header에는 CONTROL BIT(플래그 비트, 6bit)가 존재하며, 각각의 bit는 URG / ACK / PSH / RST / SYN / FIN의 의미를 가짐
SYN | Synchronization, 연결요청플래그 | TCP 교환과정의 첫 번째 패킷, 세션 연결을 위해 임의적 시퀀스 번호를 보냄 |
ACK | Acknowledgement, 응답 플래그 | 첫번째 패킷을 받았다는 것 알려주는 패킷, 성공/실패를 판단하여 다음 패킷을 전송 |
RST | REST, 재연결 종료 | 비정상적인 세션 연결 끊기, 즉시 연결을 끊는 행위 |
PSH | Push | OSI 7계층인 Application 계층으로 전송하는 Flag |
URG | Urgent, 긴급 데이터 | 행위가 유효한 것인지 나타냄 |
FIN | Finish, 연결 종료 요청 | 세션 종료 시킬 때 사용 |
[3-way-handshake]
1. 개념
- TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish)하는 과정
- 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장
- 실제로 데이터 전달이 시작되기 전에 한쪽에게 다른쪽이 준비되었음을 알림
- 즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미
2. 작동 방식
(1) SYN(연결 요청 플래그) 단계
- 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냄
* ISN: 초기 네트워크 연결을 할 때 할당된 고유 시퀀스 번호를 말하며 장치마다 다름
(2) SYN + ACK(응답 플래그) 단계
- 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보냄
- 승인번호로 클라이언트의 ISN+1을 보낸다
(3) ACK단계
- 클라이언트는 서버의 ISN+1한 값인 승인번호를 담아 ACK를 서버에 보냄
- 이 단계에서 데이터 전송 가능
[4-way-handshake]
1. 개념
- 연결을 해제하는 과정
- FIN플래그 사용
2. 연결 해제 종류
- 갑작스런 연결 해제, Abrupt connection release
- 정상적인 연결 해제, Graceful connection release
3. 갑작스런 연결 해제
- 존재하지 않는 TCP연결에 대해 비SYN 세그먼트가 수신된 경우
- 여린 커넥션에서 일부 TCP 구현이 잘못된 헤더가 있는 세그먼트가 수신된 경우
- 일부 구현에서 기존 TCP 연결을 종료해야 하는 경우
4. 정상적인 연결 해제
(1)
- 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보냄
- 클라이언트는 FIN_WAIT_1 상대로 들어가고 서버의 응답을 기다림
(2)
- 서버는 클라이언트로 ACK라는 승인 세그먼트를 보냄
- CLOSE_WAIT상태로 들어감
- 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어감
(3)
- 서버는 ACK를 보내고 일정 시간 이후에 클라이언드에 FIN이라는 세그먼트를 보냄
(4)
- 클라이언트는 TIME_WAIT상태가 되고 다시 서버로 ACK를 보내 서버는 CLOSED상태가 됨
- 이후 클라이언트는 어느정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원 연결이 해제됨
*time wait : 지연 패킷이 발생해 데이터 무결성 문제가 발생하는 것을 방지, LAST_ACK상태로 계속 유지되는 것을 방지