일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 쓰레드
- 멀티프로세서
- DirectX 12
- Direct12
- 병행성
- directx
- 알고리즘
- 컨디션 변수
- 백준
- 그리디 알고리즘
- 병행성 관련 오류
- 파일시스템 구현
- I/O장치
- 자료구조
- 스케줄링
- DirectX12
- 멀티쓰레드
- 락
- 그리디알고리즘
- 동적계획법
- 운영체제
- 영속성
- 타입 객체
- 디자인패턴
- OS
- codility
- 렌더링 파이프라인
- 프로그래머스
- 다이나믹 프로그래밍
- 다이나믹프로그래밍
- Today
- Total
기록공간
[TCP] 3-way-handshake & 4-way-handshake 본문
TCP 프로토콜은 신뢰성 있는 연결이 가능하다는 특징을 가지고 있다.
이는 장치간 서로 잘 연결되어있는지 확인하는 과정이 포함되어있기 때문에 가능한 것이다.
그럼 이제부터 이 과정이 어떻게 진행되는지 살펴보도록 하겠다.
연결 성립 (3-way-handshake)
1) 클라이언트는 서버에 접속을 요청하는 SYN(a) 패킷을 보낸다.
2) 서버는 클라이언트 요청 SYN(a)을 받고 요청을 수락한다는 ACK(a+1)와 SYN(b)이 설정된 패킷을 보낸다.
3) 클라이언트는 ACK(a+1)와 SYN(b)을 받고 ACK(b+1)를 서버로 보내면 연결이 성립된다.
연결 해제 (4-way-handshake)
1) 클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
2) 서버는 FIN을 받고 확인 메시지로 ACK를 보낸다.
2-1) 서버는 이후 데이터를 모두 보낼때까지 TIME_OUT이 된다.
2-2) 데이터를 모두 보내고 통신이 끝났으면 클라이언트에게 연결이 종료되었다는 FIN플래그를 전송한다.
3) 클라이언트는 FIN을 확인했다는 ACK를 보낸다.
4) 서버는 ACK 메세지를 받고 연결된 소켓을 닫는다.
SYN? ACK?
두 용어는 다음의 약자이다.
SYN :: Synchronize Sequence Number
ACK :: ACKnowledgement
TCP 프로토콜 헤더에는 Code Bit(Flag Bit)라는 부분이 존재한다. 이 부분은 총 6비트로 이루어져 있으며 각각 비트들이 갖고 있는 의미가 있다. Urg-Ack-Psh-Rst-Syn-Fin 순서로 되어 있으며 해당 위치의 비트가 1인 경우 그 위치에 해당하는 내용을 담고 있는 패킷이라는 것을 나타낸다. SYN의 경우 000010이 되고 ACK의 경우 010000이 된다.
왜 3-way인가? 2-way는 안되는가?
비유를 해보자. 일단 클라이언트가 자신의 목소리가 들리는지 물어본다(SYN). 서버는 클라이언트 목소리가 들린다고 말한다(SYN + 1). 그리고 자신의 목소리가 들리는지 물어본다(ACK). 클라이언트는 서버의 목소리가 들린다고 말한다(ACK + 1). 이런 과정을 거쳐야 신뢰성 있는 연결이 성립되는 것이다.
TCP 연결은 양방향성(Full-Duplex) 연결이다. 클라이언트에서 서버에게 존재를 알리고 패킷을 보낼 수 있다는 것을 알리듯, 서버에서도 클라이언트의 존재를 알리고 패킷을 보낼 수 있다는 것을 알려야 한다. 이러한 이유로 2-way로는 부족한 것이다.
본 내용의 출처는 https://asfirstalways.tistory.com/356 입니다.
'Network' 카테고리의 다른 글
WebRTC란? (0) | 2021.09.03 |
---|---|
[서버 가이드북] 2. 네트워크 기초 지식 (0) | 2021.07.27 |
[서버 가이드북] 1. 서버(Server) 란? (1) | 2021.07.21 |
웹 애플리케이션 (0) | 2020.11.21 |
GET vs POST (0) | 2020.11.21 |