<http 통신 vs socket 통신>
- http 통신은 단방향 연결 , socket 통신은 연결을 지속하는 양방향 연결
<Socket>
Socket : 네트워크에 연결된 장치간의 프로세스끼리 데이터를 송수신 할 수 있게 우체통 역할을 한다.
(OS에서 제공하는 인터페이스, system call)
-tcp 전용 소켓, udp 전용 소켓이 있음.
<TCP server 에서의 소켓 코드>
1. socket() -> 소켓을 연다, udp 혹은 tcp 선택.
2. bind() -> (주소와 )포트번호를 할당.
3. listen() -> 서버 전용 명시
4. accept() -> 외부로 부터의 메시지를 기다림.
5. read() , write() -> 데이터를 읽거나 씀.
<TCP Client 에서의 소켓 코드>
1. socket()
2. connect() -> 상대방의 소켓과 연결,(상대방 ip주소와 port number를 매개변수로)
3. read() , write() -> 데이터를 읽거나 씀.
- 코드를 구현할 때 socket으로 구현하면 복잡하기에 요즘엔 주로 web(rest api)을 이용해서 통신한다.(물론 데이터가 늘어남)
<HTTP>(hypertext transfer protocol)
HTTP: hypertext를 전송하는 프로토콜
- 80번 포트를 표준으로 사용
- tcp 사용
<response, request 단 두가지 프로토콜 존재>
-> HTTP request protocol
-GET : 데이터를 요청
-POST : 데이터를 전달
- PUT
- DELETE
-> HTTP response protocol
- 100~ : 작업 진행 중
- 200~ : 정상
- 300 ~ : 리다이렉션(우회 연결) 해야함
- 400~ : client에서 이상있음
- 500~ : server에서 이상있음
HTTPS -> SSL(secure socket layer)을 이용해 데이터를 암호화 해서 전송
<Cookies>
- server는 쿠키를 통해 사용자를 인식함
예시 과정 : 1. client가 server에 http request메시지를 보냄
2. 쿠키가 없을 시에 server에서는 쿠키를 생성하여 사용자에게 보내줌
3. 사용자는 받은 쿠키로 메시지를 주고받음
4. 다음에 받은 쿠키로 재방문 할시, server는 해당 쿠키를 기억하여 관련자료를 보내줌
<web caches (proxy server)>
-server와 client사이에 proxy server를 두어 중간 다리 역할을 함
-proxy server는 데이터를 최신화하기 위해 주기적으로 Conditional Get을 이용해서 server에서 데이터를 받아옴
-> 송신자가 보낸 date 이후로 데이터가 변경되지 않았으면 server는 proxy server에 변경되지 않았음을 알리고 데이
터를 보내지 않음.
장점 : 1. client입장에서 server까지 가는 시간을 줄일 수 있음.
2. server입장에서는 부하를 줄일 수 있음.
3. proxy server가 집단 내부에 있을 시에 외부 트래픽이 발생하지 않아 네트워크 비용을 줄임.
<SMTP (simple mail transfer protocol)>
- 인터넷 메일에 사용되는 프로토콜
과정 : 1. 내가 메일을 보내면 내가 사용하는 메일 server queue에 저장된다.
2. 나의 메일 server는 queue에 있는 데이터를 상대방 메일 server의 메일 박스로 보낸다.
3. 상대방은 언제든지 접속하여 메일 박스에 저장되어 있는 데이터를 불러올 수 있다.
(예전에는 불러오는 프로토콜로 POP3, IMAP같은걸 썼으나, 요즘은 대부분 HTTP를 이용한다)
<DNS (domain name system)>
-> ip주소대신에 사람들이 이해하기 쉬운 문자를 주소로 매핑하는 시스템
- DNS 는 udp를 사용한다.
과정 : (밑의 과정은 local DNS server가 모두 비어있을 때로 가정한 것이며, 만약 존재부분이 있다면, 알 수 있는 최하단
레벨의 DNS 서버부터 시작을 한다.)
1. 도메인 주소를 입력한다.
2. local DNS server에서 확인해보고 있으면 바로 client에게 보내주고 없으면 root DNS server에게 요청한다.
3. root DNS server에게 얻은 주소로 다시 TLD(top level domain) DNS server에 요청한다.
4. TLD DNS server에게 얻은 주소로 다시 authoritative DNS server에 요청한다.
5. authoritative DNS server에서 최종 주소를 얻으면 local DNS server는 client에게 최종 주소를 알려준다.
'CS(Computer Science) > 네트워크' 카테고리의 다른 글
4. Link Layer(링크 계층) (0) | 2020.08.31 |
---|---|
3. Network Layer(네트워크 계층) (0) | 2020.08.28 |
2. Transport Layer(전송 계층) (0) | 2020.08.26 |
(시작 전에) 네트워크 기본 (0) | 2020.08.23 |