티스토리 뷰
본 내용은 재학 중인 학교 강의에 개인적인 공부를 더한 흔적입니다. 때문에 제가 조금은 오해한 부분이 있을 수 있습니다. 발견하실 경우 댓글로 남겨주시면 정말 감사하겠습니다 !! (책은 Computer_Networking_A_Top Down_Approach를 참고했습니다)
위의 그림은 두 End system H1과 H2가 통신하는 모습을 보여주고 있습니다. H1은 5 계층을 거쳐 전송하고자 하는 데이터를 캡슐화 해 전송합니다. 전송 계층의 segment를 네투워크 계층에서 캡슐화를 거쳐 datagram으로 만든 후 링크로 전송하면 가장 가까운 라우터 R1이 먼저 패킷을 수신하는데, 이 R1은 네트워크 계층까지만 구현되어 있습니다.
하지만 무리없이 R2에게 패킷을 전송하고 H2까지 전달됩니다.
즉, 데이터(패킷)을 전송하는데 있어서 중요한 계층은 Application이나 Transport Layer가 아닌 Network Layer와 그 이하 Layer라는 것이고, 특히나 모든 라우터들이 Network Layer까지 구현되어 있는 것을 통해 Network Layer가 많은 역할을 한다는 것을 알 수 있습니다.
Forwarding & Routing
forwarding과 routing은 송신 호스트에서 수신 호스트로 패킷을 이동시키는 네트워크 계층에서 이뤄지는 가장 중요한 작업입니다. 특히나 이 둘의 역할을 혼동하지 않고 구분하는 것은 매우 중요합니다.(교수님께서 매우 강조하시는 부분...)
Routing
경로 정보를 알아오는 것으로 control plane 때 행해지며, 사람이 직접 손으로 설정하는 static routing과 자동으로 라우팅 알고리즘 프로토콜들이 도는 dynamic routing이 있습니다. (자세한 부분은 뒤에)
알아온 경로 정보를 IP에 있는 data forwarding table (routing table)에 업데이트 합니다.
Forwarding
routing에서 알아온 경로 정보를 바탕으로 data forwarding table을 참조해 IP가 실제 데이터를 전송하는 것으로 data plane 때 행해집니다.
routing 알고리즘이 경로 정보를 알아오면 forwarding table에 업데이트 합니다. 이 forwarding table에는 간단하게 해당 라우터(혹은 호스트)와 연결되어 있는 라우터 및 호스트들의 정보들이 업데이트 되고, 어떤 패킷이 오면 어느 경로(output link)로 보내겠다는 식으로 되어 있습니다.
output link는 라우터에 연결되어 있는 interface(NIC)들 입니다. 각각의 NIC에는 연결되어 있는 LAN을 대표하는 network address가 할당되고 이를 network prefix address로 구분합니다. (자세한 부분은 IP address의 서브넷 마스크 부분과 서브네팅, 슈퍼네팅, CIDR(Classless Inter Domain Routing)을 공부하셔야 합니다.)
패킷이 들어오면 패킷의 헤더부분에 있는 목적지 주소를 prefix 마스킹 값과 연산해 목적지 주소와 일치하는 IP 주소가 나오면 이에 맞는 Link Interface로 패킷을 보내고, 없으면 다른 마스킹 값과 연산합니다. 그러다가 일치하는 값이 계속 없을 경우 마지막으로 0/0인 마스킹 값과 연산해 default gateway의 interface로 내보냅니다.
Inside a router
Input port, Output port, Switch fabric은 라우터의 Fowarding을 구현합니다. 즉, 실제 데이터 전송을 hardware 적으로 구현합니다. 때문에 매우 빠른 속도를 낼 수 있습니다. (하지만 IPv4의 경우 옵션에 의해 header 크기가 유동적이라 software로 처리해야 할 경우가 발생합니다.)
Routing processor는 Routing protocol을 실행하고 각각의 routing protocol이 가지고 있는 routing table을 유지, 관리합니다. 이 routing table은 라우팅 프로토콜이 여러 개 돌고 있을 경우 여러 개가 존재할 수 있으며, 후에 오직 1개만 존재하는 forwarding table에 서로 경쟁하며(우선순위에 따라) 최종적으로 업데이트 합니다.
Input port
패킷을 수신하고 수신한 패킷의 헤더를 검사해 어떤 output port로 내보낼지를 결정합니다. 이때 각각의 input port는 routing processor가 업데이트 해 놓은 forwarding table의 정보를 가지고 결정을 합니다. 패킷의 output port가 결정되면 패킷을 switch fabric으로 보낼 수 있습니다. 만약 다른 패킷이 먼저 도착해 있는 경우 대기 queue에서 대기하게 됩니다.
Switching fabric
Switcing fabric은 input port에서 output port로 전환시켜 주는 hardware적 장치로 여러 가지 방법으로 수행될 수 있습니다.
Memory
가장 단순하고 가장 초기의 라우터가 CPU (routing processor)를 직접 제어하는 방식입니다.
이때 memory는 buffer의 역할로 input port의 패킷을 잠시 저장해 놓고 경로가 결정되면 output port로 복사해 주는 역할을 합니다.
routing processor가 관여하므로 software 적으로 처리되며 현재 가장 많은 라우터들이 memory로 switching 합니다.
Bus
input port는 routing processor의 개입없이 공유 bus를 통해 출력 포트로 직접 패킷을 전송합니다.
Crossbar
N개의 input port를 N개의 output port에 연결하는 2N개의 bus로 구성된 상호 연결 네트워크입니다.
크로스 포인트가 열거나 닫히면서 패킷이 전달되며 bus와 다르게 여러 패킷이 동시에 전달될 수 있습니다.
스위치의 on, off로 작동하므로 hardware적 방법이며, 때문에 속도가 빠릅니다. 하지만 요즘 사용하고 있는 IPv4의 경우, 헤더의 길이가 고정되어있지 않아 어려움이 있습니다.
IPv4
Inside of Internet's network layer
Network layer의 내부 구조를 살펴보면 크게 3가지로 나뉘어 집니다.
IP protocol
패킷의 헤더를 제작하고 실제 데이터 전송을 담당하는 역할
Routing protocol
경로 정보를 알아오는 역할
ICMP protocol
오류를 제어하고 요청에 응답하는 역할
IPv4 Datagram format
Version number
4bit로 구성되며 IP 프로토콜의 버전을 지정합니다. IPv4의 경우 4가 입력됩니다.
Header length
IP 헤더의 길이 정보를 가지고 있는 4bit 영역으로 보통 헤더 길이는 20 byte 입니다. 하지만 옵션을 가질 경우 헤더 길이가 달라질 수 있습니다. Header length의 값에 4 bytes를 곱한 값이 실제 헤더 길이가 됩니다. 예를 들어 보통의 패킷에 이 영역의 값이 5인데, 5 x 4 = 20 byte가 됩니다.
Type of service
2 byte의 크기로 금전적인 계약 관계에 따른 policy에 의해 달라지는 속도, 안정성 등을 구분하는 TOS bit가 포함되어 있습니다. 요즘은 거의 사용하지 않아 0으로 채워집니다.
Datagram length
IP Datagram의 총 길이 (header + data)입니다. 크기는 2 byte로 지정되어 있어 이론상 최대 크기는 65,535 byte 입니다. 보통의 datagram 크기는 1500 byte보다 큽니다.
Identifier
Datagram을 구분해주는 ID 역할을 하는 번호입니다.
flags, fragmentation offset
Datagram의 단편화 정보를 가지고 있습니다.
여러 기술들을 패킷에 접목시키다 보니까 패킷의 길이가 길어지게 되었습니다. 어쩔 수 없이 패킷을 잘라서 보내는 방법을 고안하게 되고, 특히 data 영역을 잘라서 보내게 됩니다. 이러한 정보를 넣어주는 영역입니다.
time-to-live (TTL)
Datagram이 네트워크 상에서 영원히 존재하게 되면 문제가 발생할 수 있기에, datagram의 수명을 지정해주는 영역입니다. 이 TTL 값은 1 홉을 갈 때 마다 1씩 감소하다가 0이 되면 datagram이 삭제됩니다.
Protocol
IP datagram의 data 부분이 최종 목적지의 어떤 프로토콜에 전달되야 하는지를 나타내는 영역입니다. 이 번호는 네트워크 계층과 전송 계층을 묶어주는 역할을 합니다.
Header checksum
수신 된 IP datagram의 비트 오류를 탐지하기 위한 영역입니다. IP datagram의 헤더 체크섬은 헤더를 2byte 씩 묶어 더해주고 마지막에 1의 보수를 취해줍니다. 단, 이때 헤더 체크섬 영역은 0으로 채워주고, 만약 더하다가 값이 2 byte가 넘어갈 경우 올림수 만큼 다시 체크섬 값에 더해줘 2 byte를 유지해줍니다.
Source and destination IP addresses
송신 지와 수신 지의 IP 주소 값이 입력되는 영역입니다.
Options
처음에는 이 옵션 영역을 누가 보냈는지에 대한 정보를 넣어 차등 서비스를 네트워크 계층에서 제공하기 위해 만들었습니다. 요즘은 오버헤드를 줄이기 위해 거의 사용되지 않지만 이 영역 때문에 datagram의 헤더 크기가 가변적일 수 있게 되어 헤더를 열어보기 전까지 크기를 예측할 수 없습니다.
때문에 IPv4의 경우 hardware적인 처리가 힘들어 software적인 처리를 함으로써 속도 차이가 발생하게 됩니다.
Data (payload)
실제 전달하고자 하는 정보가 담겨있는 영역입니다. data를 payload(값을 지불하는 영역)에 담아 보낸다고 표현합니다.
'CS > Network' 카테고리의 다른 글
[네트워크] OSI 7 계층 개요 (1) | 2023.03.26 |
---|---|
[네트워크] 소켓 프로그래밍 개요 (0) | 2023.03.26 |
raw socket을 이용한 packet sniffing (0) | 2019.05.06 |
Packet switching 더 자세히... (2) | 2019.03.25 |
Packet switching vs Circuit switching (0) | 2019.03.20 |
- Total
- Today
- Yesterday
- JPA
- 파이썬 for Beginner 연습문제
- git
- 프로그래머스
- Spring
- git branch
- 스프링
- 스프링 테스트
- spring mvc
- 쉽게 배우는 운영체제
- Computer_Networking_A_Top-Down_Approach
- jsp
- Do it! 정직하게 코딩하며 배우는 딥러닝 입문
- 생활코딩 javascript
- Python Cookbook
- 김영환
- 지옥에서 온 git
- 패킷 스위칭
- Gradle
- 스프링 mvc
- git merge
- 파이썬 for Beginner 솔루션
- 스프링 컨테이너
- Spring Boot
- 쉘 코드
- 방명록 프로젝트
- Thymeleaf
- 운영체제 반효경
- Spring Data JPA
- 선형 회귀
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |