반응형
TCP
특징
- point-to-point : 1대1 연결
- reliable, in-order byte stream : 신뢰성 있는 연결, 순서를 가진 데이터 전송
- pipelined : stop-and-wait 하지 않게 데이터를 전송
이 방식은 congestion control 과 flow control 이 같이 동반되어야 함 ! - full duplex data : 양방향으로 데이터를 주고 받을 수 있음
- MSS : maximum segment size
- connection-oriented : 연결 지향
- handshaking
- flow controlled : 수신자가 받을 수 있는 용량을 송신자가 고려함
헤더 구조
- source port / dest port : 각 2bytes
- sequence number : 4bytes. 송신자 측 시퀀스 번호
- acknowledgement number : 4bytes. 수신자 측 받은 시퀀스에 대한 ack 번호
sequence number 가 100 인 패킷을 받으면 수신자가 ack number 에 100을 넣어서
패킷을 보낼 것 같지만 실제로는 ack number 에 101 을 담아서 보낸다 !
수신자가 다음 받고 싶은 번호를 넣어서 보낸다고 생각하면 됨
- FLAG : 8bits
0 또는 1 로 세팅되어 있음.
- FIN : 1이면 연결 종료
- SYN : 1이면 연결 set
- RST : 1이면 연결을 다시 시도
- PSH : 1이면 받은 data 를 가능한 한 빠르게 위로 올려줌 (잘 안 쓰임)
- ACK : 1이면 ACK 패킷. ack number 를 확인하라는 뜻!
- URG : 1이면 PSH 와 비슷, Urg data pointer 가 가리키는 데이터가 중요하다는 뜻 (잘 안 쓰임)
- ECE : (Explicit Congestion Notification Echo) 1이면 혼잡상황.
- CWR : (Congestion Window Reduced) 1이면 혼잡한 상황이기 때문에 window size 를 줄이라는 뜻.
Sequence Number 와 ACK Number 가 헷갈릴 수 있는데
아래 예제만 잘 기억하자 !
RTT 계산하기
timeout 이 나는 시간을 어떻게 계산해야 할까 ?
timeout 이 너무 짧으면 premature timeout, 즉 불필요한 재전송이 일어날 수 있고,
너무 길면 segment loss 에 너무 느리게 대응하게 된다.
→ 아래 수식을 이용해서 RTT 를 계산해낸다.
- 구한 RTT 를 이용해서 timeout interval 계산하기
Reliable Data Transfer
TCP 는 reliable 하게 데이터를 전송하기 위해
- pipelined segments
- cumulative acks
- single retransmission timer
오 cumulative acks 방식이니까 go-Back-N 방식 ?
TCP 는 cumulative ack 방식만 사용하고 실제 재전송은 Selective repeat 방식 !
효율적인 방식으로 섞어서 사용한다.
Sender Events
application layer 에서 데이터 받기
- Seq number 붙여서 segment 만들기
- byte-stream 으로 만들어서 전송하기
- timer 시작하기 (timeout 담당)
timeout
- timeout 발생 시 segment 재전송
- timer 재시작
ack 받기
재전송 시나리오
100번 ACK 이 loss 되었어도 120 ACK 이 도착했다면 ACK 100 도 잘 도착했다고 간주하자
→ cumulative ACK
Fast Retransmit
timeout 이 나기전 3번 연속 동일한 ACK 이 오면 못 받은 것으로 간주하고 재전송 !
→ triple duplicate ACKs
3-way Handshake (SYN)
과정
- SYN bit 를 1로 설정하고 Seq num 을 설정해서 연결 요청 전송
- 받은 Seq num 에다 1 을 더해 ACK num 에 담기
Seq num 을 설정하고 SYN 과 ACK bit 각각 1로 설정해서 응답 전송 - 받은 Seq num 에다 1 을 더해 ACK num 에 담고
ACK bit 를 1로 설정해서 응답 전송
728x90
반응형