이 포스팅은 공부 목적으로 작성된 포스팅입니다. 왜곡된 내용이 포함되어 있을 수 있습니다.
3. Transport Layer
application와 network layer 사이에서 transport layer는 layered network architecture에서 중심이 되는 layer이다. transport layer는 서로다른 host의 application process에 대해서 communication service 제공하는 중요한 역활을 가진다. 이번 장에서 transport layer의 원칙과 해당 원칙에 관한 논의를 해볼 예정이다. 당연히 TCP, UDP를 중심으로 진행된다.
먼저 UDP를 통해 transport layer와 network layer의 관계를 살퍼볼 예정이다. 이후에 TCP를 통해 데이터가 손실되는 경우 안정적으로 통신할 수 있는 방법에 대해 시나리오를 통해 알아볼 예정이다.
네트워크에서 발생 할 수 있는 network congestion을 피하거나 복구하기 위해 transmission rate를 control 하는 것에 대해 알아볼 예정이다.
3.1 introduction and Transport-Layer Service
이전 1장 2장에서 transport layer의 역활과 제공한 service에 대해 알아봤다. transport-layer에 대해 remind해보자
transport layer는 서로다른 host에서 동작하는 application process들 간의 logical communication을 제공한다. logical communication은 application 관점에서 host들이 서로 물리적으로 떨어져 있음에도 마치 직접적으로 연결된 것과 같은 것이다. logical communication을 사용하는 application process들은 서로에게 message를 보내고, 물리적인 환경에서 발생할 수 있는 문제들에 대해서 걱정할 필요하지 않아도 된다.
transport-layer protocol는 network router가 아닌 end system(host)에 구현되어 있다(network router는 모른다). 송신자 측에서는 application-layer의 message를 segment라고 알려진 transport-layer packet으로 변환한다. 이 과정은 message를 작은 단위의 chunk로 나누어 각 chunk에 transport-layer header를 추가하여 segment를 생성하게 된다. 이후 transport-layer는 segment를 network layer를 end system에 전달하여 segment가 network-layer packet인 datagram으로 캡슐화되어 전송된다. network router는 datagram에 대해서만 작동하는데 이는 datagram내부에 있는 transport-layer segment에 대해서는 검사를 진행하지 않는다는 뜻이다.(network router 입장에서는 byte 데이터일 뿐이다.) 수신자의 network-layer에서 datagram으로 부터 segment을 얻어 transport-layer로 전달한다. transport-layer에서는 해당 segment을 수신하여 application에 사용할 수 있게 한다.
3.1.1 Relationship Between Transport and Network Layers
transport-layer는 network-layer 위에 존재한다는 것을 복기하자. transport-layer가 서로다른 process에 대해서 logical communication을 제공하는 것과 달리 network layer는 host들 간의 logical communication을 제공한다.
책에서 편지와 관련된 예시가 나오는데 요약하자면 logical communication은 해당 communication의 주체들간에 서로 통신하고자 약속한 형태에 대해서 주체들의 관심에서 해당 통신이 가능하다면 logical communication을 지원한다고 할 수 있다.(송신자, 수신자는 네트워크가 어떻게 동작하는지 모른다. 통신 할 뿐이다.)(논리적XX은 컴퓨터에서 많이 나오는 개념이기 때문에 알아두자)
이러한 layer들은 다른 layer에게 영향을 받는 경우가 있는데 해당 layer에서 제공하는 service가 다른 layer에서 영향을 주는 경우이다, 예를들어 tranport-layer는 network-layer으로 부터 지연 정보를 받지 못한다면 transport-layer는 application-layer에게 지연 시간을 전달 할 수 없다. 또한 만약 tranport-layer에서 최소 지연 시간을 보장하기 위해서는 network-layer에게 최소 지연 시간에 관한 서비스를 제공받아야한다.(실제로 보장해주는 기능이 있나?)
당연히 영향을 주지 않는 경우도 있는데, 신뢰할 수 없는 경우나 패킷이 손상되거나 잃은 경우에도 tranport-layer에서 stable communication을 지원한다.(암호화도 있다)
3.1.2 Overview of the Transport Layer in the internet
tranport layer에서는 2가지의 서로 다른 protocol를 지원한다.
- UDP: user datagram protocol 으로 unreliable, connectionless service 제공
- TCP: transmission control protocol 으로 realiable, connection-oriented serivce 제공
interne network layer는 ip를 사용하여 host간 logical communication을 제공한다. ip service는 best-effort delivery service로서 최선으로 노력하지만 때때로 실패할 수 있음을 의미한다. (보장되지 않는다) segment의 올바른 순서 전달을 보장하지 않고, segment의 무결성을 보장하지 않는다.(책임 아니다) 따라서 ip는 신뢰할 수 없는 service이다,
요약하면 UDP, TCP는 두 host 간의 ip service를 process 간의 delivery service로 전환해준다. host 간의 delvery를 process 간의 delvery로 확장하는 것을 demultiplexing(역다중화)라고 한다. 또한 UDP, TCP는 segment header를 통해 무결성을 보장한다.(UDP의 유일한 기능) 반면 TCP는 reliable transfer(데이터의 올바른 전달)을 보장하고(flow control, sequence numbers, acknowledgments, and timers 을 통해 보장) congestion control(혼잡 제어) 를 통해 하나의 TCP 연결이 link와 router를 압도하는 것을 방지한다.(송신 측에서 관리한다.)