14. TCP에 대한 두번째 (4계층 Transport Layer전송 계층)
(4계층 Transport Layer전송 계층)
정지대기 : 한번에 1개씩 프레임을 전송하는 방식
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
댓글
댓글 쓰기