cs-study-07 | 네트워크(3way-handshaking)
2021, Mar 31
TCP (Transmission Control Protocol)
- TCP는 전송 계층에서 사용하는 프로토콜
- 장치들의 연결을 설정하여 신뢰성을 보장하는 연결형 서비스로 가상 회선 방식 (통로) 을 제공한다
TCP Header
- Sequence number 때문에 쪼개진 세그먼트의 순서를 파악할 수 있다
- 혼잡 제어 기능 향상을 위한 3개의 비트 플래그
- 기존에 존재하던 6개의 비트 플래그
- URG (urgent) : Urgent Pointer 필드가 유효한가 / 긴급 데이터 전송하기 위해 사용
- ACK (acknowledgement): 상대방 요청에 응답
- SYN 과 RST를 제외하고 모든 세그먼트에 ACK가 설정된다
- PSH (push) : 현재 세그먼트에 포함된 데이터를 상위 계층에 즉시 전달
- RST (reset): 상대방에게 강제로 연결 끊기 요청
- SYN (synchronize): 상대방에게 연결 요청
- FIN (finish): 상대방과 연결 종료 (더이상 보낼 데이터가 없거나 + 연결을 해제하고 싶다)
3way-handshaking
- TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정
- A — (
SYN
)— > B- 접속 요청 프로세스 A (
Client
) 가 연결 요청 메시지 전송 (SYN) - Client가 최초로 데이터를 전송할 때 Sequence Number를 임의의 랜덤 숫자로 지정하고, SYN 플래그 비트를 1로 설정한 세그먼트를 전송한다
- 접속 요청 프로세스 A (
- B — (
SYN
+ACK
)— > A- 접속 요청 프로세스 B(
Server
)가 요청을 수락했으며 (ACK) , 접속 요청 프로세스인 A도 포트를 열어달라는 메세지 전송 (SYN) - 수신자는 ACK Num 필드를 (Sequence Num + 1) 로 지정하고 SYN과 ACK 플래그를 1로 설정한 세그먼트를 전송한다.
- 접속 요청 프로세스 B(
- A — (
ACK
)— > B- 접속 요청 프로세스 A(
Client
)가 요청을 수락하여 연결을 맺음 (ACK) - 이떄 전송할 데이터가 있으면 이 단계에서 데이터를 전송할 수 있다
- 접속 요청 프로세스 A(
4way-handshaking
- TCP의 연결을 해제하는 과정
-
A — (
FIN
)— > B-
프로세스 A (
Client
) 가 연결 종료 메시지 전송 (FIN) -
프로세스 B가 FIN 플래그로 응답하기 전까지 연결을 계속 유지
-
-
B — (
ACK
)— > A- 프로세스 B(
Server
)는 일단 확인 메시지를 보내고 자신의 통신이 끝날 때까지 기다린다. - ACK = 받은 Seq+1
- 자신이 전송할 데이터가 남아있다면 이어서 계속 전송한다
- 프로세스 B(
-
B — (
FIN
)— > A- 프로세스 B가 통신이 끝났으면 연결 종료 요청에 합의한다는 의미로 프로세스 A에게 FIN플래그 전송
-
A — (
ACK
)— > B- 프로세스 A는 연결 해제에 알겠다는 메시지 전송
- Active Close : TCP 연결 해제를 요청한 대상
- Passive Close : TCP 연결 해제를 수신한 대상
포트 상태정보
- CLOSED : 포트가 닫힌 상태
- LISTEN : 포트가 열린 상태로 연결 요청 대기 중
- SYN_RCV : SYNC 요청을 받고 상대방의 응답을 기다리는 중
- ESTABLISHED : 포트 연결 상태
- FIN_WAIT : active close 대상이 passive close 로부터 fin 패킷을 기다리는 상태
- CLOSE_WAIT : FIN요청을 수신한 passive close는 즉시 close 실행을 하지 않고 , TCP 포트를 사용중인 프로세스에게 종료 명령을 내리고 close 명령을 실행할 때까지 대기
- TIME_WAIT : active close 대상이 fin 패킷에 대한 ack 응답을 송신한 후 즉시 disconnect를 하지 않음 ; 세그먼트의 lifetime의 2배, 약 60초 정도 뒤에 실제 연결을 disconnect
- 즉시 연결 종료 후 바로 다음 연결을 맺었을 때 , 첫번째 연결했을 때의 데이터 패킷이 뒤늦게 도착하여 Sequence ID가 꼬이는 것을 방지하기 위해
- 마지막 ACK 패킷이 손실 되어 Active close 혼자 연결을 Disconnect 해버리는 경우 방지하기 위해
포트 : TCP가 상위 계층과 데이터를 주고받을 때 사용하는 길, 통로 같은 것이다
-
데이터를 넘겨줄 컴퓨터에는 다양한 종류의 응용프로그램이 실행하고 있다.
- 수신 측 컴퓨터가 인터넷 계층에서 패킷을 수신한 후 응용층으로 데이터를 전달하려고 할 때 누구한테 데이터를 전달해야할지 구분할 때 OS는 응용프로그램의 논리적인 주소인 port번호를 이용한다
- 포트 번호의 종류
- well-known port (잘 알려진 포트) : 0~1023
- 20 - FTP // 22 - SSH // 53-DNS // 80-HTTP
- registered port (등록된 포트) : 1024~49151
- 사용자가 직접 등록할 수 있는 포트
- 톰캣 사용시 8080
- dynamic port (동적 포트) : 49152~65535
- 수시로 변경되는 포트, 인터넷이나 시스템에서 사용할 떄 동적으로 할당하는 포트
- well-known port (잘 알려진 포트) : 0~1023