요점만 간단히.
모든 네트워크 응용 프로그램의 기초.
(1개 이상의 클라이언트) ↔ (1개의 서버)
1개의 host (컴퓨터)는서로 다른 다수의 client, server를 동시 실행 가능.
서버: 일부 리소스 관리, 조작 → 클라이언트를 위한 일부 '서비스 제공'
트랜잭션: 클라이언트-서버 모델의 근본적인 연산.
클라이언트, 서버가 종종 별도의 host에서 작동. (컴퓨터가 여러 대!) → 컴퓨터 네트워크의 H/W, S/W 자원 사용해 통신.
host에게 네트워크는 단지 또 다른 I/O device이다.
CPU에서 ~ 연산 처리하고 ~ → 다른 입출력 장치한테 데이터 보내듯, 'Network adaptor'로 보내면 그만!
→ 물리적으로 네트워크는 기하학적 위치로 구성된 계층구조 시스템.
LAN(Local Access Network): 네트워크 계층구조의 하위수준을 구성. 빌딩/캠퍼스에 설치하는 작은 네트워크
가장 대중적인 LAN은 Ethernet
Ethernet Segment
HUB
- Hub는 각 Port에서 수신한모든 bit를 종속적으로 다른 모든 Port로 복사한다.
- host는 'frame'이라 부르는 비트들을 segmen의 다른 host에게 보낼 수 있다.
- 각 frame은 header(source, dest, 프레임의 길이 - bit) + (data-bit)로 구성된다.
Bridged Ethernet Segments.
다수의 Ethernet Segment는 'Bridge'라고 하는 작은 상자들을 사용해 연결되어 브릿지형 이더넷(Bridged Ethernet)이라고 하는 더 큰 LAN을 구성 가능.
Bridge
- 브릿지 대역폭 > 허브 대역폭
- 장기간에 걸쳐 host → port로의 도달 관계 학습.
이후, 필요한 경우 '선택적으로' port 간 프레임 복사 수행.
여러 비호환성 LAN → '라우터'라고 하는 특별한 컴퓨터를 통해 연결.
라우터는 point-to-point 전화 연결 가능 → WAN(Wide Aread Network)라는 더 넓은 범위의 네트워크 연결 가능.
라우터(Router)는 임의의 LAN, WAN들로부터 "internet"을 구성.
* "Internet"의 중요 아이디어:
매우 다르고 비호환적인 기술을 갖는 여러 LAN, WAN들로 구성된 이 인터넷에서 각 Network의 차이를 어떻게 줄일 것인가?
답은 → "프로토콜"
1. 명명법 (Naming Schedule): host 주소를 위한 통일된 포맷 정의
2. 전달기법 (Delivery Mechanism): '패킷'으로 데이터 비트를 묶는 방법 제공
패킷(Packet): 헤더(패킷 크기, 소스, 목적지 호스트 주소) + 데이터(데이터 비트)
internet을 가장 성공적으로 구현한, 가장 유명한 것.
각 internet host는 TCP/IP로 구현한 S/W를 실행.
(internet 클라이언트) ←(소켓 인터페이스, Unix I/O 함수)→ (intertnet 서버)
IP: 기본명명법 (IP주소) + 전달 기법 (데이터그램: 한 인터넷 host → (패킷 배달)→ 다른 인터넷 host) 제공.
UDP: IP를 확장.
프로세스 →(DataGram)→ 프로세스
TCP: 'IP' 위에 구현한 복잡한 Protocol → 프로세스들 간 완전한 '양방향' 연결 제공.
데이터 전송 중 이슈 발생 시 책임 짐. (안정)
<프로그래머 관점에서의 '인터넷(internet)'>
- 다음과 같은 특징을 갖는 전 세계적인 host들의 집합.
- 호스트의 집합 → 32-bit IP주소 집합에 매핑.
- IP주소의 집합 → Internet Domain Name이라는 식별자 집합에 매핑.
- 한 인터넷 host의 process → 연결 통해 다른 인터넷 host 프로세스와 통신 가능.
비부호형 32-bit 정수.
각 컴퓨터 마다 빅 엔디안, 리틀 엔디안 차이 → Unix는 htonl, ntohl, htons, ntohs와 같은 함수들 제공
dotted-decimal 표기법: 각 바이트가 십진수. 다른 바이트와 점 찍어서 표현.
ex) 127.0.0.1
<인터넷 Client> ←(IP주소로 통신)→ <인터넷 Server>
but. 사람들이 일일이 IP주소로 기억 어려움 → "도메인 네임 서비스 (DNS: Domain Name Service)" 등장
인터넷 → <도메인 이름 집합> ←(매핑)→ <IP주소 집합>
DNS는 트리로 그려지는 계층 구조.
DNS는 수백만 호스트 엔트리(각각은 '도메인 이름↔IP주소 집합' 사이의 매핑을 정의)로 구성.
<'Client'> ←(바이트 스트림) → <'Server'>
point-to-point(점대점 연결), full-duplex(완전 양방향)
소켓(Socket)
- 연결의 종단점(=끝 점)
- 소켓 주소: 인터넷 주소 + 16-bit 정수 port. (address:port)
- 클라이언트의 소켓 주소 내 포트: 단기 포트(ephermeral port). 클라이언트가 연결 요청 시 자동 할당.
- 서버의 소켓 주소 내 포트: 영구적. 해당 서비스에 연결되는 well-known 포트. ex) 이메일 서버: 25
- 소켓 쌍: (cliaddr:cliport, servaddr:servport)
11.4의 소켓 인터페이스 부분 부터는 리눅스 환경에서 C를 이용한 server와 client 구현과 함께 작성할 예정입니다.
CS:APP 컴퓨터 시스템.