클라이언트와 서버가 연결된 상태에서 데이터를 주고 받는 연결 지향적 프로토콜
❓ SYN에 무작위 값을 넣어 보내는 이유
연결 시 사용하는 포트 번호는 유한 범위 내에서 사용되기 때문에 시간이 지나면 재사용될 수 있음
서버 측에서는 패킷의 SYN을 보고 패킷을 구분하게 되는데 난수가 아닌 순차적인 숫자가 전송된다면 이전의 연결에서 오는 패킷으로 인식할 수도 있기 때문에 난수를 사용하는 것!
✨ TCP 연결 과정 (3-way handshaking)
1. Client → Server : 내 말 들려?
2. S → C : 어 잘 들려! 내 말은 들려?
3. C → Server : 잘 들려!
✨ TCP 해제 과정 (4-way handshaking)
1. Client → Server : 나는 다 보냈어! 이제 끊자!
2. S → C : 알겠어! 잠시만~
3. S → C : 나도 끊을게!
4. C → S : 알았어!
❓ 바로 CLOSED하지 않고 TIME-WAIT 상태로 기다리는 이유?
혹시 모를 전송 실패에 대비하기 위함
TIME-WAIT이 없다면, 패킷의 손실이 발생하거나 통신자 간 연결 해제가 제대로 되지 않을 수 있음
❓ 왜 해제는 4번 할까?
연결을 시작할 때는 서로 통신 중이 아닌 상태에서 Handshake를 시도하므로, SYN과 ACK를 동시에 보낼 수 있음 (아무것도 안하고 있으니까)
But, 연결을 해제 할때는 이미 상호 통신 중이기 때문에 FIN 과 ACK를 동시에 보낼 수 없음 (-> 일방적으로 종료 할 수 없음)
송신측과 수신측 사이의 데이터 속도 차이를 해결하기 위한 기법
즉, 수신측이 패킷을 지나치게 많이 받지 않도록 조절하는 것
송신측 전송량이 수신측 수신량보다 클 경우, 전송된 패킷은 수신측의 큐를 넘어 손실될 수 있기 때문에 송신측의 패킷 전송량을 제어해야 함!
❓ 흐름제어 vs 혼잡제어
- 공통점: 송신자의 데이터 전송 속도를 제어함으로써 오류를 줄이는 기능
- 차이점: 흐름제어는 송수신 측 사이에 패킷 수를 제어하는 기능이지만, 혼잡제어는 네트워크 내의 패킷 수를 조절하는 기능임
매번 전송한 패킷에 대한 응답을 받아야 그 다음 패킷을 전송할 수 있음 (Give & Take 방식)
매번 확인 응답을 받을 때까지 기다려야 하기 때문에 비효율적임
수신측에서 설정된 윈도우 크기 만큼 송신측에서 확인 응답 없이 세그먼트를 전송할 수 있게 하여, 데이터 흐름을 동적으로 조절하는 기법
Stop and Wait의 비효율성을 개선한 기법임
송신측의 데이터 전달과 네트워크의 데이터 처리 속도 차이를 해결하기 위한 기법
따라서 이러한 네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송속도를 강제로 줄이게 되는데, 이러한 작업을 혼잡제어라고 함
송신측이 전송 속도(윈도우 크기)를 패킷 손실이 일어날 때까지 증가시키는 방법
윈도우 크기를 1MSS씩밖에 증가시키지 않기 때문에, 빠른 속도로 통신하기까지 오래 걸린다는 단점이 있음
송신측이 윈도우 크기를 1부터 패킷 손실이 일어날 때까지 지수승으로 증가시키는 방법
처음에는 윈도우 크기가 1이라 속도가 느리지만, 지수승으로 윈도우 크기가 커지므로 속도도 빠르게 증가함. 대신 혼잡 현상이 발생하면 윈도우 크기를 1로 떨어트리게 됨
TCP 타호는 처음에는 Slow Start를 사용하다가 임계점에 도달하면 AIMD 방식을 사용함
3 duplicate ACKs 혹은 Time out을 만나면 임계점을 윈도우 크기의 절반으로 줄이고 윈도우 크기를 1로 줄임
이때, 3 duplicate ACKs는 송신측이 3번 이상 중복된 승인 번호를 받은 상황으로, 정상적으로 데이터가 전송되지 않음을 의미
TCP Tahoe 방식은 3 duplicate ACKs를 만나고 window size가 다시 1부터 키워나가야 하므로 속도가 느림 -> 이를 해결할 수 있는 방식이 TCP Reno
TCP Reno는 TCP Tahoe와 비슷하지만 3 dupicate ACKs와 Time out을 구분한다는 점이 다름
비연결형 프로토콜
❓ 실시간 스트리밍인데 패킷 순서가 바뀌면 안되지 않나요?
- 123456으로 보낸게 124536으로 오면 그대로 12456으로 스트리밍 되는 것
- 극단적으로 654321로 오진 않음
- UDP는 전송 프로토콜이고, RTP 등의 프로토콜에서 이를 해석할 때 처리해준다.
- 서비스가 추구하는 특징에 따라 그에 알맞은 프로토콜을 사용함
- ex) 넷플릭스는 TCP를 사용함
UDP(User Datagram Protocol) 패킷은 사용자 데이터그램이라고 부르기도 함
데이터그램 방식은 패킷 교환에서 비연결형 서비스를 이용해 패킷을 독립적으로 전송하는 방식(UDP)을 가리킴
프로토콜 종류 | TCP | UDP |
---|---|---|
연결 방식 | 연결형 서비스 | 비연결형 서비스 |
패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
전송 순서 | 전송 순서 보장 | 전송 순서가 바뀔 수 있음 |
수신 여부 확인 | 수신 여부를 확인함 | 수신 여부를 확인하지 않음 |
통신 방식 | 1:1 통신 | 1:1 OR 1:N OR N:N 통신 |
신뢰성 | 높다. | 낮다. |
속도 | 느리다. | 빠르다. |
https://dev-coco.tistory.com/144
https://dev-coco.tistory.com/161
https://baebalja.tistory.com/443
https://medium.com/pplink/%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%8A%A4%ED%8A%B8%EB%A6%AC%EB%B0%8D-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%A0%84%EC%86%A1%ED%95%98%EB%8A%94%EA%B1%B0%EC%95%BC-a3e38716e06d
https://lactea.kr/entry/Network-%E2%80%93-tcp-%EC%97%B0%EA%B2%B0-%EB%B6%84%EC%84%9D
https://chunggaeguri.tistory.com/entry/Network-TCP-3-Way-Handshake
https://blog.skby.net/슬라이딩-윈도우sliding-window/
https://evan-moon.github.io/2019/11/26/tcp-congestion-control/
https://blog.skby.net/tcp-혼잡제어/
https://hanamon.kr/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B8%B0%EB%B3%B8-%EB%8F%84%EB%A9%94%EC%9D%B8%EA%B3%BC-dns-%EB%84%A4%EC%9E%84%EC%84%9C%EB%B2%84%EB%9E%80-%EA%B0%9C%EB%85%90%ED%8E%B8/
https://ooeunz.tistory.com/91
즐겁게 읽었습니다. 유용한 정보 감사합니다.