본 게시물은 이석복 교수님의 네트워크 강의를 수강하며 작성한 강의노트와 추가로 공부한 내용을 바탕으로 작성하였습니다.
- 참고 강의 및 사이트
네트워크 계층
위에서부터 내려가면서 다룰 예정이다.
Layer라는건 개념적으로 나눈 것이며 이 계층 안에 존재하는 다양한 프로토콜이 있으며 이 중 중요한 프로토콜들을 다룰 것이다. 계층이란, 하위 계층에서 상위 계층에게 어떤 기능을 제공하여 하위계층의 서비스를 상위 계층이 이용할 수 있도록 하는 것이다.
- Application : HTTP
- Transport : TCP/UDP
- Network : IP
- Link : WiFi, LTE/3G, 이더넷
- Physical
Client-Server Architecture
- Server
- 항상 동작해야함
- 바뀌지 않고 고정된 IP 주소를 가져야 함
- Clients
- 서버와 통신
- 다양한 IP 주소 가져도 됨
Processes communicating
- 결국 client Process 와 server Process 사이의 통신이다.
- Process 사이의 통신에서 OS가 인터페이스를 만들어 놓으며 다른 컴퓨터 사이의 통신을 하기 위한 인터페이스도 만들어 놓았으며 이를 socket이라 한다.
Sockets
- 연결하고 싶은 상대 프로세스 소켓의 주소를 알아야 한다.
- 주소의 역할을 하는 인덱싱이 IP Address와 Port번호의 결합이다.
- 웹브라우저에서 주소를 입력할 때는 ip주소와 port번호가 아닌 편의성을 위해 domain주소를 입력한다. DNS 시스템에 의해 내부 IP주소로 변환되며 포트번호 80번을 입력 안하면 기본으로 80번으로 연결된다.
- 웹 서버를 운영하는 거의 대부분의 서버들이 포트를 80번으로 쓰고 있다. 왜 그럴까?
- 서버는 24시간 켜져 있어야 하며 고유 주소가 일정해야 한다.
- 포트넘버까지 필요한데 다 다르면 너무 복잡해지므로 포트번호는 일치시킨 것이다.
Application계층이 Transport 계층에게 필요로 하는 것
- data integrity : 데이터가 유실되지 않고 온전하게 목적지까지 도착
- timing : 일정 시간 내에 목적지에 도착
- throughput : 용량
- security
⇒ 이 중 Transport Layer가 제공하는 서비스는 data integrity 뿐
Web and HTTP
- HTTP : Hypertext Transfer Protocol
- Hypertext : 텍스트들 사이에 다른 텍스트를 가리키는 링크가 존재하는 텍스트
- 이런 Hypertext를 전송하는 프로토콜
- client : 서버에게 HTTP 프로토콜을 이용해 원하는 Hypertext 요청
- server : 클라이언트 요청에 HTTP 프로토콜로 응답
- TCP 사용
- HTTP request, response 이전에 TCP Connection을 해줘야 함
- stateless
- 요청 들어오면 수행 후, 더이상 통신한 상대에 대해 기억하지 않음
- Connections
- non-persistent HTTP : TCP Connection을 끊는 경우
- 10개의 jpeg 파일을 받을 때 각 파일마다 Connection 연결을 매번 해야 함.
- persistent HTTP : TCP Connection을 유지하는 경우
- 현재 웹 브라우저에서 기본으로 사용하는 방식
- non-persistent HTTP : TCP Connection을 끊는 경우
Socket
- 프로세스들 간의 통신에 이용되는 인터페이스
- TCP/UDP 중 어느 것을 사용하냐에 따라 각각에 맞는 Socket을 만들어 통신 ⇒ Socket의 종류가 2가지!
- Socket Type
- SOCK_STREAM
- TCP
- SOCK_DGRAM
- UDP
- Socket Functions(TCP case)
- 관계를 맺은 이후부터는 그냥 read & write 로서, 기존에 알던 통신의 연속
- SOCK_STREAM
Socket API
- Socket Creation and Setup
- Create a socket
- Function : socket (제일 처음 불려서 소켓을 만드는 함수)
- int socket (int domain, int type, int protocol);
- Function : socket (제일 처음 불려서 소켓을 만드는 함수)
- Bind a socket to a local IP address and port number
- Function : bind (방금 생성한 소켓의 아이디를 사용해 이 소켓을 특정 address에 bind하는 함수)
- int bind ( int sockfd, struct sockaddr* myaddr, int addrlen);
- Function : bind (방금 생성한 소켓의 아이디를 사용해 이 소켓을 특정 address에 bind하는 함수)
- Listen
- Function : listen(방금 생성한 소켓을 리슨 용도로 사용할 것이며, 여러 request가 들어오면 최대 몇 개까지 queue에 넣어놓을 것인가를 정하는 함수)
- accept
- 준비동작이 끝났으므로 클라이언트로부터 연결을 기다리겠다
- 클라이언트로부터 요청이 들어오면 그 때 return이 됨. return이 될 때 두번째 변수에 클라이언트의 주소가 저장되며 서버도 클라이언트의 주소를 알게 됨.
- client에는 왜 bind를 쓰지 않을까? client는 특정 port를 bind할 필요가 없으며 남는 port를 사용해도 됨. 특정 port를 지정하고 싶다면 사용해도 무관
- Create a socket
- Sending and Receiving Data
- Tearing Down a Connection (TCP)
- Function : close
'Learning-log -CS > Network' 카테고리의 다른 글
(컴퓨터와 네트워크) TCP (특징, 구조, 흐름제어, 혼잡제어) (1) | 2024.01.23 |
---|---|
(컴퓨터와 네트워크) 전송 계층 (기능, UDP, RDT의 원리) (1) | 2024.01.22 |
(컴퓨터와 네트워크) 네트워크 구조 (2) | 2024.01.03 |
네트워크 - 4계층 프로토콜, 포트번호, TCP, UDP, TCP Flag (2022.09.15~16) (0) | 2022.09.19 |
네트워크 - 3계층 IP주소와 프로토콜(ARP, IPv4, ICMP)(2022.09.14) (0) | 2022.09.15 |