Transport Layer
Trasnport Layer는 OS 내부에 구현되어 있다. 해당 계층은 TCP와 UDP를 다루는 계층이며, Transport Layer 에서 데이터 전송단위는 세그먼트(Segment)이다. 추가적으로 양 끝단(End to End)의 사용자들이 신뢰성있는 데이터를 주고받을 수 있도록 해주며, 상위 계층들의 데이터 전달의 유효성이나 효율성을 처리하지 않도록 해준다. Transport Layer에서 데이터의 유효성과 효율성을 처리한다.
Transport Layer 는 특정 연결의 유효성을 제어하고, 일부 프로토콜은 stateful 과 connection-oriented 이다. 이는 Transport Layer에서 패킷들의 전송이 유효한지 검증하고 전송에 실패한 패킷들은 다시 전송한다는 것을 의미한다.
Application Layer (Message)
|
Trasport Layer (Segment)
|
Network Layer (Packet)
데이터는 위의 모양으로 순차적으로 움직이며, Encapsulation 되고 있다. 네트워크 계층과 트랜스포트 계층의 차이는 논리적인 커뮤니케이션의 단위이며 네트워크 계층은 라우터가 어떻게 연결되는가에 대한 이야기이다.
Reliable & In-Order Delivery (TCP)
Reliable : 사용자가 보내는 데이터가 유실되지 않고 목적지까지 도달한다.
In-Order Delivery : 사용자가 보내는 데이터가 순서대로 목적지까지 도달한다.
Flow Control & Congestion Control (TCP)
- 사용자가 1GB 데이터를 TCP를 통해 보낸다고 한다면, 데이터 전송 속도를 조절함.
Flow-Control : 목적지가 받아들일 수 있는 속도를 고려한 것
Congestion-Control : 현재 네트워크의 상태를 고려한 것
멀티플렉싱 & 디멀티플렉싱
Transport Layer 에서 제공하는 기본적인 기능이다. 하나의 머신에는 여러 개의 프로세스가 존재하고, 개별 프로세스들은 개별 소켓이 존재한다. 소켓들은 다른 머신과의 통신을 위해 하나의 통로를 거쳐야 하며, 이 통로를 통과하는 과정을 멀티플렉싱이라고 표현한다.
멀티플렉싱 : Multi Input & Single Output
디멀티플렉싱 : Single Input & Multi Output
Sender 측에서 여러 개의 프로세스가 각자의 소켓을 가지고 메세지를 보낼 때 멀티플렉싱이 일어나고, Receiver 측에서는 디멀티플렉싱이 일어난다. Transport Layer 는 소켓 인터페이스를 직접적으로 다루는 계층이기 때문이다. 디멀티플렉싱은 어느 특정 소켓으로 데이터를 보낼 것인지 결정하기 위해서 필요하다.
[ Transport Layer's Multiplexing & Demultiplexing ]
Checksum
데이터 전송 중에 전송 데이터의 에러여부를 판단할 수 있도록 해준다. 사용자는 에러가 담긴 메세지를 받지 않는다.
Packet Error Detection Algorithm
전송에러 & 패킷유실을 극복하면 사용자에게 신뢰성있는 데이터를 전송할 수 있다.
(1) Error Detection
- Add Checksum bit
- Checksum 을 통하여 통과여부 확인 (통과(O) 정상, 통과(X) 에러)
(2) Feedback
- ACKs
- NAKs
- Feedback에 따라서 재전송할지 여부 결정
=> Sender 는 Receiver 측에서 Feedback을 받아도 sequence number 를 이용하여 데이터를 재전송한다.
Sequence Number
모든 "Packet" 마다 sequence number 가 부여되어 있다. sequence number 는 0과 1로만 구성되어 있으며 해당 sequence number 를 부여해서 해당 receiver 측이 금방 데이터를 제대로 받았는지 여부를 확인할 수 있다. 단순히 sequence number 에 대해서 잘 받았으면 1, 못받았으면 0 이런식으로 판단한다고 하지만, 실질적으로 이렇게 판단하지는 않는다. 아래의 예시를 살펴보자.
control bit 의 ack 가 0과 1로 된다는 의미로써 생각하고 실제 sequence number 와 acknowledgment number 는 In-Order Delivery 를 위해서 바이트 단위로 숫자가 증가한다.
Example)
TCP Connection 을 맺고, 6000 Bytes 의 데이터를 전송한다고 가정. 첫번째 Byte 의 sequence number는 10010 으로 되어있다. 5개의 세그먼트로 나누어서 데이터를 전송한다고 한다면 각각의 sequence number 은 얼마일까?? 단, 첫번째부터 네번째는 1000 Bytes 를 전송하고 마지막 세그먼트는 2000 Bytes 를 전송한다.
Solution)
Segment 1 ☞ sequence number : 10010 (Range : 10010 ~ 11009) [ 1000 Bytes ]
Segment 2 ☞ sequence number : 11010 (Range : 11010 ~ 12009) [ 1000 Bytes ]
Segment 3 ☞ sequence number : 12010 (Range : 12010 ~ 13009) [ 1000 Bytes ]
Segment 4 ☞ sequence number : 13010 (Range : 13010 ~ 14009) [ 1000 Bytes ]
Segment 5 ☞ sequence number : 14010 (Range : 14010 ~ 16009) [ 2000 Bytes ]
'네트워크 > 네트워크 강의 들은 것 정리' 카테고리의 다른 글
20180617 네트워크 정리 07 답변 (0) | 2018.06.17 |
---|---|
20180616 네트워크 정리 06 답변 (0) | 2018.06.17 |
20180612 네트워크 정리 04 답변 (수정 20191109) (0) | 2018.06.12 |
20180611 네트워크 정리 03 답변 (수정 20191109) (0) | 2018.06.11 |
20180609 네트워크 정리 02 답변 (0) | 2018.06.09 |