728x90
728x170
22. 전송 계층(Transport Layer)
1. 전송 계층의 개요
- 전송 계층
- 송신자와 수신자 간에 논리적 연결(Logical Communication) 을 수행하는 것
- TCP 프로토콜과 UDP 프로토콜이 존재함.
- TCP 프로토콜
- 연결 지향(Connection Oriented) 방식 사용
- 신뢰성 있는 전송을 수행
- UDP 프로토콜
- 비연결성(Connection Less) 방식 사용
- 신뢰성이 없는 전송을 수행
- TCP 프로토콜
- 수신 측에 전달되는 데이터의 오류가 없고, 데이터의 순서가 수신 측에 그대로 보존되도록 보장하는 연결 지향 서비스(Connection Oriented Service)의 역할을 하는 종단간(End-to-End) 서비스 계층
2. 세그먼트(Segment)
- 전송 계층에서 TCP 혹은 UDP를 사용할 때, 해당 헤더(Header)를 메시지에 붙이는 것
Message | TCP Header |
Message | UDP Header |
- TCP 혹은 UDP Header를 붙이면 Segment라고 함.
3. 세그먼트의 TCP와 UDP
- TCP Header
- UDP에 비해 크기가 큼.
- TCP
- 신뢰성 있는 데이터 전송을 위해 가상의 연결을 수행함.
- 가상의 연결 이후에 데이터를 송수신함.
- 송신자가 메시지를 전송하면 수신자는 ACK 를 되돌려서 수신 여부를 확인해 줌.
- 만약 수신자가 동일한 ACK 번호를 반복적으로 전송할 경우
- 어떤 이유로든 데이터를 받지 못하는 것을 의미함.
- 반복적인 ACK가 되돌아오면 TCP는 에러 제어 기법을 통해 재전송을 수행함.
- 네트워크 전송망을 효율적으로 사용함.
- 에러 제어 기법의 종류
- GO-BACK-N 방법
- 되돌아온 ACK 번호 이후의 모든 것을 전부 재전송하는 방법
- 혼잡 제어(Congestion Control)
- 동일한 ACK 번호가 송신자에게 계속 돌아오면 송신자는 전송 속도를 낮춤.
- GO-BACK-N 방법
- 수신받지 못하는 상황에서 계속적으로 빠르게 전송한다면 네트워크 부하만 유발될 것임.
- Sequence 번호를 가지고 메시지의 순서를 파악할 수 있게 해 줌.
- 송신자의 메시지가 꼭 순섣대로 도착하지 않음.
- 비동기 방식으로 데이터를 보내면서 경로 또한 다른 경로로 보내질 수 있기 때문
- Check Sum
- TCP와 UDP에 모두 존재하는 방법
- 송신 중에 메시지의 변조를 파악 하기 위해서 송신자와 수신자 간에 에러를 체크하기 위한 방법
- 패리티 비트 가 같음.
- Receive Window
- 수신자의 윈도우 크기
- 메모리 버퍼와 관련이 있음.
- 목적 : 전송 효율 관리
- 수신자의 버퍼가 비어있으면 송신자는 해당 버퍼의 크기만큼의 데이터를 한꺼번에 전송함.
- 수신자의 버퍼가 1개 비어 있으면, 송신자가 1개만 보냄.
4. TCP
(1) TCP(Transmission Control Protocol) 개요
- 네트워크 계층 상위에서 수행되는 전송 계층의 프로토콜
- 클라이언트와 서버 간의 연결 지향, 신뢰성 있는 데이터 전송, 에러 제어, 흐름 제어 등의 기능을 수행하는 프로토콜
- 메시지를 송수신하기 전에 연결 지향으로 먼저 연결을 확인함.
- 연결이 확립되면 메시지를 송수신하는 방식으로 기동됨.
- 하지만, 연결을 지향할 뿐, 물리적으로 연결된 것은 아님.
- 주기적으로 메시지를 송수신해서 송수신 가능 여부를 확인함.
- 이러한 송수신 가능 여부를 확인하는 것은 TCP의 역할이 아님.
- TCP/IP 프로토콜 군의 ICMP 프로토콜 이 이 역할을 담당함.
- 주기적으로 메시지를 송수신해서 송수신 가능 여부를 확인함.
(2) TCP 상태 전이
- TCP 프로토콜에서 가장 중요한 요소
- TCP의 최초 연결 신청부터, 연결, 종료까지의 상태 변화를 의미함.
- TCP의 상태 정보를 확인할 수 있는 가장 쉬운 방법
- 윈도우 CMD에서
netstat
명령 실행
- 윈도우 CMD에서
- TCP 상태 전이도
(3) TCP 상태 전이 과정
- 클라이언트는 먼저 서버에 연결 요청 메시지인 SYN 신호를 보내고, SYN-SENT 상태가 됨.
- 서버는 처음 기동이되면 클라이언트의 연결을 받기 위해서 LISTEN 상태에서 클라이언트이 연결을 대기함.
- 클라이언트로부터 SYN 메시지가 수신되면, 서버는 클라이언트에게 SYN, ACK 를 전송하고 SYN-RECEIVED 상태로 바뀜.
- 그리고 클라이언트는 _ACK_를 서버에 전송하고 클라이언트와 서버는 **_ESTABLISHED_** 상태인 연결 확립 상태가 됨.
(4) TCP 상태 값 확인
netstat
명령어를 사용해서 TCP 연결 상태를 확인해 볼 수 있음.-p
옵션을 지정하면 모니터링하고 싶은 프로토콜을 지정할 수 있음.
PS > netstat -p tcp 활성 연결 프로토콜 로컬 주소 외부 주소 상태 TCP 127.0.0.1:***** DESKTOP-38RRRRR:***** ESTABLISHED TCP 127.0.0.1:***** DESKTOP-38RRRRR:***** ESTABLISHED TCP 127.0.0.1:***** DESKTOP-38RRRRR:***** ESTABLISHED TCP 127.0.0.1:***** DESKTOP-38RRRRR:***** ESTABLISHED .... |
(5) TCP 프로토콜의 Header 구조
- 신뢰성 있는 전송, 에러 제어
- 순서 제어(Sequence Control)
- 완전 이중 방식(Full Duplex Data)
- 연결 지향(Connection Oriented)
- 3-Way Handshaking
- 흐름 제어(Flow Control)
TCP의 주요 기능
- 신뢰성 있는 전송
- 수신자는 데이터를 송신 받고 ACK Number 를 송신자에게 전송함.
- 송신자가 ACK Number 가 수신되지 않으면 재전송을 실행하여 신뢰성 있는 데이터 송수신을 진행함.
- 순서 제어
- 송신자의 메시지 순서를 맞추기 위해서 송신자는 메시지 전송 시에 Sequence Number를 같이 보냄.
- 그러면 수신자는 메시지의 순서가 맞지 않게 도착해도 Sequence Number 를 통해서 정렬을 수행할 수 있음.
- 완전 이중(Full Duplex)
- 전화기처럼 송신자는 송신, 수신자는 수신을 동시에 할 수 있음.
- 흐름 제어(Flow Control)
- 수신자가 메시지를 제대로 받지 못하면, 송신자는 전송 속도를 늦추어 네트워크 효율성을 제어함.
- 혼잡 제어(Congestion Control)
- 수신자의 메모리 버퍼 정보 즉, Window Size를 송신자가 수신 받아서 수신자의 버퍼 상태를 보고 전송 속도를 조절함.
(6) TCP 헤더 세부 내용
1) TCP Header 구조 세부 내용 (1)
항목 | 내용 |
근원지 포트(Source Port) | 가상 선로의 송신 측 포트(End Point of Sender) |
목적지 포트(Destination Port) | 가상 선로의 수신 측 포트(End Point of Receiver) |
일련 번호(Sequence Number) | 송신자가 전송하는 데이터의 일련 번호 |
전송 확인(Piggyback Acknowledgement) | 수신자가 응답 받은 데이터의 수 |
- 일련 번호와 전송 확인은 데이터 흐름 제어(Flow Control)에 사용되는 32비트 정수
- 슬라이딩 윈도우 프로토콜
- 송신자가 일련 번호와 함께 데이터를 전송함.
- 수신자는 받은 데이터의 수를 의미하는 전송 확인 번호를 응답함으로써 안정적인 데이터 전송을 보장함.
2) TCP Header 구조 세부 내용 (2)
항목 | 내용 |
TCP 헤더 길이(TCP Header Length) | - TCP 헤더에 몇개의 32비트 워드가 포함되어 있는가를 나타내는 필드 - 옵션 필드가 가변 길이를 갖기 때문에 필요함. - 이 값을 이용하여 실제 데이터의 시작점을 게산 |
URG(Urgent) | 긴급 지점(Urgent Pointer)이 사용될 때 1로 설정 |
ACK(Acknowledgement) | 전송 확인(Piggyback Acknowledgement)이 필요할 때 설정 |
EOM(End of Message) | 마지막 메시지임을 가리킴. |
재설정(RST, Reset) | 연결의 재설정(Reset a Connection) |
동기화(SYN, Synchronization) | 연결 설정 요구(Establish Connection) |
FIN(Finish) | - 연결 해제에 사용됨. - 송신 측에서 더 이상의 전송할 데이터가 없음을 의미 |
윈도우 크기(Window Size) | 수신 측에서 수신할 수 있는 최대 바이트(Byte) 수 |
체크썸(Checksum) | - 전송 데이터에 대한 완벽한 신뢰성을 위한 것 - 모든 데이터의 합에 대한 '1'의 보수로 계산 |
급송 지점(Urgent Point) | - 다음에 이어지는 데이터가 급송되어야 함을 의미함. - 인터럽트 메시지 대신 사용 |
옵션(Options) | 전송 셋업 과정의 버퍼 크기에 대한 통신 등 기타 목적에 활용 |
- 송신 측
- 전송한 데이터에 대한 수신 측의 전송 확인(ACK)이 도착하기 전에도 윈도우 크기만큼의 데이터를 연속적으로 보낼 수 있음.
- 수신 측
- 자신의 버퍼 크기에 따라 이 값을 조절하며, 윈도우 크기가
0
이 되면 송신자는 전송을 잠시 중단함.
- 자신의 버퍼 크기에 따라 이 값을 조절하며, 윈도우 크기가
(7) 흐름 제어(Flow Control)
- 송수신측 사이의 전송 패킷의 양과 속도를 조절하여 네트워크를 효율적으로 사용함.
- 송수신측 사이의 처리 속도와 버퍼 크기 차이에 의해 생길 수 있는 수신측의 오버 플로우를 방지함.
(8) 슬라이딩 윈도우(Sliding Window)
1) 슬라이딩 윈도우 개요
- 슬라이딩 윈도우(Sliding Window)
- 흐름 제어를 수행하는 방법
- 수신자가 수신 받을 만큼 데이터를 전달한느 방법
- . TCP 호스트 간의 효율적인 데이터 전송을 위해서 호스트 간에 송수신 혹은 수신할 수 있는 Size 정보를 제공함.
- 송신 측의 윈도우와 수신 측의 윈도우 제공
- Stop-and-Wait의 단점을 보완한 방식
- 수신 측의 확인 신호를 받지 않더라도 미리 정해진 프레임의 수만큼 연속적으로 전송함.
- TCP가 사용하는 방법
2) 슬라이딩 윈도우 동작 방법
- 수신측은 설정한 윈도우 크기만큼 송신측에서 확인 응답(Ack)이 없어도 전송할 수 있게 하여 동적으로 패킷의 흐름을 제어하는 방식
- 일정한 수의 패킷을 전송하고, 응답이 확인되면 윈도우를 이동하여 그 다음 패킷을 전송함.
3) 슬라이딩 윈도우 처리 단계
- Step 1 : 송신자와 수신자의 윈도우 크기를 맞춤.
- Window Size = 3
- 송신자는 1, 2, 3을 전송함
1 | 2 | 3 | 4 | 5 |
- Step 2 : 응답대기 및 전송
- 송신 후, 수신자로부터 ACK 1, 2에 대한 응답이 오면 다음 윈도우로 이동하여 전송함.
1 | 2 | 3 | 4 | 5 |
4) 슬라이딩 윈도우의 장점
- 송신자와 수신자 간의 네트워크 전송 효율을 극대화하기 위해서 수신자의 버퍼 크기를 확인하고, 최대한으로 전송 효율을 극대화 함.
- 수신자의 ACK의 경우, 매번 ACK를 받을 수도 있지만, ACK 신호도 묶어서 처리하여 불필요한 네트워크 부하를 최소화 함.
(9) 혼잡 제어(Congestion Control)
1) 혼잡 제어의 개요
- 라우터가 패킷을 처리할 수 있는 속도보다 많은 패킷을 수신하는 경우
- 라우터는 패킷을 손실하게 되고, 송신측에서는 패킷을 재전송하게 됨.
- 이러한 과정의 연속으로 데이터의 손실이나 지연이 발생함.
- 혼잡 제어는 송신 단말의 전송률을 직접 제어하여 혼잡으로 인해 손실된 데이터를 최소화 함.
2) TCP Slow Start
- Sender에서 패킷을 정송하는 비율과 Receiver에서 수신된 ACK를 통해 Congestion Window(Cwnd)를 지수의 크기로 증가시키는 기법
- 혼잡 제어를 하는 방법 중 하나
- TCP가 시작될 때 전송 속도를 초기값부터 지속적으로 올리는 방법
- 1 Mbps의 속도로 데이터 전송을 시작하고, 조금씩 임계값까지 속도를 올림.
- 그러다가 수신자에게 Duplication ACK 값이 오면, 데이터를 제대로 수신 받지 못함을 판단하고 송신 속도를 초기 값으로 낮춤.
- 또한 Duplication ACK 값이 송신자에게 오지 않아도 전송속도가 임계값에 도착하면 전송 속도를 임계값의 50%로 낮추고 다시 전송 속도를 올림.
3) TCP Slow Start 동작 방식
동작 방식 | 내용 |
- 처음 연결이 설정될 때, cwnd값은 1로 초기화 - 송신 단말이 하나의 세그먼트 전송 후, 이 세그먼트에 대한 ACK를 수신하면, 송신 단말은 2개의 세그먼트 전송 가능 - 이 2개의 세그먼트에 대한 ACK가 수신되면 다시 4개의 세그먼트를 전송할 수 있음. - 다음에는 8개, 16개, 지수적으로 세그먼트 증가 - cwnd는 계속적으로 증가하다가 임계값에 이르게 되면 Congestion Avoidance로 동작 |
4) Congestion Avoidance
- 일정 시간 동안 ACK가 수신되지 않거나, 일정 수의 Duplicate ACK가 수신되면 Sender는 Packet Loss를 알게되고, Congestion Avoidance 상태가 됨.
- 각 연결마다 Congestion Window와 Slow Start Threshold 두 개의 변수를 유지함.
- Congestion Avoidance 동작 방식
동작 방식 | 내용 |
- Slow Start 상태에서 cwnd의 값이 계속 증가하여 임계값에 도달하면 Congestion Avoidance 상태로 들어가게 됨. - Congestion Avoidance 상태에서는 매번 ACK가 수신될 때마다 cwnd를 1/cwnd 만큼 증가 - Slow Start에서의 cwnd의 증가가 지수적인데 반해 Congestion Avoidance 상태에서는 선형적인 증가 |
- TCP 혼합 제어 알고리즘
Fast Retransmit | Fast Recovery |
Retransmit Threshold 이상 연속된 Duplicate ACK를 수신하는 경우, TCP는 해당 세그먼트를 즉시 다시 전송함. | Fast Retransmit한 이후 새로 Slow Start를 통해서 설정된 연결의 안정 상태에 도달할 필요 없이 Congestion Avoidance 상태에서 전송할 수 있도록 하는 것 |
5. UDP(User Datagram Protocol)
(1) UDP 개요
- UDP는 데이터를 빠르게 전송할 용도로 사용함.
- TCP에 비해 기능은 없지만, 데이터를 빠르게 송수신할 수 있는 장점이 있음.
- 하지만 재전송 기능이 없어서 네트워크에서 패킷이 손실될 수 있음.
- 데이터가 전송되는 것을 보장하지 않는 단점이 있음.
- 비연결성, 비신뢰성의 특성으로 패킷을 빠르게 전달할 수 있는 프로토콜
- 송수신의 여부에 대한 책임을 Application이 가짐.
(2) UDP 특징
- 비신뢰성(Unreliable)
- 패킷을 목적지에 성공적으로 전송한다는 것을 보장하지 않음.
- 비접속형(Connectionless)
- 전달되는 패킷에 대한 상태 정보 유지를 하지 않음.
- 간단한 Header 구조
- TCP에 비해서 간단한 헤더 구조로 인하여 처리가 단순함.
- 빠른 전송
- TCP에 비해 전송 속도가 빠름.
(3) UDP 프로토콜의 Header 구조
Header | 내용 |
- 가상 선로(Virtual Circuit)의 개념이 없는 비연결성 - 블록 단위로 데이터 전송 - 블록 재전송 및 흐름 제어 등이 없음. (데이터의 신뢰성이 없음.) - 슬라이딩 윈도우 등의 복잡한 기술을 사용하지 않음. - UDP의 각 사용자는 16비트의 포트 번호를 할당 받음. |
- 실제 UDP 헤더를 보면, 송신자의 포트 번호, 수신자의 포트 번호 길이(Length), 무결성 검사를 위한 Check Sum 필드 만이 존재하는 것을 확인할 수 있음.
내용 출처 : 이기적 네트워크관리사 1·2급 필기 (임호진, 황성하 공저, 영진닷컴)
728x90
그리드형(광고전용)
'Certificate > Network Manager' 카테고리의 다른 글
26. HTTP (0) | 2021.04.25 |
---|---|
25. Telnet과 SSH (0) | 2021.04.25 |
24. 네트워크 접근(Network Access) 계층 (0) | 2021.04.24 |
23. 인터넷 계층 (0) | 2021.04.23 |
21. 애플리케이션 계층 (0) | 2021.04.19 |
20. TCP/IP 프로토콜 (0) | 2021.04.18 |
19. 에러 제어(Error Control) (0) | 2021.04.18 |
18. OSI 7 계층 (0) | 2021.02.25 |