[TCP] 헤더구조, 3 way-handshake, 4 way-handshake

itonse·2024년 6월 14일
0

CS 스터디

목록 보기
50/56

해당 주제의 기술면접 질문 미리보기

Q1. TCP의 연결과 끊는 과정에 대해서 설명해주세요.
Q2. TCP의 연결 과정과 연결 종료 과정 단계가 차이나는 이유가 뭔가요?
Q3. Time-Wait 란 무엇일까요?


TCP 헤더 구조

Source port, Destination port

TCP 레벨에서는 이 포트만 확인한다.
소스포트, 데스티네이션 포트: 16bit

소스포트: 클라이언트 포트인데, 임의로 할당되는 방식이라 매 요청마다 달라질 수 있다.
데스티세이션 포트: 서버 포트(고정)


Sequence Number

시퀀스 번호는 전송하는 데이터의 순서를 의미하며, 32 bits를 할당받는다.
이 시퀀스 번호 덕분에, 수신자는 쪼개진 세그먼트의 순서를 파악하여 올바른 순서로 데이터를 재조립할 수 있게 된다.


Ack Number(승인 번호)

승인 번호는 데이터를 받은 수신자가 예상하는 다음 시퀀스 번호를 의미하며, 32 bits를 할당받는다.
연결 설정과 연결 해제 때 발생하는 핸드쉐이크 과정에서는 상대방이 보낸 시퀀스 번호 + 1 로 자신의 승인 번호를 만들어내지만, 실제로 데이터를 주고 받을 때상대방이 보낸 시퀀스 번호 + 자신이 받은 데이터의 bytes 로 승인 번호를 만들어낸다.


Flags (코드 비트)

9개의 비트 플래그이다. 이 플래그들은 현재 세그먼트의 속성을 나타낸다. 기존에는 6개의 플래그만을 사용했지만, 혼잡 제어 기능의 향상을 위해 Reserved 필드를 사용하여 NS, CWR, ECE 플래그가 추가되었다.

(모두 1bit)
URG: 긴급 데이터임을 표시
ACK: Ack Number용 데이터임을 표시
PSH: 수신측 버퍼가 다 찰때까지 기다리지 않고, 바로 전달 요청
RST: 접속 리셋 요청시 사용
SYN: 연결 요청시 사용
FIN: 연결 종료시 사용



TCP 연결 방식 (3-way handshake)

TCP 통신을 위한 연결을 설정하는 과정

이미지 출처

총 3개의 패킷을 생성해서 주고받게되고, 이를 마치면 데이터를 보낼 수 있게 된다.



TCP 연결 해제 방식 (4-way handshake)

이미지 출처

클라이언트가 먼저 연결을 종료하겠다는 FIN 요청을 보낸다.

서버: 네 잠시만요.. (아직 보낼 데이터가 남아 있는지 확인하고 모두 보낸다)
서버: (끊을 준비가 됨) 이제 종료하셔도 됩니다. -> 마찬가지로 FIN을 보낸다
클라이언트: (ACK를 보내며) 네 종료했습니다.

+) 최근에는 FIN/ACK 를 동시에 보낸다.


전체적인 과정 한 눈에 보기



Time-Wait

Time-Wait 상태는 TCP 연결이 종료된 후 일정 기간 동안(기본적으로 240초) 연결을 유지하는 상태입니다. 이 기간 동안 연결의 안전한 종료를 확인하고, 네트워크에서 발생할 수 있는 패킷 충돌이나 데이터 손실을 방지합니다.



해당 주제 관련 기술면접 질문

Q1. TCP의 연결과 끊는 과정에 대해서 설명해주세요.

연결 과정으로는,
1.클라이언트는 서버로 통신을 시작하기 위해 SYN 패킷을 보냅니다.
2.서버는 클라이언트의 요청을 수락하고, 이에 대한 응답으로 SYN과 ACK 플래그가 설정된 패킷을 보냅니다.
3.마지막으로 클라이언트는 서버의 응답을 확인하고, ACK 패킷을 서버로 보냅니다.

이렇게 3-way-handshake 과정이 종료가 됩니다.
다음으로, 연결을 끊는 과정으로는

1.클라이언트는 연결을 종료하기 위해 FIN 패킷을 서버로 보냅니다.
2.서버는 클라이언트의 FIN 패킷을 수신하고, 이에 대한 확인 응답으로 ACK 패킷을 보냅니다.
3.서버는 자신의 데이터 전송이 완료되었음을 확인한 후, 연결 종료를 의미하는 FIN 패킷을 클라이언트로 전송합니다.
4.클라이언트는 서버의 FIN 패킷을 수신하고, 이에 대한 확인 응답으로 ACK 패킷을 서버로 보냅니다.

이렇게 4-way handshake과정을 거치고 나면 클라이언트와 서버단의 네트워크 연결이 종료됩니다.


Q2. TCP의 연결 과정과 연결 종료 과정 단계가 차이나는 이유가 뭔가요?

연결 과정에서는 데이터 무결성보다는 연결 확립과 경로 설정에 중점을 둡니다.

연결 종료 과정에서는 모든 데이터가 올바르게 전송되고 수신되었는지 확인하고, 연결을 안전하게 종료하기 위해 더 복잡한 절차를 거칩니다. 특히, 데이터가 손실되지 않도록 FIN과 ACK 플래그를 주고받는 과정을 통해 안전하게 종료합니다.


Q3. Time-Wait 란 무엇일까요?

Time-Wait 상태는 TCP 연결이 종료된 후 일정 기간 동안(기본적으로 240초) 연결을 유지하는 상태입니다. 이 기간 동안 연결의 안전한 종료를 확인함으로써, 네트워크에서 발생할 수 있는 패킷 충돌이나 데이터 손실을 방지합니다.



ref.
https://baebalja.tistory.com/443
https://evan-moon.github.io/2019/11/10/header-of-tcp/

0개의 댓글