네트워크(5)-커넥션과 포트 번호

업데이트:

<하루 3분 네트워크 교실 >, 아미노 에이지 을 읽고 정리한 내용입니다

1. 네트워크 기초 지식에서는 네트워크 구축과 순서, 단계와 물리 계층을 다루고 있습니다

2. 신호의 전송과 충돌에서는 데이터링크 계층에 대해 다루고 있습니다.

3. IP 어드레싱에서는 네트워크 계층의 IP 어드레싱 역할에 대해 다루고 있습니다.

4. 라우팅에서는 네트워크 계층의 라우팅에 관해 다루고 있습니다.

이번 포스팅에서는 전송 계층과 NAT, 5계층 이상 상위 계층에 대해 다룹니다.

4계층의 역할과 개요

전송 계층 이상의 상위 계층에서는 전달할. 전달된 데이터에 대해 필요한 처리를 한다.

네트워크 계층까지는 수신처 자체가 존재하지 않거나 데이터가 도중에 손실됐거나 에러에 의해 파기됐다는 등의 문제들은 신경 쓰지 않는다.

그래서 전송 계층이 에러 복구 역할을 한다.

  • 데이터가 도달하지 않은 경우 데이터를 재전송해서 에러를 복구한다.

흐름 제어 역할

  • 처리 능력을 넘어선 데이터를 받았을 때, 그것을 다 처리할 수 없어서 파기해버리는 경우
  • 이러한 Overflow를 막아준다.

애플리케이션 식별

통신에서 데이터를 주고받는 컴퓨터 소프트웨어를 애플리케이션이라고 하는데, 실제 데이터를 주고받는 것이 애플리케이션이다.

어느 애플리케이션의 데이터인지를 식별하기 위해 포트 번호를 부여한다.

커넥션과 세그먼트

애플리케이션 간의 송수신하는 길을 커넥션이라고 한다. 커넥션은 가상 통신로이다.

전송 계층에서는 흐름 제어와 에러 제어 역할을 한다고 위에서 말했다. 신뢰성 있는 전송을 위해서는 데이터 전송을 시작하기 전에 미리 확인을 주고받아야 한다. 그렇게 상대에게 확실하게 전달한 것을 확인한다. 이를 커넥션을 확립한다고 한다.

TCP헤더는 기본적으로 20옥텟이다. TCP헤더 6비트의 제어 비트(플래그)는 그 TCP의 데이터의 의미를 나타낸다.

Image result for tcp header

커넥션의 확립

커넥션을 확립하기 위해서는 상대가 데이터 전송을 허가해주어야 한다.

  1. 송신처는 통신로를 확보하기 위해 수신처에게 데이터 전송의 허가 요청을 보낸다.
  2. 수신처는 요청에 대한 허가를 송신처에게 알린다.
  3. 수신처가 송신처에게 데이터 전송 허가 요청을 보낸다.

이렇게 쌍방향의 커넥션이 확립된다.

이를 Three-way Handshake라 한다.

Image result for three way handshake tcp

커넥션 종료는 다음과 같이 이루어진다. 이를 four-way Handshake라 한다.

11

세그먼트 분할

세그먼트 == 데이터그램

TCP는 상위 계층의 메시지데이터그램으로 캡슐화한다. 이 때 한 개의 데이터를 MSS(Max Segment Size)로 분할하는데, 한개의 데이터가 복수의 데이터그램이 된다. 그리고 각 데이터그램에 번호를 부여하고 이것을 시퀀스 번호라고 한다.

시퀀스 번호는 세그먼트에 포함되어 있는 데이터의 선두 옥텟에 붙여진 번호를 의미한다.

윈도우 제어

에러 복구

TCP에서는 시퀀스 번호를 이용해서 에러를 복구한다. 먼저, 세그먼트를 수신하면, 수신한 것을 송신처에게 전달하는데 이것을 확인응답(ACK)라 한다.

시퀀스 번호는 보내는 데이터의 앞부분에 있는 옥텟 번호이고, ACK번호는 다음에 받고 싶은 데이터의 선두 옥텟 번호다.

  • 수신측이 어느 데이터까지 받았는지도 알 수 있다.

에러가 발생에서 수신처에 ACK가 도달하지 않았을 때는 재전송한다.

확인응답을 기다리는 시간 RTT(Round Trip Time)는 지금까지 보낸 데이터에 대해 ACK를 받기까지 걸린 시간으로 계산한다.

Image result for tcp rtt

윈도우 제어

효율 좋은 전송을 위해서 복수의 세그먼트 전송 -> 확인응답하는 방식을 가질 수 있다.

이러한 방식의 흐름제어를 위해 윈도우 제어를 한다. 윈도우 제어는 수신한 데이터를 일시적으로 보관해두기 위한 버퍼를 가지고 있다.

데이터의 오버플로를 막기 위해 송신처에게 현재 버퍼 사이즈를 알려준다. 이를 통해 윈도우 사이즈만큼의 데이터를 한번에 보내도 오버플로가 나지 않는다는 것을 알 수 있다.

즉, 윈도우 사이즈는 ACK를 기다리지 않고 보낼 수 있는 데이터의 양이 된다.

img

포트 번호

포트 번호를 통해 각각의 데이터가 어느 애플리케이션으로부터 송신되었는지, 어느 애플리케이션이 수신하는지를 결정하게 된다. IP나 MAC주소만으로는 애플리케이션을 식별할 수 없다.

수신처의 포트 번호를 모르면 데이터를 보낼 수 없다. 서버 애플리케이션에 미리 정해진 포트 번호를 well-known port 라고 한다.

UDP

TCP는 신뢰성 있는 전송을 보장한다. 이를 위해서 ACK를 기다리는 시간이 필요한데, 전송 효율의 저하를 일으키는 원인이 될 수도 있다.

UDP헤더를 보면 포트 번호 이외에 별다른 항목이 존재하지 않는다. 즉, UDP는 흐름제어와 에러제어를 하지 않는다. 따라서 전송 효율이 높다.

Image result for udp header

UDP는 고속성이나 실시간 송수신이 필요한 애플리케이션(동영상 스트리밍 등) 에 사용된다.

또한 브로드캐스트가 필요한 애플리케이션에도 UDP를 사용한다.

NAT

사설 IP주소란 인터넷에 접속하지 않는 네트워크를 위해 사용할 수 있는 IP주소다.

글로벌 IP주소의 부족 현상을 해결하기 위한 방법은 클래스리스 어드레싱, IPv6가 있다. 그리고 네트워크 주소 변환이 있다.

내부 네트워크에서는 사설 IP주소를 할당하는데, 내부 네트워크 내에서 TCP/IP를 사용한 통신을 하기 위함이다.

그리고 글로벌 네트워크에 연결할 때에는 사설 IP주소를 글로벌 IP주소로 변환한다.

Image result for NAT

NAT에는 동시 접속 수의 한계라는 문제점이 있다.

보유하고 있는 글로벌 IP주소 수 이상의 호스트는 인터넷에 동시 접속 할 수 없게 된다. NAT에서 변환되는 주소는 유일해야 하기 때문이다.

이를 해결하기 위한 방법이 NAPT(Network Address Port Translation)다.

NAPT

하나의 글로벌 IP 로 복수의 컴퓨터를 접속 가능하게 한다.

IP주소뿐만 아니라 포트 번호도 변환해서 복수의 컴퓨터 접속을 가능하게 한다.

img

  1. IP주소와 포트 번호를 변환하고 그 대응을 NAT테이블에 기재한다.
  2. 응답의 경우, IP주소와 포트 번호를 NAT테이블에서 확인하고, IP주소와 포트 번호를 변환한다.

NAPT는 보안 측면의 효과도 있다.

NAT테이블에 없는 포트가 수신처인 경우 변환되지 않기 때문에 내부 네트워크에 침입할 수 없다.

정적 NAPT

LAN 내부에서 외부에 공개하고 싶은 서버가 있을 경우 NAT테이블에 미리 수동 할당해줘야 한다.

NAPT 단점

FTP에서는 IP헤더에 수신처와 송신처의 IP주소, TCP헤더에 수신처와 송신처의 포트 번호가 사용되고, 데이터 부분에도 송신처의 IP주소와 포트 번호가 기술된다.

NAT에서는 TCP, IP헤더 이외의 부분은 변환되지 않기 때문에 사설 IP주소 상태로 남아있다. 따라서 FTP전송이 불가능하다.

5~7 Layer

5, 6, 7 계층은 TCP/IP 의 경우 통합해서 하나의 프로토콜이 된 경우가 많다.

5계층 : 세션 계층

애플리케이션 간의 ‘말’을 ‘대화’로써 관리한다. 대화가 성립하도록 제어하는 것.

이를 Dialog Control이라 한다.

6계층 : 표현계층

ASCII를 사용하는 컴퓨터와 EBCDIC를 사용하는 컴퓨터 사이에는 문자를 주고받을 수 없다.

표현 계층에서는 데이터 형식을 변환하여 하드웨어와 OS에 따른 차이를 없앤 데이터 교환을 가능하게 한다.

이밖에도 압축이나 암호화를 수행한다.

표현 계층은 애플리케이션과 동떨어진 데이터 형식의 전송을 위한 변환 역할을 한다.

7계층 : 응용계층

응용 계층은 상위 계층이 없다. 애플리케이션의 목적에 따라 사용하는 프로토콜을 정하는 계층이다.

OSI 참조 모델과 요약

OSI모델은 7계층으로 나뉘어 있고 각 계층은 독립되어 있다. 각 계층은 그 하위 계층의 상황은 고려하지 않는다.

5~7 계층은 4계층 이하의 기능에서 애플리케이션별로 도달한 데이터를 처리한다.

응용 계층이 네트워크 서비스를 실시하고, 표현 계층이 데이터 형식을 변환하고, 세션 계층이 애플리케이션의 대화를 관리한다.

전송계층은 3계층 이하의 기능으로 컴퓨터에 도달한 데이터에 대해 신뢰성이 높은 데이터 통신을 5계층에게 제공한다.

포트 번호를 통해 애플리케이션을 식별하고 각각에 대해 신뢰성이 있다;없다를 제공한다.

신뢰성 보장, 에러 제어, 흐름 제어, 포트 번호

네트워크계층은 2계층 이하의 기능에서 케이블에 접속된 기기 간의 데이터 통신을 사용해 다른 네트워크 간의 접속을 4계층에게 제공한다.

인터넷 작업, IP어드레싱, 라우팅, 서브넷

데이터링크 계층은 1계층의 기능에서의 전기적인 데이터를 사용해서 서로 다른 기기의 데이터 송수신을 3계층에 제공한다.

직접적인 데이터 전송을 수행하고 제어한다.

이더넷, CSMA/CD, 허브, 스위치

물리 계층은 전기와 신호를 담당한다. 즉, 케이블과 신호를 2계층에 제공한다.

최종적으로 7계층이 애플리케이션에게 네트워크 서비스 그 자체를 제공하게 된다.

댓글남기기