tcp의 이론적인 내용을 총 정리하고 넘어가는 강.
tcp의 내부 동작 원리가 어떻게 이루어지는지 정리해보고자 한다.
먼저 세 단계로 나누어서 설명해볼 수 있다.
1. 상대 소켓과의 연결
2. 상대 소켓과의 데이터 송수신
3. 상대 소켓과의 연결 종료
세 단계를 거쳐 tcp 의 내부 동작을 이해할 수 있다.
tcp는 기본적으로 데이터 손실 없이 신뢰성을 보장하는 연결을 지향한다. 그렇기 때문에 양쪽 호스트 상호간의 확인 작업이 필수적으로 이루어진다.
1. 연결
1. host A에서 연결 요청을 전송
2. host B에서 연결 준비가 되었음을 응답
3. host A에서 연결 준비 데이터 수신 완료를 확인
이 세 과정을 거치기 때문에 3way handshaking이라고 부른다.
2. 데이터 송수신
1. 데이터 바이트와 함께 패킷에 번호를 부여하여 데이터를 전송
2. ack : seq + data byte + 1 의 형식으로 응답 메시지 전송 -> 이렇게 응답 요청을 보내면 중간에 데이터 손실 없이 잘 전송 되었는지 확인 가능.
3. 나머지 데이터 전송
4. 데이터 수신 완료 응답 메시지 전송
if 데이터 전송이 있었는데 응답 요청이 오지 않고 timeout 된 경우,
다시 데이터를 전송한다.
이런 방식으로 데이터의 손실 없이 신뢰성 있는 데이터 송수신이 가능하다.
3. 연결 종료
1. 연결 종료 요청
2. 연결 종료 요청에 대한 응답 메시지 전송. 종료 준비 시작.
3. 종료 준비가 완료 되면 종료 요청 전송.
4. 연결 종료 후 응답 메시지 전송.
이렇게 연결 종료가 가능한지 확인 후에 연결을 종료하고 있기 때문에, 연결 종료 요청 후에 데이터가 손실되는 경우를 방지하고 있다.
'Golang > etc' 카테고리의 다른 글
tcp/ip - 07 소켓의 종료 (0) | 2022.07.04 |
---|---|
golang udp example (0) | 2022.07.03 |
tcp/ip 04 (0) | 2022.06.28 |
tcp/ip -02,03 (0) | 2022.06.27 |
tcp/ip - 01 (0) | 2022.06.22 |