{"componentChunkName":"component---src-templates-blog-post-js","path":"/Computer-Network/2020-10-13-네트워크-트랜스포트계층/","result":{"data":{"site":{"siteMetadata":{"title":"Hun's Footsteps 🥷","author":"전여훈","siteUrl":"https://jeonyeohun.netlify.app","comment":{"disqusShortName":"","utterances":"jeonyeohun/jeonyeohun.github.io"},"sponsor":{"buyMeACoffeeId":"jeonyeohun"}}},"markdownRemark":{"id":"db93821b-0de0-5a7d-a2c0-4eb3db194c4a","excerpt":"참고도서: 컴퓨터 네트워킹 : 하향식 접근. 7판. James F. Kurose , Keith W.Ross…","html":"<p><em><strong>참고도서: 컴퓨터 네트워킹 : 하향식 접근. 7판. James F. Kurose , Keith W.Ross 지음</strong></em></p>\n<h2 id=\"트랜스포트-계층\" style=\"position:relative;\"><a href=\"#%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8F%AC%ED%8A%B8-%EA%B3%84%EC%B8%B5\" aria-label=\"트랜스포트 계층 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>트랜스포트 계층</h2>\n<ul>\n<li>트랜스포트 계층은 서로 다른 호스트엣 동작하는 두 프로세스의 <code class=\"language-text\">논리적 통신</code>을 지원하는 계층이다.</li>\n<li>트랜스포트 계층이 있기 떄문에, 각 호스트에서 동작하는 어플리케이션은 두 호스트가 직접적으로 연결되어 있다고 생각한다.</li>\n<li>어플리케이션 계층에서 트랜스포트 계층으로 전달된 메세지는 헤더정보를 포함해서 <code class=\"language-text\">세그먼트(segment)</code> 로 변환된다.</li>\n<li>인터넷에서 사용하는 가장 대표적인 트랜스포트 계층 프로토콜은 <code class=\"language-text\">UDP</code> 와 <code class=\"language-text\">TCP</code>이다.</li>\n</ul>\n<h3 id=\"트랜스포트-계층과-네트워크-계층의-차이\" style=\"position:relative;\"><a href=\"#%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8F%AC%ED%8A%B8-%EA%B3%84%EC%B8%B5%EA%B3%BC-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EA%B3%84%EC%B8%B5%EC%9D%98-%EC%B0%A8%EC%9D%B4\" aria-label=\"트랜스포트 계층과 네트워크 계층의 차이 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>트랜스포트 계층과 네트워크 계층의 차이</h3>\n<ul>\n<li>언뜻보면 트랜스포트 계층과 네트워크 계층이 비슷한 일을 하는 것 처럼 보일 수도 있다.</li>\n<li>하지만 트랜스포트 계층은 서로 다른 <code class=\"language-text\">호스트의 프로세스</code> 사이의 논리적 통신을 지원하는 기능을 하고,</li>\n<li>네트워크 계층은 <code class=\"language-text\">호스트 끼리</code>의 논리적 통신을 지원하는 계층이다.</li>\n<li>두 호스트가 데이터 송수신을 할 때, 호스트와 호스트 사이의 데이터 전달은 네트워크 계층이, 그리고 호스트에 도착한 데이터들이 프로세스로 전달되는 작업은 트랜스포트 계층이 담당한다고 생각하면 된다.</li>\n<li>따라서 트랜스포트 계층이 제공하는 서비스들은 트랜스포트 계층의 하위 계층인 네트워크 계층의 기능들에 큰 영향을 받는다.</li>\n</ul>\n<h3 id=\"인터넷-트랜스포트-계층\" style=\"position:relative;\"><a href=\"#%EC%9D%B8%ED%84%B0%EB%84%B7-%ED%8A%B8%EB%9E%9C%EC%8A%A4%ED%8F%AC%ED%8A%B8-%EA%B3%84%EC%B8%B5\" aria-label=\"인터넷 트랜스포트 계층 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>인터넷 트랜스포트 계층</h3>\n<ul>\n<li>인터넷 트랜스포트 계층에서 사용되는 프로토콜은 <code class=\"language-text\">UDP(User Datagram Protocol)</code> 와 <code class=\"language-text\">TCP(Transmission Control Protocol)</code> 이다.</li>\n<li>\n<p>인터넷 트랜스포트 계층은 네트워크 계층 위에서 동작하는데 인터넷 네트워크 계층의 프로토콜을 인터넷 프로토콜이라고 하고 줄여서 <code class=\"language-text\">IP</code> 라고도 한다.</p>\n<ul>\n<li>IP 서비스 모델은 <code class=\"language-text\">최선형 전달 서비스(best-effort delivery service)</code> 이다.</li>\n<li>호스트들의 세그먼트를 전달하기 위해서 최선을 다하지만, 세그먼트들이 반드시 목적지에 도달하는 것은 보장하지 않는다. 따라서 <code class=\"language-text\">Packet Loss</code> 가 발생할 수 있다.</li>\n<li>세그먼트 내부에 들어있는 <code class=\"language-text\">데이터의 무결성(integrity)</code> 역시도 보장하지 않는다.</li>\n<li>또 IP는 세그먼트들이 목적지에 보낸 순서대로 도착하는 것도 보장하지 않는다. 그래서 IP는 <code class=\"language-text\">비신뢰적인 서비스(Unreliable Service)</code> 라고 부르기도 한다.</li>\n</ul>\n</li>\n<li>이렇게 IP는 호스트와 호스트사이의 논리적 연결을 수행하고 트랜스포트 계층은 이 연결을 두 호스트 내부에서 동작하는 프로세스들 간의 연결로 확장하는 기능을 한다. 이런 확장을 <code class=\"language-text\">트랜스포트 다중화(transport multiplexing)와 역다중화(demultiplexing)</code>라고 한다.</li>\n</ul>\n<h3 id=\"tcp와-udp\" style=\"position:relative;\"><a href=\"#tcp%EC%99%80-udp\" aria-label=\"tcp와 udp permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>TCP와 UDP</h3>\n<ul>\n<li>TCP와 UDP는 인터넷 트랜스포트 계층 프로토콜이다.</li>\n<li>\n<p>UDP는 IP의 최선형 전달 서비스와 크게 다른 점이 없다. UDP는 두 개의 서비스를 제공하는데, <code class=\"language-text\">프로세스-프로세스 데이터 전달</code>과 <code class=\"language-text\">오류검출</code>이다.</p>\n<ul>\n<li>따라서 UDP는 비신뢰적인 서비스를 제공한다고 할 수 있다.</li>\n</ul>\n</li>\n<li>\n<p>TCP는 신뢰적 데이터 전달을 제공하는 프로토콜이다.</p>\n<ul>\n<li>TCP는 흐름제어, 혼잡제어, 순서번호, 확인응답, 타이머 와 같은 서비스를 제공해서 프로세스 사이에 데이터가 신뢰적으로 전달 될 수 있도록 한다.</li>\n<li>여기서 혼잡제어는 혼잡한 네트워크 상황 속에서 각 TCP 연결이 링크의 대역폭을 공평하게 나누어 가질 수 있게하는 방법이다.</li>\n</ul>\n</li>\n</ul>\n<h2 id=\"다중화와-역다중화multiplexing-and-demultiplexing\" style=\"position:relative;\"><a href=\"#%EB%8B%A4%EC%A4%91%ED%99%94%EC%99%80-%EC%97%AD%EB%8B%A4%EC%A4%91%ED%99%94multiplexing-and-demultiplexing\" aria-label=\"다중화와 역다중화multiplexing and demultiplexing permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>다중화와 역다중화(Multiplexing and Demultiplexing)</h2>\n<ul>\n<li>네트워크 계정에서 전달되는 데이터그램은 트랜스포트 계층에 세그먼트로 도착하고, 트랜스포트 계층은 이 세그먼트들을 알맞는 프로세스에게 전달하는 역할을 수행해야한다.</li>\n<li>데이터를 전달받은 호스트에 여러 프로세스가 동작하고 있을 때, 호스트는 이 데이터를 어떤 프로세스에 전달해야할지 결정해야한다.</li>\n<li>이 결정은 트랜스포트 계층에 의해 직접적으로 수행되지 않고, 중간매체인 <code class=\"language-text\">소켓</code> 을 통해서 결정된다.</li>\n<li>트랜스포트 계층에 전달된 세그먼트 데이터를 해당 세그먼트를 위한 소켓에 전달하는 작업을 <code class=\"language-text\">역다중화(Demultiplexing)</code> 라고 한다.</li>\n<li>그리고 데이터를 보내기 위해 소켓에서 데이터를 모아 세그먼트로 만들고 이 세그먼트를 캡슐화해서 네트워크 계층으로 보내기 위한 작업을 <code class=\"language-text\">다중화(Multiplexing)</code> 이라고 한다.</li>\n<li>\n<p>위 내용에 따라 다중화와 역다중화가 수행되기 위해서는 두가지 요구사항이 필요하다.</p>\n<ul>\n<li>각 소켓들은 자신만의 <code class=\"language-text\">고유한 실별자</code>를 가지고 있어야한다.</li>\n<li>세그먼트에는 해당 세그먼트의 <code class=\"language-text\">출발지 프로세스의 포트번호</code>와 <code class=\"language-text\">도착지 프로세스의 포트번호</code>가 있어야한다.</li>\n<li>포트번호는 0~65536까지의 16비트 정수를 사용하고 이중에서 0~1023번 포트는 <code class=\"language-text\">well-known port number</code>로 표준화되어 일반 프로세스가 사용할 수 없도록 규정되어 있다.</li>\n<li>그래서 호스트에서 실행되는 프로세스는 <code class=\"language-text\">1024~49151번의 등록포트(register port number)</code>와, <code class=\"language-text\">49152~65535의 무작위 포트(ephemeral port number)</code> 중 하나를 선택해서 사용하게 된다</li>\n</ul>\n</li>\n</ul>\n<h3 id=\"비연결형-다중화와-역다중화\" style=\"position:relative;\"><a href=\"#%EB%B9%84%EC%97%B0%EA%B2%B0%ED%98%95-%EB%8B%A4%EC%A4%91%ED%99%94%EC%99%80-%EC%97%AD%EB%8B%A4%EC%A4%91%ED%99%94\" aria-label=\"비연결형 다중화와 역다중화 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>비연결형 다중화와 역다중화</h3>\n<ul>\n<li>비연결형 다중화와 역다중화는 <code class=\"language-text\">UDP 구조</code>에서의 통신을 지원하기 위한 방법이다.</li>\n<li>UDP 소켓은 <code class=\"language-text\">목적지 ip주소</code>와 <code class=\"language-text\">목적지 포트번호</code>로 구성된 요소들의 집합으로 식별된다.</li>\n<li>따라서 UDP 세그먼트들이 같은 목적지 ip주소와 목적지 포트번호만 동일하다면 같은 UDP 소켓으로 역다중화되게 된다.</li>\n<li>UDP 세그먼트에 포함된 출발지 포트번호는 목적지에 도착한 뒤에 목적지가 응답을 위해 설정하는 새로운 목적지 포트로 전환이 된다.</li>\n</ul>\n<h3 id=\"연결지향형-다중화와-역다중화\" style=\"position:relative;\"><a href=\"#%EC%97%B0%EA%B2%B0%EC%A7%80%ED%96%A5%ED%98%95-%EB%8B%A4%EC%A4%91%ED%99%94%EC%99%80-%EC%97%AD%EB%8B%A4%EC%A4%91%ED%99%94\" aria-label=\"연결지향형 다중화와 역다중화 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>연결지향형 다중화와 역다중화</h3>\n<ul>\n<li>연결지향형 다중화와 역다중화는 <code class=\"language-text\">TCP 구조</code>에서의 통신을 지원하기 위한 방법이다.</li>\n<li>TCP 소켓은 UDP 소켓과는 달리 총 4개의 요소로 소켓을 식별하는데, 출발지의 IP주소, 출발지 포트번호, 목적지 IP주소, 목적지 포트번호를 사용한다.</li>\n<li>목적지에 도착한 세그먼트는 TCP 서버는 해당 출발지 IP주소의 출발지 포트번호를 위한 소켓을 하나 만들어서 연결을 설정한다.</li>\n<li>이런 방식을 사용하는 이유는 TCP 연결에서는 일대일 연결만이 가능하기 때문이다. 따라서 각각에 대한 출발지 ip주소와 출발지 포트번호에 대한 TCP 연결을 만들어주는 것으로 일대일 연결 문제를 해결한다.</li>\n</ul>","frontmatter":{"title":"[네트워크] 트랜스포트 계층","date":"October 13, 2020"}}},"pageContext":{"slug":"/Computer-Network/2020-10-13-네트워크-트랜스포트계층/","previous":{"fields":{"slug":"/Computer-Network/2020-10-13-네트워크-신뢰성 있는 데이터 전송/"},"frontmatter":{"title":"[네트워크] 신뢰성 있는 데이터 전송의 원리","category":"Computer-Network","draft":false}},"next":{"fields":{"slug":"/Computer-Network/2020-10-13-네트워크-TCP/"},"frontmatter":{"title":"[네트워크] 연결지향형 트랜스포트: TCP","category":"Computer-Network","draft":false}}}},"staticQueryHashes":["2486386679","3128451518"]}