TCP 프로토콜을 이용한 데이터 전송
TCP 프로토콜 : 전이중 방식의 양방향 통신을 지원
- 전송 데이터와 응답 데이터를 함께 전송하는 피기배킹 기능을 사용
- 데이터 전송시 연결 설정, 데이터 전송, 연결 해제라는 3단계를 순차적으로 진행
TCP 연결 설정
연결 설정 (3 -Way Handshake)
- A 프로세스가 전송할 데이터가 없을 떄 처리하는방식
1. SYN (연결 요청). Seq 번호는 A에서 임의로 정해준 순서번호.
2. SYN + ACK (연결 요청 + 긍정응답)
- Seq=50 은 B에서 보내준 임의의 순서번호,
- Ack=11은 A의 순서번호+1해서 11. 또한, Ack번호는 다음에 수신받길 희망하는 번호를 의미
3. ACK (긍정응답)
- SYN+ACK에서 11을 수신하길 희망하기 떄문에 Seq는 11
- Ack=51 은 SYN+ACK의 순서번호에서 +1 하여 51
TCP 데이터 전송
1. Seq=11, Ack=51, Data=5
- Seq = 11은 A에서 임의로 정해준 순서번호
- Ack = 51은 연결설정 3-Way Handshake시 마지막 ACK플래그의 순서번호 였음
- Data = 5은 보낼 데이터 크기
2. Seq=51, Ack=16, Data=5
- Seq = 51은 1번 과정의 ACK번호가 됨
- Ack = 16은 1번에서 5개의 세그먼트를 보냈으니 1번의 Seq + 5 하여 16
- Data = 10은 보낼 데이터의 크기
3. Seq16, Ack=61, ACK
- Seq = 16은 2번과정의 ACK번호가 됨
- Ack = 61은 1번에서 10개의 세그먼트를 보냈으니 2번의 Seq + 10 하여 61
공통적으로 ACK 플래그는 연결설정 첫 단계 SYN(연결 요청)단계를 제외하고 모두 보냄.
TCP 연결 해제
- 연결을 해제하고자 하는 쪾에서 FIN플래그를 지정해 요구 (FIN으로 종료는 정상종료 RST는 비정상 종료)
- 양쪽 프로세스의 동의하에 진행됨.
1. (Seq=16, Ack=61, ACK, FIN)
- A에서 B로 연결 해제 요청 (FIN + ACK)
- Seq = 16은 그림에 나와있지는 않지만, 직전 과정에서의 Ack번호일 것임
- Ack = 61은 다음에 수신을 희망하는 순서번호를 의미
2. (Seq=61, Ack=17, ACK, Data=5)
- 1번의 요청에대한 ACK 응답. (ACK)
- Seq = 61은 1번과정의 Ack번호니까 61
- Ack = 17 1번과정에서 보낸 데이터가 없으니까 정상적으로 +1하여 17이 됨
- 원래는 (Seq=16, Ack=17, ACK)로 끝나야하지만 B에서 A로 전송할 데이터가 있기 때문에, Data=5 추가된 것
3. (Seq=17, Ack=66, ACK)
- A에서 B로 연결 해제 완료 (ACK)
- Seq = 17은 2번 과정의 Ack번호가 됨
- Ack = 66은 2번 과정의 Seq번호 + 5
4. (Seq=66, Ack=17, ACK, FIN)
- B에서 A로 연결 해제 요청 (FIN + ACK)
5. (Seq=17, Ack=67, ACK)
- B에서 A로 연결 해제 완료 (ACK)
'Network > Computer Science' 카테고리의 다른 글
[Network] RTP 프로토콜 (0) | 2021.12.09 |
---|---|
[Network] UDP 프로토콜 (0) | 2021.12.09 |
[Network] TCP 프로토콜 (0) | 2021.12.03 |
[Network] 전송 계층의 기능 (0) | 2021.12.03 |
[Network] IGMP 프로토콜 (0) | 2021.12.01 |