개인적으로 네트워크 공부를 위해 정리한 내용들입니다.
함께 공부하자는 취지로 내용을 공유합니다.
1. Port
TCP나 UDP에서 어플리케이션이 상호구분을 위해서 사용하는 번호이다.
IP 내에서 프로세스 구분을 하기 위해서 사용한다. 쉽게말하면, 각 프로토콜의 데이터가 통하는 논리적 통로이다.
컴퓨터의 물리적 포트(랜선)에서 데이터가 통해 오는것처럼, 컴퓨터 안에서 각 프로토콜의 데이터가 컴퓨터 내부의 논리적 포트에 따라 흐른다.
윈도우 명령 프롬프트에서 netstat -an 명령을 통해 살펴볼 수 있다.
- 출처 : 나무위키 -
- Port는 컴퓨터 내에 어플리케이션(용도별 항구)를 구분하고 필요한 어플리케이션에 접속하기 위해 사용
- IP는 하나인데 서버가 제공하는 서비스는 다양하니 그 서비스를 구분하기 위해서 사용하는 것
- 웹서비스를 사용하려는 의도로 포트를 입력하지 않고 특정 IP만을 목적지로 잡아 접속을 시도한다 한들 그 서버는 사용자가 접속한 목적과 용도를 모르기 때문에 서비스를 제공할 수 없음(웹 브라우저는 포트를 자동으로 잡아주기 때문에 IP만 입력하여도 원하는 웹사이트에 접속함)
- 하지만 IP와 함께 Port(80 port)를 명시하여 접속한다면 서버는 사용자의 접속 목적을 알게되므로 해당 서비스를 제공하는 애플리케이션(80 port)로 안내하게 됨
- 이것이 Port의 존재 이유이자 목적임
우리가 회사 내의 서버에 접속한다고 가정해봅시다.
그 서버는 웹 서비스뿐만 아니라 MySQL, DNS, SMTP, SSH, Telnet 등의 서비스를 제공합니다.
그리고 서버의 IP는 10.10.10.1/24입니다.
저는 서버에 직접 접속하여 일부 설정을 변경하고자 합니다.
그렇다면 SSH(22 port)나 Telnet(23 port)을 통해 접속하면 되겠군요.
그런데 제가 IP 10.10.10.1 + Port 80으로 접속을 시도한다면 어떻게 될까요?
서버는 웹서비스로 안내하게 되겠죠 ㅎㅎ
그렇기 때문에 사람들이 누구나 알고 있는 Port를 서비스에 맞게 지키고 사용하는 것이 중요합니다.
위의 이미지는 프로토콜에 의해 규정된 Port 목록입니다.
그래서 1번 항목에 보시면 '잘 알려진 포트'라고 되어있지요.
해당 프로토콜에서 그 Port를 쓰기로 합의했고 사용자들이 그 규칙을 지키고 있기 때문에 기록한 것입니다.
그렇다고 해서 그 Port를 반드시 써야하는 것은 아닙니다.
웹 서비스로 예를 들자면, 웹서비스 내에서도 종류를 나눌 필요가 있다면 첫 번째 웹서비스는 80 port, 두 번째 웹서비스는 8080 port, 세 번째 웹서비스는 8888 port로 제공할 수 있습니다.
또한 80 port가 싫다면 80 port로 제공하지 않고 8080 port만으로 제공할 수 있지요.
다만 이 경우에는 별도의 설정이 필요합니다.
'잘 알려진 포트'이기때문에 대부분의 사용자들은 80 port으로 접속을 시도하게 될테니까요.
2. TCP/IP
인터넷 프로토콜 스위트(영어: Internet Protocol Suite)는 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 통신규약(프로토콜)의 모음이다.
인터넷 프로토콜 슈트 중 TCP와 IP가 가장 많이 쓰이기 때문에 TCP/IP 프로토콜 슈트라고도 불린다.
TCP/IP는 패킷 통신 방식의 인터넷 프로토콜인 IP와 전송 조절 프로토콜인 TCP로 이루어져 있다.
IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있다.
TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해 준다.
HTTP, FTP, SMTP 등 TCP를 기반으로 한 많은 수의 애플리케이션 프로토콜들이 IP 위에서 동작하기 때문에, 묶어서 TCP/IP로 부르기도 한다.
- 출처 : 위키백과 -
- TCP/IP는 하나의 프로토콜이 아닌 TCP와 IP를 합쳐서 부르는 말
- TCP/IP를 사용하겠다는 것은 IP 주소 체계를 따르고 IP Routing을 이용해 목적지에 도달하며 TCP의 특성을 활용해 송신자와 수신자의 논리적 연결을 생성하고 신뢰성을 유지할 수 있도록 하겠다는 것을 의미
- 즉 TCP/IP를 말한다는 것은 송신자가 수신자에게 IP 주소를 사용하여 데이터를 전달하고 그 데이터가 제대로 갔는지, 너무 빠르지는 않는지, 제대로 받았다고 연락은 오는지에 대한 이야기를 하는 것
Transport Layer(4 Layer)
송신자와 수신자의 논리적 연결(Connection)을 담당하는 부분으로, 신뢰성 있는 연결을 유지할 수 있도록 도와줍니다. 즉 Endpoint(사용자) 간의 연결을 생성하고 데이터를 얼마나 보냈는지 얼마나 받았는지, 제대로 받았는지 등을 확인합니다. TCP와 UDP가 대표적입니다.
Network Layer(3 Layer)
IP(Internet Protocol)이 활용되는 부분으로, 한 Endpoint가 다른 Endpoint로 가고자 할 경우, 경로와 목적지를 찾아줍니다. 이를 Routing이라고 하며 대역이 다른 IP들이 목적지를 향해 제대로 찾아갈 수 있도록 돕는 역할을 합니다.
출처: OSI 7 Layer 쉽게 이해하기
[네트워크 엔지니어 환영의 AWS 기술블로그]
- 인터넷에서 무언가를 다운로드할 때 중간에 끊기거나 빠지는 부분 없이 완벽하게 받을 수 있는 이유도 TCP의 이러한 특성, 다시 말해 데이터가 빠지지 않고 제대로 전달되었는지를 챙기는 꼼꼼함 덕분임
- 그렇기 때문에 위에서 언급한 것처럼 HTTP, HTTPS, FTP, SMTP 등과 같이 데이터를 안정적으로 모두 보내는 것을 중요시하는 프로토콜들의 기반이 됨
- TCP를 기반으로 하는 프로토콜들은 차후 언급할 TCP의 '3-way handshake'를 거친 후, 각자 프로토콜(Layer 7)에 기반한 교환 과정을 실시한다는 뜻
- 위 이미지는 TCP 기반의 프로토콜인 HTTPS의 'SSL handshake'를 도식화한 것
- TCP는 Layer 4이고 HTTPS는 Layer 7임
- 파란색 상자는 TCP의 '3-way handshake'이고, 노란색 상자는 HTTPS의 'SSL handshake'임
- HTTPS는 TCP 기반의 프로토콜이기 때문에 SSL handshake를 하기에 앞서 3-way handshake를 실시함을 알 수 있음
(1) TCP의 개요
전송 제어 프로토콜(Transmission Control Protocol, TCP)은 인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로도 널리 불린다. TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러 없이 교환할 수 있게 한다.
TCP는 전송 계층에 위치한다. 네트워크의 정보 전달을 통제하는 프로토콜이자 인터넷을 이루는 핵심 프로토콜의 하나이다. TCP는 웹 브라우저들이 월드 와이드 웹에서 서버에 연결할 때 사용되며, 이메일 전송이나 파일 전송에도 사용된다.
출처 : 위키백과
- TCP는 OSI 7 Layer 중 4계층에 해당
- IP가 패킷들의 관계를 이해하지 못하고 그저 목적지를 제대로 찾아가는 것에 중점을 둔다면 TCP는 통신하고자 하는 양쪽 단말(Endpoint)이 통신할 준비가 되었는지, 데이터가 제대로 전송되었는지, 데이터가 가는 도중 변질되지는 않았는지, 수신자가 얼마나 받았고 빠진 부분은 없는지 등을 점검
- 이러한 정보는 TCP Header에 담겨 있으며 SYN, ACK, FIN, RST, Source Port, Destination Port, Sequence Number, Window size, Checksum과 같은 신뢰성 보장과 흐름 제어, 혼잡 제어에 관여할 수 있는 요소들도 포함
- 또한 IP Header와 TCP Header를 제외한 TCP가 실을 수 있는 데이터 크기를 '세그먼트(Segment)'라고 부름
- TCP는 IP의 정보뿐만 아니라 Port를 이용하여 연결
- 한쪽 단말(Endpoint)에 도착한 데이터가 어느 입구(Port)로 들어가야 하는지 알아야 연결을 시도할 수 있기 때문위의 TCP Header를 보시면 Source Port와 Destination Port를 확인할 수 있음
- 예를 들어, 양쪽 단말(Endpoint)이 HTTP로 이루어진 문서를 주고받고자 할 경우 데이터 통신을 하려면 Endpoint의 3306 Port도 아니고, 21 Port도 아닌 80 Port로 연결해야 함
(2) TCP의 작동(3-way handshake)
- TCP를 사용하는 송신자와 수신자는 데이터를 전송하기 전 먼저 서로 통신이 가능한 지 의사를 묻고 한 번에 얼마나 받을 수 있는지 등의 정보를 확인
- 앞서 언급했던 신뢰성 있는 통신을 하기 위함
- 데이터를 안전하고 빠지는 부분 없이 보내기 위함
첫 번째, 전화번호를 누릅니다. 상대방의 전화기가 꺼져있지 않다면 연결음이 들리면서 연결을 시도합니다.
두 번째, 상대방이 전화를 받았고, 상대방의 목소리가 잘 들립니다.
세 번째, 여러분은 "여보세요?" 한 마디와 함께 상대방이 자신의 목소리가 잘 들리는지 확인을 한 후, 대화를 시작합니다.
- TCP도 이와 동일
- 다만 TCP는 TCP Header 내의 'SYN', 'SYN/ACK', 'ACK' Flag을 사용하여 통신을 시도
첫 번째, 송신자가 수신자에게 'SYN'을 날려 통신이 가능한지 확인합니다. 이때 Port가 열려 있어야 합니다.
두 번째, 수신자가 송신자로부터 'SYN'을 받고 'SYN/ACK'을 송신자에게 날려 통신할 준비가 되어있음을 알립니다.
세 번째, 송신자가 수신자의 'SYN/ACK'을 받고 'ACK'를 날려 전송을 시작함을 알립니다.
이것을 '3-way handshake'라고 부르고 아래 그림과 같음
- TCP로 이루어지는 모든 통신은 반드시 3-way handshake를 통해 시작
- 수신자가 받을 생각이 있는지 준비가 되어있는지 송신자가 보낼 준비가 되어 있는지를 미리 확인한 후 통신을 시작하여 데이터를 안전하게 보내는 것
- 그리고 데이터를 받았을 때 잘 받았음을 알리는 'ACK'를 송신자에게 날림
- 송신자는 이 'ACK'를 보고 수신자가 데이터를 잘 받았음을 확인하고 다음 데이터를 전달할 준비
- 이 밖에 주로 사용하는 Flag으로는 RST, FIN, FIN/ACK, PUSH 등이 있음
(3) TCP의 특징
① TCP의 특징 : 첫 번째는 흐름 제어
- 송신자는 자신이 한 번에 얼마나 보낼 수 있는지, 수신자는 자신이 데이터를 어디까지 받았는지 끊임없이 확인하고 TCP Header 내의 'Window size'를 사용해 한번에 받고/보낼 수 있는 데이터의 양을 정함
- 여기서 window는 일정량의 데이터를 말함
- 아무래도 받는 측의 사정이 더 중요하다 보니 Window size는 수신자가 정함(3-way handshake 때 정함)
- 그리고 자신의 상황에 따라 'Window size'를 조절
- 자신이 지금까지 받은 데이터 양을 확인하여 송신자에게 보냄(Acknowledgment Number)
- 만약 수신자가 300번째의 데이터를 받았으면 Acknowledgment Number에 1을 추가하여 301을 보냄
- 300번까지 받았으니 301번부터 보내라는 뜻이고, 이 데이터의 순서 번호를 표기(Sequence Number)
② TCP의 특징 : 두 번째는 혼잡 제어
- 데이터를 주고받는 양 단말(Endpoint)도 중요하지만 데이터가 지나가는 네트워크망의 혼잡 또한 중요
- 연결 초기에 송신자와 수신자가 데이터를 넉넉히 주고받을 준비가 되어있더라도 중간 경로인 네트워크가 혼잡하다면? 제대로 보낼 수 없을 것이 자명
- 그리하여 송신자는 연결 초기에 데이터 송출량을 낮게 잡고 보내면서 수신자의 수신을 확인하며 데이터 송출량을 조금씩 늘림
- 그리하게 되면 현재 네트워크에서 가장 적합한 데이터 송출량을 확인할 수 있게 됨(Slow Start)
3. 서버 부하 분산(Load Balancing)
부하분산 또는 로드 밸런싱(Load balancing)은 컴퓨터 네트워크 기술의 일종으로 둘 혹은 셋이상의 중앙처리장치 혹은 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것을 의미한다. 이로써 가용성 및 응답 시간을 최적화시킬 수 있다.
- 출처 : 위키백과 -
- 위의 설명처럼 컴퓨터 내에 있는 다수의 자원(중앙처리장치 등)이 작업을 나누어 처리하는 것을 뜻함
- 그래야만 지연 없이 작업을 처리하고 속도를 낼 수 있으며 네트워크에서의 부하 분산(Load Balancing)이 이와 매우 비슷함
- VLAN을 이용한 Layer 2 부하 분산, Routing Protocol를 이용한 Layer 3 부하분산, 서버 부하 분산 등이 존재
(1) 서버 부하 분산의 정의
- 서버 부하 분산(Server Load Balancing)은 외부의 사용자로부터 들어오는 다수의 요청(naver 접속 등)을 서버들에게 적절히 배분하여 서버들로 하여금 요청을 처리케 하는 것
- 분산 처리는 부하 분산 Network Switch 혹은 소프트웨어가 담당
- 즉 외부로부터의 요청을 서버가 직접 받는 것이 아닌 '부하 분산 Network Switch' 혹은 '소프트웨어'가 받은 후 이를 서버로 적절히 나누어 주는 것
- 그리고 이 서버 부하 분산을 담당하는 Network Switch를 L4/L7 Switch(Layer 4)라고 부르며 Cloud에서는 Load Balancer라고 부름
- 현업에서는 서버 부하 분산(Server Load Balancing)을 부르기 편하게 로드밸런싱 혹은 LB(Load balancing)라고 부름
(2) 서버 부하 분산의 방법
- 서버의 능력을 고려하여 분배해야지 서버가 Down되지 않기 때문에 서버의 상황에 맞춰 적절한 방법을 선택
- 보통 Load Balancing Method라고 부름
① Round Robin
- Round Robin은 로드밸런서가 다수의 서버에게 순서대로 요청을 할당하는 방법
- 가장 단순한 방법으로 서버군에 차례로 요청을 할당하여 분산
② Least Connection
- 로드밸런서가 서버에게 요청을 전달한 뒤, 사용자와 서버가 정상적인 연결을 맺으면 사용자와 서버는 'Connection'을 생성
- 로드밸런서 또한 중간자로서 Connection 정보를 갖고 있는데 이 Connection 수 정보를 기반으로 가장 Connection이 적은 서버, 즉 부하가 가장 덜한 서버에게 요청을 전달
③ Ratio(가중치)
- 서버의 처리 능력을 고려하여 할당될 수 있는 각 서버가 가질 수 있는 Connection의 비율를 이미 정해둠
- 서버 부하 분산 비율이 100%라고 했을 때 성능이 가장 떨어지는 서버에게 10%를 나머지 서버 3대에게 각각 30%씩을 할당할 수 있음
④ Fastest(Response Time)
- 응답속도가 가장 빠른 서버에게 우선적으로 할당하는 방식
- 예를 들어 서버에 할당된 Connection이 5개인데 서버가 보내오는 Response가 5개라면 갖고 있는 Connection에 대해 모두 응답하고 있으므로 성능이 충분하다고 판단하고 추가 요청을 보냄
- 또다른 서버에 할당된 Connection이 10개인데 서버가 보내오는 Response가 5개뿐이라면 현재 성능이 충분치 않아 제대로 답변하지 못하는 것으로 판단하고 추가 요청을 해당 서버로 보내지 않음
4. 정보 출처
https://aws-hyoh.tistory.com/54
'IT 이야기 > 공부합시다' 카테고리의 다른 글
[Network] L4 스위치 공부 1탄 (1) | 2023.09.20 |
---|---|
[Network] 서버 부하 분산 쉽게 이해하기 (0) | 2023.09.19 |
[Network] Spanning Tree Protocol(STP) #2 (0) | 2023.07.05 |
[Network] Spanning Tree Protocol(STP) #1 (0) | 2023.07.04 |
[Network] VLAN (0) | 2023.06.29 |
댓글