Packet Error 가 생길 수 있는 네트워크에서 사용하는 메커니즘

(1) Error Detection ( Checksum )

(2) Feed back

(3) Re-Transmission ( Timeout / 3-duplicate ACKs )


Sequence Number

센더가 리시버에게 패킷을 보낼때마다, 각각의 데이터에 고유한 번호를 부여해서 전송한다. 이를 sequence number 라고 하는데, 리시버의 관점에서는 센더에서 오는 데이터가 새로운 데이터인지 혹은 재전송된 데이터인지 판단하는 근거는 sequence number 로 판단하는 것이다. 데이터가 한번씩 전송할때마다 값이 1씩 증가하고 마지막 숫자 값까지 도달하면 다시 0부터 시작한다. Sequence Number 는 TCP 가 In-Order Delivery 를 가능하도록 하게한다.


Pipelined Protocols

Stop & Wait Operation 의 방식보다는 한번에 대량의 패킷을 송신하고 한번에 응답받는 방식이다. go-Back-N 프로토콜이 존재한다.


TCP

- Point 2 Point

- Reliable & In-Order Byte

- Pipelined

- Full Duplex Data : Sender 와 Receiver 가 별개가 아닌 Sender 이면서 Receiver 이다. (상호간의 데이터 이동)


TCP Segment Structure


[ http://www.tcpipguide.com/free/diagrams/tcpsegmentformat.png ]


Source port

송신측의 포트번호

Destination port

수신측의 포트번호

Sequence number

송신측의 시퀀스 번호이다. ACKs 를 트랙킹하기 위해 존재한다. 일반적인 전송의 경우에 세그먼트의 첫번째 바이트 데이터의 시퀀스 번호이다. TCP 커넥션을 맺기위해 센더측에서 SYN 메세지에서 TCP 초기 시퀀스 번호가 전달된다. (ISN : Initial Sequence Number) 

Acknowledgment number

송신측에서 보낸 데이터를 수신측이 오류없이 수신했을 경우에 해당 데이터와 함께 수신한 sequence number 에 1을 더하여 데이터를 정확하게 수신하였음을 송신자에게 알려줄 때 사용된다. 예를 들어 N번의 Acknowledgment number 가 도착했다는 것은 최초 설정 번호부터 ~ (N-1) 까지 Sequence number 번호를 가진 데이터들이 잘 도착했음을 말한다.

+) Initial Sequence Number (ISN) (링크)

새로운 연결이 생성될 때마다 32비트의 시퀀스번호가 생성되어야 한다. 하지만 이 값은 유한하며 이미 종결된 통신이 사용하던 값과 중복이 발생할 수 있따. 따라서 이 값이 중복되지 않도록 ISN값을 적절하게 결정하는 것이 중요한데 일반적으로 microseconds에 한번씩 값을 변경하는데, ISN값은 대략 매 4.55 시간에 한번씩 동일해지도록 주기적으로 변경된다.


중요한 것은 송신과 수신이 같이 이루어져야 하기 때문에 

sequence number 와 acknowledgment number 두 개가 필요한 것이다.


Checksum

Error Detection 을 하기 위해 필요하다.

receive window

flow control 을 가능케한다.수신측의 리시브 버퍼를 확인하기 위해서 사용된다.


Flags(9bit) (Control bits)

제어용 플래그(1:On, 0:Off)

- SYN (1bit)

동기화 시퀀스 번호, 양쪽이 보낸 최초의 패킷에만 이 플래그가 설정된다.

- ACK (1bit)

Acknowledgment 필드의 값이 유효함을 나타낸다. 클라이언트가 보낸 최초의 SYN 패킷 이후에 전송되는 모든 패킷은 ACK 플래그가 설정되어 있어야 한다. (0과 1로 구분된다)

- FIN (1bit)

남은 송신측의 데이터가 없음을 알린다.


Window size

송신측의 윈도 크기로, 한번에 전송하고자 하는 데이터의 크기이다. (기본 단위는 바이트) acknowledgment 필드의 시퀀스 번호보다 더 큰 값이어야 한다.


TCP Sender 동작방식

(1) 전송할 데이터 존재 시, 세그먼트를 만들고 시퀀스 번호를 부여

(2) 전송 이전에 타이머 세팅 (각각의 TCP 소켓에는 timer 가 하나씩 존재)

(3) 세그먼트를 보내는 순간에 타이머 실행 및 윈도우 사이즈 만큼 데이터를 전송

(4) 피드백을 받기 이전에 타이머가 만료되면 전송했던 세그먼트를 재전송

(5) 만약 타이머가 만료되기 이전에 ACKs를 받고 해당 ACKs 의 시퀀스 번호가 50 이라면 49(50-1)까지 번호가 부여된 데이터들은 수신측에서 잘 받았음을 의미한다. 따라서 앞선 번호들을 버린다. 그리고 이후 송신측은 SEND_BASE 와 타이머는 새롭게 전송할 세그먼트 쪽으로 매핑시킨다.

(6) 남은 window size 만큼 새롭게 상위 계층에서 데이터를 내려받는다. (window size 를 옮김)


Packet Loss 근거 ( 재전송을 위함 )

Duplicate ACKs 를 최소 3개 이상 받게되면 패킷유실로 판단하고 패킷 재전송을 실시한다. 이를 3-duplicate-acks 라고 한다. (같은 ACK번호를 3개 이상 받게된다는 의미) 이렇게 설정한다면 타이머가 만료되지 않았음에도 불구하고 패킷을 재전송한다. 이렇게 재전송하는 것은 Fast Re-Transmit 이라고 부른다. 

Posted by doubler
,