이것저것

TCP : 3-way handshake, 3-way handshake 이후 데이터 송수신 과정 본문

Network

TCP : 3-way handshake, 3-way handshake 이후 데이터 송수신 과정

nays111 2021. 4. 29. 22:17

이전 포스팅에서 TCP 는 3-way handshake 과정을 통해 연결을 수립하고, 4-way handshake를 통해 연결을 해제한다고 썼다. 이번 포스팅에서는 각 과정이 어떻게 이루어지는 자세히 확인해보려고 한다.

 

TCP는 여러 개의 필드로 나누어진 20 bytes, 즉 160 bits의 헤더를 사용하며, 각 필드의 비트를 0 또는 1로 변경하여 전송하고자 하는 세그먼트의 정보를 나타낸다.
하지만 이 20 bytes라는 것은 아무 옵션도 없는 기본적인 헤더일 때의 용량이고, TCP의 여러가지 옵션들을 사용하면 헤더 맨 뒤에 옵션 필드들이 추가로 붙기 때문에 최대 40 bytes가 더해진 60 bytes까지도 사용할 수도 있다.

https://evan-moon.github.io/2019/11/10/header-of-tcp/

이 중에서 URG, ACK, PSH, PST, SYN, FIN 이 보이는데 이들은 각각 1비트를 차지하며 코드 비트라고 한다.


3-way handshake

- 코드 비트 중 SYN, ACK 를 사용하여 두 컴퓨터간 연결을 확인할 수 있다.

- 신뢰할 수 있는 (Reliable) 연결을 하려면, 데이터를 전송하기 전 패킷을 아래와 같이 세 번 확인한다.

3-way handshake 과정


3-way handshake 이후 데이터 송수신 과정

3-way handshake를 통해 TCP 연결이 수립된 이후, 데이터를 송수신할 때는 TCP 헤더의 일련번호 (Sequence number) 와 응답 번호 (Acknowledgement number) 를 사용한다.

일련번호 

- 송신 측 -> 수신 측 "이 데이터가 몇 번째 데이터인지" 알려주는 역할을 수행 (이 덕분에 TCP 는 데이터를 송수신할 때 순서를 보장해줄 수 있다.)

- "난 n번째 데이터를 보낼거야~"

- 전송된 데이터에 일련번호를 부여하면, 수신자는 원래 데이터의 "몇 번째 데이터"를 받았는지 알 수 있다.

 

응답번호

- 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할을 수행

- "나 2000번째 데이터 방금 잘 받았어! 다음에는 2200번째 데이터를 줘!"

- 다음 번호의 데이터를 요청하는데도 사용

- ex) 10번 데이터를 수신하면, 11번 데이터를 송신 측에 요청

3-way handshaking 이후 데이터 전송 과정

초기 일련번호 3001 과 확인 응답번호 4001 은 연결을 수립하는 3-way handshaking 과정에서 결정된다.

1. COM1 은 COM2로 200 byte의 데이터를 전송한다.

2. COM2는 데이터를 수신하고, 다음에 수신하고자 하는 데이터 번호 3201 을 확인응답번호에 넣는다.

3. COM1은 COM2로부터 3201번부터 200byte의 데이터를 전송한다.

4. COM2는 데이터를 수신하고, 다음에 수신하고자 하는 데이터 번호 3401 을 확인응답번호에 넣는다.

5. 1~4 과정을 데이터 전송이 완료될 때까지 반복

 

그러나! 데이터가 항상 올바르게 전달되지는 않는다. -> 이 때, 일련번호와 확인응답번호를 사용해, 데이터가 손상되거나 유실된 경우 데이터를 재전송한다. (재전송 제어)

재전송 제어 : 데이터 전송 도중 오류 발생 시 일정 기간 동안 대기한 후 재전송

이는 다음 포스팅에서 다뤄보겠다.


4-way handshake

코드 비트 중 FIN과 ACK 을 사용하여 두 컴퓨터간 연결을 해제할 수 있다.

해제 시에는, 패킷을 다음과 같이 네 번 확인한다.

4-way handshake 과정

TCP 는 신뢰성과 정확성을 중요하게 여기는 프로토콜이므로, 상대방이 문제가 없는지 확실하게 확인해야한다. (그러나, 여러 과정을 거치다 보니 UDP 보다 속도가 느리다!)

 

'Network' 카테고리의 다른 글

도메인 검색시 일어나는 흐름  (0) 2021.04.30
DNS 서버  (0) 2021.04.30
OSI 7계층 - 2 (Network, Transport, Application)  (0) 2021.01.15
OSI 7계층 -1 (Physical, Data-Link Layer)  (0) 2021.01.15
TCP vs UDP  (0) 2021.01.10
Comments