일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- @Transaction propagation
- 자바스크립트
- 타입스크립트
- TypeScript
- 트랜잭션 격리
- @Transaction isolation
- docker desktop 대체
- nuxtjs/composition-api buildModules
- Spock Mock
- enum
- Mock vs Stub
- HTTP란
- DI
- webpack
- Spock Spy
- TCP/IP
- vue store
- Rancher Desktop설치
- Vue+Typescript
- mock stub spy
- Spock Stub
- mock stub
- 의존성주입
- docker desktop 유료화 정책
- frontend
- Docker Desktop 쓰고싶다
- 공짜로 Docker Desktop같은거 쓰기
- Spock Mock Stub Spy
- Javascript
- ECMAScript
- Today
- Total
끄적끄적
[네트워크] TCP/IP 3way HandShake & 4way HandShake 본문
3Wap Handshake 에 대해 알아보기전에 TCP/IP는 간단하게 무엇이고, TCP/IP의 계층에 대해 간략하게 알아보고 시작하죠.
TCP/IP에 대해 찾다보면 계층에 대한 설명은 빠지지 않더군요.
애플리케이션 계층
트랜스포트 계층
데이터링크 계층
링크계층
각 계층에 대해 간단히 알아보고 가도록 하죠.
계층은 각 계층별 자유롭게 설계가 가능하며, 변경이 용이 하여 계층화 되어있다고 합니다.
애플리케이션 계층
애플리케이션 계층은 애플리케이션에서 사용하는 통신의 움직임을 결정하고, FTP,DNS,HTTP 등 이 계층에 포함됩니다.
트랜스포트 계층
트랜스포트 계층은 컴퓨터 사이의 흐름을 제공하는 계층인데 서로 다른 성질을 가진 TCP와 UDP의 두가지 프로토콜이 존재합니다.
네트워크 계층
네트워크 계층엔 IP가 포함됩니다. 패킷의 이동을 다루며, 경로와 어떻게 상대의 경로로 패킷을 이동시킬지 결정합니다.
링크 계층
링크계층에는 네트워크에 접속하는 하드웨어적인 부분을 다룹니다. 디바이스 드라이버,네트워크 인터페이스 카드,케이블 등과 같은 물리적인 보이는 부분들을 포함하고 있는 계층입니다.
이제 본격적으로 TCP의 3-way handshake 와 4-way handshake에 대해 알아보도록 하죠.
TCP 3-Way Handshake란?
TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정(Connection Establish) 하는 과정
TCP는 장치들 사이에서 논리적 접속을 성립하기 위해서 3-way handshake를 사용합니다.
TCP/IP프로토콜을 이용한 통신을 하는 응용프로그램이 데이터를 전송하기전에 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미합니다.
Client > Server : (TCP) SYN(synchronize sequence numbers) -> Send
Server > Client : (TCP) SYN + ACK(acknowledgment) -> Send
Client > Server : (TCP) ACK -> Send
TCP접속을 성립하기 위해 이러한 절차를 거치게 됩니다.
역활
TCP의 3-way handshake의 역활은 양쪽의 데이터를 전송하기 전에 전송간 준비가 된 것을 보장하고, 실제로 데이터 전달이 시작하기전에 한쪽이 다른 쪽에 준비가 되었다는것을 알 수 있게 합니다.
그리고 양쪽 간 초기 순차 일련번호를 얻을 수 있도록 합니다.
4-Way Handshake란?
TCP의 연결을 해제(Connection Termination) 하는 과정
두 프로세스간에 데이터 교환이 끝나게 되면 TCP 커넥션이 종료되야하고, 커넥션이 종료될 때는 호스트의 리소스(커넥션에 할당한 buffers와 variables)가 해제 되어야 합니다.
Client > Server : (TCP) FIN(Finish) -> Send
Server > Client : (TCP) ACK(Acknowledgement) -> Send
Client > Server : (TCP) FIN -> Send
Server > Client : (TCP) ACK -> Send
플래그 정보
TCP Header에는 CONTROL BIT(플래그 비트, 6bit)가 존재하며, 각각의 bit는 “URG-ACK-PSH-RST-SYN-FIN”의 의미를 가진다.
즉, 해당 위치의 bit가 1이면 해당 패킷이 어떠한 내용을 담고 있는 패킷인지를 나타낸다.
SYN(Synchronize Sequence Number)
연결 설정 / 000010
Sequence Number를 랜덤으로 설정하여 세션을 연결하는 데 사용하며, 초기에 Sequence Number를 전송한다.
ACK(Acknowledgement)
응답 확인 / 010000
패킷을 받았다는 것을 의미한다.
Acknowledgement Number 필드가 유효한지를 나타낸다.
양단 프로세스가 쉬지 않고 데이터를 전송한다고 가정하면 최초 연결 설정 과정에서 전송되는 첫 번째 세그먼트를 제외한 모든 세그먼트의 ACK 비트는 1로 지정된다고 생각할 수 있다.
FIN(Finish)
연결 해제 / 000001
세션 연결을 종료시킬 때 사용되며, 더 이상 전송할 데이터가 없음을 의미한다.
' Computer Science > Network' 카테고리의 다른 글
[네트워크] Rest API란? (0) | 2021.05.17 |
---|---|
[네트워크] keep-alive에 대해서 알아보자 (0) | 2020.06.14 |
[네트워크] HTTP - 히스토리 및 버전 알아보기 (0) | 2019.06.23 |
[네트워크] HTTP - 기초 및 개념 이해 (0) | 2019.06.22 |