: 물리적 전송매체를 사용하여 서로 연결된 장치 세트
-컴퓨터 네트워크는 하드웨어, 데이터 및 SW와 같은 정보 리소스를 통신하고 공유하기 위해 서로 연결된 컴퓨터 그룹
-네트워크에서 노드는 둘 이상의 네트워크를 연결하는데 사용됨
-LAN : 한 건물 또는 사무실 내의 호스트들 간에 연결된 소규모 네트워크
-WAN : LAN과 LAN을 연결하는 대규모 네트워크
-Unicast : 1:1 통신, 원하는 대상 하나를 정해서 통신
-Multicast : 1:N 통신, 원하는 대상 여러 명을 정해서 통신
-Broadcast : 1:all 통신, 내 의지와 상과없이 무조건 받아들여야 하는 통신
: 전송되는 데이터를 허용할 수 있는 동시접속자 수
: Internet Service Provider, 인터넷 서비스 공급자로 다양한 회선 상품을 제공하며 기업마다 서비스가 다름
: Virtual Private Network, 가설사설망으로 ISP에 정보를 넘겨주지 않고 익명성을 유지하여 인터넷에 접속
: Digital Subscriber Line, 전화선을 이용한 인터넷 서비스, 현재는 잘 쓰이지 않음
-ADSL : 비대칭, 다운로드는 빠르고 업로드는 느림, 전화선에 모뎀과 마이크로 필터를 사용해서 인터넷에 연결, 전화국으로부터 거리가 멀어도 OK
-VDSL : 초고속,대칭/비대칭 모두 지원하며 ADSL처럼 전화선을 이용하나 속도가 훨씬 빠름. 전화국으로부터 거리가 멀면 안됨
: Fiber TO The Home, 광통신,초고속 기가 인터넷, 집안까지 광케이블을 통해 인터넷을 제공하는 서비스
: Internet Protocol Address, 컴퓨터 네트워크에서 기기들이 서로를 인식하고 통신하기 위해 사용하는 식별번호
: 네트워크 상에서 전송하는 데이터를 일정한 크기로 자른,작게 나눠진 데이터의 묶음 - 누구에게 어디로 무엇을 보내야 하는지에 대한 정보가 담겨있음, 안전성 때문에 나눠서 보냄
-LINK 계층 : 물리적인 계층, LAN, WAN, MAN 과 같은 네트워크 표준과 관련된 프로토콜을 정의하는 영역
-IP 계층 : 데이터 경로 설정, 특정한 규칙 없음, 오류 발생하면 다른 임의의 경로로 변경
-TCP/UDP(전송) 계층 : 데이터의 실제 송수신, IP 계층에서 발생한 문제를 해결
-APPLICATION 계층 : 서버와 클라이언트를 만드는 과정에서 프로그램의 성격에 따라 정한 데이터 송수신에 대한 약속(규칙)
-TCP/IP SW에 데이터 전달할 때, 데이터를 받을 호스트의 주소인 IP주소와 포트번호도 함께 전달
-IP주소 : 네트워크에 연결된 기기를 식별하는 유일한 번호
-포트 번호 : 수신 측에서 동작하는 여러 애플리케이션 중 데이터를 수신할 애플리케이션을 식별하는 번호
TCP
: 연결지향형 전송규약
-흐름 중심 프로토콜, 통신을 주고받는 것을 중요시함
-중간에 패킷이 손실되는 경우 재전송을 통해(SYN-ACK handshaking), 신뢰성을 보장함(느림) - 대부분의 통신에서 사용됨, 특히 파일이나 데이터 전송 시에 사용
-데이터 경계 구분이 없음 (바이트 스트림 서비스)
UDP
: 비연결지향형 전송규약
-데이터 중심 프로토콜, 주고받는 통신보다 데이터를 일방적으로 보내는 것을 중요시함 - 데이터 전송의 신뢰성 보장 X, (빠름)
-P2P, 스트리밍, 전화에 사용
TCP | UDP |
---|---|
연결지향형 | 비연결지향형 |
세그먼트 | 데이터그램 |
순서 보장, 느림 | 순서 보장 X, 빠름 |
HTTP, 메일, 파일 | DNS, Broadcasting 헤더(8바이트) 추가하여 전송 |
헤더(20바이트) 추가하여 IP로 | : 포트번호, 데이터의 길이, 체크섬 |
: 포트번호, 순서번호, 인정 번호, 제어 비트 |
: TCP에 쓰이는 연결 설정
-SYN/SYC : 통신 요청 데이터
-ACK : 응답 데이터
-SYN_RCV : 통신 요청 받음
Client 상태 | 전송 데이터 | Server상태 | |
---|---|---|---|
1 | CLOSE | # 연결 X | LISTEN |
2 | CLOSE | --SYN-> | LISTEN |
3 | CLOSE | SYN_RCV | |
4 | CLOSE | <-ACK+SYN-- | SYN_RCV |
5 | ESTABLISHED | --ACK-> | SYN_RCV |
6 | ESTABLISHED | # 연결 성공 | ESTABLISHED |
Client 상태 | 전송 데이터 | Server 상태 | 전송 데이터 | 애플리케이션 상태 | |
---|---|---|---|---|---|
1 | ESTABLISHED | # 연결중 | ESTABLISHED | #프로세스 진행 | |
2 | FIN_WAIT_1 | --FIN-> | ESTABLISHED | - | |
3 | FIN_WAIT_1 | <-ACK-- | CLOSE_WAIT | - | |
4 | FIN_WAIT_2 | CLOSE_WAIT | --CLOSE()-> | # 프로세스 종료 | |
5 | FIN_WAIT_2 | <-FIN-- | LAST_ACK | ||
6 | TIME_WAIT | --ACK-> | LAST_ACK | ||
7 | CLOSED | # 연결 X | CLOSED |
-CLOSE_WAIT 상태 : 애플리케이션에서 close()를 처리해주지 못하면, TCP 포트는 CLOSE_WAIT 상태로 계속 기다리게 된다.
CLOSE_WAIT 상태가 statement에 많아지게 되면, Hang이 걸려 더는 연결하지 못하는 경우가 발생, 여러 상황에 따라 close() 처리를 잘 해줘야 함
-FIN_WAIT_1 상태 : 상대방 측에 연결 종료를 요청했는데 ACK를 받지 못한 상태로 기다리는 것. 네트워크 및 방화벽의 문제일 수 있음 TIME OUT이 되면 자동으로 닫음
-FIN_WAIT_2 상태 : 클라이언트가 서버에 종료를 요청한 후 서버에서 ACK를 받았지만, FIN 패킷을 받지 못하고 기다리고 있는 상태, 서버 측에서 CLOSE를 처리하지 못하는 경우, TIME OUT이 되면 스스로 CLOSED 함
A. 두 번째 줄에서 클라이언트는 서버로 SYC를 보내고 시간을 잰다. Timeout이 되기 전까지 ACK+SYC가 오지 않으면, 다시 SYC를 보내고 ACK+SYC 수신을 대기한다.
서버가 아직 클라이언트에 보낼 데이터가 남아있을 경우 데이터를 다 전송하지도 못한 채 클라이언트에서 포트를 닫아버리게 되므로 서버 또한 종료될 준비가 되었다는 의미로 FIN을 보냄
서버가 보낸 FIN을 클라이언트가 받지 못하면 클라이언트는 FIN_WAIT_2 상태로 종료가 되지 못한 채 계속 기다려야 한다. 하지만 서버는 이미 포트를 닫고 더는 응답을 하지 않는 상태이기에 클라이언트는 불필요한 자원을 소모할 수 있음
-Client -> Server : SSL 정보 및 암호화방식, 무작위 바이트 문자열(A)
-Server -> Client : 인증서, 무작위 바이트 문자열(B)
-Client가 CA에 인증서 목록에 있는지 확인 후 있다면 공개키 받음
-Client -> Server : 무작위 바이트 문자열 A, B를 조합, 공개키로 암호화하여 전송
-Server에서 비밀키로 받은 무작위 바이트 문자열 조합을 복호화, 이것으로 session key를 만듦 - 해당 session key를 가지고 암호화한 데이터를 주고 받음
: ISO(국제표준화기구)에서 네트워크 통신 과정을 7단계로 정의한 국제통신표준규약
1) 물리 : 전송하는데 필요한 기능 제공 (통신 케이블, 허브)
2) 데이터링크 : 송/수신 확인, MAC Address로 통신 (브릿지, 스위치)
3) 네트워크 : IP를 기반으로 데이터(패킷) 전송 경로 결정 (라우팅)
4) 전송 : TCP/UDP 포트 정보를 참조해 데이터의 전송
5) 세션 : 통신 시스템 사용자 간의 연결을 유지 및 설정
6) 표현 : 세션 계층 간의 주고받는 인터페이스를 일관성 있게 제공
7) 응용 : 사용자가 네트워크에 접근할 수 있도록 서비스를 제공
공통점
-물리계층에서 전기적인 신호를 증폭시켜 전송 거리를 연장하는 장치
-네트워크 신호가 연결된 모든 PC에 전달되기 때문에 연결된 장치가 많을수록 부하가 심해짐
차이점
허브 : 패킷 모니터링과 멀티 포트를 지원하여 문제가 생긴 곳을 고립시킬 수 있음
공통점
-데이터링크계층에서 전송 거리를 연장하는 장치
차이점
브릿지 : SW적으로 프레임을 다시 만들어 전송해 더 느림
스위치 : 성능에 따라 L2,L3,L4,L7로 구분됨, 하드웨어적으로 처리해 더 빠름
공통점
-네트워크 계층에서 사용되는 주소 결정 프로토콜
차이점
ARP : IP주소에서 MAC 주소를 알아냄
RARP : MAC 주소에서 IP 주소를 알아냄
-상대방 MAC 주소를 모를 때, IP와 브로드 캐스팅 네트워크 주소 FFFFFFFFFFFF를 가지는 ARP 패킷을 네트워크에 전송하여 이를 수신한 호스트가 자신의 MAC 주소를 반송하는
-이때 ARP 캐시라 불리는 메모리에 테이블 형태로 저장하여, 패킷을 전송할 때에 다시 사용됨
: 외부로 연결되는 통로, 로컬망 라우터와 외부망 라우터 간의 통로를 말함
: 분산식 웹 서비스로 여러 서버에 부하(Load)를 나누어 줌, Round Robin, Least Connection, Response Time, Hash 등의 기법이 있음
1) Round Robin : 각 서버에 session을 순서대로 연결하는 방식, 모든 클라이언트를 똑같이 취급하고, 서버별 처리량을 기억하고 있어야 함
2) Least Connextion : 클라이언트와 서버별 연결된 connection 수를 고려해 가장 적은 서버에 연결하는 방식
프로토콜 | 포트 번호 | 내용 |
---|---|---|
HTTP | 80 | 웹을 지원하기 위한 프로토콜. GET,PUT 같은 프로토콜 기능을 포함해서 웹 서버에게 어떠한 Content를 요청하고 또 웹 서버로 정보를 보냄 |
FTP | 20,21 | TCP를 활용해 대량의 파일을 송신하고 수신하는 프로토콜 |
TFTP | 69 | UDP를 사용하는 파일 전송 프로토콜. 라우터나 스위치 등의 네트워크 장비의 IOS 이미지를 업로드, 다운로드할 떄 사용 |
Telenet | 23 | 원격지에 있는 장비로 표준 터미널 에뮬레이션 기능을 제공함. 네트워크 장비에서는 텔넷을 통해 원격지에서 장비를 설정 |
SMTP | 25 | 컴퓨터 네트워크를 통해 전자 메일을 전송하는 프로토콜. 받을 때는 POP3 활용 |
SNMP | 161 | 네트워크 장비를 모니터링하고 제어하기 위해 사용하는 프로토콜로 네트워크 장애 관리, 장비 설정, 통계 성능 및 보안 등을 관리 |
DNS | 53 | 도메인 주소를 IP ADDRESS로 변경, 모든 퍼블릭 IP주소와 호스트 이름은 DNS에 저장되고 나중에 해당 IP 주소로 변환 |
: 컴퓨터 간 데이터 통신을 원할히 하기 위해 규정한 약속,신호 송신의 순서(handshaking)나 데이터 표현법, 오류 검출법 등을 정한 것
: 하이퍼텍스트를 전송하는 규약
-하이퍼텍스트 : 한 문서에서 다른 문서로 즉시 접근할 수 있는 텍스트
-비연결성 프로토콜, REQUEST에 대한 RESPONSE만 전달되고 연결 유지 X
-Cookie / Session : Cookie에 클라이언트에 대한 정보를 저장해뒀다가 사용하거나 Session을 등록해서 유지하는 방식
-Session Storage / Local Storage : HTML5에서 제공, 세션 스토리지는 세션이 유지되고 있을 때 까지 브라우저 내부 저장소에 저장하고 세션이 끊기면 자동으로 없어짐. 로컬 스토리지는 사용자나 프론트엔드 내부적으로 삭제를 하지 않는 이상 영구적으로 저장 됨
: HTTP + SSL, HTTP로 통신하는 소켓을 SSL or TLS라는 프로토콜로 대체한 것 (새로운 별개의 프로토콜이 아니라 연결 방식이 달라진 것)
-HTTP는 TCP와 직접 통신하지만, HTTPS에서는 SSL과 통신하고 SSL이 TCP와 통신하는 방식
-SSL을 사용하기 때문에 암호화와 증명서, 안전성 보호를 이용할 수 있음
-공통키 암호화 방식과 공개키 암호화 방식을 혼합한 하이브리드 암호 시스템 사용, 공동키를 공개 키 암호화 방식으로 교환하고 이후 통신은 공통키 암호를 사용하는 방식
-GET : 서버에 데이터를 전달할 때 Url Query를 사용해야 하므로 보안에 취약함 / 데이터를 받는 용도로 적합
-POST : 데이터를 Header에 넣어서 전송하므로 헤더를 열어보지 않으면 확인할 수 없음 / DB 내용을 갱신하거나 서버로 데이터를 전송할 때 적합
-SSL을 이용한 HTTPS 프로토콜로 데이터 전송을 암호화하면 보안성을 보완할 수 있음. URL 뒤에 붙는 쿼리스트링 내용 모두 암호화되어 전송되기 때문에 보안성을 강화함
-일반적인 HTTP URL : 기능에 중점을 두어 설계 ex) 회원 정보 호출 - '/getUser'
-Request에 대한 Response 응답시간이 길어질 수도 있으므로 절차 지향적으로 짜놓은 코드가 제대로 동작하지 않을 수 있음
-CallBack 함수를 만들어 호출하면 해당 Request에 대한 응답이 온 후에 이후에 그 값을 가지고 다시 다른 함수를 실행함
-callback 함수를 이용한 비동기처리를 많이 하면 '콜백헬'이라 불리는 가독성이 매우 떨어지는 코드가 됨. 가독성 저하는 유지보수에 걸림돌이 되므로, Promise나 Async/Await을 사용함. Promise에서는 요청 후 비동기 처리하는 부분은 then절에 추가하면 되고 Async/Await는 Await이 then절의 역할
-Promise : Async/Await가 Promise로 구성되어 있으므로, Promise를 잘 모르면 Async/Await도 잘 쓸 수 없음. Promise로 다양한 비동기 처리를 경험해보고 다양한 오류를 처리해 봐야 함
-Async : try & catch를 이용해서 예외처리를 할 수 있고, 간단한 비동기 처리 경우에는 가독성이 뛰어남
-클라이언트가 프록시 서버를 통해 다른 네트워크 서비스에 간접적으로 접근을 할 수 있게 하는 것 - 프록시 서버는 요청된 내용을 캐시에 저장하고 다음에 같은 요청이 들어오면 캐시에 저장된 정보를 제공해 전송시간을 단축함
-캐시 만료기한을 설정함
-프록시 서버라도 최초로 받는 요청에는 실제 서버로 요청을 보내야 하므로 그때 만료기한을 설정해서 프록시 서버로 보내면 됨
-프록시 서버로 사용자가 요청했을 때 요청한 시각이 프록시에서 다운로드 받은 시간에서 만료기한 이내이면 프록시에서 다운로드를 할 것이고, 그렇지 않다면 다시 실제 서버로 요청을 하게 됨
-JIT : Just In Time Compile, 브라우저에서 템플릿 컴파일을 진행하기 때문에 느림, JIT 컴파일러를 포함해야 하므로 용량도 큼
-AOT : Ahead Of Time Compile, 빌드 시 템플릿을 먼저 컴파일을 함, 빌드에는 시간이 더 소요 되지만 브라우저에서는 컴파일이 실행되지 않기 때문에 상대적으로 빠름
-개발 시에는 JIT 방식으로 빠르게 빌드해서 변경사항을 확인하고, 실제 서비스 배포 시에는 AOT 방식으로 빌드해서 전체 용량 감소 및 컴파일 시간을 없앰
-엔디안 : 컴퓨터 메모리에 연속된 바이트를 배열하는 방법
Big Endian | Little Endian |
---|---|
최상위 바이트가 앞에 오는 경우 | 최하위 바이트가 앞에 오는 경우 |
사람이 읽고 쓰는 방법과 같아서 디버깅이 쉬움 | 디버깅이 어려움 |
수가 커지면 메모리에 저장된 데이터를 Little Endian으로 옮겨야 함 | 수가 커지더라도 오버헤드가 발생하지 않음 |
-가상돔 : 추상화한 돔
-가상돔을 사용하지 않고 div 태그 1000개에 CSS 효과가 추가된다면? 천개의 돔 노드들을 일일히 검색하고 업데이트 해야 함
-탐색비용과 업데이트 비용을 좀 더 줄이기 위해, 추상화한 돔에서 탐색과 업데이트를 한 후 변경사항만 실제 돔에 반영
-어떻게 돔을 추상화할 것인지, 언제 돔에 변경사항을 적용할지에 대한 알고리즘이 핵심
-방화벽 : 컴퓨터 네트워크를 무단 액세스로부터 보호하는 데 사용되는 네트워크 보안 시스템
-외부로부터의 악의적인 액세스를 방지, 외부 사용자에게 제한된 액세스 권한을 부여하기 위해 방화벽을 구축함
-하드웨어 장치, SW 프로그램, 또는 이 둘의 조합으로 구성됨
-방화벽을 통해 라우팅되는 모든 메시지는 특정 보안 기준에 따라 검사되며 기준을 충족하는 메시지는 네트워크를 통해 성공적으로 통과하거나 해당 메시지가 차단됨
-다른 컴퓨터 SW와 마찬가지로 설치할 수 있으며, 나중에 필요에 따라 사용자가 정의하고 액세스 및 보안 기능을 일부 제어할 수 있음
운영 체제와 함께 제공되는 Microsoft Windows 응용 프로그램, 바이러스, 웜 등을 방지하는데 도음을 줌