Network 기초
networking
2가지로 나누어짐
-
connection-oriented (연결지향) : 연결 후 통신
ex) 전화, 카카오톡 - stateful - 1번의 연결 후 연결끊길 때까지 연결-요청-응답 과정 반복 (1회 연결, 여러 회 통신) - 적은 수의 client에게 대응 가능 - 현재의 통신 방식 - Thread 기술 : 여러 server를 두면 많은 수의 client에게 대응 가능
ex) ssh(telnet + secure), FTP, chatting, google meet
-stateless - 1번의 연결 후 연결-요청-응답 과정거치고 연결끊음 (1회 연결, 1회 통신) - 많은 수의 client에게 대응 가능
ex) HTTP -
connectionless (비연결) : 연결없이 데이터 전송
ex) 메시지, 방송
방송은 subnet에 있는 모든 IP에 쏘므로 group IP만 필요
ex) 172.0.4.0/24는 172.0.4를 가진 모든 IP
172.0.4.0/16은 172.0을 가진 모든 IP
timeout : 특정 시간까지 안 주면 안 받음.
TCP : connection-oriented 방식 통신.
- 데이터 전송에 대한 신뢰성있음.
- HTTP1~2까지 TCP였음.
- 연결할 때 3way handshake라는 3번의 연결 확인 과정이 필요하므로 느림
UDP : connectionless 방식 통신.
- 데이터 전송에 대한 신뢰성없음. 신뢰성 확보위해 별도의 처리 필요.
- HTTP3부터는 UDP임.
책 추천 : 모두의 네트워크
proxy server
: client와 server 중간에서 통신을 중재
-
local
- client
- proxy server
ex) charles proxy - cache (임시저장소)
-
remote
- server
- client가 proxy server에게 요청
- proxy server가 server에게 요청
- server가 proxy server에게 응답
- cache가 proxy server로부터 응답data를 보관 -> 같은 자원을 요청할 때 보관된 data를 즉시 전달 -> network overhead를 줄임 -> 응답속도 개선
- cache가 proxy server를 모니터링 (HTTP 통신을 살펴볼 수 있음) -> 요청/응답내용 감시 -> 보안 강화
- proxy server가 client에게 응답
실습 과정
-
form/exam-01.html 파일을 우클릭해 live server 접속
-
windows 터미널에서 ipconfig /all 입력
-
이더넷 어댑터 이더넷의 IPv4 주소를 복사해 live server 주소창의 IP주소 대신 입력
-
새로고침 후 GET 요청 페이지와 POST 요청 페이지를 접속하고 나타나는 exam01파일의 contents raw값들을 비교한다.
HTTP
web browser가 TCP를 사용해 web server에게 요청
web server는 딱 한 번 응답
GET /html/form/exam02?name=aaa&age=11
path (자원의 주소) ? Query string (server에 보내는 data)
GET path?parameter명=parameter값¶meter명=parameter값
GET /~/a.html?name=~&age=~ HTTP/1.1
server: localhost:5500
user-agent: ~
accept : html,xhtml+xml,xml (좌측부터 우선 순위를 두어 요청)
accept-language : kr, us, ~
.
.
.
message-body
method/URI/a.html protocol/version <- request line
header (요청에 대한 보충 정보)
1. 요청헤더
2. 공통헤더
3. ntt헤더
post method일 때 보내는 data
URI (Uniform Resource Identifier)
- URL (Uniform Resource Locator)
ex) http://서버:포트/~/~/~ - URN(Uniform Resource Name)
ex)~:~:~
method가 GET 요청
- data를 URL에 붙여 보냄
- 한계
- URL은 URL encoding으로 text data로 바꿔야하므로 server에 binary data를 보낼 수 없다. -> binary data를 text data로 encoding하면 가능 (base64 규칙에 따라)
ex) image - URI 크기의 제한때문에 대용량 data를 보낼 수 없다.
- URL -> browser cache에 보관하므로 보안이 안된다.
- URL은 URL encoding으로 text data로 바꿔야하므로 server에 binary data를 보낼 수 없다. -> binary data를 text data로 encoding하면 가능 (base64 규칙에 따라)
- 한계
- content-type이 없다.
<img src="https://static.vecteezy.com/packs/media/vectors/term-bg-1-666de2d9.jpg">
<img src="data:image/jpeg;base64,/9j/4AAQSkZ~>
POST /~/a.html HTTP/1.1
host: 192.168.x.x:5500
content-length: 15
content-type (my type): application/~~
user-agent: ~
accept : html,xhtml+xml,xml (좌측부터 우선 순위를 두어 요청)
accept-language : kr, us, ~
.
.
.
name=aaa&age=13
method/URI/a.html (query string없다.) protocol/version <- request line
header (요청에 대한 보충 정보)
1. 요청헤더 (content-length, content-type)
2. 공통헤더
3. ntt헤더
message-body
method가 POST 요청
- URL에 요청하지 않고 별도의 payload (전송되는 data)에 정보를 담아 요청
- binary data 전송 가능
- URL에 노출 안 됨 -> URL에 data를 포함해야 하는 경우 (검색URL, 게시글 조회URL)에 적합하지 않다.
- 여러 개의 파일 첨부 가능
- 용량 제한없다.
- content-type이 있다.
text
- 일반 text editor로 편집 가능한 format
ex) .txt, .rtf, .html, .css, .js, .xml, .json, .properties, .java, .py, .docx (원래 ms word 전용인 binary data였지만 국제 표준이 되기 위해 xml 형식으로 읽을 수 있도록 변형)
binary
- byte 단위로 형식이 format
- 일반 text editor로 편집 불가 (format이 깨짐)
- 전용 app 사용
ex) .mp3, .mp4, .jpg, .png, gif, .avi, .doc
메모리 -> 01000001 -숫자-> 65
메모리 -> 01000001 -문자(url encoding)-> 0x41 -> A
메모장에서 binary를 출력할 순 있지만 처음부터 다른 의미로 저장했으므로 text data가 아님
HTTP/1.1 200 ok
content-length: 2242 (bytes) (content 크기가 2242byte)
content-type (my type): text/html; charset=UTF-8 (html로 응답)
.
.
.
<!DOCTYPE HTML>
<HTML>
.
.
.
</HTML>
protocol/version 상태 코드값 상태에 대한 설명 <- status line
header (응답에 대한 부연 설명)
1. 응답헤더
2. 공통헤더
3. ntt헤더
message body