1. 발신 측에서 응용 계층부터 시작해서 각 계층마다 헤더를 붙여캡슐화
진행
2. 수신 측에서는 물리 계층부터 차례로 올라가면서 헤더를 떼내는디캡슐레이션
진행하여 데이터 식별
3. 목적지에 원하는 데이터 전송
캡슐화(Encapsulation)
비캡슐화(Decapsulation): 수신 측에서 물리 계층에서부터 순서대로, 헤더를 제거하는 과정
OSI 7 계층
PDU(Protocol Data Unit)
: 각 계층에서 전송되는 단위
전송(Transport) 계층 - 세그먼트(Segment)(TCP), 데이터그램(UDP)
네트워크 계층 - 패킷(Packet)
데이터 링크 계층 - 프레임(Frame)
물리 계층 - 비트
7계층 응용 계층(application layer): 사용자의 데이터와 직접 상호작용. 웹 서비스 이메일 등 실질적으로 사람들에게 서비스 제공하는 층 HTTP
, SMTP(이메일 통신을 가능하게 하는 프로토콜)
, SSH
, FTP
6계층 표현 계층(presentation layer)
데이터를 준비하여 애플리케이션 계층이 이를 사용할 수 있게. -> 데이터의 변환, 암호화, 압축.
5계층 세션 계층(session layer)
통신 중 연결이 끊어지지 않도록 유지시켜주는 역할 수행
4계층 전송 계층(transport layer)
데이터를 세션 계층에서 가져와서 네트워크 계층으로 보내기 전에 세그먼트 or 데이터 그램이라고 하는 조각으로 분할.
이를 세션 계층이 이용할 수 있는 데이터로 재조립해야 함.
TCP(Transmission Control Protocol)
: 신뢰성이 높고 느리다. -> 수신 여부 확인
UDP(User Datagram Protocol)
: 신뢰성이 낮고 빠르다. -> 수신 여부를 확인하지 않음. 일방향.
TCP>
3 way handshake
흐름제어(Flow Control)
송신측, 수신측의 데이터 처리 속도 차이 해결
연결 속도가 빠른 송신자가 연결 속도가 느린 수신자를 압도하지 않도록 최적의 전송 속도 결정오류 제어(Error Control)
- 통신 도중 데이터가 유실되거나 잘못된 데이터가 수신되었을 경우 대처
훼손된 패킷을 감지 하고 중복 수신 된 패킷을 확인 후 폐기하며, 손실된 패킷은 재전송하고 순서에 맞지 않는 세그먼트를 버퍼에 저장혼잡 제어(Congestion Control)
: 송신 측의 데이터 전달과 네트워크의 데이터 처리 속도 차이 해결.
네트워크 혼잡 상태가 감지되면 송신 측에서 전송 데이터 크기 조절하여 전송량 조절
흐름제어가 송신측과 수신측 사이의 전송속도를 다루는데 반해, 혼잡제어는 호스트와 라우터를 포함한 보다 넓은 관점에서 전송 문제를 다룬다.
3계층 네트워크 계층(network layer)
서로 다른 두 네트워크 간 데이터 전송을 용이하게 하는 역할.
전송 계층의 세그먼트를 송신자의 장치에서
패킷이라 불리는 더 작은 단위로 세분화해서 수신 장치에서 이러한 패킷을 다시 조립.
라우팅
: 데이터가 표적에 도달하기 위한 최상의 물리적 경로 찾기
네트워크 계층 프로토콜 IP, ICMP, IGMP, IPSec, ARP
=> 한 노드에서 다른 노드로 전송 계층에서 받은 세그먼트/데이터 그램을 패킷화하여 목적지로 전송
IP(Internet Protocol)
: 패킷 데이터들을 최대한 빨리 특정 목적지 주소로 보내는 프로토콜.
2계층 데이터 링크 계층(datalink layer)
동일한 네트워크에 있는 2개의 장치 간 전송을 용이하게 함. 데이터 링크 계층은 네트워크 계층에서 패킷을 가져와서 프레임이라고 불리는 더 작은 조각으로 세분화.
1계층 물리 계층(physical layer)
케이블, 스위치 등 데이터 전송과 관련된 물리적 장비 포함.
TCP/IP 4계층
TCP(Transmission Control Protocol), IP(Internet Protocol)
client
: 서버에 요청을 보내고 응답 대기 Request
server
: 이러한 요청에 대해 결과를 만들어서 응답. 서비스를 제공하는 역할 Response
1개의 Server 프로세스와 한 개 이상의 Client 프로세스로 구성
서버는 리소스 관리하고 이를 조작해서 클라이언트를 위한 서비스 제공.
클라이언트가 서비스 필요 할 때, 클라이언트는 한 개의 요청(request)을 서버에 보내는 것으로 트랜잭션 시작 (예시- 웹 브라우저가 파일을 필요로 할 때, 웹 서버로 요청 보냄)
서버는 요청을 받고, 해석하고, 자신의 자원을 적절한 방법으로 조작 (예시- 웹 서버가 클라이언트로부터 요청을 받을 때, 디스크 파일 읽음)
서버는 응답(response)을 클라이언트로 보내고, 그 후 다음 요청을 기다림. (예시 - 웹 서버가 브라우저로 요청을 받을 때 디스크 파일 읽음)
클라이언트는 응답을 받고 이것을 처리 (예시- 웹 브라우저가 서버로부터 페이지를 받은 후, 이것을 스크린에 디스플레이함)
한 개의 호스트는 서로 다른 많은 클라이언트, 서버를 동시에 실행할 수 있고 클라잉너트와 서버 트랜잭션은 동일하거나 다른 호스트에 존재할 수 있다.
socket
- server side :
socket() , bind() , listen() , accept(), read() , write() , close ()
- client side :
socket() , connect() , read() , write() , close()
socket()
: 소켓 식별자 생성하는 함수
bind()
: 소켓에 주소 할당. 특정 IP와 연결
listen()
: 연결 요청을 기다리는 함수
accept()
: 연결 요청을 수락하는 함수
=> read/write 또는 receive/send 메소드를 짝으로 사용하여 요청/응답 처리. 단 listen()에서의 스레드와 다른 스레드 만들어서 진행.
socket()
: 연결 통로 준비
connect()
: 연결 요청 - 서버에게 연결 요청을 보냄
close()
: 연결 끝
네트워크를 경유하는 프로세스 간 통신의 종착점(응용계층)은 데이터 송수신을 위해 반드시 소켓을 거쳐 전송 계층으로 데이터를 전달.
Client와 Server는 자신의 IP 주소와 소켓 연결에 할당할 Port 번호를 End Point로 삼고, IP주소와 Port 번호를 통해 소켓 연결을 기다리고, 통신
- 프로토콜
- 호스트/목적지 IP 주소
- 호스트/목적지 PORT 번호
파일 디스크립터(fd, File Descriptor)
- 시스템으로부터 할당 받은 파일을 대표하는 음수가 아닌 0과 양수인 정수 값(Non-negative Integer)
- 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스
- 네트워크 소켓과 같은 파일이나 기타 입/출력 리소스에 액세스하는데 사용되는 추상 표현
참고)
https://backendcode.tistory.com/167
https://www.cloudflare.com/ko-kr/learning/ddos/glossary/open-systems-interconnection-model-osi/