티스토리 뷰
[Backend 개발자 면접 준비] TCP 연결 / 해제 과정 (3 / 4 way HandShake)
h7ung 2023. 7. 26. 14:31TCP (Transmission Control Protocol) 란?
▪️ 서버와 클라이언트간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜이다.
▪️ 데이터를 전송하기 전에 데이터 전송을 위한 연결을 만드는 연결지향 프로토콜이다.
▪️ 데이터는 네트워크선로를 통해 전달되는 과정에서 손실되거나 순서가 뒤바뀌어서 전달될 수 있는데, TCP는 손실을 검색해내서,이를 교정하고 순서를 재조합할수 있도록 해준다.
TCP 의 역할
▪️ 받을 대상 노드 (호스트)가 서비스 기능 (연결 기능) 상태인지 확인 및 연결을 수립하는 역할
▪️ 전송을 제어해주는 정보를 패킷에 추가해주는 역할
TCP 연결 성립 과정
TCP 는 신뢰성을 확보 할 때 '3 way handshake' 라는 작업을 진행 한다.
1️⃣ SYN : 클라이언트는 서버에 클라이언트의 ISN 을 담아 SYN을 보낸다. ISN은 새로운 TCP 연결의 첫번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 이는 장치마다 다를 수 있다.
2️⃣ SYN + ACK : 서버는 클라이언트의 SYN을 수신하고 서버의 ISN 을 보내며 승인번호로 클라이언트의 ISN + 1 을 보낸다.
3️⃣ ACK : 클라이언트는 서버의 ISN + 1 한 값인 승인번호를 담아 ACK 를 서버에 보낸다.
이렇게 3 way handshake 과정 이후 신뢰성이 구축되고 데이터 전송을 시작한다.
이러한 과정이 있기 때문에 신뢰성이 있는 계층이라고 하며 UDP 는 이러한 과정이 없기 때문에 신뢰성이 없는 계층이라고 한다.
* SYN : Synchronize 의 약자이며, 연결 요청 플래그
* ACK : Acknowledgment 의 약자이며, 응답 플래그
* ISN : Initial Sequence Numbe 의 약어, 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호이다.
TCP 연결 해제 과정
TCP 가 연결을 해제할 때는 '4 way handshake' 라는 작업을 진행 한다.
1️⃣ 클라이언트가 연결을 닫으려고 할 때 FIN 으로 설정된 세그먼트를 보낸다. 그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다린다.
2️⃣ 서버는 클라이언트로 ACK 라는 승인 세그먼트를 보낸다. 그리고 CLOSE_WAIT 상태에 들어간다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
3️⃣ 서버는 ACK 를 보내고 일정 시간 이후에 클라이언트에 FIN 이라는 세그먼트를 보낸다.
4️⃣ 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK 를 보내서 서버는 CLOSED 상태가 된다. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제된다.
Reference
'Tech Interview > 기술 면접 준비' 카테고리의 다른 글
[Backend 개발자 면접 준비] OSI 7 계층이란? (0) | 2023.07.31 |
---|---|
[Backend 개발자 면접 준비] 오버로딩 vs 오버라이딩 (Overloading vs Overriding) (0) | 2023.07.29 |
[Backend 개발자 면접 준비] JWT(JSON Web Token)란? (0) | 2023.07.27 |
[Backend 개발자 면접 준비] Java 8 추가 된 내용 (0) | 2023.07.24 |
[Backend 개발자 면접 준비] 데이터베이스 - 트랜잭션(Transaction) (0) | 2023.07.24 |
- Total
- Today
- Yesterday
- 개발자 취업 준비
- 백준
- 코딩테스트
- 프로그래머스 자바
- 취준
- 개발자 면접 준비
- 알고리즘
- 프로그래머스 카카오
- 취업준비
- 백엔드 개발자 기술 면접 준비
- 취업 준비
- 자바공부
- 제로베이스 백준 장학금
- 주니어 개발자 취업 준비
- 백엔드 개발자 취업 준비
- 코테준비
- java
- 코테 준비
- 개발자 취준
- 코딩테스트공부
- 자바
- 코테공부
- 코딩테스트 준비
- 기술 면접 준비
- 알고리즘공부
- 백엔드 개발자
- 알고리즘 공부
- 프로그래머스
- 제로베이스 백엔드 스쿨
- 코딩테스트 공부
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |