현실적인 TCP의 동작
pipelined protocols
- 파이프라인 방식
- 한꺼번에 많은 패킷을 보내고 처리하는 프로토콜
TCP
point to point
reliable, in order byte stream
- 소실 없이 전달
- 메세지가 내려온 순서대로 전달된다
pipelined
full duplex data
- 각 소켓의 역할이 sender 또는 receiver 하나로 정해져있는게 아니라, 양쪽 모두 sender이자 receiver
connection oriented
flow controlled
- 리시버의 처리속도에 맞게 TCP에서 전송해줘야 함
TCP seq, numbers, ACKS
sequence number
- 바이트 단위로 시퀀스 넘버를 붙임
- 각 세그먼트의 데이터의 바이트의 첫 번째 시퀀스 넘버가 대표 시퀀스 넘버
acknowledgements
- ACK #100 : 99번 시퀀스까지 잘 받았고 100번을 기다린다는 의미
TCP round trip time, time out
- rtt를 세그먼트를 매번 보낼 때 측정. 세그먼트가 나갈 때부터 그것에 대한 피드백이 돌아올 때까지 걸리는 시간 → 변화무쌍함
- 다양한 rtt를 그대로 적용시킬 수 없기 때문에 가장 최근의 rtt에 가중치를 두고 평균치를 계산하여 적용
TCP reliable data transfer
- 한 쌍의 소켓 연결이 생기면 각 소켓의 tcp에 두 개의 버퍼가 생김 - send buffer, recieve buffer
- send buffer : tcp가 전송하는 속도, 애플리케이션 프로세스의 전송 속도가 다름. 그 간극을 조절하기 위해 존재.
- recieve buffer : in-order delivery 하기 위해 존재
Fast retransmit
- timeout보다 패킷 유실을 빨리 알아차릴 수 있는 방법
- RTT + margin의 시간동안 응답이 오지 않으면 timeout 처리. 시간의 길이가 긴 편이라 그동안 들어오는 segment들이 receiver buffer에 쌓이게 됨
- ACK 넘버가 계속 같은 것을 반복할 때 패킷 유실의 징후를 알아차릴 수 있음. 같이 ACK 넘버를 4번 받았을 때 유실로 판단
- timeout보다 빠르게 작동하는 재전송