14. TCP에 대한 두번째 (4계층 Transport Layer전송 계층)

(4계층 Transport Layer전송 계층)



TCP연결과정


-TCP 데이터의 encapsulation 과정


-TCP 세크먼트(Segment) 데이터를 네트워크를 통한 실질적인 전송을 위하여 적절한 크기로 분할한 조각 (아래 TCP Header Format 참조)


-패킷(Packet) OSI 7계층의 네트워크 계층(Network Layer)에서 다루는 내용
전송을 위해 분할된 데이터 조각(세그먼트)에 목적지까지의 전달을 위하여 Source IP 와 Destination IP가 포함된 IP Header가 붙은 형태의 메세지


프레임(Frame) OSI 7계층의 데이터링크 계층(Dara Link Layer)에서 다루는 내용
최종적으로 데이터를 전송하기 전에 패킷에 해더(맥 주소 포함)와 CRC를 위한 트레일러가 붙은 메세지



-Source port: src 포트


-Destination Port: dst포트


-Sequence Number: 전송되는 데이터의 바이트 순서 번호, 랜덤한 숫자가 들어감


-Acknowledgement Number: 수신측에서 앞으로 받고자 하는 바이트 순서 번호, 마지막으로 받은 데이터에 seq+1 을 더함


-Herder Length- 목적지 호스트에게 TCP 헤더 크기를 4byte 단위로 표현해 알림 (TCP헤더 시작부터 데이터 이전까지 길이)


-Reserved: 예약된 필드 (offset)




-TCP Flags



-SYN (Synchronization:동기화) - S : 연결 요청 플래그


TCP 에서 세션을 성립할 때 가정 먼저 보내는 패킷, 시퀸스 번호를 임의적으로 설정하여 세션을 연결하는 데에 사용되며 초기에 시퀸스 번호를 보내게 된다.



-ACK (Acknowledgement) - Ack : 응답

상대방으로부터 패킷을 받았다는 걸 알려주는 패킷, 다른 플래그와 같이 출력되는 경우도 있다.



받은사람이 보낸사람 시퀸스 번호에 TCP계층에서 길이 또는 데이터 양을 더한 것과 같은 ACK를 보냅니다(일반적으로 +1 하여 보냄) ACK 응답을 통해 보낸 패킷에 대한 성공, 실패를 판단하여 재전송 하거나 다음 패킷을 전송한다.



-RST (Reset) -R : 강제 종료

재설정(Reset)을 하는 과정이며 양방향에서 동시에 일어나는 중단 작업이다. 비 정상적인 세션 연결 끊기에 해당한다 이 패킷을 보내는 곳이 현재 접속하고 있는 곳과 즉시 연결을 끊고자 할 때 사용한다



-PSH(push) -P : 밀어넣기

TELNET 과 같은 상호작용이 중요한 프로토콜의 경우 빠른 응답이 중요한데, 이 때 받은 데이터를 즉시 목적지인 OSI 7계층의 Aplication 계층으로 전송하도록 하는 FLAG, 대화형 트래픽에 사용되는 것으로 버퍼가 채워지기를 기다리지 않고 데이터를 전달한다, 데이터는 버퍼링 없이 바로 위 계층이 아닌 7계층의 응용프로그램으로 바로 전달한다


.
-URG (Urget) -U : 긴급 데이터

Urgent pointer 헤더를 참조하여 어디~어디까지 우선 보내달라고 우선순위로 요청



-FIN (Finish) -F :연결 종료 요청

세션 연결을 종료시킬 때 사용되며 더이상 전송할 데이터가 없음을 나타낸다.



-Placeholder

패킷의 플래그에 SYN, FINISH, RESET, PUSH 등의 플래그가 설정 되어 있지 않은 경우 이 플래그가 세팅된다. 이 플래그는 ACK플래그와 함께 사용되는 경우도 있다.


와이어 샤크 프로그램으로 본 패킷


-Window Size : 이만큼 보낼수 있다.( 송신원도우 ). 이만큼 받을수 있다. ( 수신윈도우 ).

(최대크기65535) 흐름제어, 오류제어, 혼잡제어를 사용 하기 위해 필요하다



-TCP Checksum : TCP헤더 + 데이터를 포함한 세그먼트 전체에 대하여 계산한 값이다.
에러 체크시 사용



-Urgent Point : 긴급히 처리해야 할 필요가 있는 데이터의 마지막 바이트의 위치를 나타낸다



-TCP Option : 연결이 구성되는 동안 협상할 최대 세그먼트 크기(MSS) 옵션을 정의(Herder LEngth 4byte 단위, ex ) Herder Length가 1~4면 4byte, 6이면 8byte, 9면 12byte)




TCP 흐름제어

흐름제어 : 클라이언트 와 서버 간 데이터를 주고 받을때, 서로간의 속도와 크기의 균형을 맞추는 것




종류

-정지대기 [Stop-and-wait] : 한번에 1개씩 프레임을 전송하는 방식

-슬라이딩 윈도우 [Sliding Window] - 파이프라이닝 이라고도 하며, 서버측 ack을 기다리지 않고 여러 패킷을 전송 하는 방식 (GBN, SR 오류제어)


*정지대기


정지대기 : 한번에 1개씩 프레임을 전송하는 방식



*슬라이딩윈도우


윈도우(버퍼)크기는 일정하며, 수신측에 받은 패킷 응답만큼 전송측 윈도우 사이즈도 원래 대로 간다


슬라이딩 윈도우의 오류제어 종류


Go-Back-N : 중간에 누락된 패킷이 있으면, 그 패킷 부터 재전송 된다.


-서버측은 패킷을 순차적으로 받고 응답 한다. 잘 받았다는 응답이 Lost 손실 될수 있으나 괜찮다.


그 다음 패킷을 받으면 생략 된 패킷은 받은 걸로 인지 한다. ( 위 그림의 Frame 0번에 대한 ack이 없는 것)


-서버측에서 패킷 순에서 맞지 않는 경우 더 이상 요청을 받지 않고 무시한다. discarded~


+서버측에선 순서에 맞는 패킷을 요청함(ACK),


+클라이언트에서 보낸 패킷에 대한 ACK또는 NAK요청이 없으면 time-out에 걸려 재전송 된다.


(time out 걸리기 전 서벛측에서 3차례(대략) 재전송을 요청 하면, 즉 누락된 패킷(100)이
Time out 걸리기전 클라이언트가 패킷을 100이상의 패킷을 계속 보낼 때 마다, NAK(100을 달라고) 날리면서 time out을 무시하고 (3차례이상 요청시) 100을 재전송 한다. 
(Fast Retransmit)



*요약: 단순 심플하지만, 패킷 유실에 대한 복구 비용(재전송) 이 높다.
(이를 극복한게 2번 Selective Repeat)


Selective Repeat : 서버측에서 손실된 패킷만 송신자에게 다시 요청 하는 기법


-GBN 과 달리 순차적이지 않아도, 버퍼에 저장 해놓는다.


-버퍼는 순차적으로 처리 한다. 중간에 빠진 패킷에 대해 버퍼 초기화가 되지 않고 윈도우(버퍼) 크기 만큼 저장한다.


-실패한 요청은 타이머 작동 또는 버퍼 풀 일 경우... 인지하고 재요청 ack를 보낸다





*요약

-실패한 패킷만 재전송(성능 비용 좋다)


-시스템 추상화 복잡(구조가 복잡)



혼잡제어

-송신측의 데이터 전달과 네트워크의 데이터처리 속도 차이를 해결하기 위한 기법이다.


-송신측의 데이터는 지역망이나 인터넷으로 연결된 대형 네트워크를 통해 전달된다.


-네트워크 상의 라우터가 항상 한가로운 상황은 아니다.


-한 라우터에 데이터가 몰릴 경우, 다시 말해 혼잡할 경우 라우터는 자신에게 온 데이터를 모두 처리할 수가 없다.


-호스트들은 재전송을 하게 되고 결국 더욱더 혼잡만 가중시켜 오버플로우나 데이터 손실을 발생시킨다


네트워크의 혼잡을 피하기 위해 송신측에서 보내는 데이터의 전송 속도를 강제로 줄이게 되는데 이러한 작업을 혼잡제어라고 한다.





정리
-흐름제어 : 종단 <-> 종단 간의 처리
-혼잡제어 : 종단 <-> 네트워크 <-> 종단 간의 처리




-Ack Time out 이 너무 길거나(재전송 지연시간이 길어짐)

짧아도 (False Alarm 가능성, 잘 전송해도 못 가는 경우) 문제이다



적절한 값을 측정하는법


-Retransmission : 재전송


-Retransmission : Timer의 시간


-round-trip time (RTT) : 세그먼트를 보내고 응답 받는 시간




-RTO = RTT의 평균값 + RTT표준편차 X 4 = 1초 보다 짧으면 1초가 된다. (max 1초보다 낮아지진 않는다.)



혼잡제어 방식 : AIMD(Additive Increase / Multicative Decrease)

-혼잡하면 전송률을 절반으로 줄임 (Multicative Decrease)

-비 혼잡 상황에선 1개씩 증가 (Additive Increase)



Multicative Decrease는 2종류로 나뉜다.

+패킷 유실이 네트워크 이상을 반영 할때는 CW(congestion window) 를 1MSS로 줄인후
Slow Strat를 한다


+Time out 내에 도착 했지만 Fast Retransmit 발생시 Multicative Decrease 발동
Increase 갯수의 단위 : MSS (maximum segment size)


MSS는 TCP 커넥션을 맺은 후 송수신의 협의에 의해 작은 값으로 설정. 
(중간에 네트워크 장비의 패킷 사이즈를 뭘로 하느냐에 대부분 결정. 1kb ~ 4kb 사이)




혼잡제어 플로우




Slow Start와 일반 Additive Increase



댓글

이 블로그의 인기 게시물

 Link State Routing Protocol (링크 상태 라우팅 프로토콜)

라우터의 프로토콜간의 우선순위 (AD)

1. a 와 ad (영단어 어원 접두사)