이더넷 형태이더넷은 물리적으로 동축케이블 기반 버스 형태를 주로 사용했었다. 그러나 하나에 문제가 생기면 네트워크 전체에 문제가 발생하는 단점이 있었고 최근에는 switched 형태로 사용하고 있다. 아래 그림처럼 A가 B로 패킷을 전달할 때 동시에 C에서 D로도 패킷을 전달할 수 있다. 이더넷 프레임 구조이더넷은 네트워크 카드라고 하는 것으로 구현되어 있는데, 카드마다 이더넷 프레임 구조가 다른다. 일반적으로 주로 사용되는 프레임 구조는 다음과 같다.Preamble : 동기화하는 것으로 다음부터 패킷임을 알려주는 필드Destination Address, Source Address : destination 주소가 broadcast이거나 본인을 가리킬 때 데이터를 읽어야 한다. Type : 프로토콜이 명..
전체 글
지금까지 한 번에 여러 기기가 데이터를 보낼 때 충돌을 감지하고 충돌에 대처하는 방법을 배웠다. 이러한 데이터를 보낼 때 패킷 헤더에 destination, source 주소를 넣어 보내는데, link layer에서는 어떻게 이를 처리하는지 알아보자.Addressing, ARP 모든 기기는 IP 주소와 MAC 주소를 가진다. IP 주소는 네트워크에 들어갈 때 부여 받는 주소이지만 MAC 주소는 기기가 만들어질 때부터 공장에서 번호를 찍어 나오는 주소이다. 학년이 올라갈 때마다 반, 번호가 바뀌는 것처럼 IP 주소도 같은 원리이고, MAC 주소는 사람의 주민등록번호처럼 영원히 바뀌지 않는 주소라고 생각하면 된다. IP 주소는 32비트 주소 체계를 가지고 있고, MAC 주소는 48비트 주소 체계를 가진다. ..
링크 계층에서 오류를 탐지하고 정정하는 방법을 배웠다. 이번에는 링크 계층에서 여러 기기가 한 번에 데이터를 전송할 때 서로 충돌이 발생하지 않도록 방지하는 방법을 배울 것이다. MAC(Media Access Protocol)링크에는 2가지 타입이 있다. point-to-point는 1대1 연결로 한 기기가 보내면 한 기기는 받는 역할이기에 충돌이 발생하지 않는다. 그러나 Broadcast는 여러 기기가 하나의 링크를 공유하기 때문에 충돌이 발생할 수 있다. 때문에 데이터 링크 계층에는 다중 접속 문제를 해결하기 위한 방법이 필요하다. 그래서 나온 것이 Media Access Protocol(MAC)이다. 이는 broadcast 채널에서 여러 기기가 하나의 버스를 공유할 때 충돌이 발생하는 것을 관리하는..
지금까지 TCP/IP의 3가지 계층을 살펴봤고, 이번에는 Link Layer를 알아볼 차례이다. 호스트와 라우터들은 노드 형태로 되어있고 이 노드들은 유선, 무선, LAN 방식의 링크로 연결되어 있다. 링크 계층에서는 링크를 통해 노드에서 물리적으로 가까운 거리까지 데이터그램을 전달하는 일을 담당한다. 즉, 이 계층의 가장 큰 목표는 에러 없이 링크를 통해 송수신하는 일이다. 이를 위해서 먼저 framing이라는 과정을 거친다. 데이터그램에 헤더와 트레일러를 붙이고 사용할 채널에 접근한다. 이러한 인접 노드에 신뢰성 있는 전송을 제공하기 위해 흐름 제어, 에러 탐지, 에러 정정, half duplex 혹은 full duplex 서비스를 제공한다. 참고로 링크 계층은 NIC라는 네트워크 인터페이스 카드에서..
ICMP(Internet Control Message Protocol)앞서 IPv6의 데이터그램 포맷을 살펴볼때, Fragmentation offset/flags/Identifier 필드가 없다고 언급했었다. 이는 fragmentation이 송신 과정에서 발생하지 않고 출발지, 목적지에서만 분할. 재조합이 이루어진다고 했다. 만약에 라우터를 지나는데 MTU에 비해 데이터 길이가 긴 경우에는 분할하지 않고 버리고 ICMP를 통해 오류 메세지를 보낸다. ICMP는 에러 메세지 전달만을 위한 것은 아니다. 예를 들어서, 목적지 네트워크까지 도달하지 못한 경우, ping 프로그램을 통한 echo request, TTL이 만료된 경우에 사용한다. 대표적으로, Traceroute 프로그램은 일부러 사용하지 않는 p..
앞선 글에서는 routing protocol 두 가지를 배웠다. link state는 dijkstra 방식을 사용해서 네트워크에 속해있는 라우터의 정보를 모두 알고있는 상태에서 최적의 경로를 설정한다. distance vector는 bellman ford 방식을 사용해 인접 라우터로부터 오는 정보를 비교하여 업데이트하는 방식이다. 이 때, 링크 정보가 더 나빠졌는데도 인지하지 못하고 무한정으로 반복하게 되는 문제(count-to-infinity)가 발생할 수 있다. 그러나 네트워크에 존재하는 모든 라우터들이 각각의 라우터 정보를 다 가지고 있을 수는 없다. 또한 인터넷은 ISP들의 네트워크이고 ISP들이 네트워크를 관리하기 때문에 어떤 프로토콜을 사용할 수 있어야 한다. 그래서 AS(Autonomous..
지금까지는 네트워크 계층의 Data Plane을 학습했다. Data plane은 forwarding을 수행하며 forwarding table을 통해 input port에서 들어온 패킷을 어떤 output port로 내보낼지를 결정하는 일을 한다. 이와 함께 라우터의 구조를 학습했다. 앞선 글에서도 언급했지만 Control Plane은 routing algorithm을 통해 routing table을 만드는 역할을 한다. 출발지부터 도착지까지 어떤 경로로 가야할 지를 결정해주는 routing protocol에 대해 학습해보자. Routing Protocols라우팅 프로토콜의 최종 목표는 출발지에서 목적지까지의 최적의 경로를 결정하는 일이다. 최적인 경로를 결정하는 데에는 비용이 될 수 있고 속도가 될 수 ..
Network Layer : Internet지금까지 네트워크 계층의 Data plane과 Control Plane에 대해 학습했다.IP Datagram FormatIPv4 패킷의 내부 구조를 알아보자.VerIP 프로토콜의 버전이 저장된 필드이다. IPv4이기 때문에 4가 들어가 있다. Head Len헤더 길이를 byte단위로 저장한 필드다. 옵션 길이에 따라 헤더 길이가 달라지기 때문에 가변 길이다. 대부분의 IPv4 데이터그램의 헤더는 20byte이다. Type of Service각 패킷마다 제공하는 서비스를 저장한 필드다. 예를 들어서 실시간 데이터 그램과 비실시간 트래픽 등을 저장한다. 0~5까지는 diffserv, 6~7은 ECN을 나타낸다. Length헤더와 payload를 총 합친 길이를 저장..
우리는 github를 통해서 협업을 하고 작업한 내용에 대한 commit message를 남긴다.이때, 협업 시 좋은 commit message가 무엇인지 알아보았다. 1. commit message가 왜 중요한가코드 리뷰 시간을 단축하여 능률적으로 처리할 수 있다.변경 사항을 이해하는 데 시간을 단축할 수 있다.코드만으로 설명하기 어려운 "왜 이렇게 구현했을까?"를 설명할 수 있다 2. 좋은 commit message 작성하기1️⃣ 명령조좋은 예Use InventoryBackendPool to retrieve inventory backend 나쁜 예Used InventoryBackendPool to retrieve inventory backend 왜 명령조를 사용할까? commit message는 변경..
카카오테크캠퍼스 과제를 수행하던 중 새로고침 시 값이 변경되지 않도록 하는 방법이 궁금해 찾아보았다. 기존 코드const [todos, setTodos] = useState([])const [filter, setFilter] = useState('all')... {todos.length > 0 && ( )} 기존코드는 사용자로부터 TodoInput을 받아와서 addTodo 함수를 통해서 새로운 리스트를 형성한다. 이 로직은 addTodo 함수를 통해 input으로 받은 값을 띄우는 것일 뿐이다.그래서 브라우저의 local storage 영역에 들어가면 아무런 값이 저장되어 있지 않다.그래..