bdfgdfg
OSI 7계층 본문
들어가기전 알아야할 기본 용어들
- 노드(Node) : 컴퓨터 네트워크 상에 연결된 장치.
- 호스트(Host) : 고유 IP 주소를 가진 노드
- 프로토콜(Protocol) : 데이터 통신의 규약(약속).
- 라우팅(Routing) : 어떤 네트워크 안에서 통신 데이터를 보낼 때 최적의 경로를 선택하는 과정. 즉 전달되는 데이터가 어느 라우터를 거쳐갈 지 결정하는 것.
- 라우터(Router) : 패킷의 위치를 추출하여, 그 위치에 대한 최적의 경로를 지정하며, 이 경로를 따라 데이터 패킷을 다음 장치로 전향시키는 장치.
- IP 주소 : 고유하게 할당된 값이 아닌, 통신사를 통해 할당된 동적인 값.(어떤 네트워크의 어떤 컴퓨터인지를 구분)
- MAC 주소 : 통신기기 자체에 부여된 고유한 유니크 값(식별번호)이며 변경되지 않음.
OSI 7계층
네트워크에서 통신이 일어나는 과정을 7단계로 나눈 표준 모델.
물리계층->데이터링크계층->네트워크 계층->전송계층->세션계층->표현계층->응용계층 (1~7순)이며
OSI7계층은 네트워크 동작을 계층별로 좀 더 세분화한 참조 모델이며, 실제 사용 모델은 TCP/IP 모델을 사용.
-> TCP/IP 모델은 세션,표현,응용 계층을 하나로 묶어 응용계층을 나타내고, 총 4계층을 가짐.
-> 네트워크 엑세스 계층(물리,데이터링크) -> 인터넷 계층(네트워크) -> 전송 계층(TCP/UDP) -> 응용 계층.
단계별로 계층간 필요한 정보(헤더)를 계속 붙여나가면서(캡슐화) 데이터를 전송하고,
수신측에서는 다시 그 헤더를 하나씩 해석하면서(역캡슐화) 데이터를 수신하게 된다.
1계층 - 물리 계층
7~2계층까지 거쳐 캡슐화가 완료된 데이터(0과1)를 전기신호로 변환해 전송(인코딩),수신(디코딩)하는 역할을 맡는 계층.
-> 받는 측에서는 전기신호를 다시 0과 1로 이루어진 데이터로 변환한다(디코딩).
-> 0과 1로 이루어진 데이터를 전기신호로 변환하는일은 랜 카드(NIC)에서 이루어짐
물리계층의 역할은 전기 신호로 변환된 데이터를 송수신하는 역할 만을 담당한다.
정리
- 전기신호를 주고받는 역할을 하는 계층(송수신간 인코딩/디코딩)
- 전송단위 : bit
2계층 - 데이터 링크 계층
데이터 링크 계층은 인접한 네트워크 장비 간에 신호를 주고 받는 규칙. (가장 많이 사용되는 규칙은 이더넷)
이더넷은 스위치(허브등)와 같은 인접한 장비에 연결된 컴퓨터와 데이터를 주고 받을 때 사용된다.
어떤 데이터를 특정 서버에 보내려는데 저 스위치와 연결된 다른 통신기기(컴퓨터)에도 데이터가 전송이 되지 않도록
데이터 링크 계층에서는 보내려는 데이터에 목적지 정보를 추가한다. (만약 다른 컴퓨터가 해당 데이터를 받는다면 목적지 가 다를 시 무시하도록 되어있음)
데이터를 전송할 때 상위계층을 거치고 위와 같은 형태(프레임)로 데이터가 구성이 된다.
데이터 링크 계층에서는 위 프레임을 구성할 떄 목적지,출발지 MAC주소(헤더부분)와 함께 트레일러가 붙는다.
-> 트레일러는 오류가 발생하였는지 검사용.
이렇게 목적지 MAC 주소가 있기에 스위치에 물린 여러 컴퓨터(독자적 MAC주소를 가짐)를 구별할 수 있는것.
단 설명을 보면 알겠지만, 데이터 링크 계층에서는 인터넷이나 다른 네트워크로는 데이터를 전송할 수 없다.
스위치에 물려있는 통신기기. 즉 데이터 링크 계층은 해당 네트워크 안에서만 서로 통신을 하는 것.
간단 정리
- 물리적 연결을 통해 인접한 두 장치간 신뢰성 있는 정보 전송
- 에러 검출, 재전송, 흐름제어의 역할.
- MAC주소를 이용해 통신
- 전송 단위 : Frame
3계층 - 네트워크 계층
위 그림에서 Data/Payload에 해당하는 부분이 네트워크 계층에 해당하는 데이터. (패킷이라고 함)
-> 좀 더 세분화 한다면 목적지 IP + 출발지 IP + 전송계층
-> 이렇게 데이터에 어떠한 의미를 계층을 거치면서 추가 됨.
네트워크 계층은 다른 네트워크와 통신하기 위한 경로 설정을 위해 라우터를 통한 라우팅을 하며, 패킷 전송을 담당.
데이터 링크 계층에서 같은 네트워크 환경에서만 통신이 가능하다고 했다.
다른 네트워크와의 통신을 위한 계층이 바로 네트워크 계층이며 그 기능을 수행하는 장비가 라우터(Router)
데이터 링크 계층에서 같은 네트워크 환경간에 통신기기에 데이터를 전송하기 위해 MAC 주소가 사용되었다.
마찬가지로 다른 네트워크 환경에서 데이터를 보내기 위해서는 목적지 IP 주소가 필요한 것.
-> 출발지 IP 주소도 포함된다.
공인 IP와 사설 IP
현재 IP체계는 IPv4(32bit)와 IPv6(128bit)가 존재한다.
IPv6는 32bit로 할당 가능한 IP주소의 고갈로 인해 등장한 새로운 IP체계이지만, 비용등의 문제로 아직까지도 IPv4가 사용된다.
그렇기에 고갈된 IP주소를 사설 IP라는 트릭을 이용해 아직까지도 유효한데, 인터넷에 직접 연결되는 컴퓨터나 라우터에는 공인 IP주소를 할당하고, 회사나 가정의 랜에 있는 컴퓨터는 사설 IP주소를 할당하는 정책을 사용한다.
-> 사설 IP주소는 대부분 192.168~, 10.~~, 172.~로 시작한다.
-> 다른 서버에 데이터를 전송할 때 공인 IP주소로 보내야한다.
실제로 네트워크 계층에서는 공인IP만으로 통신을 해야함.
-> 사설IP만으로는 네트워크 통신이 불가능.
그렇기에 이 사설 IP를 공인 IP로 변환해주는게 필요한다 그게 바로 NAT(Network Address Trasnlation)기술이다.
-> NAT장비는 주로 라우터와 공유기에 적용된다.
-> port도 변환된다고하여 PAT라는 명칭도 따로 존재.
과정을 예시로들어보면, IP패킷의 헤더에 출발지 IP, 목적지 IP(공인 IP를 알고있음)에서 출발지 IP는 1차적으로 사설 IP.
1. 클라이언트의 데이터가 출발지 IP(192.168.0.1) 목적지IP(203.178.43.33)이라는 정보를 헤더에 담고 패킷 송신.
2. 해당 패킷이 NAT장비를 만나 사설 IP -> 공인 IP로 변환.
-> 출발지의 사설IP를 NAT를 통해 공인 IP로 변경될 떄 라우터에는 변환 전후의 주소를 담는 NAT 테이블이 만들어짐.
3. 이후 라우터들을 겨쳐 목적지 IP에 도달.
4. 반대로 클라이언트가 다시 데이터를 수신할 땐 NAT를 통해 공인IP -> 사설 IP로 다시 변환된다.
하나의 공인 IP에 여러 사설 IP가 물려있다면 어떨까. 위 과정에서 서버(목적지IP에 해당)는 다시 공인 IP를 목적지 IP로 담고 데이터를 송신할텐데 그 공인 IP에 물려있는 사설IP가 여러개라면 구분할 방법이 없다.
거기서 사용되는게 PAT(Port Address Trasnlation)개념.
즉 추가로 port번호까지 변환을 해서 데이터를 송수신하기에 공인 ip에 물려있는 여러 사설ip를 구분한다는 것.
더 자세한 내용은 밑의 블로그가 잘 정리되어있음.
https://velog.io/@yange/NAT%EC%99%80-PAT%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
정리
- 라우팅 기능(서로 다른 네트워크의 데이터 전송)을 맡고 있으며 목적지까지의 최적경로를 설정한다.
- 전송단위 : 패킷(목적지 IP + 출발지 IP + 등 여러정보)
4계층 - 전송계층
일반적으로 물리/데이터 링크/네트워크 계층만 있더라도 목적지에 데이터를 보낼 수 있다.
다만 데이터가 손상되거나 유실되더라도 이들 계층에서는 하는게 없다.
전송 계층은 목적지에 신뢰할 수 있는 데이터를 전송하기 위해 필요한 계층.
- 오류를 점검하고 발생 시 데이터를 재전송
- 컴퓨터에 데이터를 전달하고 어느 어플리케이션에 전달할지 식별하는 기능(Port)
--> 출발지 포트 번호와 목적지 포트번호가 존재함
--> 0~1023 Port번호는 Well-known포트번호라 하여, 해당 포트번호는 사용하지 않는게 좋다.
- TCP/UDP 프로토콜이 존재하고, 사실상 위에서 설명하는 기능은 TCP에만 해당함.
TCP 구조
TCP는 연결형 프로토콜이다.
- 신뢰성 있는 데이터전송(패킷 유실되더라도 재전송)
- 데이터의 전송순서를 보장.
- 데이터의 경계를 구분하지 않는다.(TCP 소켓프로그래밍에서 힘든점중 하나)
TCP는 데이터를 전송하기전에 연결의 과정(3Way-handshake)를 거쳐야하며
반대로 해제의 과정에서는 4Way-handshake를 거친다.
3way-handshake의 과정(SYN,ACK)
- Client에서 Server에 연결 요청을 하기위해 SYN 데이터를 보낸다.
- Server에서 해당 포트는 LISTEN 상태에서 SYN 데이터를 받고 SYN_RCV로 상태가 변경된다.
- 그리고 요청을 정상적으로 받았다는 대답(ACK)와 Client도 포트를 열어달라는 SYN 을 같이 보낸다.
- Client에서는 SYN+ACK 를 받고 ESTABLISHED로 상태를 변경하고 서버에 ACK 를 전송한다.
- ACK를 받은 서버는 상태가 ESTABLSHED로 변경된다.
- ESTABLISHED : 3 way-handshaking 이 완료된 후 서로 연결된 상태
4way-handsahke의 과정(FIN,ACK)
- Client에서 Server에 연결 종료 요청(FIN)을 보낸다.
- Server에서 Client로 연결 종료 응답(ACK)를 보낸다.
- 또한 Server에서도 Client에게 연결 종료 요청(FIN)을 보낸다.
- Client측은 Server로 연결 종료 응답(ACK)를 보낸다.
UDP 구조는 TCP구조와 마찬가지로 출발지, 목적지 PORT번호를 제외하면 헤더 정보는 거의없다.
-> 정확성, 신뢰성있는 데이터의 전송을 보장하지는 않지만 속도가 빠르단 장점이 있음./
정리
- 종단간 신뢰성 있고 정확한 데이터 전송을 담당.
- 오류 검출, 복구, 흐름제어등을 수행
- 데이터 전송을 위해 Port번호를 이용.
- 전송 단위 : TCP-세그먼트, UDP-데이터그램
5계층 - 세션계층
정리
- 상대방과의 상호작용 및 동기화
- 통신을 위한 세션 확립,유지,중단
6계층 - 표현계층
정리
- 데이터를 어떻게 표현할지 정하는 역할
- 데이터 인코딩/디코딩,압축/해제,암호화/복호화 등을 수행
7계층 - 응용(+세션,표현) 계층
(TCP/IP 모델에서도 세션,표현,응용계층을 묶어서 응용 계층 하나로 표현하는데, 사실상 묶어서 봐도 상관없다.)
응용계층은 사용자(애플리케이션)와 가장 가까운 계층.
보통 데이터 통신은 클라이언트-서버측간의 데이터 통신이다.
응용 계층은 클라이언트측의 요청을 서버가 이해할 수 있는 메세지로 변환하고 다시 클라이언트측으로 전송하는 역할.
- 응용계층에도 프로토콜이 존재함.
- HTTP,Telnet,SMTP,애플리케이션에서 정의한 프로토콜(게임에서 많이쓰임)등 매우 많은 프로토콜이 존재함.
여기서 주로 볼거는 HTTP.
HTTP는 HTTP 헤더 + HTTP 본문(Body)으로 구성이 된다.
- 헤더(Header)에는 요청/응답 헤더가 따로 존재.
- GET /index.html Host: naver.com (body)
정리
- 실 사용자와 가장 밀접한 계층.
- 응용 프로세스간 정보 교환
- HTTP, Telent, SMTP 및 그 외 다수 응용 프로그램의 프로토콜을 이용.
'웹프로그래밍 > HTTP' 카테고리의 다른 글
HTTP API (0) | 2023.08.06 |
---|---|
HTTP(Hypertext Transfer Protocol) (0) | 2023.08.05 |
URI(Uniform Resource Identifier) (0) | 2023.08.05 |
클라이언트 서버 구조 및 Stateful&Stateless (0) | 2023.08.03 |