# data[].attributes.body
[6강] Network Layer & IP

Network Layer
- 네트워크간에 데이터 패킷을 주고받음 으로써 연결이 만들어지는 인터넷 통신 프로세스일부분이며, 패킷의 출발주소와 도착주소를 활용하는 대부분의 일을 한다

Forwarding
- 데이터 패킷이 라우터의 입력을 들어와 라우터의 출력으로 전사되는 것을 일컫는다

Routing
- 데이터 패킷의 출발지와 목적지를 보고 경로를 설정하는 것을 말한다.  즉, forwarding에 대한 정보다.

circuit switching
- 데이터를 전송할 상대방과 서로 연결하는 과정이 필요하다.
- 해당 채널을 연결해서 연속적으로 데이터를 전송하는 방식이다.
- realtime으로 데이터를 전송한다는 장점이 있다.
- 해당 회선이 연결중이라면 다른사람은 그 회선을 사용하지 못하기 때문에 채널을 낭비해 효율성이 매우 떨어진다.

message switching
- circuit switching의 연결 과정이 필요없다.
- 실질적으로 데이터를 메세지 단위로 할당해서 전달하는 방식이다.
- 메세지의 크기가 스위치장치에서 저장될 크기여야한다. 크면 전송이 안되고 데이터 소실이 일어난다.

Packet switching
- 메시지 스위칭의 단점을 보완한 것으로 메세지를 여러개의 패킷으로 쪼개서 전송하는 방식이다.
-  데이터의 크기가 일정하게 잘라지기 때문에 전송효율도 높고, 트래픽이 몰릴 경우에도 융퉁성 있게 데이터를 전송할 수 있다.
- 데이터를 잘라서 보내기 때문에 순서를 유지시켜줘야한다.
- pipelining으로 효율을 끌어올릴 수 있다.

Routing Algorithms
- 라우팅을 설정하는 방법을 설명한다.
1. Link State Routing (Dijkstra's algorithm) : 서로가 연결된 노드와 cost를 알고있는 상태에서 활용할 수있는 알고리즘으로, 해당 경로로 가는 최단거리를 찾는과정을 반복시키면서 테이블 형태로 만든 뒤, 해당 테이블 정보로 패킷을 보내는 방식
2. Distance Vector Routing(Bellman - Ford algorithm) : 본인과 인접한 노드와 그 cost정보를 table형태로 만든뒤 서로 공유하는 방식으로 전체의 최단 경로를 계산하는 방식 단점으로는, 테이블 정보가 없는 처음에는 worst경로로 데이터를 보낼 가능성도 있으며, dead lock에 빠질 가능성도 있다.
위의 두 알고리즘은 노드의 수와 기준영역에 따라 최신화 주기와 테이블공유 주기를 잘 관리해야한다.

Hierarchical routing
- 계층구조로 라우터를 분리해 경로를 설정하는 방식으로, 영역을 구분해서 해당 영역들의 최단거리들의 정보를 활용해 라우팅을 설정하는 방식이다.

모든 라우팅방식들은 최적의 경로만 따라가는 것이 아니라 데이터 패킷의 트래픽에 따라 차선 경로를 선택하는 등 이를 관리하는 방법은 여러가지가 있다.

IP
- 인터넷 프로토콜로 인터넷이 통하는 곳에서 정보를 수신하고 송신하는 규약을 말한다.
- IP통신에 필요한 고유주소를 IP주소라고 하며 본 강의 대부분은 이 주소에 대한 내용을 다룬다.

IPv4
- 현재 사용하고있는 IP주소 표현방식으로 32bit로 주소를 표현한다. 사용할 범위를 구분해 Class A ~ E 까지를 구분한다. 또한 해당 값은 10진수로 표현한다. A클래스는 약 16,000,000 개, B클래스는 약 65,000개, C클래스의 경우 약 250개정도이다.

Subnet Addressing
- IP주소는 네트워크 주소와 호스트 주소 두 부분으로 나뉜다.
- 네트워크 주소는 호스트들을 모든 네트워크를 지칭하고 호스트 주소는 하나의 네트워크 내에 존재하는 호스트를 구분하기위한 주소이다.
- 하지만 이 주소를 구분하는 경계점이 없어 필요한 호스트IP의 개수에 따라 할당 받도록 A~E클래스로 구분한 것이다.
A 클래스 -> 네트워크.호스트.호스트.호스트
B 클래스 -> 네트워크.네트워크.호스트.호스트
C 클래스 -> 네트워크.네트워크.네트워크.호스트
이런방식으로 네트워크 주소와 호스트 주소를 나눈다.
- 해당 부분이 네트워크인지 호스트인지 구분해주기 위해 Subnet Mask를 이용한다. 2진수로 나누며 1은 네트워크주소, 0은 호스트 주소를 표시한다.

IP주소의 문제점
- 현재 인터넷의 폭발적인 성장으로 IPv4로는 전부 표현하기에는 부족하다는 결론이 나왔다. 따라서 이방법을 해결하기위해 IPv6가 출범했으나 기존에 할당된 IPv4의 주소들은 그대로 유지/관리하다 IPv6로 온전히 넘어갈 수 있을 때 넘어가기로한다.  이에 따라 부족한 IP주소 표현 범위문제를 해소하기위해 여러가지 솔루션이 등장한다.

1. CIDR - 서브넷 주소체계를 일반화하기 위해 정해진 주소체계이다. 서브넷 주소체계는 32비트 IP를 가지고 있고, x개와 32-x개의 두 부분으로 나뉘어 점으로 된 십진후 형태의 a.b.c.d/x 구조를 가지게 된다. 앞의 x개는 network prefix라고 부르고, 공통 프리픽스를 공유한다. 여기서 외부 기관의 라우터는 이 앞의 프리픽스까지만 고려하고, 뒤는 고려하지 않는데, 프리픽스를 통해 들어온 것은 내부 라우터에게 위임해 포워딩 테이블의 크기를 줄일 수 있다.

주소의 나머지 32-x 비트들은 기관 내부에 같은 네트워크 프리픽스를 사용하는 모든 장비를 구분해준다.

2. DHCP - 호스트에게 동적으로 IP 정보를 주기 위해 설정되는 프로토콜이다. 연결-후-작동 프로토콜(plug-and-play protocol)이라고도 불린다. 주소의 재사용을 가능하게 해준다. 호스트가 켜져있을 때만 주소를 할당해, 주소 공간을 절약할 수 있다. 네트워크에 참가하고 싶은 참여자가 많고, 이동이 잦고, 주소가 제한된 시간에만 필요할 경우 DHCP 기술은 매우 유용하게 사용된다. 이러한 동적 호스트 구성 프로토콜을 통해 네트워크 관리자는 호스트가 네트워크에 접속하고자 할 때마다 고정된 IP 주소를 주거나 다른 임시 IP 주소를 할당하도록 DHCP를 설정한다.
이로인해 ISP로부터 개별 Ip주소를 할당하는 일을 수행하지 않아도 된다.

3. NAT - 네트워크의 IP 주소를 관리하거나, IP 주소를 변경하고 싶을떄 이용한다. NAT 가능 라우터는 라우터 안 독립적인 주소를 가진다 삽입한 이미지 처럼  138.76.29.7 안에 또다른 IP인 10.0.0/24 사설 개인 주소 아이피를 가진다. NAT을 쓴다면 이 세상에 수많은 10.0.0/24 아이피가 존재하겠지만, 이 개별 주소는 주어진 네트워크에만 의미가 있고, 밖에서는 138.76.29.7 로만 보인다. 이 안의 공간을 NAT 가능 공간이라고 한다. 밖에서 이 공간을 보면 단순히 하나의 IP(138.76.29.7)를 가지는 하나의 장비로 보일 뿐이다.

4. IPv6 -  데이터 표현방식크기자체를 늘린 새로운 접속체계
IPv6은 32비트 대신 128비트의 주소를 사용

IP(internet protocol)는 여러가지 정보를 포함하고 있다.
현재는 TCP / IP를 따르고 있다.
이를 layer로 나타내면, Application layer, Transport layer, Network layer, Data Link layer 이렇게 큰 4개의 계층으로 이루어진다. (물리계층과 표현, 세션 계층은 묶어서 본다.)
따라서 이러한 정보들을 모두 명기해야하는데 그 정보는 header에 적혀있다.

[7강] Transport Layer

6강의 network layer가 호스트간의 논리적 통신에 대한 파트라면
7강의 Transport layer는 응용 프로세스간의 논리적 통신에 대한 파트다. transport layer와 그 상위 계층은 대부분 소프트웨어적 통신부분을 다룬다.

Transport Layer
- 서로다른 호스트들의 프로세스의 통신을 관리하는 계층으로 segment라는 단위로 패킷을 주고받는다.

UDP
- TCP에비해 신뢰성이 떨어지는 통신방법으로 패킷 전송중 손실이 발생하면 손실된 상태로 처리한다. 또한 순서역시 중요하지 않기 때문에 패킷의 순서를 신경쓰지 않는 특징을 가진다.

TCP
- 신뢰성을 기반으로한 통신방법으로 패킷을 통해 전송되는 자료들은 도중 단 하나의 비트라도 손실되면 안되는 자료다. 따라서 패킷의 순서를 보존하는 것도 중요하고, 전송이 실패했을 경우에는 재전송하는 방식으로 해결하려한다.

TCP flow control
- 패킷을 주고받는 과정에서 network layer에서 transport layer로 패킷들이 도착하는데 이때 socket receiver buffer에 패킷들이 쌓이게된다.  마찬가지로 application layer에서는 transport layer의 패킷을 해당 버퍼에서 찾아가는데 너무많은 패킷이 TCP socket에 쌓이면 데이터가 손실될 수 잇다. 따라서 socket receiver buffer는 자신이 받을 수 있는 바이트 수를 sender에게 전송해 해당 버퍼가 넘치지 않도록 조절한다.

1. stop and wait
- 상대방이 응답을 하면 데이터를 보낸다.

2. sliding window
- 데이터를 전송하고 확인한상태, 전송은했는데 확인안된상태, 전송가능하고 아직 안보낸상태, 아직 다가가지 못한상태로 나눠서 관리하는 시스템

TCP error control
- 데이터 패킷의 전송도중 발생한 오류를 검출하고 정확한 정보를 재현하는 것

1. stop and wait
- 데이터를 제대로 받았다는 응답을 받을때까지 기다렸다가 다음데이터를 보내는 방식

2. Go Back N
- 데이터를 연속적으로 보내다가 어느부분에서 오류가 발생했는지 검사하는 방식

이외에도 여러방식이 있지만 책에 나온 부분만 명기함

TCP congestion control
- 네트워크 내의 패킷수를 조절해 네트워크가 혼잡해지지 않고 overflow되지 않게 방지하는 기능
이를 제어하는 정책으로 대표적인 2가지가 있다

1. Time out
- 송신측에서 데이터를 보낸 이후, 데이터가 유실되거나, 응답이 유실되어 응답받지 못하는경우 기다렸다가 재전송한다.

2. 3 ACK Duplicated
- 송신측이 3번이장 중복된 승인번호를 받으면 정상적으로 데이터가 전송되지 못했음으로 인지하고 빠르게 재전송한다.

[8강] Application layer

application layer는 application의 한 종류이다.

DNS
- IP 주소 및 기타 데이터를 저장하고 이름별로 쿼리할 수 있게 해주는 계층형 분산 데이터베이스

DNS cache
- 우리가 미리 접속했던 웹사이트의 서버정보를 등록해놓고 다시 접속할때 빠르게 접근하기위해 서버정보를 저장해놓는 것을 말한다.

Web cache(proxy server)

- client가 proxy server에 접근해 caches file이 있는지 본다.

=> caches가 있으면 proxy server에서 데이터를 받아온다.

=> caches가 없으면 proxy server는 origin server로부터 데이터를 요청하여 받아온다. 받은 데이터는 proxy server에 저장된다. 그리고 client에게 데이터를 전달해준다.

이 행위로 인해 굳이 멀리있는 origin server까지 도달하지않고 정보를 가져올 수 있어 response time 을 줄일 수 있다.
또한, client의  request가 일부 분산되기 때문에 server의 traffic을 아낄 수 있다.

배운점 : network, transport, application layer 의 주요 키워드와 개념에 대해 학습했다. 물론 부족한 부분이 많고 구체적으로 들어가서 공부해야할 부분도 많지만 짧은 시간안에 이정도 개념을 학습할 수 있다는 것이 놀랍다 개인적으로는 발생하는 문제들에 대해서 회피하는 방법에 대해서 구체적으로 배워보는 시간을 가지면 좋을 것 같다.

# data[].attributes.body
Network Layer : 수신자가 송신하는 사람의 데이터를 잘 수신하게끔 하는것

Forwording : 패킷들을 다른 router로 보내는것

Routing : 패킷의 목적지를 설정해 경로를 설정하는 것

Circuit switched : 하나의 circuit을 생성하고 데이터를 전송 후 circuit을 끊는 과정

Packet switched networks : 패킷 전송시 예약하는 과정이 아닌 각각 단위의 패킷대로 보냄.

Routing 알고리즘 : 각 경로의 cost를 계산하고 최소의 cost가 드는 최적의 경로를 추천해주는것

IP는 주소는 class A부터 E까지 총 5개로 이루어짐.
또한, net ID, Host ID 등으로 구성됨.

Transfer Layer : 데이터 전송시 중간과정에서의 에러 여부 확인 및 logical한 통신 제공

TCP : 흐름 및 혼잡 제어 지원 및 순서를 보장하는 연결 지향형 프로토콜의 형태

Application Layer

DNS : 도메인이나 호스트 이름을 숫자로 표현된 IP주소로 해석해 주는것.

# data[].attributes.body
Network Layer
- 송신에서 수신으로 데이터 패킷 전송
- 포워딩 : 라우터의 입력에서 적절한 출력으로 패킷을 전송
- 라우팅 : 목적지까지 패킷이 이동하는 경로를 결정하는 것
Commuicaition Networks
- circuit switching : 유선 전화망 ex. 옛날 전화
- packet switching : 데이터를 패킷으로 쪼개서 전달
장점 : 큰 데이터를 빠르게 전송할 수 있음
단점 : header 크기가 커진다
Routing Algorithms
- Router의 최적 경로를 찾음
- Dijkstra's Algorithms : 이웃한 노드와 cost 정보를 알고있어 최단 경로를 찾아 계산함
IP address
- 각 호스트 또는 라우터의 인터페이스는 고유한 32비트 IP 주소가 할당
- 각 주소는 (네트워크 ID, 호스트 ID) 쌍

Transport Layer
- 송신자와 수신자 사이에 데이터 전송 이루어짐
-ex. UDP, TCP
Error Control
: 에러가 일어났는지 대응하는 방법
stop and wait ARQ
-수신자는 패킷을 수신하면 확인 ACK를 수신 -송신자는 ACK를 기다리며, 일정 시간 내에 도착하지 않으면 타임아웃이 발생
continuois ARQ
- 슬라이딩 윈도우 방식과 비슷함
- 사라진 패킷을 receiver가 다음 패킷을 받아도 버리고 사라진 패킷을 기다린다

# data[].attributes.body
Network Layer
송신에서 수신 호스트로 데이터 패킷을 전송
포워딩(Forwarding): 패킷을 입력에서 출력으로 전달
라우팅(Routing): 주소를 받아 패킷이 destination으로 이동하는 경로 설정

Communication Networks
circuit switching
- 유선 전화망
- 서킷을 만들고 데이터를 보낸 후 서킷을 끊음
- 장점 오랜 시간 연결하기 좋음, 딜레이 없음
- 단점 채널 낭비

packet-switching
데이터를 패킷으로 쪼개서 전달
장) 메시지와 같이 큰 데이터를 빠르게 전송
단) header 크기가 커짐

Routing Algorithm
Router의 최적 경로를 찾음
Link State routing
Dijkstra’s Algorithm
이웃한 노드와 cost 정보를 알고 있어 최단 경로를 찾아 계산
distance vector routing
- Bellmaf-ford Algorithn
- 이웃하고만 정보를 주고 받음
- 이전에 계산한 최단 경로를 이용해 최단 경로 갱신
- hierarchical routing
- 대표 라우터를 선정하여 대표 라우팅 테이블을 만든 후 대표 라우터안에서 라우터끼리 라우팅 테이블을 만듦

IP(Internet Protocol)
- 라우팅 알고리즘을 실제로 구현한 protocol
- A, B, C, D, E 5개의 class가 존재 , A,B,C를 가장 많이 사용
- net ID, host ID로 구분
- 인터넷의 폭발적 성장으로 IP 주소가 모자람
- CIDR: IP주소를 효율적으로 표현하는 방식, 유연하게 part를 쪼갤 수 있음
- DHCP: 임시 IP 주소를 할당 받아 쓰고 반납
- NAT: IP주소 하나로 많은 사용자 운영, 공적으로 받은 IP주소를 두고 비공식적인 주소를 사용자에게 할당하여 공적인 IP주소로 변환하여 신호를 주고 받음

# data[].attributes.body
Ch6. Network Layer & IP

1. Network Layer

송신 호스트에서 수신 호스트로 데이터 패킷을 전송

포워딩(Forwarding): 패킷을 입력에서 출력으로 전달

라우팅(Routing): 주소를 받아 패킷이 destination으로 이동하는 경로 설정

2. Communication Networks

circuit switching

circuit을 만들고 데이터를 보낸 후 circuit을 끊음

packet-switching

데이터를 패킷으로 쪼개서 전달

3. Routing Algorithm

Router의 최적 경로를 찾음

Link State routing

Dijkstra’s Algorithm

이웃한 노드와 cost 정보를 알고 있어 최단 경로를 찾아 계산

distance vector routing

Bellmaf-ford Algorithn

이웃하고만 정보를 주고 받음

이전에 계산한 최단 경로를 이용해 최단 경로 갱신

hierarchical routing

대표 라우터를 선정하여 대표 라우팅 테이블을 만든 후 대표 라우터안에서 라우터끼리 라우팅 테이블을 만듦

4. IP(Internet Protocol)

라우팅 알고리즘을 실제로 구현한 protocol

인터넷의 폭발적 성장으로 IP 주소가 모자람 --> IPv6

CIDR: IP주소를 효율적으로 표현하는 방식, 유연하게 part를 쪼갤 수 있음

DHCP: 정규 주고가 아닌 임시 IP 주소를 할당 받아 쓰고 반납

NAT: IP주소 하나로 많은 사용자 운영, 공적으로 받은 IP주소를 두고 비공식적인 주소를 사용자에게 할당하여 공적인 IP주소로 변환하여 신호를 주고 받음

# data[].attributes.body
[6강]

Network Layer Services : sender에서 보낸 데이터를 receiver쪽에 전달

Routing

하나 이상의 네트워크에서 경로를 선택하는 프로세스

어느 곳에 보내야할지 정하는 것

forwading

데이터를 받아 전달하는 행위

Circuit switched

circuit 을 만들고 데이터를 전송하고 circuit을 끊는 과정

오랜 시간 가능, but 낭비 발생

유선 전화망

Packet switched

패킷 단위로 나누어 보냄 → 순서가 바뀔 수 있지만 재정비 가능

미리 예약X

Massage switching

메시지를 패킷으로 분할하여 전송하는 방식

Routing Algorithms

각자가 스스로 계산을 하는 알고리즘

가장 최적의 경로 (비용, 시간)

Link State routing algorithms

모든 라우터들이 다른 링크 cost에 대한 정보를 모두 알고 있는 경우

Dijkstra 알고리즘즘

Distance vector routing

이웃하고만 정보를 주고 받음

hierarchical routing

IP addresses

32바이트

5가지 클래스 → class B를 가장 많이 사용

문제점: 주소의 고갈

IETF IPv6(새로운 버전을 만들자)

CIDR: ip address 할당

NAT: 한정된 하나의 공인IP를 여러개의 내부 사설 IP로 변환

subnet Addressing

subnet mask

[7장]

Transport Layer protocols

Sender/Receiver 사이의 정보가 잘 도착했는지 확인(잘 보냈고 잘 받았고)

올때까지의 시간을 체크, 타임아웃

Application layer protocal

UDP: 비연결형, 낮은 신뢰성, 속도 빠름

TCP: 안정적, 순서, 에러없이, 혼잡제어,

congestion control: TCP sender가 어느만큼의 rate로 receiver에게 데이터를 보낼 수 있을지를 제한하는 역할

Flow Control: sender와 receiver 사이의 전송 솓고 조절

Error Control: 에러 발생 여부를 보면서 대응

[8장]

application layer protocols

서비스를 제공하고 제공받기 위해서 어떤 형식으로 메시지를 주고 받아야 하는지의 프로토콜들이 모여있는 레이어

application

DNS

Web and HTTP

Electronic mail

Telnet

ftp

etc

DNS(Domain Name Stytem)

인터넷에서 목적지를 찾아가기 위한 주소

호스트 이름을 ip주소로 해석

네거시브 차이점?

server 알아내는 법

1. Recursive

2. Iterative

→ recursive와 iterative를 같이씀

DNS cache

IP 주소 일정시간 저장

MQTT(Message Queue Telemetry Transport)

미리 구독한 사람들에게만 컨텐츠 제공

HTTP의 슬림 버전

CoAP(Constrained Application Protocol)

간단한 전자 기기들의 인터넷 통신을 지원하기 위한 프로토콜

HTTP와 비슷

# data[].attributes.body
패들릿

[6강]

-패킷스위칭은 미리 커넥션 없이 데이터를 패킷단위로 쪼개서 보내는것

-라우터가 똑같은 길만 안내하는것이 아님 트래픽을 고려

-많이 쪼갤 수록 어느 부분 작아지지만 헤더때문에 나중에는 많아짐

-라우터는 각각의 라우팅 테이블을 가지고 있다. 헤더를 보고 목적지를 판단할 수 있도록 설계되었다. 라우팅 테이블은인접한 경유지와 목적지 코스트 3가지 요소로 이루어져 있다.

-라우팅 알고리즘에 따라 라우터들이 스스로 계산한간다.

-link state routing:  각각의 라우터는 인접한 경로로 가는 길과 그 비용을 알 수 있다. 이를 이용해서 최적의 경로를 탐색하는 알고리즘 이다. 브로드캐스트 하여 모든 노드가 정보를 교환함

-distance vector routing:

-밸만포드 알고리즘: 자기 이웃하고 만 정보를 주고받음 각 노드가 가지고 있는 라우팅 테이블을 활용한다. 자기 라우팅테이블과 이웃 라우팅 테이블을 합친다.

-Hierarchical 라우터:세상에 라우터가 너무 많기에 라우팅 테이블도 너무 많고 위의 알고리즘으로는 계산하기 힘들다. 대표라우터를 선정하고 대표 라우터 끼리만 라우팅 테이블을 생성하고 내부에서는 내부적으로 라우팅 테이블을 생성하자.

[6-2강]

-IP Addresses: 5가지 클래스로 구분된다. class a,b,c,d,e로 클래스 구분+네트워크 ID(기관 갯수)+ Host ID(포항공대에서 사용할 수 있는 IP 수)

대부분은 클래스 B를 사용한다. Host ID 부분을 세부네트워크로 쪼개서 사용할 수 있다.(Subnet ID)

-subnet mask: prompt에서 ipconfig 명령어를 입력하면. IP정보를 확인할 수 있는데 subnet mask도 확인할 수 있다. subnetmask를 통해 Host ID를 어떻게 할당하는지 알 수 있다. 할당 방법은 기관 자율이다.

-CIDR: 기기 수 증가로 IP가 부족해지기 시작. 클래스 B와 클래스 C 사이에 너무 Host ID 차이가 크다. 갭을 매꿀 수 있는 여러 세분화 IP Address 제공

-DHCP: 임시 IP Address 나중에 주소를 반환한다.

-NAT: IP 하나로 여러 기기가 사용한다. 자체 내부 주소를 라우터를 통해 외부 공적 주소로 변환한다.

[7장]

transport layer

TCP: 정보의 정확한 전달이 중요할 때, 예를들어 은행 송금 정보처럼 정확해야한다. TCP헤더는 20 바이트로 이루어져있으며 UDP에 비해 많은 용량을 차지한다. TCP를 구성하는 세 개의 뼈대는 아래와 같다.

1. congestion control: 교통을 통제하는 교통경찰 역할, 라우터에 버퍼가 넘치면(너무 많은 트래픽으로 인해) congestion이 발생한다.

2. End-to-end Flow Control

3. Error Control: segment를 보내고 ack를 받는다. 무한대기를 방지 하기 위해 timeout 도입 ack 일정시간 동안오지않으면 정보 손실로 판단하고 재전송함. ack 몇개 못받아도 가장 나중 순서의 ack를 받으면 앞의 데이터도 제대로 전송된것이므로 재전송 안함

UDP: 정보 손실 크게 개의치 않음. 운동경기 실시간 전송시 재전송은 비효율적 다소 노이즈가 끼거나 전송 효율이 떨어지는 순간에도 그대로 가는 것이 좋다. 가장 기본적인 것으로만 이루어져 있으며 효율을 중시하여 전송률을 높이려 노력하지만 실패해도 어쩔 수 없다는 접근방법

-window size: 한번에 처리할 수 있는 정보의 양 예를들어 내가 하루에 책을 100페이지 읽을 수 있다면 그것이window size이다. 컴퓨터가 한번에 처리할 수 있는 정보 량이 window size이다. window size가 너무 크면 과부하 위험이 생기고 반대로 window size가 너무 작으면 네트워크 전송 속도가 떨어진다.

[8강]

Application protocol layer

-DNS(Domain Name System): IP Address를 헤더에 써줘야 데이터를 보낼 수 있는데 어떻게 우리는 네이버의 IP주소를 몰라도. www.naver.com을 입력하면 네이버에 접속할 수 있는가? IP adress와 텍스트 주소를 맵핑(딕셔너리처럼)연결해놓은 서버가 DNS 서버이다. DNS는 분산되어 있다.

1. Top Domain(gov, com, edu…)

2. 나라로 구분하는 Domain(us…)

-Web

-Http(Hyper Text Transfer Protocol): Http는 TCP를 사용한다.

proxy server를 두어 한국과 미국이 통신할때 (ex) 미식축구 중계 )

미국까지 트래픽을 발생하지 않고 proxy server에서 데이터를 수신받는 방법

-MQTT

-CoAP

# data[].attributes.body
<6강 Network Layer & IP>
1) Network Layer

라우터가 받는/보내는 호스트의 IP 주소를 보고 안전하게 보냄

Forwarding: 라우터의 입력 포트에서 출력포트로 패킷을 이동

Routing: 출발지에서 목적지까지의 경로를 결정

네트워크 분류

1. Circuit-Switched Networks

Circuit Establishment(미리 circuit을 엶) → Data Transfer → Circuit Termination(circuit을 끊음)

오래동안 통화를 해도 delay X (∵circuit을 예약)

채널의 낭비가 발생함

2. Packet-Switched Networks

Message Switching(⊂packet swithcing): 메시지가 길면 다 보낸 후 다음 메시지를 전송해서 시간이 오래 걸리고 메시지가 크면 버퍼 사이즈도 커야 함

도착지까지의 경로[순서]가 바뀔 수 O

Pipelining: 패킷(메시지)를 잘라서 전송 → 시간을 단축

Routing 알고리즘 → Routing Table

1. Link State Routing (Dijkstra’s 알고리즘 사용): 각 경로의 cost를 알고 있고 최적의 routing path를 찾는 과정

2. Distance Vector Routing (Bellman-Ford 알고리즘 사용): 이웃한 노드로부터 라우팅 테이블을 받아 계산 가능

3. Hierarchical Routing: 대표 라우팅 테이블, 내부 라우팅 테이블

2) IP (Internet Protocol)

5가지 클래스로 구분

Net ID = 조직 ID, Host ID = 나머지가 컴퓨터에 할당
Host ID가 2^8=256는 너무 짧음(class C) → class B를 많이 사용

Host ID(16bit) = Subnet ID(8bit) + Host ID(8bit) ⇒ Subnet Mask(몇 bit로 쪼갰는지 알 수 있어야 함)

고갈 문제

IPv6 사용

CIDR(Classless Inter-Domain Routing): 2^8은 너무 짧고 2^16은 너무 긺 → 그 사이의 길이를 사용하고 길이를 알려주는 형식

IP주소 할당 방식

수동 할당

DHCP(Dynamic Host Configuration Protocol): 임시 IP 주소를 할당받아 사용

NAT(Network Address Translation): IP주소 하나로 여러 호스트를 연결 가능

왼=공적으로 할당받은 IP, 오=사적으로 할당된 IP(내부에서만 쓰임) 오→왼 전송 시 목적지 주소는 그대로, 보내는 주소를 라우터가 알아서 공적 IP주소로 바꿔줌 (왼→오 전송 시에도 동일)

IPv4 헤더 구성 = 헤더(20bit)+실제데이터

네트워크 망마다 packet사이즈가 다름 → ID, Offset

Titme to Live: 도착지 호스트까지 몇 번에 걸쳐 갔는지 라우터가 측정

Source Address=Sender 주소

<7강 Transport Layer>
1) UDP(User Datagram Protocol)

속도가 느려도 상관 X

정확해야 함 (reliable)

전송 중 사라지면 재전송

전송이 안 돼도 상관 X (best effort)

no frills, bare bones

sender, receiver 간 연락 X

패킷이 사라져도 상관 X

간단함

2) TCP(Transmission Control Protocol)

1. End-to-End Flow Control: Sender가 데이터를 보내면 Receiver는 잘 받았단 의미로 ack를 보냄 → Sender-Receiver 간 속도 조절 가능

1. Stop-and-Wait Flow Control: 하나를 보낸 후 바로 보내지 않고 ack를 기다림 → 비효율

2. Sliding Window Flow Control: 여러 개를 보내고 RTT(Round Timing)에 맞춰서 pipelining을 몇 개씩 해야하는지 조절

3. window size가 오른쪽으로 움직이는 sliding 방식

2. Error Control

1. Stop-and-Wait ARQ

데이터 패킷을 잃어버리면 영원히 기다리게 되는 문제 → Time Out

Ack 패킷이 사라지는 문제 → Time Out을 보내고 패킷도 재전송하게 되는데 중복되므로 제거

2. Continuous ARQ

1. Go-Back-N: sliding window를 썼을 때

패킷 전송에 오류: 에러가 나면 그 지점으로 돌아가서 다시 순서대로 다 보내줌

ack 전송에 오류 → 패킷이 잘 전송된 줄 알고 timeout을 하지않고 다음 패킷을 계속해서 보냄 (ACK가 cumulative): 1을 보낸 후 timeout → timeout동안 ack 1이 도착하지 않으면 다시 전송

3. Congestion Control: 패킷이 많아지면 트래픽이 많아져 버퍼가 넘치는 문제 발생

1. TCP Taeho: timeout에 의해 현재 값/2를 ssthresh로 두고 1로 떨어짐 → timeout에 의해 패킷이 오지 않는 것을 detection(Slow Start)

2. Fast Retransmit Mechanism: timeout 되기 전에 뒤에 ack는 잘 받고 오지 않은 ack에 대해 알려줌(=심각X) → 1로 떨어지지 않고 timeout에 의해 현재값/2로 떨어짐

<8강 Application Layer>

1. DNS (Domain Name System)

IP주소를 다 외우지 못함 → URL(Uniform Resource Locator)을 32bit짜리 주소로 변환

분산·계층적 (∵ 한 곳에서 다 관리하면 전송 X, 트래픽이 몰림)

여러 개의 root, gTLD(generic; com, edu, net, …), ccTLD(country; kr, us, cn, …)가 존재

Local Name Server(postech) / Authoritative Name Server(IP주소와 host이름을 변화시켜줌)

IP주소를 모를 때

Recursive Resolution: 순차적으로 계속 물어봄 ?

Iterative Resolution: 일일이 물어봄

DNS cache: 어떤 사이트에 대한 IP주소를 알게 되면 기억함 (ipconfig)

2. Web / HTTP(Hyper Text Transfer Protocol)

URL = host name + path name

HTTP: TCP 사용

cache (proxy 서버) 사용 → 트래픽 ↓ (프록시 서버와 웹 서버 내용은 같아야 함)

3. IoT Protocol

1. MQTT: 가입자들(subscribe)에 같은 내용을 보여줌

2. CoAP: 센서들끼리는 CoAP으로 통신, 서버가 HTTPs 형식으로 호스트 단말에 전송

# data[].attributes.body
<6강 1부>

network layer : 센더에서 보낸 데이터를 리시브 측에 제대로 전달하게 하는

forwarding : 라우터가 패킷의 헤더를 보고 패킷을 전달하는 행위

routing : 어느 곳으로 보내야할지 주소를 보고 판단하는 행위

Network

circuit-switched networks : 유선전화망, 1세대,2세대, 회선을 미리 예약, 예약이 완성되면 통화 가능, 통화가 끝나면 예약했던 선을 끊음(circuit establishment -> data transfer -> circuit termination), 오래 시간 통화할 때 좋음, 채널의 낭비가 존재할 수도 있음

message-switching : 데이터를 작은 단위인 메시지로 분할하고, 각각의 메시지는 노드 간의 경로를 따라 전달되며, 중간 노드는 메시지를 받은 후에 다음 노드로 전달, 그러나 메시지를 분할하고 다수의 노드를 거쳐 전달하는 과정에서 지연이 발생할 수 있음

packet-switched networks : 최근에 사용하는, 3세대부터, packet을 보낼 때 미리 예약하는 것이 아니라 데이터를 패킷 단위로 쪼개서 보냄, message-switching보다 시간을 단축할 수 있음

Routing Algorithms : 라우팅 테이블을 확인하여 최적의 경로를 추천해줌(cost가 적은 경로가 최적의 경로)

link state routing : 각 노드는 전체 네트워크 토폴로지를 알고 있음,

distance vector routing : 자신의 이웃하고만 주고 받음, 각자가 가지고 있는 라우팅 테이블을 가지고 계산,

hierarchical routing : 대표 라우터를 선정하고, 그 라우터끼리 라우팅 테이블을 만들고 대표 라우터 안엣 또 라우터끼리 라우팅테이블을 만든다.

<6강 2부>

IP(internet protocol)

ip addresses : 32bit의 ip address 사용중, 크게 5가지 클래스로 구분가능(0,1 0, 1 1 0 등), net id는 기관이 통으로 구매한 것, host id는 컴퓨터에 할당한, class b를 사람들이 많이 구매

32비트를 8비트씩 쪼개서 10진수로 쓰는 것을 dotted decimal notation

subnet addressing : 기관에서 사서 세부적으로 쪼갤 수 있음

subnet mask : 네트워크 id와 호스트 id로 구분하는데 사용되는 숫자 조합

ip address의 부족을 어떻게 해결할 것인가?

- CIDR(classes inter-domain routing)

ip address 어떻게 할당할 것인가?

DHCP : 임시 id address

-> NAT(network address translation) : 사설 ip와 공적 ip 간의 통신을 가능하게 함

sender를 공적 ip로 변경(destination은 고정) -> reply(sender와 resiver가 서로 변환) ->

NAT translation table을 보고 다시 원래 LAN address로 바꾸기 -> 실제로 보낼 때와

정확히 sender와 receiver가 반대로 변경되어 있음

IP는 다양한 프로토콜로 이루어져 있음

IP는 실제 통신에서 사용

ICMP 네트워크 컨트롤, 제어용이지 전송용은 아님

IGMP 멀티캐스팅 프로토콜

IP는 20byte의 헤더가 존재

각 네트워크마다 패킷 사이즈가 다름

TTL(time to live)

sender가 receiver까지 보낼 때 걸리는 시간이었지만 라우터를 거칠 때마다 숫자가 줄어드는, 몇 번의 훅을 거쳐서 destination까지 갔는가를 측정하는 것으로 쓰임

<7강>

transport layer : 잘 도착했는지?

TCP : 속도보다 정확도가 더 중요함, 에러가 있으면 안됨, 잘못 전달된 패킷은 버려야함

congestion control : 센더가 데이터를 보냈는데 제때 전송이 안되었을 때 어떤 문제가 있나?

end-to-end flow control 보내는 속도 받는 속도 조절하기 위해

error control : 노이즈로 인해 에러가 떴을 때 해결하는

UDP : 간단한 프로토콜, 전송이 제대로 안 되도 큰 문제가 없음

best effort service

connetionless : 바로 보내버리는

often used for : 패킷이 조금 유실되도 괜찮음

TCP flow control

보내는 속도 조절할 필요가 있음

sender에서 데이터를 보내면 receiver 측에서는 잘 받았다고 ACK 패킷 보냄

sender가 receiver를 넘치지 않게 만들어주는 방식

stop-and-wait flow control : 하나씩 보내고 잘 받았다고 ACK 신호를 보냄, 효율적이지 않음

sliding window flow control : 여러 패킷을 보내고 ack 받을 때마다 초록색 늘어나면 window size가 오른쪽으로 움직임

window size = minimum of

error control : 에러가 일어났는지에 대응하는 방법

ARQ

stop-and-wait ARQ

1) error-free operation : 하나 받고 ack를 보내는 방식

2) lost data packet : 패킷을 보내고 ack를 받고 다시 패킷을 보냈는데 receiver는 받지 못함 -> sender는 패킷을 보냈기 때문에 계속 ack 신호를 기다림 -> 이 문제를 해결하기 위해 timeout 사용

일정시간안에 ack를 받지 못하면 바로 retransmission , timeout은 충분히 ack가 올 시간보다 커야됨

3) lost ack timeout : 패킷이 사라진게 아니라 ack가 사라진 경우도 똑같이 ack를 다시 보냄

go-back-n ARQ

1) error-free operation : 3개 보내고

2) corrupted data packet : 3개 패킷이 사라짐, receiver는 와야되는 3번이 안오면 ack4를 하지 않고 3번 이후로 패킷을 다 버림, 에러가 나면 다시 그 번호로 돌아가서 sender가 다시 보냄

3) corrupted ACKs : ack가 사라지는 경우, 0번 ack는 가고 1,2 ack가 사라지고 3ack가 보내진다면 sender는 아무 문제 없다고 파악 -> 3번을 받았다는 얘기는 3번만이 아니라 앞에꺼까지 다 받았다는 의미라서 2개가 사라져도 timeout안에 3번만 받아도 1,2 번도 잘 받았다고 생각

TCP Congestion Control : 버퍼가 넘치면 패킷이 손실이 됨 -> 푸는 방식

1) congestion control by timeout

처음에 윈도우 사이즈 1로 시작 ack 신호가 잘 들어오면 윈도우 사이즈가 2^n으로 증가, threshold를 넘어가게 되면 linear하게 증가, timeout에 의해서 패킷이 오지않았다면 현재값의 반을 threshold 값으로 주고 다시 1부터 시작(slow start)

2) congestion control by 3 duplicate acts

- timeout이 되기 전에 3번은 안 왔는데 뒤에 애들은 받았으면 나 3번 기다리고 있엉 뒤에 있는 애들 잘 들어오는구낭을 알게됨-> threshold를 반으로 줄이고, linear식으로 증가

<8강>

Application layer protocal : 어플리케이션을 인터넷을 통해 쓸 수 있도록 돕는 프로토콜

ex) web application -> HTML, web browsers, web servers -> HTTP

user agent : 유저한테는 보이는

ex) web: web browser, e-mail : mail reader

Application layer protocols(DNS, wep and HTTP, electronic mail, telnet, ftp, etc)

- DNS(domain name system) : 통신이 가능하게 만드는 것 중 가장 중요한 시스템, ip address(36 bit)로 변환해서 알려주는, 호스트 네임에 메핑을 시켜주는

한 곳에서 다 관리하지 않고 분산해서 관리

IoT and Internet Protocols

- MQTT : 사전에 값을 받아서 그 값을 받는 것을 원하는 사람에게 보내줌

- CoAP : HTTP의 슬림 버전

# data[].attributes.body
6장
Network layer : 송신자의 데이터를 잘 수신할 수 있게끔 함 (IP를 통해 수신자를 특정) / 헤더를 통해 어느 라우터로 보낼지 특정

Circuit switching

옛날방식의 유선통화 방식

Circuit을 예약하고 통화하고 끊는 방식

장점 : 한번 회로가 만들어지면 딜레이가 없고 오랜시간 통화하는데 유용

단점 : 안 쓰는 Circuit이 많으므로 채널의 낭비가 존재

Message Switching

하나의 데이터를 여러 개로 나눠서 송신

여러 개 중 하나의 데이터가 밀리더라도 다른 라우터를 찾아서 보냄 (데이터 수신 시 순서가 달라도 리시버쪽에서 재정비 후 받음)

메시지의 사이즈가 클 경우 이를 패킷으로 나눠서 순차적으로 보냄 => 라우터가 보냄과 동시에 새로운 패킷을 받음 => 통신속도 향상(헤더가 너무 많으면 오버헤드 가능성 있음)

Routing algorithm

헤더를 보고 어느 라우터로 보낼지 라우터 스스로 정하는 알고리즘

Link state routing

각각의 노드가 서로의 cost를 공유해서 최적의 라우팅을 경로를 미리 만듬

단점 : 원하는 경로말고 다른 경로도 탐색함

Distance vector routing

출발 노드의 이웃한 노드들에서 다른 노드까지의 거리표를 통해 최적의 경로 계산

6장

IP 주소는 총 5개의 클래스(Class A~E)로 구분됨

IP의 구조 : 10(클래스를 나타냄) netID(특정 기관, 장소의 ID) HostID(장소 내의 장치의 ID)

클래스에 따라서 netID와 HostID의 비율이 달라짐

Subnet Addressing : HostID를 더 세부로 나눠서 할당 (효율적인 관리를 위해)

Subnet mask : 기관이 subnet을 어떻게 나눴는지 보기 위한 IP숫자 (ex) 255.255.255.0)

IP의 문제

너무 많은 사람들이 인터넷을 활용해서 IP주소가 부족해짐 => 64비트 새로운 IP주소를 만듬

CIDR : classB와 classC의 중간부분을 활용하고 싶을 때 /를 통해서 host의 비트 수를 알려줌

DHCP : 임시 IP주소를 할당받는 방식

NAT : 하나의 공공 IP주소로 여러 기기와 연결 / 여러 기기들은 공공IP외의 로컬IP를 부여 받아서 구분 (송수신 시 송신할 때 주소를 어느 IP에서 보냈는지 기록해서 구분)

7장

Transport layer protocol

보낸 데이터가 문제없이 보내졌는지 확인하는 레이어 프로토콜

UDP : 널널한 프로토콜 (요즘 이걸 많이 씀) => 영상의 화질이 낮아져도 안끊기는 영상

헤더 사이즈가 8byte

TCP : 깐깐한 프로토콜 => 영상의 화질이 고정된 영상

Flow control : 송신의 속도를 조절

Stop and wait flow control : 하나 보내고 받은거 확인하고 다시 보내기

만약 리시버가 데이터 손실로 받지 못하면 timeout을 통해 다시 보냄

Sliding-window flow control : window 사이즈만큼 계속 보내는 방식

이 경우도 하나의 패킷이 안오면 timeout을 통해 해결

Congestion control : 라우터에 많은 데이터가 왔을 때 이를 control하는 방법들

# data[].attributes.body
[Network Layer]

패킷 헤더에 주소를 넣어서 보냄

Sender에서 보낸 데이터를 receiver로 전달

[기능]

forwarding : 라우터로 들어온 패킷들을 다른 라우터로 전달

Routing : source로 부터 주소를 보고 목적지까지 가능 경로 결정

Communication network

circuit-switch

1세대,2세대

옛날 전화방식, 통화를 하고 싶은 곳에 회선을 미리 예약함 끝나면 예약했던 회선을 취소함

장점 : realtime으로 오랜 시간 통화시 좋음

단점: 채널 낭비

Message switching

packet switching

3세대 이상

어느 한쪽이 밀리면, 라우터가 다른 길로 안내

장점 : 메세지 스위칭 없음

단점 : 잘게 쪼개면 조각 만큼 헤더가 생성되어 오버헤드 발생 가능

라우팅 알고리즘

link state routing

모든 노드가 토폴로지를 공유

연결되어 있지 않으면 무한대로 기재

최적의 routing 경로를 찾는 과정

Transport layer: sender&t

receiver 사이에 데이터 전송이 이루어지며 앞에 있는 레토레이어에 IP가 주소를 가지고

패킷 단위로 보내서 destination에 도착시

(1) TCP : 정확성이 높을 때 사용, 실수란 있어서는 안된다.

잘 도착했는가, 잘 전달했는가 등 확인

까다로움, 잘못전달된 패킷 제거, 전송 중 사라지면 retransmission, 다양한 컨트

TCP Congestion Control : (트래픽 개수 줄이는 방식)

*End-to-end Flow control: ACt

샌더 와 리시버 사이의 보내고 받는 속도 조절

o 샌더가 리시버를 넘치지 않게 만드는 방

stop-and-wait : 보내고 스톱 연락올때

pipelining : 동시에 여러개 보내서 계속 보내는 것

slicing-window 방식 : 여러개를 보내 고 올때마다 한개씩 더 보내는 방식

Application Layer protocols define

Types of message exchange

기본적으로 메시지를 요청하거 나 응답하는 방식으로 동작

syntax of message types

메시지의 어느 필드가 어떻게 기술되어야 하는지, 각각의 필드는 어떻게 구분되는지 명시

semantics of the fields

각각의 필드에 담긴 정보들에 대한 의미

Rules for when and how proces

send & respond to messages(언제, 어떻게 프로세스들이 요청하고 응답 해야 하는지 명시)

Application layer protocols

DNS(Domain Name System)

사람이 이해할 수 있는 도메인 이름(예: "example.com")을 컴퓨터가 네트워크를 통해 통신하기 위해 사용하는 IP 주소로 변환하는 시스템입니다

Web and HTTP

Electronic Mail

Telnet

ftp

etc

]

# data[].attributes.body
[6강]
Network Layer
- 데이터를 리시버에 안전하게 보내는 역할을 함

- Forwarding: 라우터 인풋을 적절한 라우터 아웃풋으로 패킷을 이동시키는 것
- Routing: 주소를 확인하여 경로를 결정하는 것

[7강]
- UDP: 패킷로스를 무시
- TCP: 패킷로스를 용납하지 않음

[8강]
- DNS: 도메인 주소를 ip 주소로 변환
- Web & HTTP: TCP를 사용

# data[].attributes.body
네트워크 계층(Network layer)

여러 개의 노드를 거칠 때마다 경로를 찾아주는 역할을 하는 계층으로 다양한 길이의 데이터를 네트워크들을 통해 전달

전송 계층이 요구하는 서비스 품질(QoS)을 제공하기 위한 기능적, 절차적 수단을 제공

패킷이라고 불리는 데이터를 보낼 때마다 헤더에 주소를 써서 보냄.

sender가 보낸 packet(data)을 reciever측에 안전하게 전달하는 역할.

Network Layer의 역할

1. Forwarding : 라우터 입력에서 적절한 라우터 출력으로 패킷을 이동

2. Routing : 어느 곳으로 보내야 할지 주소를 보고 판단하는 행위

통신 네트워크(Communication networks) : 단말 사용자들끼리 통신을 가능케 할 목적으로 연결해 놓은 단말, 링크, 노드의 집합

1. Circuit-switched

하나의 회선을 할당받아 데이터를 주고받는 방식

속도와 성능이 일정

전화와 같은 실시간 통신에 사용

사용되는 회전 전체를 독점(dedicated)하기 때문에 다른 사람이 끼어들 수 없음.

2.  Packet-switched

데이터를 패킷(packet)이라는 단위로 쪼개서 전송

store and forward 방식

라우팅 알고리즘을 이용하여 경로를 설정

전송속도는 보장하지 않음.

Routing Algorithm(라우팅 알고리즘)

송신 측에서부터 수신 측 라우터의 네트워크를 통과하는 최적의 경로를 결정하는 알고리즘

중앙 집중형(global) 라우팅 알고리즘

네트워크 전체에 대한 완전한 정보를 가지고 출발지와 목적지 사이의 최소 비용 경로를 계산

모든 라우터가 연결 상태와 링크 비용을 알고 있음.

Link State 알고리즘이 여기에 속하며 주로 다익스트라 알고리즘을 사용

분산(decentralized) 라우팅 알고리즘

최소 비용 경로의 계산이 라우터들에 의해 반복적이고 분산된 방식으로 수행

어떤 라우터도 모든 링크 비용에 대한 완전한 정보를 갖고 있지 않지만, 각 라우터는 자신에게 연결된 인접 노드에 대한 링크 비용 정보를 알고 있음.

반복된 계산과 인접 노드와의 정보 교환을 통해 목적지까지의 최소 비용 경로를 계산

정적 라우팅 알고리즘

경로의 변경 속도가 느림.

사람이 직접 링크에 대한 비용을 수정해야 함.

규모가 큰 네트워크에서 사람이 일일이 수정하기 불가능

동적 라우팅 알고리즘

네트워크 트래픽 부하나 topology 변화에 따라 라우터가 자체적으로 경로 변경

IP(Internet Protocol)

인터넷에서 네트워크의 두 호스트(host) 간에 통신할 때 호스트 주소를 지정하고 전송 계층의(transport layer)의 정보를 패킷으로 분할/조립하며, 패킷을 IP 주소에 따라 목적지에 전송하는 통신 규약.

넓은 의미로는 전 세계적으로 사용이 가능한 인터넷망을 만들기 위해 망 간에 이루어지는 패킷 전송을 위한 통신 규약 집합체(Internet Protocol Suite)를 통칭

정보는 패킷(packet)이라고 하는 작은 단위로 나뉘어 전송

송신기에서 전송한 패킷이 수신기에 오류나 문제없이 정확하게 전달이 되었는지를 확인도, 보장도 하지 않음. (비신뢰성)

신뢰성이 있으며 정확한 순서를 보장하는 패킷 전송을 하려면 전송 제어 프로토콜(TCP: Transmission Control Protocol)과 같은 IP의 상위 프로토콜을 이용해야 함.

*IP Address : 하나의 IP는 네트워크 부분 + 호스트 부분으로 구성. 크게 다섯가지 클래스(A, B, C, D, E)로 구분됨. 주로 클래스 B를 사용

서브넷(subnet)

IP 주소에서 네트워크 영역을 부분적으로 나눈 부분 네트워크

서브넷팅(Subnetting)

IP 주소 낭비를 방지하기 위해 원본 네트워크를 여러개의 서브넷으로 분리하는 과정

서브넷 마스크(Subnet mask)

필요한 네트워크 주소만 호스트 IP로 할당 할 수 있게 만들어 네트워크 낭비를 방지

IP 주소 체계의 Network ID와 Host ID를 분리하는 역할

CIDR(Classless Inter-Domain Routing, 사이더)

클래스를 A, B, C, D, E로 나누는 방식의 문제점을 해결하기 위한 기법.

클래스 체계보다 더 유연하게 IP주소를 여러 네트워크 영역으로 나눌 수 있음.

계층적 구조이기 때문에 Routing에 있어서 부담 최소화

NAT(Network address translation, 네트워크 주소 변환)

IP 패킷의 TCP/UDP 포트 숫자와 소스 및 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고받는 기술

하나의 IP 주소를 사용하여 여러 대의 호스트가 인터넷에 접속할 수 있음.

Transport Layer(전송 계층)

다른 호스트들이 계속 네트워크에 머물도록 응용 프로세스 간의 논리적 통신을 제공

데이터 전송이 이루어질때 목적지에 잘 도착했는지, 중간에 에러가 발생했는지 등의 여부를 확인

TCP(Transmission Control Protocol)

신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜.

3-way handshaking이라는 과정을 통해 연결 후 통신 시작

흐름 제어와 혼잡 제어를 지원하며 데이터의 순서를 보장

UDP(User Datagram Protocol)

비연결형 프로토콜

정보를 주고받을 때 신호 절차를 거치치 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜.

혼잡 제어를 하지 않아 TCP보다 전송 속도가 빠르지만 데이터 전송과정 중 패킷 손실이 발생할 수 있음.

*3-way handshaking : TCP/IP 프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정

# data[].attributes.body
6강. Network layer & IP

6.1 Network layer

network layer service란?

sender가 보낸 packet(data)을 receiver측에 안전하게 전달하는 역할(network layer protocol IP의 역할이기도)

네트워크 레이어의 2가지 주요 기능

1. Forwarding : router input에서 적절한 router output까지 packet을 보내는 것

2. Routing : 어느 곳으로 보내야 할지 주소를 보고 판단하는 것

6.2 communication network

6.2.1 circuit switching

1~2G, 유선 전화 통신 방식

circuit establishment(서킷 만들고) → data transfer(통화) → circuit termination(서킷 끊기)

→ 약간의 오버헤드 발생 가능

장점 : real time으로 오랜 시간 통화 시 Good

단점 : 채널의 낭비

6.2.2 packet switching

message switching의 일종 ~ 시간은 더 단축됨

※ 단, packet 사이즈가 작아진다고 무조건 전송 시간이 짧아지는 것은 아님 → packet에 비해 header가 너무 많은 경우 (너무 잘게 쪼갠 경우) 오히려 전송 시간은 증가

메시지를 packet으로 불리는 작은 단위로 잘라서 전송

circuit switching과 달리 미리 회선을 예약할 필요 없음

문제 : out-of-sequence delivery(전송 시 어느 패킷 하나 밀리면 다른 경로를 찾아주어야 하므로 리시버에 도착하는 순서가 서로 다를 수 있음 → 다만 리시버 송신 시 순서를 재정비하므로 큰 문제 되지 않음)

6.3 Routing Algorithm

라우터는 라우팅 테이블을 만들어 목적지까지 어떻게 최적으로 전송할 것인지 관리하여야

distribute routing : 모든 노드가 각자 스스로 계산하는 알고리즘

6.3.1 Link State routing

Dijkstra’s Algorithm에 기반한 계산

각 노드는 이웃 노드로 가는 cost를 알고 있음 → 이를 서로 교환하여 topology와 cost 알게 됨

매 스텝에서 다른 노드로 향하는 최단 거리를 구하고 이를 이전 스텝의 값과 비교하여 최단 거리 계산

6.3.2 Distance vector routing

Bellman-Ford Algorithm에 기반한 계산

각 노드는 이웃 노드로 가는 cost를 알고 있음 → 이를 이웃 아닌 다른 노드와 교환하지 않음

시작 노드 → 이웃 노드의 이웃 노드까지 가는 최단 거리 = (시작 노드 → 이웃 노드 최단 거리) + (이웃 노드 → 이웃 노드의 이웃 노드로 향하는 최단 거리)로 계산하여 각 점에서 table 계산 가능

6.3.3 Hierarchical routing

세상에 너무 많은 라우터 존재 → 전부 고려하여 알고리즘 적용한 라우팅 테이블 구축 불가

region내 라우팅 테이블과 region간 라우팅 테이블 → 계층적 구조로 라우팅 이루어지도록

6.4 IP(Internet Protocol)

6.4.1 IP addresses

현재 사용되고 있는 것은 IPv4 : 4비트 =32바이트 주소 체계

5 class

1. class A : 0 + 7비트 Net ID + 24비트 Host ID

2. class B : 1 0 + 14비트 Net ID + 16비트 Host ID

3. class C : 1 1 0 + 21비트 Net ID + 8비트 Host ID

4. class D : 1 1 1 0 + Multicast Address

5. class E : 1 1 1 1 0 + Reserved for future use

→ Net ID : 보통 기관 및 조직에 판매하여 해당 조직 및 기관 구분 가능

→ Host ID : 동일 Net ID를 공유하는 기관 또는 조직 내 여러 대 컴퓨터에 할당하게 되는 IP 구간

→ 보통 class B가 가장 많이 선호됨(C는 할당 가능한 IP 수가 너무 적고 A는 판매 가능한 기관 및 조직 단위 Net ID가 너무 적음)

→ DDN(Dotted Decimal Notation) : 32비트 8비트씩 쪼개 십진수로 표현

Subnet addressing : Host ID 부분을 자유롭게(e.g. 8비트씩) 쪼개어 그 중 일부를 조직 및 기관 내 건물 또는 층을 구분하도록 하는 것

(예) 141.223.108.201 : 141.233은 포스텍, 108이 subnet id, 201은 컴퓨터마다 다르게 할당된 부분

문제점 : 처음 IP 고안할 당시에 비해 인터넷 사용량이 엄청나게 늘어났으므로 IP 주소 부족

→ 근본적 해결책 : IPv6로 전환하는 것 ~ 모든 장비 교체해야 하므로 오랜 시간 소요될 방법

→ CIDR : class B의 host id는 너무 길고 class C의 host id는 너무 짧다는 생각으로부터 그 중간을 고안

host가 ip를 할당받는 방법

1. manual configuration

2. DHCP : 일시적으로 ip 주소 할당받아 사용 후 반납

6.4.2 NAT(Network Address Translation)

현재 가장 많이 사용되고 있는 IP 부족 문제의 해법

IP : 공적 IP(할당, 인정받은) vs. 사적 IP(내부 기관, 로컬 네트워크에서 작동)로 구분

작동 원리

1. sender는 자신의 사적 ip와 목적지의 ip 주소를 라우터에 전달

2. NAT 라우터는 테이블을 조회하여 WAN side addr과 LAN side addr을 매칭 후 sender의 사적 ip를 공적 ip로 바꾸어줌

3. 목적지 ip 주소 통해 도착한 reply의 sender 주소는 원래 목적지 ip 주소였던 것이, 목적지 주소는 2에서 확인한 원래 sender 측의 공적 ip주소가 됨

4. NAT 라우터는 다시 테이블을 조회하여 이를 LAN side addr로 바꾸어 local 측에 전달

6.4.3 IP

IP datagram header format = 20 bytes header + data

TTL in header : 원래는 sender → receiver 시간이었으나 이렇게 쓰이지 않고 라우터 거칠 때마다 -1이 되는 식

7강. Transport layer

7.1 Internet Transport Protocols

1. UDP(User Datagram Protocol)

ack, retransmission 없음 → 약간의 정보 손실은 무관한 경우

예) 축구 경기 실시간 스트리밍 등

8바이트 헤더 = application 구분 + 오류 체크

2. TCP(Transmission Control Protocol)

reliable → 약간의 정보 손실도 불허하는 경우 → UDP에 비해 까다로운 프로토콜

예) 은행 송금 등

20바이트 헤더

수용 가능한 메모리 정보, 여부 정보 등을 포함한 ack을 receiver가 sender에게 송신함으로써 sender는 receiver의 버퍼가 넘치지 않도록 패킷 전송을 관리함

Error control : AQR(Automatic Repeat reQuest)

리시버는 패킷을 전달받은 경우 ack을 송신하며, 센더는 ack을 기다리고 수신받지 못한 경우 timeout

1. Stop-and-Wait flow control

패킷 하나 보냄 - ack 대기 - ack 수신 확인 - 다시 패킷 하나 보냄 … 반복

패킷을 하나씩 보낼 때마다 발생하는 ack 대기 시간 너무 김 → 비효율적

오류 관리 : Stop-and-Wait ARQ

→ 패킷 하나를 보낼 때마다 ack을 대기하므로 ack 수신되지 않을 경우 무기한 대기 가능

→ timeout 도입 : ack 수신되지 않았을 경우 정해진 timer 동작하여 시간이 다 되면 패킷 재전송

2. Sliding window flow control

sender는 window size 만큼의 패킷을 전송 후 ack 수신할 때마다 window를 sliding 하여 다음 패킷을 전송

window size = min(receiver’s advertised window, congestion window)

오류 관리 : Go-Back_N ARQ

Corrupted data packet

→ 0~5까지의 패킷 우선 전송하면 순차적으로 0, 1, 2 패킷에 대한 ack가 도착

→ 3 패킷부터 전송 실패 일어났을 경우, 3 패킷에 대한 ack가 수신되지 않는다면 timeout 이후 3 이상의 패킷 전송 이력을 무시하고 다시 3부터 패킷 재전송 시도

Corrupted acks

1. 0~8까지의 패킷 우선 전송하였고 모두 정상적으로 전송되었으나 0, 3에 대한 ack만 도착하고 1, 2 패킷에 대한 ack이 리시버→센더 과정에서 소실

2. → 이 경우 3에 대한 ack을 받았으므로 1, 2도 잘 전송되었을 것이라 믿고 재전송 하지 않음(문제 없다고 생각) = cumulative ack

3. 0~4까지 패킷 우선 전송하고 ack은 0에 대해서만 도착

4. → 0 이후의 ack이 하나도 수신되지 않았으므로 1 패킷부터의 전송 이력 무시하고 1 패킷부터 재전송(1 패킷에 대한 timeout 발생)

TCP Congestion control

트래픽 몰리면 혼잡 발생 - 안정적 유선 네트워크 사용을 상정하고 고안된 면이 있어 에러가 그냥 발생하기보다 트래픽이 몰려 라우터가 넘치며 발생한다고 보았으므로 congestion control은 트래픽을 줄이는 방향으로 고안됨

1. Slow start

timeout에 의해 ack이 오지 않는 것을 detection

1부터 sshthreshold까지 2^n으로 윈도우사이즈 증가시킴(ack 잘 수신된다면) → threshold 이후부터는 linear하게 증가 → timeout으로 ack 수신되지 않았음을 알게 되면 현재 윈도우사이즈의 1/2를 새로운 threshold로 하고 윈도우사이즈는 1로 초기화하여 다시 진행

2. Fast Retransmit Mechanism

dupaks = 패킷 0~2 잘 오고 3이 안 오면 timeout 되기 전 3을 기다린다는 ack을 계속 보내는 것

dupak이 발생하면 심각하게 congestion된 것은 아니라고 보고 현재 수준의 1/2로 윈도우사이즈 조정

8강. Application layer

application : 웹브라우저, 서버 등

application layer protocol : application을 인터넷에 사용할 수 있게 해주는 프로토콜(HTTP 등)

8.1 DNS(Domain Name Server)

기억하기 어려운 IP 주소를 host name(www.naver.com 등)과 매칭하여 통신 가능하도록 해주는 것

DNS 분산처리 - 안정적 운용 및 트래픽 몰림 방지 등의 이유로

Root domain - Top level domain - Second level domain 세 계층으로 구성

gTLD(generic TLD) : 엄청나게 증가

8.1.1 Name servers

1. local name server : POSTECH 같은 부분

2. Authoritative name server : 해당 호스트에 대한 정보, 권한을 가진 부분

Recursive resolution : resolver는 요청받은 정보가 서버에 있을 것으로 예상하지만, 그렇지 않을 경우 상위 서버에 정보를 요청 → root를 거쳐 요청받은 정보를 찾으면 다시 동일한 경로로 root를 거쳐 돌아옴

문제 : root 부하가 너무 큼

Iterative resolution : root 너머의 서버에 대하여 root를 거치지 않고 직접 묻고 답함(쿼리)

일반적으로 두 방식을 혼합한 형태가 가장 많이 사용됨

8.1.2 DNS cache

이미 조회한 사이트의 IP 주소는 다시 사용하게 될 수 있으므로 바로 삭제하지 않고 잠시 저장

8.2 Web and HTTP

HTTP

TCP 사용

웹 서버에 HTTP 요청 시 서버는 응답으로 해당 텍스트 및 이미지 정보 등을 송신하고, 이를 컴파일하면 일반적으로 확인하는 웹 모습으로 볼 수 있음

Web cache(proxy server)

서로 다른 국가에 존재하는 먼 거리의 클라이언트-서버 간 정보를 자주 요청하는 것은 (원거리로 인해) 많은 비용이 들고 서버에도 부하가 발생하게 됨

따라서 Web server와 동일한 정보를 가진 Caching Proxy server를 사이에 구축

→ 두 서버의 내용을 동일하게 해주는 것이 중요

8.3 IoT and Internet protocol

MQTT(Message Queue Telemetry Transport)

센서에서 값을 전송할 때마다 broker가 미리 구독한 사람들에게 정보를 전달

CoAP(Constrained Application Protocol)

CoAP 서버는 HTTP와 CoAP을 모두 알아야

CoAP을 안다면 센서와 직접 연결도 가능

→ 만능 게이트웨이 = MQTT + CoAP 기능 모두 탑재

# data[].attributes.body
[6강]

[Network Layer]

패킷 헤더에 주소를 넣어서 보냄

Sender에서 보낸 데이터를 receiver로 전달

[기능]

forwarding : 라우터로 들어온 패킷들을 다른 라우터로 전달

Routing : source로 부터 주소를 보고 목적지까지 가능 경로 결정

Communication network

circuit-switch

1세대,2세대

옛날 전화방식, 통화를 하고 싶은 곳에 회선을 미리 예약함 끝나면 예약했던 회선을 취소함

장점 : realtime으로 오랜 시간 통화시 좋음

단점: 채널 낭비

Message switching

packet switching

3세대 이상

어느 한쪽이 밀리면, 라우터가 다른 길로 안내

장점 : 메세지 스위칭 없음

단점 : 잘게 쪼개면 조각 만큼 헤더가 생성되어 오버헤드 발생 가능

라우팅 알고리즘

link state routing

모든 노드가 토폴로지를 공유

연결되어 있지 않으면 무한대로 기재

최적의 routing 경로를 찾는 과정

[7강]

Transport layer: sender&t

receiver 사이에 데이터 전송이 이루어지며 앞에 있는 레토레이어에 IP가 주소를 가지고

패킷 단위로 보내서 destination에 도착시

(1) TCP : 정확성이 높을 때 사용, 실수란 있어서는 안된다.

잘 도착했는가, 잘 전달했는가 등 확인

까다로움, 잘못전달된 패킷 제거, 전송 중 사라지면 retransmission, 다양한 컨트

TCP Congestion Control : (트래픽 개수 줄이는 방식)

*End-to-end Flow control: ACt

샌더 와 리시버 사이의 보내고 받는 속도 조절

o 샌더가 리시버를 넘치지 않게 만드는 방

stop-and-wait : 보내고 스톱 연락올때

pipelining : 동시에 여러개 보내서 계속 보내는 것

slicing-window 방식 : 여러개를 보내 고 올때마다 한개씩 더 보내는 방식

[8강]

Application Layer protocols define

Types of message exchange

기본적으로 메시지를 요청하거 나 응답하는 방식으로 동작

syntax of message types

메시지의 어느 필드가 어떻게 기술되어야 하는지, 각각의 필드는 어떻게 구분되는지 명시

semantics of the fields

각각의 필드에 담긴 정보들에 대한 의미

Rules for when and how proces

send & respond to messages(언제, 어떻게 프로세스들이 요청하고 응답 해야 하는지 명시)

Application layer protocols

DNS(Domain Name System)

사람이 이해할 수 있는 도메인 이름(예: "example.com")을 컴퓨터가 네트워크를 통해 통신하기 위해 사용하는 IP 주소로 변환하는 시스템입니다

Web and HTTP

Electronic Mail

Telnet

ftp

etc

# data[].attributes.body
Chapter 6
1. Network Layer & IP → 네트워크 계층은 source에서부터 목적지까지 패킷을 전달하는 데 필요한 여러 가지 중요한 서비스를 제공

2. 회로 전환(Circuit Switching) → 송신지(S)와 수신지(D) 사이에 전용 경로가 존재하는 통신 방식
3. 메시지 전환(Message Switching)

4. 패킷 전환(Packet Switching)
데이터를 작은 블록 또는 패킷으로 분할하여 전송하는 방식

5. 라우팅 알고리즘(Routing Algorithms)
네트워크에서 패킷을 전달하기 위한 최적 경로를 결정하는 데 사용되는 알고리즘

6. IP(Internet Protocol)
인터넷에서 데이터 패킷을 주고받기 위한 프로토콜

7. CIDR(Classless Inter-Domain Routing)
기존의 클래스 기반 주소 체계에서는 IP 주소를 A, B, C 클래스로 구분하여 네트워크 주소와 호스트 주소를 고정 그러나 CIDR은 이러한 고정된 구조를 벗어나고, 주소 할당의 유연성을 제공

8. DHCP(Dynamic Host Configuration Protocol)

9. NAT(Network Address Translation)

10. Stop-and-Wait Flow Control

11. 오류 제어(Error Control)

Chapter7
1. TCP 혼잡 감지(Congestion Control)

2. 응용 계층(Application Layer)

3. DNS 캐싱 (DNS Caching)

4. 웹 캐싱(Web Caching)

5. MQTT (Message Queuing Telemetry Transport)

# data[].attributes.body
<6강>

Network Layer & IP

- Network Layer의 역할 : sender가 보낸 Data를 receiver측에 안전하게 전달. 패킷이라고 불리는 데이터를 보낼때마다 헤더에 주소를 써서 보냄.

- 기능

* Forwarding : 주소를 받아서 전달하는 행위

* Routing : 어느곳으로 보내야될지 주소를 보고 판단하는 행위

Communication networks

(1) Circuit-switched : 옛날 전화 방식. 데이터를 오랜시간 안전하게 보낼 수 있는 장점이 있지만, 네트워크를 효율적으로 사용할 수 없다.

(2) Packet-switched : 데이터를 패킷 단위로 쪼개서 전송하는 방식. 요청에 따라 자원을 할당하고 경로를 설정하기 때문에 효율적으로 자원을 쓸 수 있다. 하지만 전송속도는 보장하지 않는다.

Routing Algorithms

송신자로부터 수신자까지 데이터를 전송할때 어떤 라우터들을 통과해서 가야할지 경로를 선택하는 알고리즘.

1. Link State routing

- 모든 노드가 모든 링크의 비용을 알고 있어서 다익스트라 알고리즘을 이용해 최적의 경로를 계산할 수 있다.

2. Distance vector routing

- 각 노드는 자신에게 연결된 이웃 링크의 비용만 알고 있어서 벨만-포드 알고리즘을 이용해 최적의 경로를 계산할 수 있다.

<6강 - 2>

IP(Internet Protocol)

- 라우팅 알고리즘을 실제로 구현하는 프로토콜

* IP Address : host ID부분과 net ID로 나뉨. 크게 다섯가지 클래스(A, B, C, D, E)로 구분됨. 주로 클래스 B를 사용한다.

Subnet mask : IP 주소를 나눈 작은 네트워크 조각.

CIDR : 클래스를 A,B,C,D,E로 나누는 방식의 문제점을 해결하기 위한 기법. 클래스 체계보다 더 유연하게 IP주소를 여러 네트워크 영역으로 나눌 수 있다.

NAT : 목적지의 IP 주소 등을 재기록하면서 라우터를 통해 네트워크 트래픽을 주고 받는 기술. 하나의 IP 주소를 사용하여 여러 대의 호스트가 인터넷에 접속할 수 있다.

<7강>

Transport Layer

- 데이터 전송이 이루어질때 목적지에 잘 도착했는지, 중간에 에러가 발생했는지 등의 여부를 확인해주는 layer.

* TCP : 신뢰성 있는 데이터 전송을 지원하는 연결 지향형 프로토콜. 3-way handshaking이라는 과정을 통해 연결 후 통신을 시작하며, 흐름 제어와 혼잡 제어를 지원하며 데이터의 순서를 보장한다.

* UDP : 비연결형 프로토콜. 정보를 주고받을 때 신호 절차를 거치치 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜. 혼잡 제어를 하지 않아 TCP보다 전송 속도가 빠르지만 데이터 전송과정 중 패킷 손실이 발생할 수 있다.

Stop and wait flow control : 프레임을 하나 보내고 ACK가 올때까지 기다리는 방법.

Sliding window flow control : Stop and wait 방식을 보완하기 위해 나온 방식. 여러 프레임을 전송 후 ACK 신호를 기다리고 받는 방식.

Error control : 전송된 데이터의 오류를 검출 및 정정하는 기법.

<8강>

Application layer

- 응용 계층. IP 컴퓨터 네트워크를 통하는 프로세스 간 통신 접속을 위해 설계되어 통신 프로토콜과 방식을 위해 보유된 추상 계층.

DNS(Domain Name System) : 할당된 도메인 영역에 대한 정보를 가지고 있는 서버. 도메인을 IP주소로 변환하는 역할.

MQTT : 대규모 트래픽 전송을 위해 만들어진 프로토콜. 많은 통신 제약들을 해결한다.

CoAP : 저전력, 고손실 네트워크 및 소용량, 소형 노드에 사용될 수 있는 웹 전송 트로토콜.

# data[].attributes.body
(수정이 안돼서 다시 올립니다.)

< 6강_1 > Network Layer & IP

- Forwarding : sender가 보낸 데이터를 receiver가 제대로 받을 수 있게 함 (전달)

- Routing : 어느 곳으로 보내야 할 지 주소를 보고 판단하는 행위 (판단)

- Circuit Switching : 회선을 미리 예약

- 장점 : delay가 없음

- 단점 : 채널의 낭비

- Message Switching : 긴 message를 잘게 쪼개서 보내기

- Packet Switching ( Message Switching의 일부 ) : packet을 보낼 때 예약 없이 packet을 쪼개서 보냄, receiver에 도착하는 순서가 다를 수 있음

- 장점 : 정보가 빨리 도착할 수 있음

- 단점 : header size가 커짐

- Routing Algorithms ( 경로 설정 알고리즘 )

- 최적의 경로를 찾는 알고리즘

- Link State routing

- 각각의 노드가 각각 연결된 노드에 대한 정보를 공유해서 연결된 모든 노드를 파악해서 최적의 경로를 찾을 수 있게 함

- Dijkstra’s Algorithm

- 모든 노드가 각각의 host와 topology를 알고 있는 상황에서 각 노드에 도달하는 최단 경로 계산하는 알고리즘

- Distance vector routing

< 6강_2> IP

- IP addresses : 어떤 단말인지 알 수 있게 함, 5개의 클래스로 구분됨

- Problems of IP address scheme ( class-ful addresses ) (주소의 고갈)

- 새로운 버전 ( IPv6)

- CIDR(classless Inter-Domain Routing ) : 기존 8비트 단위로 통신망부와 호스트부를 구획하지 않는 방법.

- NAT ( Network Address Translation ) : 인터넷의 공인 IP주소를 절약할 수 있다

<7강> Transport Layer Protocols

- UDP
- 인터넷에서 정보를 주고받을 때 한 쪽에서 일방적으로 보내는 방식의 통신 프로토콜로 간단.
- 신뢰성보다는 속도가 우선시 될 때 주로 사용

- TCP
- 속도보다 신뢰성이 우선시 될 때 주로 사용
- 여러개의 패킷을 동시에 송수신

- TCP Flow Control
- sender와 receiver사이에 보내는 속도를 조절

- Error Control
- 패킷이 노이즈로 인해 에러가 발생 했을 때 오류를 검출

- TCP Congestion Control
- 송신자가 network congestion을 감지하고 자신의 데이터 전송률을 줄이는 방법

<8강>  Application Layer protocols define

- Types of message exchange
- 기본적으로 메시지를 요청하거나 응답하는 방식으로 동작.

- Syntax of Message Types
- 메시지를 구분

- semantics of the fields
- 각각의 필드에 담긴 정보들의 의미를 이해하는 것

- Rules for when and how procces send & respond to messages
- 언제, 어떻게 프로세스들이 요청하고 응답해야 하는지에 대한 규칙

DNS(Domain Name System)
- 네트워크에서 도메인이나 호스트 이름을 숫자로 된 IP 주소로 해석해주는 TCP/IP 네트워크 서비스

# data[].attributes.body
Q. Dijkstra's Algorithm에서 경로에 따른 Cost숫자가 같을 때, 어떤 경로로 갈지는 랜덤으로 정하는지? 마음대로 정해도 되는지?

# data[].attributes.body
Chapter 6
Network Layer
forwarding- 데이터를 받아서 전달하는 행위
routing- 데이터를 어떤 곳으로 보내야할지 주소를 보고 판단하는 행위

Circuit switching
옛날 전화 방식
회선을 미리 예약을 해서 통화를 하는 방식 통화가 끝나면 예약했던 회선을 끊는 방식

1. Circuit establishment
2. Data transfer
3. Circuit termination
-->세단계로 이루어짐

장: 회선이 예약되면 지연이 없기 때문에 장기 통신에 적합하다
단: 채널의 낭비가 존재함

Message Switching
회선을 만들거나 끊지 않고 바로 메세지를 보내는 방식
단: 메세지가 여러곳에서 오게되면 다 저장해야함, 느림

Packet Switching
패킷을 보낼때 미리 커넥션을 하지 않고 데이터를 쪼개서 보내는 방식
한쪽이 밀리게 되면 다른 경로로 가게됨

패킷를 쪼개서 보내면 패킷1을 보내는 동안 패킷2를 보낼 수 있기 때문에 시간을 단축할 수 있음
단: 해더부분이 늘어남-->많이 쪼갠다고해서 좋은것은 아님

Routing Algorithms

최적의 경로를 찾는 방법
1. Link State routing algorithm
처음에 시작 노드에서 각각 노드로 가는 cost를 기록
가장 작은 cost를 갖는 경로에 대해서 다시 cost을 계산하고 전의 값과 비교하여 더 작은 값을 기록
이를 반복하며 최적의 경로를 찾는 방법

2. Distance vector routing
이웃하고만 데이터를 주고 받음
이웃한 노드들로 부터 각자의 routing 테이블을 받음
처음 노드의 이웃한 경로의 cost와 이웃한 노드들의 routing 테이블의 합이 가장 작은 경로를 찾음

IP(Internet Protocol)
IP addresses
5가지 클래스로 구분이 됨
Net ID: 기관에서 살 수 있는 ID
Host ID: 컴퓨터에 할당할 수 있는 ID
class B를 가장 많이 사용

Subnet Addressing
Host ID를 Subnet ID와 쪼개서 사용

서브넷 마스크
어떤 비트가 서브넷 번호이고 어떤 비트가 호스트 번호인지 나타냄

IP주소 체계의 문제
-주소고갈 문제
-IETF solutions
long term solution: IPv6
short term solution: CIDR

CIDR:
네트워크 ID가 가변적임
주소 할당 방법
1. manual configuration
2. DHCP: 임시 아이디 주소를 할당받아 쓴 뒤 반납하는 방식

NAT
공적으로 할당받은 IP를 라우터가 마음대로 IP를 할당해서 사용 하는 방식

Chapter 7
Transport layer protocols
1. UDP
정확도가 떨어져도 큰 문제가 없는 경우 사용-->빠름
기본적인 골격만 있는 프로토콜
전달이 잘 안 될 수 있다
샌더와 리시버가 컨택을 하지 않고 바로 보냄
패킷이 좀 사라져도 상관 없음
8byte

2. TCP
완전히 정확해야하는 상황에 사용
잘못된 패킷은 버림
전송중에 패킷이 사라지면 재전송
20byte

TCP 역할
-Flow control: 샌더가 리시버를 넘치지 않게 만들어주는 방식
stop_and_wait flow control: 보낸다음 ack가 올때까지 기다림
--> 효율이 좋지 않음
sliding-window flow control: 패킷을 받는대로 윈도우 사이즈를 오른쪽으로 옮기면서 다음 패킷을 보내는 방식
-Error control:
Stop-and-wait ARQ: 패킷을 받았는데 ack를 받지 못했을 경우 계속해서 기다림
--> 타임아웃을 줌 :일정시간이 지나도록 ack를 받지 못하면 재전송함
Go-Back-N ARQ: 에러가 생기면 해당 번호로 돌아가서 나머지 패킷을 전부 다시 보내는 방식
-congestions control : 대부분의 시간초과는 라우터로 인해 발생, 시간 초과가 혼잡으로 인해 발생한다고 가정
타이머가 꺼지기 전에패킷에 대한 ack가 수신되지 않으면 패킷이 손실된 것으로 간주
시간 초과시 1MSS의 초기값으로 줄어듬

Chapter 8
Application layer protocol
DNS(Domain Name System): IP address 호스네임을 매핑해줌

# data[].attributes.body
<6장>

Network layer: 헤더에 주소(IP address)를 써서 보냄

- Routing: 어디로 보내야 할지 주소를 보고 판단하는 행위

- forwarding: 전달

Network

1. circuit-switched

- 옛날 전화방식: 미리 전화 예약, 회선 끊기

- realtime으로 오랜시간 통화할 때 좋음, delay도 없음

- 채널의 낭비 존재

2. Message scwitching à packet-switched(3G부터),

- 하나의 데이터가 여러 개로 쪼개서 packet단위로 보냄

- 도착 순서 바뀌어 보내져도 순서 재정비됨

- packet으로 자르면 파이프라이닝을 해서 시간 훨씬 단축됨

- 그렇다고 무조건 잘게 자르는게 좋은 건 아님à data size와 header size가 비슷해지면 늘어남.

Routing algorithm

Router들이 각자 스스로 계산한다 à 최적 경로를 찾은 알고리즘

(1) Link State algorithm: 모든 노드가 이웃 노드와 cost정보를 알고 있음 = 모든 노드가 같은 topology를 만들수 있음, Dijkstra’s algorithm

(2) Distance vector routing: 이웃 노드한테만 데이터를 주고받음, routing table 만들 수 있음

IP addresse

- 4bite

- netID + hostID

- 주소 고갈 문제à IPv6, CIDR(IPaddress할당방식)

- manual /DHCP(임시 주소 할당 받아서 거기서만 쓴다)

- 주소 고갈 문제 해결방안: NAT(공적 IP -> 임의로 할당한 IP)

IP: 실제 통신에 쓰임

ICMP: 제어용, 망관리

IGMP: multi cast하기위한

TTL(Time To Live): sender가 receiver까지 보내는 시간을 측정. Router가 몇 번의 호흡을 거쳐서 Destination까지 가는지 측정

<7장>

Transport layer: sender가 보낸 것이 잘 도착했는지 여부 등을 알아봄

UDP

- 잃어버려도, 전송이 안되도 상관없는 경우

- 기본적 골격만 유지하는 프로토콜

TCP

- 정확해야하는 중요한 트래픽을 전송할 경우

- 잘못된 패킷은 폐기

- lost 패킷은 재전송

1. congestion control

- 모든 사용자가 함께 문제를 해결하는 프로토콜

- 유선네트워크 전제로

- slow start: timeout에 의해서 패킷이 오지 않은 것을 detection

2. End-to-end Flow Control: 보내는/받는 속도 조절시

- sender가 receiver가 넘치지 않게 만들어주는 방식 – 비효율적

- sliding-window: 여러 개를 보내고, 올때마다 더보내는 – window size minimum 값

3. Error Control; 전송 중 error 관리

- receiver가 받지 못하면 timeout을 주고, 재전송

- ACK 패킷이 사라져도 timeout

- Go-Back-N: error발생하면 그 번호부터 다보내는 방식

<8장>

Application layer

DNS(Domain Name System): http 주소 --> 32bit

- Local name server: postech.ac.kr

- Authoritative name server: 내가 원하는 IP address와 host name을 변환시켜주는 것을 가지고 있는 name server.

- Recursive resolution: 일일이 컨택헤서 물어봐야하는 상황

- cache: 일정기간 저장된 IP address

Web and HTTP

- web에 데이터를 전송하고 받는 과정들

- HTTP: TCP를 씀.

- cache(proxy server: node가 많이 걸릴 경우, traffic 멀리 가지않고.

MQTT: 미리 subscribe, 뿌려줌

CoAP: HTTP의 슬림버전

# data[].attributes.body
<6강: Network Layer & IP>

1. Network Layer : sender가 보낸 신호를 . receiver에게 안전하게 전달하기!
-forwarding : 라우팅 따라 결정에 따라 보냄
-routing : 주소를 보고 어디로 보낼지 결정

(1) switching
[1]circuit switching : 예약+만들기+끊기로 진행되며 딜레이가 없다는 장점이 잇지만 채널의 낭비가 크다는 단점 존재. 하나의 서킷 만들고 끊는 동안 기다려야 해서 시간이 좀 걸림

[2]message switching
메세지를 다 받고 보내서 오래걸림, 메세지 크면 버퍼의 사이즈도 커야하고 여러 경로에서 오면 다 저장해야 해서 불편한 점이 많음

[3]Packet Switching
메세지를 패킷으로 나누어 조금씩 먼저 보내고 밀리면 다른 경로로 보내는 것도 가능,보통 패킷이 늘수록 시간이 줄어들지만 헤더랑 데이터의 사이즈가 비슷해진다면 overhead로 오히려 시간이 늘어나서 잘 조정해야함

2. routing algorithms

(1) Link State routing
- 호스트 간 모든 정보를 교환해 이웃 정보를 모두가 공유하고 모든 노드가 토폴로지를 앎
- 매번 최소 경로를 정해서 loop 돌림

(2) Distance vector routing
- 정보 이웃하고만 주고 받음
- 난 내 주변간의 최소 거리만 알고 내 이웃에서 목적지까지 거리를 다 구해 최소 거리 도출

3. IP (Internet Protocol)
-32bit IP가 전세계 통용되고 있음

(1) 기존
- Class A~E로 나뉘었는데 D,E는 거의 멀티 캐스트여서 ABC, 그중에서도 class B 가장 많이씀
- Net ID ( 기관에서 구입한 ID, 기업이름) + Subnet ID(건물이름), Host ID(각 아이디)
* 상황에 맞는 subnet과 host간의 조율 필요

(2) 현재 CIDR
클래스 A, B, C로 나누는건 너무 범위가 커서 CIDR을 통해 더욱 다양하게 나눠 dynamic해짐
- NAT(Network address translation)
: IP Address 부족 해결 방법으로 공적 아이피와 사적 아이피를 나누어 라우터가 호스트의 사적 아이피를 리시버에게 해석해줌, 반대도 가능

<7장 Transport Layer>
:sender이 보낸거 delay는 없는지, 잘 도착했는지 확인하기

1. UDP
- 전송 안돼도 큰 문제 없는 TV, 라디오 등
- 기본 골격만 파악하고 패킷이 잘 보내지면 좋지만 몇개 사라져도 상관없음
- sender receiver 결정안하고 바로 보냄
-checksum이 에러 체점하지만 큰 의미x

2. TCP: traffic 전달의 정확도가 속도보다 중요

(1) End - to - end Flow control
[1] 정의
- receiver가 받을 수 있는 만큼만 sender가 보내야함. 따라서 sender의 속도 조절 필요
- sender 보냄 -> receiver 받으면 ack 보냄 -> ack 보내는거 따라 sender속도 조절

[2]pipelining  utilization
- 기존엔 ack오면 보내서 느림
- 파이프로 잘게 나누어 한개 오면 먼저보냄

[3] sliding-window flow control
- 슬라이딩 도어대로 파이프 사이즈 받은 만큼 오른쪽으로 옮겨서 다음 seqnum 다시 보내고 계속 반복
-리시버가 보내는 ack 윈도우양이랑 sliding 윈도우 중 더 작은 윈도우가 미니멈임

(2) Error Control
[1] 정의
패킷을 보냈는데 ack가 바로 오지 않으면 에러임, timeout 시간을 어떻게 설정하느냐, 얼만큼을 에러로 설정하느냐가 다 달라짐

[2] Go-Back-N
- 기존 한개씩 기다리면 너무 오래 걸리니까 얘도 슬라이딩 윈도우 형식으로 패킷 나누고 에러 파악
- Error-free operation : 그냥 안온 ack신경안씀
-Corrupted data packet : ack가 전달되지 않은 패킷은 다 삭제하고 없어진 패킷부터 다시 전송함
-Corrupted acks
-- 중간에 잠깐 사라졌어도 그 다음 에크 받았으면 받은걸로 가정
-- 중간에 사라졌으면 다 없어진걸로 가정

(3) Congestion control
[1] 정의
혼잡에 따른 방향 및 속도 제어해야 혼잡도 조절 가능

[2] slow start
- 사전 스레드 설정까진 2의 배수로 증가하다 그 이후 선형으로 윈도우 갯수 증가
-cwnd 이상이면 다 처리될 때까지 기다렷다가 timeout 끝나고 다시 1부터 시작

[3] 3 duplicate acks
- cwnd 끝나도 다시 1부터 시작하는게 아닌 congestion에 의한 패킷 드립백 해서 미니멈을 8로 설정하고 이에 따라 윈도우 설정

-> 3개의 control이 개별이 아니고 유기적으로 연결되어 있음을 항상 기억하자

<8장 : Application Layer>
application은 전체(HTMI, web, server 등)/ layer은 앱을 잘 쓸수있도록 도움

Applacation Layer protocol
(1) DNS
[1] 정의
-IP 몰라도 www.naver.com 치면 네이버라는 사이트 갈 수 있도록 통신 가능하게 만들어주는 시스템
-여러 종류로 분산하여 고장이나 트래픽 몰렸을 때의 불편을 방지
- 기존 gTLDs가 있었는데 현재는 추가된 TLD가 매우 많아짐, 한국은 .kr도메인 젤 많이씀
[2] 나누는 방식
-Generic domains / country comains
- Local name servers/ Authoritative name servers
[3]캐시
- 매번 물어보기 힘들어 PC에 Ip address 저장해둠
- displaydns 하면 저장된 캐시 볼 수 있음

(2) HTTP(HyperText Transfer Protocol)
-hostname + path name으로 구성되어 web에 데이터를 주고받는 과정
-각각의 데이터에 대해 컴파일해서 화면에 제공
-웹캐시 나누기 힘들어서 프록시 서버 나누어 할당

(3) MQTT
Message Queue Telemetry Transport
- 브로커가 미리 정보 필요한 사람들 가입시키고 subscribe 한 사람들에게만 정보전달

(4) CoAP
Constrained Application Protocol
-좀 더 심플하게 센서 통신을 브로커가 기존 host에게 전달해줌
-브로커는 http와 coap 프로토콜을 모두 알아야함

-> 현재는 만능 gateway를 통해 mqtt와 coap 둘 다 같이 사용하는 경우가 많음

# data[].attributes.body
network layer service
- network layer
입력부에서 데이터를 받아서 출력부로 보내는 역할
- routing
어디로 보내야할지 주소를 보고 판단하는 행위

-network은 크게 두가지로 분류할 수 있음

-circuit-switching
옛날 전화 방식, 1 or 2세대
순서 : circuit establishment, data transfer, circuit termination
장점: real time으로 오래 통화 할 때 좋음, 딜레이 없음
단점: 채널의 낭비 존재

- message switching
- packet switching
데이터를 packet단위로 쪼개서 보내는 것

-routing algorithms
각자가 스스로 계산하는 알고리즘 채택
목적지까지 가는 가장 최적의 링크를 선정함

1) link state routing
각각의 노드가 서로 연결되어있는 노드사이의 cost를 교환
최소의 cost를 가지는 route를 선택
2) distance vector routing

- ip addresses
host id, net id로 나누어져있음
class a ~ class e 중 class b를 가장 많이 사용함
=> net id : 14, host id : 16

-subnet addressing
host id를 host id, subnet id로 쪼개서 사용

- CIDR
기존의 class로 나누는 방식X -> 다양하게 나눌 수 있음
최근에 많이 쓰는 방식임

-DHCP
정규X
임시로 발급받아 사용 후 반납

- IP
다양한 프로토콜로 구성되어있음

-Transport layer protocols
tcp
속도보다는 정확도가 중요함
에러가 있으면 안됨.
1) congestion control
2) end to end flow control
3) error control
=> 세가지가 다 연결되어있음

udp
아주 간단한 프로토콜
틀려도 상관없음 , 정확도가 중요하지 않음
데이터가 변형되거나 일부삭제되어도 상관없는 경우 사용
lost packets 재전송

트래픽 종류에 따라 tcp, udp 나눠서 사용함

- sliding window flow control
-error control
1) stop and wait ARQ
타임 아 웃 존재

-TCP congestion control
lost packet에 의하여  retransmission timeout이 일어남

- packet loss원인
믿을수 없는 전송 미디어
혼잡한 router

- DNS
32BIT로 변환해서 알려줌 -> 없으면 통신이 안됨
-dns cache
name server을 일정시간동안 컴퓨터에 저장해둠

-MQTT
broker
일반적인 server role수행
mqtt clients의 메세지를 모음

mqtt client
=> broker에게 메세지를 보냄
=> 다른 mqtt clients로부터 생성된 메세지를 받음

- CoAP
중간 서버인 gateway로 전달되고 http로 host에게 전달

# data[].attributes.body
Ch6. Network Layer & IP

1. Network Layer

송신 호스트에서 수신 호스트로 데이터 패킷을 전송

포워딩(Forwarding): 패킷을 입력에서 출력으로 전달

라우팅(Routing): 주소를 받아 패킷이 destination으로 이동하는 경로 설정

2. Communication Networks

circuit switching

옛날 전화방식, 유선 전화망

circuit을 만들고 데이터를 보낸 후 circuit을 끊음

장) 오랜 시간 연결하기 좋음 → 딜레이 없음

단) 채널 낭비

packet-switching

데이터를 패킷으로 쪼개서 전달

장) 메시지와 같이 큰 데이터를 빠르게 전송

단) header 크기가 커짐

3. Routing Algorithm

Router의 최적 경로를 찾음

Link State routing

Dijkstra’s Algorithm

이웃한 노드와 cost 정보를 알고 있어 최단 경로를 찾아 계산

distance vector routing

Bellmaf-ford Algorithn

이웃하고만 정보를 주고 받음

이전에 계산한 최단 경로를 이용해 최단 경로 갱신

hierarchical routing

대표 라우터를 선정하여 대표 라우팅 테이블을 만든 후 대표 라우터안에서 라우터끼리 라우팅 테이블을 만듦

4. IP(Internet Protocol)

라우팅 알고리즘을 실제로 구현한 protocol

A, B, C, D, E 5개의 class가 존재 → class A,B,C를 가장 많이 사용

net ID, host ID로 구분

인터넷의 폭발적 성장으로 IP 주소가 모자람

IPv6를 만들었지만 비용이 많이듦

CIDR: IP주소를 효율적으로 표현하는 방식, 유연하게 part를 쪼갤 수 있음

DHCP: 정규 주고가 아닌 임시 IP 주소를 할당 받아 쓰고 반납

NAT: IP주소 하나로 많은 사용자 운영, 공적으로 받은 IP주소를 두고 비공식적인 주소를 사용자에게 할당하여 공적인 IP주소로 변환하여 신호를 주고 받음

# data[].attributes.body
AIOT 6강. Network Layer & IP

1부. Network Layer

Sender à Receiver 정확히 전달하는 역할/ header에 주소를 써서 보냄(IP address)/ Forwarding(전달) 시 Data를 어디로 보내야 할지 결정(Routing)

- Circuit switching: 2g까지 미리 회선 예약, 예약 완성 시 연결 시작/ 끝나면 회선 끊음/ real time으로 오랜 시간 연결할 때 좋지만, 낭비가 존재(효율 떨어짐)

- Message Switching > Packet Switching: (MS) 메시지 통으로 보냄 (PC) 긴 메시지를 잘라서 몇 개의 Packet으로 나눠서 보냄으로써 속도 빨라짐/ 미리 connection 없이 data packet 단위로 쪼개서 보냄/ 순서 바뀌어서 도착해도 순서 재정비 함

Header가 영향을 끼쳐서 data size와 header size가 영향을 끼쳐 너무 잘게 쪼개는 것은 의미가 없음 à 오히려 느림

Routing Table 중요 à Routing Algorithms(스스로 계산해서 최적의 경로 찾음)

Routing Algorithms: Link State routing vs Distance vector routing

Link State routing: Dijkstra’s Algorithm 사용/ 각 노드는 이웃한 node와 cost만을 알고 있으니 교환하여 모든 노드가 topology 그림을 알게 됨 à Dijkstra’s Algorithm 사용함

Dijkstra’s Algorithm: 직접연결 중 숫자가 가장 작은 것 중 하나 선택, 이후 선택 된 것 거친 후 숫자 작아지면 새로 쓰고(update) 가장 숫자 작은 것 중 하나 선택/ 기존 경로와 비교

à 이를 통해 Routing table을 만듦

Distance vector routing: 이웃한 노드 사이에서만 정보를 주고받음/ 각 노드에서 특정 노드로 가는 테이블 계산되어 있고, 이를 이웃 노드와 공유, 더한 값이 가장 작은 것 선택

Hierarchical routing: 현실적으로 라우터가 너무 많기에 대표 라우터를 선택하여 table을 만들고 각 region별 라우팅 테이블 다시 만듦

2부. IP (Internet Protocol)

IP addresses: Dotted Decimal Notation à 32bit를 8bit씩 쪼개서 10진수로 표현/ 현재 32bit/ 5class로 나누어짐(A~E)/ net ID(조직, 기관), host ID(각 컴퓨터 할당, class A가 가장 내부 할당량 높음)

Subnet Addressing: Host ID부분을 Subnet ID(건물, 과, 팀 등)로 둬서 체계적으로 관리

Subnet mask: 조직에서 subnet 몇 비트로 쪼갰는지 알려줌

IP aderess 모자람: 근본적 solution = IPv6(새로 바꿔야함) à short term 대처법 = CIDR(Classless Inter-Domain Routing)

CIDR : class와 상관 없이 ‘/’를 붙여 network부분이 얼마까지 인지 이라고 알려줌 à IP 아낄 수 있음/ Class 상관없이 좀 더 다양한 크기의 할당

IP: 하나를 할당하거나 DHCP(임시 IP할당 받아서 쓰고 반납)

NAT(Network Address Translation): IP하나를 가지고 많은 host연결 가능하게 함/ 전송시 Sender를 대표 공적 라우터 IP로 바꿔 보냄, 이후 내부 사설 IP중 어떤 것이었는지 알고 보내줌

IP packet format: 20byte의 header를 씀

Ethernet: 망들의 망/ Network 모여 있는 것을 연결하는 망/ Packet size가 달라져서 쪼개져야 하고 해서 관련되어 header에 넣어져 있다.

Time to live field in header: 원래, sender가 receiver까지 보낼 때까지 걸리는 시간 측정 but 실제로는 라우터를 거칠 때마다 숫자가 하나씩 줄어들어 몇번의 라우터를 거치는지 확인 용도

AIOT 7강. Transport Layer

Transport layer protocols: sender가 보낸 것이 Receiver에 잘 도착했는지 여부 확인/ TCP & UDP

UDP: 전송 잘 안돼도 됨, 간단한 프로토콜, 기본 골격만 있음, 노력을 해보겠음, 바로 보내기(Connectionless), ex) Streaming, 중개방송 같은 것에 쓰임/ TCP: 속도보다는 정확해야 할 때, 꼭 전송해야 할 때, ex) 은행관련 업무에 쓰임

UDP 구조: 헤더 8byte à Source port #, Destination port #, Message Length, Checksum(간단한 오류 체크)

TCP 구조: Congestion control(막혀서 제때 전송이 안되었을 때), End-to-end Flow Control(sender와 receiver 사이의 속도 조절), Error Control(Noise 등 에러가 끼었을 때)/ Headerà20byte(window size 포함)

Flow Control à Receiver 잘 받았다는 신호(Ack packet 보냄, 수신 가능한 space 정보를 담아서 보냄)로 버퍼가 넘치지 않도록 조절하면서 보냄/ Stop-and-wait flow control à 하나 보내고 기다림/ Sliding-window flow control à 여러 개를 보내고 Ack 신호 올 때마다 조절하는 방식, 임의 Window size와 Ack 신호의 Window size 두개 중 minimum 값으로 Window size 정함, Congestion window

Error Control à Noise 등 Error 꼈을 때/ Stop-and-Wait & continuous(Go-Back-N, Selective repeat request)

Stop-and-Wait: Timeout(Ack가 안오는 시간) 후 retransmission, Receiver 측 똑 같은 것 받으면 Ack 못 받은 줄 인지하고 다시 보냄

Go-Back-N: Sliding window 방식, Corrupted data packet à Receiver 순서 맞추어 안 오면 다 버림 timeout 걸리면 못 받은 것부터 다시 보냄/ Corrupted ACKs à Ack가 Time out 전에 중간이 안 오고 뒤에 것이 오면 순차대로 받는 receiver의 특성을 알기에 계속 보내게 됨, 아니면 다시 보냄

Congestion control: 혼잡상황(Traffic이 몰릴 때)/ 유선 Network 가정/

Slow start à 모든 노드가 라우터가 넘칠 때, Timeout, windowsize 2^n배로 늘어남 그 후 linear하게 증가 만약 Timeout에 의해 packt이 안 오면 다시 처음부터 시작(ssthresh=timeout 걸린 현재의 반으로)

Fast retransmit à 순서대로 안 오면 discard하면서 몇 번을 기다린다는 ACK를 계속 보내서 뒤에 packet은 잘 송신되는 것을 확인 가능/ congestion 정도를 확인해 window size 현재 값의 반부터 linear하게 증가 시작

# data[].attributes.body
<Aiot 6강 1부>

네트워크 레이어
: 메일을 보낼 때 최종 목적지 노드에 도달하려면 어떻게 가야하는지 네비게이션처럼 알려주는 것이 라우팅이고, 라우팅을 해주는 계층이 네트워크 레이어

- 포워딩 : 라우터의 input부터 output까지 패킷이 옮겨지는 것
(data plane의 영역)
- 라우팅 : source부터 destination까지의 경로를 구축하는 것
(control plane의 영역)

스위칭 방식 구분
- Circuit-switching (회선 교환 방식)
- Message switching (메시지 교환방식)
- Packet-switching (패킷 교환 방식)

스위칭
- 스위칭이라는 것은 노드와 노드 사이에 링크가 있는데, 그거를 임시로 잠시 연결해주는 것을 스위칭이라고 부른다.
- 스위칭이 없다면 노드를 연결하기 위한 링크가 너무 많이 필요

Circuit-switched
: 하나의 회선을 할당받아 데이터를 주고받는 방식

- 통신을 위한 연결을 해야하며 연결이 되고 나면 출발지(source)로부터 목적지(destination)까지 도착
- 사용되는 회전 전체를 독점하기 때문에 다른 사람이 끼어들 수 없다
- 전화와 같은 실시간 통신에 사용 (속도와 성능이 일정)

Message Switching
: 알맞은 송신 회로를 사용할 수 있을 때까지 메시지를 저장하였다가 다시 전송하는 방식

- 메시지를 공유하여 데이터 보낼 수 있다.
- 메시지 별로 우선순위를 부여
- 응답속도가 느림
- 대화형 시스템으로 사용하기 어려움

Packet-switched
: 데이터를 패킷(packet)이라는 단위로 쪼개서 전송하는 방식

- 패킷은 다음 링크로 전송하기 전에 저장을 한 뒤 전달하는 store and forward 방식을 따른다.
- 패킷의 헤더에는 출발지(source)와 목적지(destination) 정보가 존재
- 라우팅 알고리즘을 이용하여 경로를 설정하고, 중간의 라우터들을 거쳐 최종 목적지에 도달
- 패킷은 다음 라우터로 이동하기 위해 큐에서 대기하는데, 이때 수용할 수 있는 큐의 범위를 초과하게 되면 손실이 발생하게 된다.

Routing Algolithms
- link state routing
- Distance vector routing

link state routing
- 각 라우터는 주변의 링크들을 탐색하고 연결된 라우터의 주소를 알아낸다.
- 각 링크의 가중치를 측정
- 각 링크와 가중치에 대한 정보를 담은 패킷(LSP) 생성
- LSP를 모든 라우터에게 보냄
- 다른 라우터로 부터 받은 LSP들을 이용해 라우터로의 가장 짧은 경로 계산
(다익스트라 알고리즘 사용)

Distance vector routing
: 인접 라우터와 정보 공유하여 목적지까지의 거리와 방향을 결정하는 라우팅 프로토콜 알고리즘

- 벨만-포드(Bellman-Ford) 알고리즘 사용

-------------------------------------

<Aiot 6강 2부>

IP address
: 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호

A class - 처음 8bit가 net ID, 나머지 24bit가 Host ID (가장 왼쪽 0 고정)
B class - 처음 16bit가 net ID, 나머지 16bit가 Host ID (가장 왼쪽 1,0 고정)
C class - 처음 24bit가 net ID, 나머지 8bit가 Host ID (가장 왼쪽 1,1,0 고정)
D class - 멀티캐스트를 위해 예약
E class - 미래에 사용하기 위해 예약

Subnet Addressing
: 네트워크를 둘 이상의 네트워크로 나누는 방법

CIDR
: 인터넷상의 데이터 라우팅 효율성을 향상시키는 IP 주소 할당 방법

NAT(Network Address Translation)
: IP패킷에 있는 출발지 및 목적지의 IP주소와 TCP등을 바꿔 재기록하면서 네트워크 트래픽 주고 받는 기술
- IP 주소 절약 : NAT기술을 이용하면 하나의IP주소를 사용하여, 부족한 공인 IP를 절약가능
- 보안 : IP 숨길 수 있는 기능

IP
ICMP : 네트워크 내 장치가 데이터 전송과 관련된 문제를 전달하기 위해 사용하는 프로토콜
(가장 큰 용도는 오류보고)
IGMP : 여러 장치가 하나의 IP 주소를 공유하여 모두 동일한 데이터를 수신할 수 있도록 하는 프로토콜
ARP : 네트워크 상에서 IP 주소를 물리적 네트워크 주소로 대응(bind)시키기 위해 사용되는 프로토콜

time to live(TTL)
: 패킷이 라우터에 의해 폐기될 때까지 네트워크 내부에 존재하도록 설정된 시간 또는 "홉"의 양을 나타낸다

-------------------------------------
<Aiot 7강>

Transport layer
: 서로 다른 호스트들의 process들은 전송계층(Transport layer)를 통해
logical한 communication을 주고 받는다.

TCP
: 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
- 연결 지향 방식이다.
- 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
- 흐름 제어 및 혼잡 제어.
- 높은 신뢰성을 보장한다.
- UDP보다 속도가 느리다.
- 전이중(Full-Duplex), 점대점(Point to Point) 방식.

UDP
: 데이터를 데이터그램 단위로 처리하는 프로토콜
- 비연결형 서비스로 데이터그램 방식을 제공한다
- 정보를 주고 받을 때 정보를 보내거나 받는다는 신호절차를 거치지 않는다.
- UDP헤더의 CheckSum 필드를 통해 최소한의 오류만 검출한다.
- 신뢰성이 낮다
- TCP보다 속도가 빠르다

TCP Flow control
- Stop-And-Wait flow control
- sliding window flow control

Stop-And-Wait flow control
: 매번 전송한 패킷에 대해 확인 응답(ACK)를 받으면 다음 패킷을 전송하는 방법이다. 그러나 패킷을 하나씩 보내기 때문에 비효율적인 방법이다.

sliding window flow control
: 수신 측에서 설정한 윈도우 크기만큼 송신 측에서 확인 응답(ACK) 없이 패킷을 전송할 수 있게 하여 데이터 흐름을 동적으로 조절하는 제어 기법이다.

Error Control
: 데이타 전송 중 발생되는 에러를 검출(에러검출), 보정(에러정정)하는 메커니즘
- ARQ : 재전송 기반 에러제어
- classificaiton
-stop and wait arq : 데이터 하나 보낸 후 하나 확인
-continuous arq : 한번에 여러 데이터 보냄

---------------------------------------
<Aiot 8강>
DNS : ip주소로 확인하면 힘드니까 도메인 주소로 확인

hierarachical database
- root domain
- top-level domain
- Second-level domain

recursive resolution (재귀적 질의)
: local dns서버가 여러 dns서버를 차례대로 물어봐서 그 답을 찾는 과정

iterative resolution(반복적 질의)
: local Dns서버가 다른 dns 서버에게 쿼리를 보내어 답을 요청하는 작업

DNS Cache
: 알아낸 ip 주소를 한 번만 쓰고 버리지 않고 다시 사용하기 위해 일정기간 저장해둠

MQTT
: 머신 대 머신 통신에 사용되는 표준 기반 메시징 프로토콜 또는 규칙 세트

Coap
: 무선 센서 네트워크 노드처럼 자원에 제약이 있는 장치들에서 사용할 목적으로 고안된 서비스 계층 프로토콜

# data[].attributes.body
6장-1

Network Layer & IP

네트워크 계층의 2가지 주요 기능

1. 포워딩: 라우터 인풋으로부터 적절한 라우터 아웃풋으로 패킷을 이동시킴

2. 라우팅: 원 소스부터 목적지까지의 라우트를 결정

용어:

forwading: 단일 교환을 거치는 과정

routing: source부터 목적지까지 여정을 계획하는 과정

패킷의 헤더의 값을 통해 목적지 결정(라우팅) 후 전달(포워딩)

네트워크의 분류체계

Circuit switching: 옛날 전화방식

Packet switching: 메시지를 패킷단위로 쪼개고 전달

라우팅 알고리즘

라우팅 테이블을 설정할 계산을 하는 알고리즘

두가지 라우팅 알고리즘

1. Link-State routing (Dijsktras Algorithm)

2. Distance vector routing(Bellman-Ford Algorithm)

6강-2

IP (Internet Protocol)

주로 class B 사용

서브넷 마스크: 서브넷 주소를 사용하는 사이트는 반드시 각각의 주소에 대해 32bit 서브넷 마스크를 지정해야함

CIDR: IP 주소를 효율적으로 할당하고 라우팅하기 위한 방법으로, IP 주소와 네트워크 접두사 길이(”/”로 표기)를 조합하여 표현하는 방식 - 예) 192.168.0.0/24 ⇒ 접두사 길이가 24비트인 네트워크 주소 192.168.0.0

7강

Transport Layer

패킷의 도착여부 등 검증

UDP (User Datagram Protocol): 인터넷 프로토콜 스위트의 한 부분으로, IP 네트워크 상에서 데이터를 신뢰성 없이 빠르게 전송함.

TCP (Transmission Control Protocol): 인터넷 프로토콜 스위트의 한 부분으로, IP 네트워크 상에서 신뢰성 있는 연결 지향 데이터 전송을 제공함. TCP는 패킷 손실이나 오류 복구를 위한 메커니즘을 내장하고 있어 데이터의 정확성과 순서를 보장

8장

Application Layer

애플리케이션이 상호 작용하고, 데이터를 교환하고, 서비스를 제공하는 방법에 대한 규칙을 정의함. 이메일 전송, 파일 전송, 웹 브라우징, 원격 로그인 등과 같은 다양한 기능을 사용함

DNS: 도메인 이름을 IP 주소로 변환하거나, IP 주소를 도메인 이름으로 변환하는 인터넷 프로토콜로, 웹 사이트 접근을 용이하게 함.

Name Server:

Local Name Server

Authorirative Name Server

Web and HTTP (Hypertext Transfer Protocol): 웹 서버와 클라이언트 간에 웹 페이지, 이미지, 동영상 등의 리소스를 주고받을 수 있는 통신 프로토콜

Web cashes(proxy server)

IoT 프로토콜

자주 쓰이는 2가지

MQTT

CoAP

# data[].attributes.body
[6강] Network Layer & IP
Network Layer
- forwarding: input 받아서 output으로 전달
- routing: packet 수신자의 IP 주소를 보고 어디로 갈지 결정
--> routing table을 잘 만드는 것이 중요(routing Algorithm)

circuit-switched networks

미리 circuit을 예약 -> 통신 -> circuit 종료
장점: low delay, long-time 실시간 가능
단점: 낭비가 많음

packet-switched networks

긴 메세지를 잘라서 packet 단위로 바로바로 전송(pipeline)
잘린 packet들이 다른 길로 가기 때문에 순서가 바뀔 수도 있지만 다시 재정비해서 보내기 때문에 상관없음
잘게 쪼갤수록 빨라지는 것은 아니다.

Routing Algorithm
각 router들이 스스로 근접 노드와의 경로 계산
- link state routing: 모든 node가 전체 topology와 cost 알고 있음
- distance vector routing: 이웃하고만 주고 받음 -> 각자의 routing table을 받아 더해서 계산
- Hierarchical Routing: 각 region에서 대표 router를 선정해 그들끼리 계산

Internet Protocol (version4: 32bit)
IP address = Net Id(각 기관의 Id) + Host Id(기관 내에서 사용하는 ID)
class A: 사갈 수 있는 기관은 적지만(7), 그 안에서 많은 컴퓨터에게 할당 가능(24)
class B: A와 C의 중간(14, 16) --> 가장 많이 사용
class C: 더 많은 기관에서 사갈 수 있지만(21), 그 안에서는 적게 할당(8)
class D / class E

Subnet Addressing
HostID를 쪼개서 더 체계적으로 주소 부여
Subnet Mask

CIDR: class 상관없이 dynamic하게 주소 부여
DHCP: 잠시 동안 임시 발급
NAT: 할당받은 하나의 공적 IP로 사설 IP 여러 개 만들어서 여러 Host에 사용

IP layering
Application Layer
Transport Layer: TCP / UDP
Network Layer: ICMP(제어) / IP(통신) / IGMP(multicast)
Data Link Layer: ARP / RARP (physical -> ip address로 변환)

[7강] Transport Layer

UDP: 좀 잃어버리거나 전송 덜 되도 될 때 사용

best effort, connectionless

TCP: 실수하면 안되고 정확해야 함 (신뢰성)

1) Congestion Control: 트래픽이 몰리면 혼잡해지면 buffer 넘쳐서 정보 손실 --> window size를 조정해서 해결
-slow start: window 값 증가시키다가 timeout 오면 threshold는 현재 값의 반으로 지정하고 다시 0부터 시작
-fast retransmit: 0 아니고 현재 값의 반부터 시작
2) End-to-end Flow Control: sender와 receiver 사이 속도 조절
-stop-and-wait: 하나 보내고 stop. 잘 받았다고 하면 다음 거
-sliding-window: 여러 개 보내고 하나 받을 때마다 다음 패킷 window에 추가
3) Error Control: 에러에 어떻게 대응할지
-stop-and-wait ARQ: 안온다고 영원히 기다릴 수는 없으니까 일정 시간(timeout) 후에도 ack 못 받으면 재전송
-go-back-N ARQ: 에러나면 다시 돌아가서 거기부터 재전송
-corrupted ARQ

[8강] Application Layer
App-Layer Protocols
- DNS: 도메인 주소를 치면 ip address로 변환
분산 처리, hierarchical 구조(generic/country domains)
방법: recursive / iterative resoultion (현실은 섞어서 사용)
DNS cache: 한번 찾아놓은 건 컴퓨터에 일정기간 저장
- Web(App) & HTTP(protocol): TCP 사용
Web cache: proxy server에 데려와놓고 가져다가 사용

MQTT: broker가 정보를 받으면 가입한 host들에게 전달
CoAP: client와 CoAP server 끼리는 CoAP으로, 이걸 CoAP Server가 Host에게 전달할 때는 HTTP로
MQTT와 CoAP을 한 번에 쓸 수도 있음

# data[].attributes.body
< 6강-1 >
- Network Layer : Forwarding을 할때 Routing을 함 -> 어느곳으로 보내야할지를 주소를 보고 판단하는 행위
- Circuit-switched networks
:  과거에 사용했던 유선 전화망
1-2세대
장점 = 오랜시간 전화 시 좋아요~
단점 = 채널의 낭비 존재
- Message Switching
: 그냥 바로 메시지를 보내는 방식
- Packet-switched networks
: Message Switching의 일부
최근 컴퓨터 통신망에 사용하는 것
3세대 부터
pipeline으로 시간 단축
-> piplelining : 긴 메시지를 나눠서 보냄 -> 조금 더 빨리 보냄
- (중요)Routing Algorithms : 누가 만들어 주는 거 X -> Router들이 스스로 계산함
1) Link State routing algorithm : Dijkstra's Algorithm 사용 / 최단 경로 트리 구성하는 알고리즘
2) Distance vector routing : 이웃만 정보 주고받음/ 제일 짧은 경로 선택
3) Hierarchical routing : 대표 라우터를 선정하고, 테이블 만든다.

< 6강-2 >
IP addresses : 32비트 IP address 사용 / host부분 network부분으로 나눠져있음
class A, classB, classC 중에 classA는 2의 24승은 너무 크고 classC는 2의 8승이라 너무 작아서 classB(128.0.0.08-191.255.255.255)!!
Subnet addressing : host는 가지고 세부 network로 쪼개서 쓰는거
Subnet mask : 서브넷 주소를 사용하는 사이트는 각 네트워크에 대해 32비트 서브넷 마스크를 선택해야 한다.
Problems of IP address scheme (주소 체계 문제점)
- 인터넷의 성장
- 우려사항 : 남은 IP 주소의 고갈 / 라우팅 테이블 크기의 급격한 증가
- 솔루션
: 장기 솔루션 - IPng(IPv6)
단기 솔루션 - 할당되지 않은 나머지 주소의 고갈 속도 늦추기 -> CIDR
DHCP(Dynamic Host Configuration Protocol)
: 정규 X -> 임시 IP address 할당 받아서 거기서만 쓰고 반납
NAT(Network Address Translation)
: IP address 하나로 엄청나게 많은 호스트 연결 가능

< 7강 >
Transport layer protocols
: 샌드와 리시버 사이에 데이터 전송이 이루어짐 / 잘 도착했는지 여부 확인
UDP : 아주 털털, 간단 /  잃어버려도 상관없고 전송 안되고 만족
TCP : 완전 정환한/  Error 허용 X
stop_flow control
: 하나 보내고 대기 후 하나 보내고 대기 후 반복 -> 시간 오래 걸림
End-to-end Flow control
: 샌더가 데이터를 전달할 때 보내는 속도와 받는 속도 조절
Congesion control
: 트래픽이 증가하는 상황에서 전송 X -> 대응
Error Control
: 에러 확인 후 대응
Go-Back-N ARQ
: 에러가 나면 그 번호로 돌아가서 그때부터 나머지 상황을 다 보는 방식

< 8강 >
Application layer protocol
: 프로세스가 메시지를 보내고 응답하는 시기 및 방법에 대한 규칙
하위 계층 프로토콜에서 제공해주는 통신 시스템
DNS (Domain Name System)
: 데이터그램 주소 지정에 사용
호스트 이름과 IP 주소 간에 매핑할 분산 데이터 베이스
Recursive resolution
: 서버에 정보가 없는 경우, 다른 서버로 요청을 발송하고 응답을 기다림
부모에게도 정보가 없는 경우, 다른 서버로 쿠리를 보냄
쿼리가 최종적으로 해결되면 응답이 클라이언트로 다시 이동
DNS cache
: 알아낸 IP 주소를 사용 후 바로 버리지 않고 일정기간 동안 컴퓨터에 남겨둠
Web and HTTP
: 웹페이지 개체로 구성
개체 - HTML파일, JPEG이미지, JAVA,오디오파일
HTTP - 웹에 데이터를 전송하고 받는 과정 처리
MQTT
: 사물인터넷 / 기계와 기계사이 사용 프로토콜
CoAP
: 센서들끼리 통신 중간 서버가 받아서 호스트에게 (게이트웨이 X)

# data[].attributes.body
[6강 배운점]
1. Network Layer & IP → 네트워크 계층은 source에서부터 목적지까지 패킷을 전달하는 데 필요한 여러 가지 중요한 서비스를 제공
1) 네트워크 계층
- 송신 호스트에서 수신 호스트로 데이터 패킷을 전송하는 역할을 담당
- 패킷 전달 과정에서 라우팅 프로토콜과 라우팅 테이블을 활용하여 패킷이 가장 효율적인 경로로 전달되도록 함
- 네트워크 계층의 두 가지 주요 기능

1. 포워딩(Forwarding) - 패킷을 입력 포트에서 적절한 출력 포트로 전달하는 역할

2. 라우팅(Routing) - 네트워크에서 패킷의 경로를 결정하는 과정, 트래픽을 적절한 경로로 전달하여 패킷이 목적지로 도달할 수 있도록 함

3. 라우팅 테이블(Routing Table) (*추가 개념)
- 네트워크 장비(라우터 또는 스위치)에 저장되는 데이터 구조로, 패킷의 전송에 대한 경로 결정에 사용
- 패킷이 목적지로 가장 효율적인 경로를 따라 전달될 수 있도록 함

2. 회로 전환(Circuit Switching) → 송신지(S)와 수신지(D) 사이에 전용 경로가 존재하는 통신 방식 (ex. 전화 통화와 같은 실시간 통신에 주로 사용)
1) 회로 전환의 세 단계
- 회선 설정(Circuit Establishment)
- 데이터 전송(Data Transfer)
- 회선 종료(Circuit Termination)

3. 메시지 전환(Message Switching)
1) 전체 메시지 단위로 데이터를 전송하는 방식으로, 전체 메시지가 송신지에서 수신지로 전달
2) 전체 메시지가 전송되기까지의 지연과 전체 메시지의 크기에 따른 부하로 인해 효율성이 낮아지는 단점이 존재

4. 패킷 전환(Packet Switching)
1) 데이터를 작은 블록 또는 패킷으로 분할하여 전송하는 방식
2) 인터넷과 같은 대규모 네트워크에서 주로 사용
3) 각 패킷은 독립적으로 전송되며, 송신지에서 수신지로 전송되는 동안 다양한 경로를 통해 전달될 수 있다.

5. 라우팅 알고리즘(Routing Algorithms)
1) 네트워크에서 패킷을 전달하기 위한 최적 경로를 결정하는 데 사용되는 알고리즘
2) 라우팅 테이블은 일반적으로 목적지 네트워크 주소와 해당 목적지로 가는 경로 또는 다음 홉의 정보를 포함
3) 라우터가 패킷을 수신하면, 패킷의 목적지 IP 주소를 확인 그런 다음 라우터는 라우팅 테이블을 검색하여 목적지 주소와 일치하는 항목을 찾음 라우팅 테이블의 정보를 기반으로, 라우터는 목적지에 도달하기 위해 어떤 경로 또는 링크가 가장 적합한지를 결정

6. IP(Internet Protocol)
1) 인터넷에서 데이터 패킷을 주고받기 위한 프로토콜
2) IP 주소는 각 호스트 또는 라우터의 인터페이스에 할당된 고유한 32비트 IP 주소로 구성3) IP 주소는 32비트의 이진 숫자로 표현되며, 보통 4개의 8비트로 구성된 네트워크 주소와 호스트 주소로 구분됨 (ex - 192.168.0.1과 같은 형식으로 표기)
4) 인터넷에서 패킷의 송신 및 수신을 위해 중요한 역할 → 패킷은 출발지 IP 주소와 목적지 IP 주소를 포함하여 전달되며, 이를 기반으로 라우터가 패킷을 적절한 경로로 전달

7. CIDR(Classless Inter-Domain Routing)
1) 기존의 클래스 기반 주소 체계에서는 IP 주소를 A, B, C 클래스로 구분하여 네트워크 주소와 호스트 주소를 고정 그러나 CIDR은 이러한 고정된 구조를 벗어나고, 주소 할당의 유연성을 제공함
2) IP 주소 공간의 효율적인 사용과 라우팅 테이블의 크기를 줄이는 등의 이점을 제공

8. DHCP(Dynamic Host Configuration Protocol)
1) 호스트가 IP 주소와 다른 구성 정보를 동적으로 얻을 수 있도록 해주는 네트워크 프로토콜
2) 요약하면, 호스트는 DHCP 서버에 IP 주소를 요청하고, DHCP 서버는 사용 가능한 주소 중 하나를 할당해줌
3) 호스트는 할당된 주소와 구성 정보를 사용하여 네트워크 설정을 구성하고, 그 후 해당 주소를 사용하여 통신

9. NAT(Network Address Translation)

1. 네트워크 주소 변환의 약자로, 개인 네트워크에서 인터넷에 접속하기 위해 사용되는 기술

2. 개인 네트워크 내부의 호스트들이 인터넷과 통신할 때, 사설 IP 주소를 공인 IP 주소로 변환해주는 역할 → IP 주소 공간을 효율적으로 사용하고 네트워크 보안을 강화할 수 있음

10. Stop-and-Wait Flow Control

1. 데이터 링크 계층에서 사용되는 흐름 제어 기법 중 하나

2. 수신자가 데이터를 받은 후에 송신자에게 확인 응답(ACK)를 보내야만 송신자가 다음 데이터를 전송할 수 있는 방식

3. 이렇게 함으로써 송신자와 수신자 사이의 데이터 흐름을 조절하고 오버플로우를 방지 → 신뢰성과 안정성을 보장하지만, 전송 속도가 비교적 느리다는 단점 존재

11. 오류 제어(Error Control)

1. 주요 기술 중 하나는 ARQ(Automatic Repeat Request)

2. 데이터 전송 중 오류가 발생한 경우, 송신자에게서 수신자로부터 재전송 요청을 받는 방식을 의미

[7~8강 배운점]
1. TCP 혼잡 감지(Congestion Control)

1. 재전송 타임아웃 (RTO: Retransmission Timeout)

1. 패킷이 손실되고 일정 시간 동안 응답을 받지 못하면 재전송 타임아웃(RTO)가 발생

2. RTO 타이머가 만료되면 TCP는 패킷이 손실된 것으로 간주하고 재전송

2. 중복 ACK (Acknowledgment)

1. TCP가 동일한 순서 번호에 대해 세 개 이상의 중복 ACK를 받으면 패킷이 손실되었다고 가정

2. 이를 Fast Retransmit이라 함 → TCP는 RTO 타이머가 만료되기를 기다리지 않고 빠르게 손실된 패킷을 재전송할 수 있음

2. 응용 계층(Application Layer)

1. 네트워크 응용 프로그램 간의 통신을 위한 프로토콜을 정의

2. 사용자가 인터넷을 통해 이메일, 웹 브라우징, 파일 전송, 동영상 스트리밍 등과 같은 다양한 네트워크 서비스를 이용할 수 있도록 지원

3. DNS 캐싱 (DNS Caching)

1. DNS 캐싱은 이전에 조회한 도메인 이름과 IP 주소의 매핑을 임시로 저장하여 다음 조회 시에 캐시된 정보를 사용

2. 이를 통해 DNS 조회의 성능을 향상시키고 네트워크 부하를 줄일 수 있다.

4. - 웹 캐싱(Web Caching)

1. 웹 페이지나 리소스를 로컬 저장소에 저장하여 다음에 해당 리소스에 접근할 때 원격 서버에 접근하는 대신 로컬에서 즉시 제공하는 기술

2. 캐싱은 네트워크 성능을 향상시키고 대역폭 사용량을 줄이며, 사용자 경험을 향상시키는 데 도움이 됨

5. MQTT (Message Queuing Telemetry Transport)

1. 경량 메시징 프로토콜로, 신뢰성 있고 효율적인 인터넷 통신을 위해 설계된 프로토콜

2. 주로 IoT (Internet of Things) 디바이스와의 통신에 많이 사용

# data[].attributes.body
6강

Network Layer

sender가 보낸 데이터를 reciever가 안전하게 받도록 함

packet 데이터 보낼 때마다 header에 주소(보내는 host, 받는 host)를 써서 보냄

Fowarding - 입력→출력

Routing - forwarding을 할 때 어느 곳으로 보내야 할지 주소를 보고 판단하는 행위

Circuit switching

미리 회선(circuit)을 예약 → 통화 → 통화 종료(회선 종료)

회선을 예약하기 때문에 real-time으로 오래 통화할 때 좋음

but 채널의 낭비가 존재

Message Switching

circuit을 만들거나 끊는 행위 없이 메세지를 보내는 방식

메시지가 길어지면 받는데 시간이 오래 걸림

메시지가 크면 이를 전부 저장해야 하는 라우터의 버퍼 사이즈가 커야 함

Packet switching

Message Switching의 일종

긴 메시지를 여러 개로 잘라서 packet 단위로 보내는 방식

라우터가 알려주는 길이 packet 마다 달라져서 도착할 때 순서가 다를 수 있음

but 순서를 재정비해서 수신자에게 보내기 때문에 문제x

패킷1을 보내는 사이에 패킷2를 보냄 → 시간 단축

잘게 자르면 무조건 좋은가? → 그런 건 아님. 적절한 패킷 사이즈가 중요

Routing Algorithm

Routing 테이블 → 각 header에 있는 수를 보고 어디로 갈 지 결정함(매우 중요)

Routing Algorithms - Routing 테이블을 만드는 과정

→ 각각의 라우터가 cost가 가장 적은 최적의 경로를 찾음

1. Link State routing algorithm = Dijstra’s Algorithm

각 노드가 이웃한 노드와의 cost를 알고 있음 → 이 정보를 서로 교환

모든 노드가 어떻게 연결되어 있는지 그림을 만듦

→ 알고리즘을 통해 Source에서 특정 노드까지 가는 경로 탐색

최적의 경로를 선택하여 routing table 만들기

1. Distance Vector algorithm = Bellman-Ford Algorithm

IP ← Routing Algorithms을 실제로 구현한 것

IP주소를 가지고 어떤 단말인지 알 수 있음

IP 주소 → class A,B,C,D,E 로 구분됨(Net ID와 Host ID의 쌍)

Net ID - 조직/기관 id (IP군을 통으로 구매)

Host ID - 컴퓨터에 할당

Net ID가 너무 많아도 Host ID가 너무 많아도 할당하기 곤란하기 때문에 둘의 비율이 비슷한 class B를 많이 씀

IP주소 ← 32비트를 10진수로 표기하고 있음

어떻게 IP를 효율적으로 쓸 것인가?

Host ID를 세부네트워크(Subnet ID)와 Host ID로 쪼게어 쓰기

→ Subnet mask

IP 주소의 고갈

새로운 버전 IPv6

CIDR : IP 주소의 Net ID와 Host ID의 비율이 너무 극단적임 → class와 상관없이 network와 host 파트가 얼마나 되는지 ‘/숫자(5bit)’를 알려주는 식으로 IP 주소 할당하는 방식

IP 주소를 어떻게 할당하는가?

-직접 할당

-DHCP: 정규 IP 주소가 아닌 임시 IP 주소를 할당 받아 사용하고 반납

IP 주소의 부족 해결

-NAT: 공적 IP + 사설 라우터 → 사적 IP

IP - Internet 프로토콜

ICMP- 네트워크 제어용(전송용x)

IGMP - 멀티캐스팅을 위한 프로토콜

ARP, RARP - Physical address를 IP address로 변환

인터넷은 망들의 망

각 Physical layer들이 별도의 언어를 씀 → 패킷 사이즈가 다를 수 있음

TTL - 라우터를 거칠때마다 숫자가 줄어듬 → 몇번의 hub를 거쳐 목적지까지 갔는지 측정

7강

Transport layer

: Sender가 보낸것이 목적지에 잘 도착했는지, 무슨 문제가 발생했는지 여부

UDP - 전송 손실이 있어도 상관없을 때

-best effort but, 최선의 결과가 아닐 수 있음

-멀티미디어 애플리케이션에서 스트리밍 할 때 사용

TCP - 속도보다는 정확도가 중요할 때, 에러가 없이 도착해야 할 때

Cogestion control - Cogestion이 발생했는데 어떻게 할것인지

Flow control-Sender와 Reciever 사이의 보내고 받는 속도 조절. sender가 reciver를 넘치지 않게 만들어 주는 방식

Sender가 데이터를 보내면 Reciver에서 잘 받았다고 ack-packet 보냄

Stop- and wait - ack가 올 때까지 기다림 → 효율이 안 좋음

Sliding-window - 여러 패킷을 보내고 ack가 올 때마다 window 사이즈를 움직이면서 다음 패킷을 보냄

-window size → sliding-window 최소화

Error control- 패킷이 가다가 생기는 에러에 관한 것

타임아웃- 일정시간안에 ack를 받지못하면 다시 전송을 시작함

Go-back

8장

Application layer

: 보낼 메시지와 포멧 결정. 애플리케이션을 인터넷에 쓸 수 있도록 도와주는 프로토콜

Application - 전체를 포함하는 것

DNS

컴퓨터마다 번호를 매기면 IP를 다 외우기 어렵기에 헷갈림 → IP 주소를 이름과 매핑하는 것(ex) www.postech.ac.kr)

분산 관리, 계층적 데이터베이스

gTLDs - 최근에 많이 증가함

ccTLDs - 국가 관련

Local name servers

Authoritative name servers - 내가 원하는 IP 주소와 host name을 변화시켜 주는 것을 갖고 있는 name server

Recursive resolution

IP 주소를 얻는 과정

local 서버에 물어봤는데 모르면 → 상위로 감 → 상위에서 모르면 → 더 상위로

iterative - 상위 IP 주소를 가르쳐줘서 알 때까지 상위에 직접 물어보며 탐색

보통 iterative와 recursive를 함께 사용

DNS cache

확인한 IP 주소를 저장

HTTP

호스트에 가서 파일을 가져와 컴퓨터에서 재생되도록 만듦

TCP 사용

웹 서버에 있는 내용을 가져와서 pc에 컴파일 해 마치 원래 사이트에 있던 것처럼 보여줌

멀리 있는 웹 서버의 내용을 Proxy 서버에 저장해 둬서 멀리까지 가지 않고도 웹 서버의 내용을 확인할 수 있게 함 → 웹서버와 Proxy 서버의 내용을 같게 해주는 것이 중요

MQTT

미리 구독하고 구독한 사람에게만 무언가를 보내주는 형식

Twitter가 대표적

CoAP

센서를 통해 CoAP 서버와 통신 → 서버가 HTTP방식으로 기존의 호스트(단말)에게 보내줌

인터넷의 호스트가 CoAP 신호를 이해한다면 HTTP 없이 게이트웨이를 거치지 않고 CoAP만으로도 통신 가능

MQTT와 CoAP 프로토콜을 모두 이해한다면 서버 동작을 함께 할 수도 있음

# data[].attributes.body
[6강] network layer & IP

*Circuit-switched networks / Packet-switched networks

-Circuit-switched networks: 옛날 전화방식으로 회선을 미리 예약해서 예약이 완성되면 그때부터 통화 시작함. 전화 끊으면 끝났다는 메시지와서 예약했던 회선을 끊어버림

Circuit establishment-Data transfer-Circuit termination의 단계로 이뤄짐

Circuit을 만들고 끊는 행위가 시간은 짧지만 오버헤드 될 수 있음

-Message Switching:미리 Circuit을 만들거나 끊는 행위 없이 바로 메시지 보내는 방식

Packet-switched 방식은 message switching의 일종으로 패킷 보낼 때 미리 커넥트 없이 데이터 쪼개서 패킷 단위로 쪼개 보냄

-Circuit-switched보다 packt-switching이 더 시간이 단축됨

Cf) 전송시간과 패킷 사이즈의 효과: 패킷 사이즈를 증가할수록 시간은 단축되지만, 항상 많다고 시간이 단축되는 건 아님. 헤더가 데이터부분과 같게되는 경우엔 헤더가 상당한 영향을 미치므로 오히려 시간이 증가하기도 함.

*Dijkstra 알고리즘: 최단경로 탐색 알고리즘

[7강] Transport Layer

*Stop and wait flow control

-프레임을 하나 보내고 ACK가 올때까지 기다리는 방법으로 절대로 오버플로가 일어날 일은없지만 너무 느리다는 단점 존재

*Sliding-window flow control

여러개를 동시에 보낼 수 있는데, 동시에 보낼 수 있는 사이즈가 정해져 있음. 이 사이즈를 윈도우라고 함

*Go-Back-N ARQ

전송된 프레임이 손상되면 확인된 마지막 프레임 이후로 보내진 프레임을 재전송하는 기법

[8강] Application Layer

-응용계층으로서 ISO 7계층에서 가장 상위 계층

-메시지를 언제, 어떻게 보내고 반응해야 하는지에 대한 규칙

-TCP, UDP에 의해 제공된 커뮤니케이션 서비스를 이용

-HTTP는 웹 애플리케이션의 한 종류

-User agent: 사용자와 애플리케이션 사이의 인터페이스

-Application Layer의 프로토콜: DNS, Web and HTTP, 전자메일, Telnet, ftp..

*DNS(Domain Name System)

-문자로 된 도메인 네임을 컴퓨터가 이해할 수 있는 IP주소로 변환하는 역할하는 시스템

IP주소와 호스트 이름간의 변환을 제공하는 분산/계층 데이터베이스

-서버 계층

1)루트도메인: 전세계 13대가 구축되어 있음

2)최상위 레벨 도메인

3)2계층 레벨 도메인

# data[].attributes.body
AIoT 6강-1

Circuit switching – 엣날 전화방식, 통화를 할 사람과의 회선을 예약하고 통화를 하고circuit을 끊음

장점: 예약을 하기 때문에 오랜 통화에 딜레이 없이 좋음

단점: 채널의 낭비가 생김

Message switching – 바로 메시지를 보내는 방식 (packet이 message방식의 일부)

Packet switching – 데이터를 packet단위로 쪼개서 보냄. (packet을 많이 쪼갠다고 무조건 빠른건 아님)

*Routing algorithms

- 각각의 라우터 연결의 최적연결을 찾는 것

1) link state routing algorithm (Dijkstra’s algorithm)

- 라우터 연결의 코스트가 낮은 최적의 경로를 도출

(연결된 노드 경로 정보가 각 노드에 다 뿌려짐)

2) distance vector routing

- 이웃한 노드의 routing table을 받아서 이웃한 노드와의 코스트를 더해서 최적의 경로 도출

hierarchical routing – 효율적인 경로 관리 방법으로, 상위 계층에서는 각 지점에 대한 라우팅 정보를 가지고 있고 하위 계층에서는 해당 지점 내부의 라우팅을 담당하는 방식

AIoT 6강-2

- Routing algorithm을 실제로 구현하는 protocol -> IP

- IP주소는 net ID, host ID로 구분됨

IP주소는 5가지 class로 구분

Class A: net ID(7), host ID(24), 2^7만큼 기관에서 사갈 수 있음, 2^24만큼 컴퓨터에게 할당 가능

Class B: net ID(14), host ID(16), 2^14만큼 기관에서 사갈 수 있음, 2^16만큼 컴퓨터에게 할당 가능

Class C: net ID(21), host ID(8), 2^21만큼 기관에서 사갈 수 있음, 2^8만큼 컴퓨터에게 할당 가능

- A는 사갈 수 있는 기관이 너무 적고, B는 할당 받을 수 있는 컴퓨터가 너무 적음, 따라서 B를 많이 사용

- host ID를 Subnet ID와 둘로 쪼갤 수 있음

IP주소의 문제점

- 인터넷의 폭발적인 성장으로 너무 사용자가 많아졌기 때문에 IP주소가 모자라짐

- 해결책으로 새로운 버전인 IPv6을 만들었지만 사용하려면 모든 장비를 바꿔야하므로 비용이 너무 많이 듬

IP주소 부족 문제의 해결법

CIDR

- IP주소를 효율적으로 표현하는 방식으로 ex) 200.23.16.0/27에서 27은 network부분의 자리수를 지칭함.

- 유연하게 part를 쪼갤 수 있음 (class B,C 중간을 만들 수 있음)

DHCP

- 정규 IP주소가 아니라 임시IP주소를 할당 받아서 거기서만 쓰고 반납하는 방식

NAT (network address translation)

- IP주소 하나로 많은 사용자를 운영하는 법

- 공적으로 할당받은 IP주소를 두고 비공식적인 주소를 각 사용자에 할당하여 사용 후 공적인 IP주소로 변환하여 신호를 주고받는 방식

ICMP – 망,네트워크 관리 역할, 제어의 역할을 하고 통신X

IGMP – 멀티태스킹을 위한 프로토콜

AIoT 7강

Transport layer protocols

- sender와 receiver사이에 데이터 전송이 이루어짐

- 네트워크에서 두 장치 간 신뢰성 있는 통신을 제공하는 역할

- UDP, TCP 두가지 방식 존재

UDP: 간단한 프로토콜, 속도와 실시간성이 중요, 전송이 제대로 안돼도 큰 문제없는 경우에 사용

TCP: 신뢰성과 안정성을 중요시하여 속도보다는 정확해야함

- Congestion control: 데이터 전송 중 네트워크 혼잡을 관리하는 메커니즘

- End-to-end Flow Control: 데이터의 안정적인 전송을 위해 송신,수신측 간 데이터 흐름을 조절하는 메커니즘

- Error Control: 데이터 전송 과정 중 오류감지, 데이터 재전송, 중복된 패킷 감지

TCP Flow control

- sender가 receiver가 받는 속도보다 더 빨리 보내서 넘치는 현상을 제어

1) stop-and-wait: 하나 보내고 다 받으면 다음 데이터 전송하는 방식 (너무 오래 걸림)

2) sliding window: 여러 패킷을 한번에 보내는 방식 (무한대로 동시에 많이 보낼 수 있는 것이 아니라 조절해야함, 그 크기가window size)

ACK: 데이터를 정상적으로 수신했음을 알리는 메세지

Error control

1) Stop-and-Wait ARQ

- reveiver가 데이터를 받지 못한경우 sender가 다음 데이터를 보내기 전까지 ACK신호가 오지 않으면 sender가 다시 그 데이터를 전송함

- 데이터가 누락된 것이 아니라 ACK신호가 제대로 가지 않을 경우에 다시 데이터를 전송해서 받은뒤 중복된 데이터를 제거함

2) Continuous ARQ (한번에 여러 패킷을 전송하는 방식, sliding window)

Go-Back-N: 여러 패킷을 전송했을 때 중간에 한 데이터가 누락되었으면 그 앞부분 데이터를 제외하고 그 부분부터 다시 재전송, 0~8데이터중 1,2번 ACK가 누락되었지만 3번 ACK가 timeout에 걸리지 않고 전송이 됐다면 1,2번도 제대로 전송됐다고 생각하고 뒤의 데이터들을 그대로 전송, 하지만 1,2번ACK가 누락됐고 timeout에 걸렸다면 다시 1번부터 데이터 재전송 후 중복된 데이터 제거

TCP Congestion Control (교통체증 제어)

Ssthresh (slow start threshold): 임계점(threshold)을 정해놓고 임계점을 넘어가면 선형적으로 윈도우 크기를 증가시킴

- 윈도우 크기를 크게 올리다가 ssthresh를 넘어가면 선형적으로 증가시키고 그러다 혼잡이 발생하면 ssthresh값을 현재 속도의 절반으로 설정후 다시 사이즈를 처음값에서부터 시작하여 반복, 처음값이 아닌 새로 설정된 ssthresh값부터 다시 시작하는 방식도 존재(congestion control by 3 duplicate ACKs)

AIoT 8강

Application layer protocol

Application은 Application layer protocol을 포함하는 더 큰 개념

- Application은 문서형식(HTML), 웹 브라우저, 웹 서버, Application layer protocol(HTTP)로 구성됨

User agent - 웹브라우저, 이메일 등 유저에게 보이는 것

Application layer protocol – DNS,HTTP,etc 등

DNS (Domain Name System)

- 통신이 가능하게 만드는 가장 중요한 것

- 도메인 이름을 IP주소로, IP주소를 도메인 이름으로 변환하는 시스템, ex) www.postech.ac.kr

- IP주소보다 사람이 기억하기 쉬운 텍스트 형식으로 나타내기 위해 등장

- 중앙으로 모아 운영이 하는게 아니라 분산해서 함 (교통체증, 유지보수를 위해서)

Root Domain - .

Top-level Domain – edu, gov, com, net 등

Country Code Top level Domain – kr, us 등

Second-level Domain – mlt, google, att, postech 등

도메인 이름을 IP주소로 바꿔주는 방법

1) Recursive resolution – 알때까지 거슬러서 물어본 뒤 알게되면 다시 쭈욱 전달해서 돌아옴 (노드 수가 부담됨)

2) Iterative resolution – 한번 물어보고 돌아오고를 반복

DNS cache

- 어떤 사이트의 IP주소를 알게되면 한번 쓰고 지우는 것이 아닌 컴퓨터에 일정 시간동안 저장해 놓는 것

Web caches

- 웹 서버와 사용자 간 트래픽을 줄이기 위해 사용 되는 임시 저장소 (proxy server)

MQTT

- Machine-to-Machine 통신, 사물인터넷에 사용 (IoT데이터 전송 프로토콜)

COAP

- 제약이 있는 장치들을 위한 포로토콜, 사물인터넷에 사용

# data[].attributes.body
#6 Network Layer

Network Layer function

Routing: 주소를 받아 보낼 곳을 결정

Forwarding: 패킷을 이동시킴

Circuit Switching: 미리 Circuit을 예약한다.

Message Switching : 긴 메시지를 분할해서 보냄

Routing Algorithms : 최적의 경로를 찾는 알고리즘

Link state routing algorithm

Distance vector routing

IP addresses: A, B, C, D, E Class로 나눌 수 있다.

Subnet addressing: Host ID를 기관에서 세부 ID로 쪼개 쓰는 것

IP address 할당

Manual configuration

DHCP:임시로 IP를 할당받는 것

NAT: 할당받은 IP를 여러 Host에 할당하여 이용하는 것

#7 Transport layer

Transport layer protocols: 메세지가 잘 도착했는지 확인 하는 레이어

TCP: 정확해야 함

UDP: 간단함, 전송이 제대로 안되어도 상관없음

TCP flow control: sender와 receiver 사이의 속도를 조절하는 것

Stop-and-wait : 한 개씩 받고 확인

Sliding- window: 여러 개를 보내고 올 때 마다 하나씩 더 보냄

Error control

Stop-and-wait: 한 개 보내고 ack를 받는다. 일정 시간 이상 받지 못하면 timeout

Go-Back-N: Sliding- window를 썼을 때의 방식

TCP Congestion Control: 혼잡 상황에서 관리하는 프로토콜

#8 Appliciation Layer

Application Layer protocol: Application을 쓸 수 있도록 도와주는 프로토콜

DNS: IP address를 32bit address로 변환해서 알려주는 것

DNS cache: 얻은 IP address를 일정기간 보관

Web and HTTP: HTML, JPEG등의 파일을 가져와서 사용하게 하는 것이 Web, HTTP는 TCP를 사용

MQTT: 미리 subscribe하고 order를 받으면 바로 보내준다.

CoAP

# data[].attributes.body
6강 1부 Network Layer & IP

1.     Network Layer Services : 데이터를 전달하는 역할

2.     Routing : 주소를 보고 데이터를 어느 곳으로 보낼지 결정

3.     Forwarding : 받아서 전달하는 행위

4.     Circuit-switched(1/2세대) <> Packet-switched(3세대)

-circuit : 옛날 전화방식으로 유선전화망, 미리 서킷을 열고(예약) 끊는 행위 필요.

장점 : 오랜시간 통화할 때 좋음, 딜레이 없음

단점 : 채널의 낭비가 존재

-message switching : 미리 서킷 만드는 것 없이 바로 보내는 방식 ! (packet은 message의 일부이다.)

문제 : out of sequence delivery

5.     Routing Algorithms : router가 table을 관리하고 최적의 경로를 찾는다.

2가지가 있다.

-       Link state routing :  same topology & shortest path

-       Distance vector routing :  가까운 라우팅 테이블의 최적 cost를 계산하고 설정한다.

소감 : 오늘 수업에서 다루었던 데이터 전달방식에 대해 더 자세히 배울 수 있어 좋았다. 특히 circuit 방식과 packet방식에 대해 깊이있게 알 수 있었다.

6강 2부 IP

1.     IP address : 5가지 class로 구분

Class A : 0, net id 7(기관 아이디), host id(컴퓨터에 할당 24비트)

Class B : 10, net id 14, host id 16

Class C : 110, net id 21, host id 8

Class D : 1110, multicast address

Class E : 11110, reserved for future use

Class a의 2의 24승과 class c 2의8승 사이인 class b를 가장 많이 쓴다.

Dotted Decimal Notation : 32비트를 8비트씩 쪼개서 10진수로 쓴다.

2.     Subnet Addressing : 호스트 아이디 부분을 기관에서 사서 세부 네트웍으로 쪼개서 쓸 수 있다

호스트 16비트를 어떻게 효율적으로 쓸까? 건물이 여러개인데 랜덤하게 숫자를 배열하기 보다는 앞의 8비트를 가지고 건물 한층을 주자, 나머지 호스트에는 건물의 단말기에 주자! 하면 체계적으로 관리할 수 있겠죠. 포항공대도 8비트를 서브넷으로 사용!

Ex) 141.223.108(인공지능연구원 3층).201(한 호스트)

255.255.255(8비트 전체 서브넷).0(호스트)

3.     Problems of IP address scheme :

-       IP address가 모자르게 되었다.

-       IETF solutions 해결책 모색 (IPv6 – 새로운 버전을 만들자!)

-       CIDR : 기존의 32에서 27을 빼면 나머지 5비트가 host part라는 것을 알려주는 방식으로 IP address를 할당하는 방식 (dynamic하게 나눌 수 있다!)

-       IP address를 어떻게 할당하느냐?

1)     Manual configuration (하나를 할당받아서)

2)     DHCP : 정규 방식이 아니라 임시 IP address를 할당받아서 거기서만 쓰고 반납하는 방식

-       부족한 IP address를 해결하는 방법 NAT (network address translation) : IP address 1개를 가지고 엄청 나게 많은 호스트를 연결하는 방식 !

Ex) 1개 address > router > 내부 컴퓨터 3대

1 Host sends datagram > 2 NAT router changes datagram source addr 샌더를 자기자신, 리시버는 그대로 > 3 Reply (리시버를 샌더로, 샌더를 리시버로 변경) > 4 NAT router changes datagram (샌더는 그대로, 리시버는 변경)

4.     IP (Internet Protocol)

-       Internet protocol layering (다양한 어플리케이션, application layer은 다양한 프로토콜로 제작) > transport layer(2가지) > network layer(3가지 icmp는 제어용/igmp는 멀티캐스트용) > data link layer( ARP / RARP >> physical address를 ip address로 변환할 때 사용 )

5.     Fragmentation usually occurs at a router somewhere along the path between S and D >> 네트웍이 잔뜩 모여있는 것을 연결하는 망인데 이 physic한 네트워크를 각기 다 다른 별도의 language를 쓰는 세상이라고 생각하면 된다. 패킷 사이즈가 다를 수 있으니 1000사이즈가 800이나 250을 갈 때 쪼개져야 하니까 Id, offset이 들어가게 된다.

6.     IP datagram header format의 TTL : time to live : sender가 receiver 까지 보낼때까지 걸리는 시간 측정! 라우터를 거칠 때마다 숫자가 한개씩 줄어든다. 즉, 몇번의 홉을 거쳐서 destination까지 가는지를 측정하고 있다.

소감 : 부족한 IP address를 해결하는 여러가지 방법에 대해 배워 유익했지만 전체적인 내용을 잘 이해할 수 있도록 추가 공부가 필요할 것 같다.

7강 Transport Layer

1.     Transport layer : sender와 receiver 사이에 데이터 전송이 이루어지며 앞에 있는 레토레이어에 IP가 주소를 가지고 패킷 단위로 보내서 destination에 도착시킨다.

잘 도착했는지? 트레픽이 몰려 딜레이가 있는지 등 여러가지 상황이 발생할텐데 이러한 여부들을 확인하게 된다.

1)     TCP : 정확성이 높을 때 사용, 실수란 있어서는 안된다.

-       까다로움, 잘못전달된 패킷 제거, 전송중 사라지면 retransmission, 다양한 컨트롤

-       **Congestion control : 고속도로가 밀려서 전송이 제때 안되었을 때 어떻게 할 것인가?

Ø  TCP Congestion Control : 트래픽 개수 줄이는 방식

-       **End-to-end Flow control : 샌더와 리시버 사이의 보내고 받는 속도 조절

Ø  샌더가 리시버를 넘치지 않게 만드는 방식

>> stop-and-wait : 보내고 스톱 ack올때까지 기다리고 (비효율)

>> pipelining : 동시에 여러개 보내서 계속 보내는 것(효율 3배)

>> slicing-window 방식 : 여러개를 보내고 올때마다 한개씩 더 보내는 방식

-       **Error Control : 중간에 가다가 노이즈 때문에 error 꼈을 때

l  Window size = minimum of receiver`s advertised window, congestion window

l  Error control : timeout은 에크가 올 때까지의 시간보다 커야한다.

l  Go-Back-N ARQ

1)     Error-free operation : window size가 3이라면 3개를 먼저 보내고 기다린다.

2)     Corrupted data packet : 에러가 나면 그 번호로 들어가서 나머지를 다 보내는 방식

3)     Corrupted ACKs

2)     UDP  : 좀 잃어버려도 상관없고 전송이 제대로 안되어도 문제 없는 경우 사용

-       No frills, best effort(잘되면 좋지만 안되면 어쩔 수 없다.), Connectionless, often used for(패킷 사라져도 상관 없다.)

-       Source port와 destination port가 있어야함 헤더사이즈 8bytes

소감 : TCP와 UDP의 방식에 대해 세세히 알 수 있어 유익했고, TCP가 오차가 없어야 함을 알게 되어 유익했다.

8강 Application Layer

1.     Application Layer :

-       Application layer protocol is one piece of application

-       Rules for when and how processes send & respond to messages

-       User agent : user한테 보이는 application

-       Application layer protocols : DNS, Web and HTTP, telnet 등

1)     DNS : internet hosts, routers have / DNS공간의 수직구조

-why not centralize DNS? 4가지( single point of failure, traffic volume, distant centralized database, maintenance)

- Recursive resolution : host가 물어보면 local name에 물어보고 모르면 상위로 root까지 또 모르면 ns 또 모르면 ns.cnn까지 그리고 반대로! (root가 부담이 많이가서 잘 사용 하지 않는다.)

- iterative : 1:1로 물어보면서 확인하는 것.

현실적으로는 recursive와 iterative 함께 사용한다.

-DNS cache

2)      Web and HTTP : 내 컴퓨터에서 재생되게 만드는게 web application이고, 그 역할을 하는게 HTTP이다.

-       HTTP : web의 application layer protocol

-       Web caches : proxy server ( caching proxy server와 web server 내용이 같게 만드는 것이 중요하다. )

2.     Iot and Internet Protocols

1)     MQTT : 온도센서를 브로커에게 보내서 subscribe 한 사람들에게 보낸다.

2)     CoAP : 기존의 단말 호스트에 보내주는 방식 ( 코압 서버는 클라이언트 노드와 HTTPS를 안다. )

3)     MQTT & CoAP : 동작을 같이할 수 있다.

소감 : application layer와 internet protocols에 대해 배울 수 있어 유익했다. 특히 recursive resolution의 방식을 배울 때 흥미로웠다.

# data[].attributes.body
# 6강 Network Layer/IP
## Network Layer Service
packet이라는 데이터를 보낼 때마다 ip address라는 받는 사람, 보내는 사람의 주소를 붙인다.

### Two Key Network layer functions
1) Forwarding : 데이터를 라우터에 받아서 출력으로 보낸다 , 전달하는 행위
2) Routing : 어느 곳으로 보낼지 주소를 보고 판단하는 행위

### Taxonomy of Network
1) Circuit-switched networks: 1세대
* 전화를 걸면 회선을 미리 예약해서 예약이 완성되면 그 때부터 통화가 된다. 통회 다 되면 회선 취소
* 장점 : 한번 circuit이 예약되면 realtime에 좋다
* 단점 : 낭비가 심하다
2) Packet-switched networks : 3세대부터
### message switching
* 어느 한 쪽이 가다가 밀리게 되면 라우터가 다른 길도 알려준다(고속도로에서 다른 경로로 가는 것, 하지만 결과에는 문제가 없다.)
* 근데 메세지가 크면 하나 다보내고 그다음꺼 보내므로 버퍼의 크기가 커야됨
### Packet Switching
* 패킷을 보낼 때 미리 커넥션 없이 패킷으로 쪼개서 보낸다.
* 패킷을 짤라서 pipeline을 한다.
* 시간을 단축시킨다.
* 근데 헤더가 많이 필요하게 되므로 너무 많이 자르는 것도 안 좋을 수 있dma
### Routing Algorithms
* 라우터들이 각자 스스로 계산을 한다.
1) Link State routing
* Dijkstra’s Algorithm
* 서로 정보를 다 공유하고 있다
2) Distance vector routing
* Bellman Ford Algorithm
* 자기 이웃까지 정보만 알고 있다.
* 이웃한 노드로부터 정보를 받아서 계산한다
### Hierarchical routing
실제로는 어떤 단위가 있는데 ‘AS’가 있어서 대표인 애들끼리 하고 그 다음에 내부적으로 본다

# IP(Internet Protocol)
## IP addresses
4byte ,32bit,
각각 ip는 net ID, host ID로 구성되고
Ip 종류는 크게 5가지 클래스로 구분됨
1. Class A
Net ID 7비트를 통째로 사서 기관명 같은걸 붙이고 나머지 24비트에 개인 컴퓨터 담당
2. Class B

## Subnet Addressing
* 만약 포항공대가 class B를 샀다고 치자, 나머지 host ID를 얼마나 효율적으로 쓸 것인가
* Host ID를 가지고 잘라서 8비트, 8비트 쪼개서 쓰는 것
* Subnet Mask
* 외부에서 그걸 어떻게 쪼갰는지 알게 하기 위해서
### Problems of IP address scheme
Ip 처음 만든 사람은 이게 이렇게 잘될지 몰라서 이게 부족하게됨
1. IPv6 : IP자체를 바꾸자, 근데 이게 하루아침에 되는 일이 아님
2. CIDR : short-term solution
* Host ID가 24비트면 너무 크고, 8비트면 너무 작아서 중간이 없네
=> Class ABC 상관없이
* /27 같이쓰면 32-27 = 5비트가 host part다 라고 하는거
* IP address를 아낄 수 잇다
### host IP 를 어케 할당하느냐?
1. Manual configuration : 실제 포항공대
2. DHCP(Dynamic Host Configuration Protocol) : 스마트폰, 정규가 아니라 임시로 할당받고 쓰고 반납한다
* NAT(Network Address Translation
* DHCP를 써가지고 가장 많이 쓰는 방식
* IP address 하나 가지고 엄청 많은 호스트를 연결할 수 잇는 방법
* 내부기관에서 공적에서 받은 부분/ 사적으로 발급하는 부분
## Internet protocol layering
1. Application Layer
2. Transport Layer
3. Network Layer
3-1 ICMP : control, 망관리, 제어용
3-2 IP : 실제로 통신에 사용되는거, 데이터는 ip로 간다
3-3 IGMP : group, 멀티태스킹을 위한 용도
5. Data Link Layer
## IP packet의 포맷
Ip는 20바이트의 header가 있다 그 뒤에 실제 데이터가 들어감
### 패킷이 쪼개지는거
인터넷이란 망들의 망, 네트워크가 모여있는거라서 각자 정의되어 있는 패킷 사이즈가 다르기 때문에 여러 네트워크를 지나다보면 1000으로 시작해도 800지나가면 쪼개진다~
### time to live
몇 번의 hop을 거쳐서 dest까지 가는지

# 7강 Transport layer protocols
sender와 receiver 사이에 메세지 전송이 이루어지고 ip가 패킷단위로 보내는데 중간에 에러는 안 났는지 딜레이는 있는지 등등을 transport layer에서 잘 도착했는지 확인하는 역할을 한다
1. TCP
* 중요한거 무조건 정확해야되는거
* 깐깐
* 은행같은거, 에러 있으면 안됨
* ~~ control
2. UDP
* 좀 잃어버려도 상관없는거
* 털털
* 화질이 좀 찌그러지고 소리 좀 이상해도 신경 안쓰이는거
## UDP
* Best effort : 노력은 해보겟다 근데 안되면 어쩔 수 없지
* Connectionless : 미리 연락하지 않고 그냥 보냄
* 멀티미디어 스트리밍
* header 8바이트
## TCP
1. Congestion control
* sender가 데이터 보냇는데 고속도로 막힌 것처럼 밀려서 제 때 안되면 어떡할건데에 대한 문제
2. End-to end Flow control
* sender와 receiver 사이에 보내는 속도와 받는 속도 조절 위해서
3. . Error control

### TCP Flow control
sender는 슈퍼컴퓨터 receiver는 꾸진컴퓨터일 때 그럼 버퍼가 넘치게 된다
Receiver는 받으면 받을 때마다 신호를 보내서
* Stop-and-wait flow control
하나 보내고 잘 받았다, 하나 보내고 잘 받았다 ACK , 비효율적,
=> pipelining해서 3개 한번에 보내고 이런식으로 올 때마다
* Sliding-window flow control
여러 패킷을 보내고 받는대로 윈도우 사이즈를 옆으로 이동시킨다
### Error Control
* Stop-and-wait ARQ(Automatic Repeat request)
1. Error-free operation
2. Lost data packet
=> ack가 올 때까지 timeout를 설정해놓고 안 오면 아 못받았구나 하고 다시 보내게
3. Lost ACK timeout
=>근데 만약 ack가 사라진거라면?? 그래도 ack는 못 받은거니까 retransmission하게 되고 receiver는 아까 받은거 또 받게 되니까 버리고 발신자가 ack 못보냈다고 생각하고ack다시 보내준다
* Continuous ARQ
* Go-Back-N ARQ , based on sliding window
1. Error-free operation
2. Corrupted data packet
=> 중간에 3번만 안 왔으면 뒤에꺼 왔어도 뒤에꺼에 대한 ack안보낸다. 에러나면 그 방식으로 돌아가서 다시 다 보낸다
3. Corrupted ACKs
=> ack가 사라진거라면
a. sender입장에서 3번 ack는 왔는데 2번 ack가 안 왔어도 아 이전꺼는 다 받았겠구나 하고 생각하고 그냥 계속 4번 5번 보낸다
b. timeout되기 전에 3번 ack못받았는데 1번도 못받음 1번 ack에 대한 timeout 걸려서 그럼 1번 부터 보냄

### TCP segment Format
udp는 8바이트인데 얘는 20바이트

### TCP Congestion Control
1. Congestion control by timeout
처음에 ack이 잘오면 window사이즈가 1인데 계속 ack잘 오면 window사이즈 늘리다가 (threshold까지는 확 늘다가 그 뒤에는 천천히 증가)timeout이 오면 threshold를 반으로 설정한 뒤 window사이즈를 아예 1로 줄이고 시작 이게 slow start
2. Congestion control by 3 duplicate Acts
Timeout 되기 전에 3번은 안왔는데 4번, 5번은 받았으면 dupack이라고 나 뒤에건 받았다~ 라고 알려줌 그럼 sender도 아 쟤 3번만 못받았구나 하고 알게됨 => threshold를 반으로 줄이고, window사이즈를 거기서 그 지점부터 시작한다.

# 8장 Application Layer
맨 꼭대기 레이어!
* Application : 전체를 말하는거
* Application layer protocol : 그 application을 인터넷이 쓸 수 있도록 도와주는 protocol ex) HTTP같은거
## DNS(Domain Name System)
통신이 가능하게 만드는 것 중에 가장 중요한거
www.naver.com 이렇게 치면 ip는 안 써줫는데 어떻게 거기로 들어가지지?
=> DNS 덕분에 가능~
전화번호를 사람이름으로 저장하는 것처럼~
* why not centralize DNS
하나에서 다 관리하면 걔가 고장나면 큰일남
매번 걔한테만 물어보면 트래픽 몰림
* Distributed, Hierarchical

### * Root name servers
그 밑에 다양한
* gTLDs(Generic Top Level Domains)
Com, gov, org,,, 등등등
* ccTLDs(Country Code Top Level Domains)
.us, .jp, .kr 등등등

1. Recursive resolution
root에 너무 부담이 된다.
2. Iterative resolution
local이 모르면 모르면 당사자가 직접 root한테 물어보고 걔도 몰라 그럼 당사자가 또 직접 ns.com한테 물어본다.
* 근데 실제에서는 1번 2번 섞어서 쓴다

## DNS cache
매번 모를 때마다 물어보지 말고 한 번 쓰고 지우지 말고 컴퓨터에 일정시간 저장해놓는다.
얼마전에 썼던거 저장

## Web and HTTP
Web은 application
HTTP는 application layer protocol
* HTTP
TCP를 쓴다
Web caches
* Caching Proxy Server
만약에 node가 너무 많다면(ex. 월드컵 중계) proxy server를 하나 두어서 거기서 clinet의 request를 처리하게 함
proxy server와 web server가 그 때 그 때 내용이 같게 만들어주는게 중요

## IOT에서 많이 쓰는 몇가지
### MQTT(Message Queue Telemetry Transport)
트위터같은거, 미리 구독하고 구독한 사람들한테 보내는것과 같은 원리
브로커는 사전에 온도센서값을 원하는 호스트를 알고 잇음
### CoAP(Constrained Application Protocol)
https의 slim한 버전?

# data[].attributes.body
6강

Network Layer Services

라우팅

하나 이상의 네트워크에서 경로를 선택하는 프로세스

어느 곳에 보내야할지 정하는 것

forwading

데이터를 받아 전달하는 행위

Circuit switched

circuit 을 만들고 데이터를 전송하고 circuit을 끊는 과정

오랜 시간 가능, but 낭비 발생

유선 전화망

Packet switched

패킷 단위로 나누어 보냄 → 순서가 바뀔 수 있지만 재정비 가능

미리 예약X

Massage switching

메시지를 패킷으로 분할하여 전송하는 방식

Routing Algorithms

각자가 스스로 계산을 하는 알고리즘

가장 최적의 경로 (비용, 시간)

Link State routing algorithms

모든 라우터들이 다른 링크 cost에 대한 정보를 모두 알고 있는 경우

Dijkstra 알고리즘즘

Distance vector routing

이웃하고만 정보를 주고 받음

hierarchical routing

IP addresses

32바이트

5가지 클래스 → class B를 가장 많이 사용

문제점: 주소의 고갈

IETF IPv6(새로운 버전을 만들자)

CIDR: ip address 할당

NAT: 한정된 하나의 공인IP를 여러개의 내부 사설 IP로 변환

subnet Addressing

subnet mask

7강

Transport Layer protocols

Sender/Receiver 사이의 정보가 잘 도착했는지 확인

UDP: 비연결형, 낮은 신뢰성, 속도 빠름

TCP: 안정적, 순서, 에러없이, 혼잡제어,

congestion control: TCP sender가 어느만큼의 rate로 receiver에게 데이터를 보낼 수 있을지를 제한하는 역할

Flow Control: sender와 receiver 사이의 전송 솓고 조절

Error Control: 에러 발생 여부를 보면서 대응

8장

application layer protocols

서비스를 제공하고 제공받기 위해서 어떤 형식으로 메시지를 주고 받아야 하는지의 프로토콜들이 모여있는 레이어

DNS(Domain Name Stytem)

인터넷에서 목적지를 찾아가기 위한 주소

호스트 이름을 ip주소로 해석

server 알아내는 법

1. Recursive

2. Iterative

→ recursive와 iterative를 같이씀

DNS cache

IP 주소 일정시간 저장

MQTT(Message Queue Telemetry Transport)

미리 구독한 사람들에게만 컨텐츠 제공

CoAP(Constrained Application Protocol)

간단한 전자 기기들의 인터넷 통신을 지원하기 위한 프로토콜

HTTP와 비슷

# data[].attributes.body
[6강 1부]

Network Layer Services

- 데이터 보낼 때 헤더에 주소붙여서 보냄

- 중간에 파란 라우터가 ip address를 보고 보냄

2. Taonomy of Network

1) circuit switched

전화걸 때 회선 예약

채널의 낭비가 존재

2) Packet switched

message switching의 일부

메시지가 크면 packet을 잘라서 시간 단축

3. 라우팅 테이블 중요

Routing ALgorithms : 라우팅 테이블 만들어줌

A > F로 가는 빠른 경로

최적의 경로를 만들어주는 알고리즘

1) Link State routing

Dijkstra’s Algorithm > 이 사람이 만듦

A에서 F로 가는 가장 최적의 경로

(A/A>D/A>D>B/A>D>E>B/A>D>E>B>C)

다시보기

2) Distance vector routing

네트워크의 각 라우터가 주변 라우터로부터 경로 정보를 교환하고 최적 경로를 계산하는 분산 방식으로 동작

[6강 2부]

IP Addresses

5가지 클래스로 나누어짐

기관에서 IP군을 통째로 구매

나머지 24비트는?

1) net

2) host

2. NAT

[7강]

Transport Laye protocols

Sender Receiver

TCP : 깐깐함. (ex. 은행 송금할 때 등등)

*기억해 (congestion control/End-to end Flow Control/Error Control)

congestion control : 상당히 안정적

UDP : 털털함 (ex. 스트리밍할 때 사용)

# data[].attributes.body
[6강]
Network Layer : ip address를 보고 라우터가 목적지까지
데이터를 받아서 출력층으로 보냄.
-circuit-switched networks : 미리 서킷 예약, 서킷 만들고 통화하고 끊기, real-time 에 좋음, 채널에 낭비가 존재

-message switching : 메세지가 길어지면 오래걸림
--packet-switched networks : 3세대부터. 미리 커넥션 없이. 순서 재정비 , 패킷을 잘라서 pipelining? 을 함. 시간 단축. 무조건 잘게 쪼갠다고 좋은 건 아님

routing algorithms : 라우터들이 스스로 계산
-link state routing : 자신의 이웃노드와 코스트 정보를 알고 있음
shortest path 알고리즘
-distance vector routing : bellman-ford 알고리즘

hierarchical routing : 대표 라우팅 선정, 라우팅 테이블 만들고 ...

[6-2강]
IP address : 현재 32비트 IP Address 사용, 5가지 클래스로 구분, class B 가장 선호,
-HOST ID 부분을 쪼개서 Subnet 으로 쓸 수 있음->체계적으로 관리 가능
->ip 주소의 고갈 문제->ipv6 만들자 ->장비를 바꿔야됨->CIDR
-CIDR: 기존에 class 방식 없이, class 는 중간이 없음, 슬래시 활용해서 ip 주소 할당
-ip address 부족 문제 해결 : NAT -내가 할당받은 ip주소는 하나(공적), 라우터가 연결, 사적 ip가 라우터에 보내고

[7강]
Transport layer protocols : sender 가 보낸 것이 잘 도착했는지 등에 대해 일을 함
-UDP : 잃어버려도 상관없고 전송이 안되어도 큰 문제 없음, 기본 골격만 유지하는 프로토콜,
-TCP : 속도보다는 정확해야 하는. (은행),

-congestion control : 제때 전송이 안되었을 때, 네트워크도 congestion 이 생김->트래픽이 몰려 라우터가 넘쳐 패킷이 los
threshold가 timeout에 의해서 패킷이 오지 않았다면 다시 1로 :slow start -> fast retransmit 은 1로 떨어지는 게 아니라 현재 threshold 의 반으로 떨어져서 linear하게 증가

-flow control : 보내고 받는 속도 조절(stop-and wait flow control : 하나보내고 잘 받았어->오래걸림->, sliding window flow control : 여러 개 보내고 패킷을 받는대로 window size 를 오른쪽으로 움직임, window size와 리시버가 ACK 보낼 때마다 보내는 사이즈 중에서 더 작은 값으로)

-error control :  패킷이 노이즈 등으로 에러가 떴을 때
1)stop and wait ARQ : ACK 가 올 떄까지 timeout 을 두고 기다림-> 받지 못하면 retransmission

2) Continuois ARQ
-Go-Back-N : 슬라이딩 윈도우 방식 썼을 때. 만약 한 패킷이 사라졌다면 리시버는 사라진 뒤에거 버림, 만약 ack 가 사라졌다면 그냥 계속, time out 전에 못받고 끝나면 다시 1번부터

[8강]
Application Layer
DNS : IP address 로 변환해서 알려줌, 서버들이 있고 그 밑에 top level 도메인이 있음-country code top level domains-
-recursive resolution
-iterative resolution
DNS cache : pc 에 일정기간 ip address 저장,
web and http : http는 tcp씀, web proxy server 에서 쓸 수 있게 ->web cashe
MQTT 프로토콜 : 센서값이 올 떄마다 값을 받길르 원하는 호스트에게 전달
CoAP

# data[].attributes.body
< 6강_1 > Network Layer & IP

- Forwarding : sender가 보낸 데이터를 receiver가 제대로 받을 수 있게 함 (전달)

- Routing : 어느 곳으로 보내야 할 지 주소를 보고 판단하는 행위 (판단)

- Circuit Switching : 회선을 미리 예약

- 장점 : delay가 없음

- 단점 : 채널의 낭비

- Message Switching : 긴 message를 잘게 쪼개서 보내기

- Packet Switching ( Message Switching의 일부 ) : packet을 보낼 때 예약 없이 packet을 쪼개서 보냄, receiver에 도착하는 순서가 다를 수 있음

- 장점 : 정보가 빨리 도착할 수 있음

- 단점 : header size가 커짐

- Routing Algorithms ( 경로 설정 알고리즘 )

- 최적의 경로를 찾는 알고리즘

- Link State routing

- 각각의 노드가 각각 연결된 노드에 대한 정보를 공유해서 연결된 모든 노드를 파악해서 최적의 경로를 찾을 수 있게 함

- Dijkstra’s Algorithm

- 모든 노드가 각각의 host와 topology를 알고 있는 상황에서 각 노드에 도달하는 최단 경로 계산하는 알고리즘

- Distance vector routing

< 6강_2> IP

- IP addresses : 어떤 단말인지 알 수 있게 함, 5개의 클래스로 구분됨

- Problems of IP address scheme ( class-ful addresses ) (주소의 고갈)

- 새로운 버전 ( IPv6)

- CIDR(classless Inter-Domain Routing ) : 기존 8비트 단위로 통신망부와 호스트부를 구획하지 않는 방법.

- NAT ( Network Address Translation ) :

# data[].attributes.body
6강
network layer
헤더에 주소를 써서 보냄(ip address)
라우터가 입력에서 받아서 출력으로 보냄
수신자 주소를 보고 어디로 보낼지 결정

circuit-switched
유선 통화 방식
packet switching
데이터를 패킷 단위로 쪼개서 보냄

routing algorithms
각각의 라우터가 최적의 경로를 찾는다
유명한 알고리즘~

ip address : 5개의 클래스로 구성
class A - 0으로 시작
class B - 1, 0으로 시작
class C - 1, 0, 0으로 시작
class D
class E

ip address 부족 해결
ipv6, CIDR, DHCP, NAT

7강
transport layer : 데이터 전송 관리(전송한 데이터 도착 여부 확인)
TCP/IP, UDP 프로토콜 사용
UDP - 간단함
TCP - 정확함. 에러 허용하지 않음
end-to end flow: 보내는속도-받는속도 조절
stop-and-wait flow: 하나씩 받음

8강
application layer
DNS : ip에 맞는 호스트 네임 변환해줌
DNS cache: 일정시간동안 ip주소 pc에 저장
http : 웹데이터 전송,처리
MQTT : 사전에 받은 값을 원하는 사람에게 전송
CoAP

# data[].attributes.body
<6강-1>
Network Layer : sender에서 보낸 데이터를 receiver쪽에 전달

Network Layer의 2개 기능
1) Forwarding : 라우터로 들어온 패킷들을 다른 라우터로 내보내는 과정
2) Routing : source로 부터 destination까지 어떤 경로로 갈지 결정하는 과정

Communication networks
1) Circuit switching
- 옛날 전화 방식
- circuit을 만들고, 데이터를 보내고, circuit을 끊는 순서
- 장점 : 오랜 시간 통화하기 좋음(딜레이 없음)
- 단점 : 채널에 낭비가 존재

2) Packet-switched networks
- 패킷을 보낼때 미리 커넥션없이 데이터를 패킷 단위로 쪼개서 보내는 것

Routing Algorithms : 송신 호스트에서 목적지 호스트까지 라우터 네트워크를 통과하는 경로 중 최소 비용 경로를 구하는 것

Two routing algorithms
1) Link State routing
- Dijkstra's Algorithm
- 이웃한 노드와 코스트를 알고있기때문에 서로서로 교환하게되면 서로가 누구와 연결되어있는지를 알 수 있음
- 최적의 routing path를 찾는 과정

2) Distance vector routing
- Bellman-Ford Algorithm
- 자기와 이웃한 노드에게만 데이터를 주고 받음

<6강-2>
IP addresses
- 어떤 단말인지를 알 수 있음
- host 부분과 net부분으로 나뉘어져 있음
- 5개의 클래스로 나뉨(A, B, C, D, E)
- 32비트를 8비트씩 쪼개서 10진수로 쓰는 것

Problems of IP address scheme
- 인터넷의 폭발적인 성장
- routing table size의 빠른 증가

CIDR
- 기존의 클래스처럼 나누는 방식이 아니라 /를 써서 다이나믹하게 나눌 수 있는 것

NAT(Network Address Translation)
- IP address 하나를 가지고 엄청나게 많은 호스트를 연결할 수 있는 방식

<7강>
Transport layer protocols
- TCP, UDP

UDP
- 간단한 프로토콜, 좀 잃어버려도 상관없고 전송이 제대로 안되도 큰 문제가 없음

TCP
- 속도보다는 정확해야되는 중요한 트래픽을 전송할때 사용
- 까다로움, 에러가 있으면 안됨

TCP Flow control
- sender와 receiver사이에 보내는 속도를 조절하는 것
- sender가 receiver가 넘치지 않게 만들어줌

Error Control
- 에러가 일어나는지 안일어나는지를 보고 대응

TCP Congestion Control
- 송신자가 network congestion을 감지하고 자신의 데이터 전송률을 줄이는 방법

<8강>
Application Layer protocols define
1) Types of message exchange
- 기본적으로 메시지를 요청(Request)하거나 응답(Response)하는 방식으로 동작한다.
2) syntax of message types
- 메시지가의 어느 필드가 어떻게 기술되어야 하는지, 각각의 필드는 어떻게 구분되는지
3) semantics of the fields
- 각각의 필드에 담긴 정보들에 대한 의미
4) Rules for when and how procces send & respond to messages
- 언제, 어떻게 프로세스들이 요청하고 응답해야 하는지

Application layer protocols
- DNS(Domain Name System)
- Web and HTTP
- Electronic Mail
- Telnet
- ftp
- etc

DNS(Domain Name System)
- 통신을 가능하게 하는 가장 중요한 것 중 하나
- 네트워크에서 도메인이나 호스트 이름을 숫자로 된 IP 주소로 해석해주는 TCP/IP 네트워크 서비스

# data[].attributes.body
6강 : Network Layer & IP

1부

Network Layer

-routing : 주소를 받아서 어디를 보낼지 결정하는 행위

-forwarding : 패킷을 전달하는 행위

Communication networks

Circuit switching - 장점 : 오랜시간 가능 / 단점 : 채널 낭비

Message switching > Packet switching

(많이 쪼갤수록 transmission 시간 줆
*한계치 있음)

Routing Algorithms

Router 각 최적의 경로를 찾는 알고리즘

1.Link state routing : 각각의 노드 cost 확인

2.Distance vector routing : 이웃하고만 cost 공유

-

2부

IP (Internet Protocol)

IP addresses

Class A
(0) (Net ID > Host ID)

Class B
(1 0) (Net ID = Host ID) 16 bits

Class C
(1 1 0) (Net ID < Host ID)

Subnet Addressing
(Host ID = Subnet ID + Host ID)

IP 주소 부족 및 중간이 없다는 딜레마 단점 보완

CIDR : 자신이 원하는 방식으로 Net ID, Host ID 나눔

DHCP : 임시 주소를 할당받아 사용하고 반납

NAT : 주소 하나로 여러 host 할당

-

7강 : Transport layer protocols

Internet Transport Protocols

UDP : 털털 간단

TCP : 정확 깐깐 에러허용X

Congestion control

End-to-end Flow Control ( 받는속도, 보내는 속도 조절)

Error Control ( 보낼 떄 )

TCP Flow control

Sender 가 데이터를 보내면 receiver가 잘 받았다는 ACK 패킷 보냄 (가능한 메모리 스페이스 정보 포함)

> Sender가 receiver를 넘치지 않게 속도를 조절하도록 함

1.stop and wait flow control : 하나 보내고 ack 받고 (비효율)

2.sliding window flow control : 여러개를 보내고 패킷을 받는대로 window size ( minimum of window )

Error Control

1.stop and wait ARQ — Timeout ( 충분히 ACK가 오지 않을 때까지 기다린 후, 데이터 패킷 전송되지 않은 것으로 간주) / Lost ACK timeout ( ACK 미전송으로 간주)

2.go back N ARQ — window size대로 여러패킷 보냈을 때 이 중 에러가 난 경우, ?

TCP Congestion Control

1.timeout 직후
threshold 값 반으로 설정

2.fast retransmit 직후
threshold 값 반으로 설정

-

8강 : Application Layer

Application layer protocol - HTTP, DNS, email 등

DNS (www. —  / 분산해서 관리)

-Root Damain > Top-level Domains > Second-level domains

서버 알아내는 방법
(local name server에 물어보고 모르면,)

Recursive resolution : 상위로 가서 물어봄

Iterative resolution : IP주소 알려줌

DNS cache : IP주소 일정시간 저장해둠

Web, HTTP (웹에 데이터 전송 및 처리)

Web cache : 웹 문서 임시 저장해둠

IoT에서 많이 사용하는 application

MQTT : 사전에 구독한 사람들 한정 제공

CoaP : HTTP 슬림 버전

# data[].attributes.body
[6강]
- Network layer는 source에서 destination까지 패킷을 가져오는 것과 관련있다.
Forwarding(라우터 입력에서 출력으로 패킷 이동)
- 단일 교환을 통과하는 과정
Routing(패킷이 source에서 destination으로 이동하는 경로 설정)
- source에서 destination까지의 trip을 계획

Circuit Switching :  connection이 전체 수명 동안 고정된 용량을 차지한다.
장점 : 회로가 설정되면 지연 시간이 짧음 -> 장시간 통신에 적합
단점 : 비효율적인 채널 용량, 특히 bursty intermittent traffic.

Message Switching - 채널을 사용할 수 있을 때까지 저장
Packet Switching - 사전에 할당된 resource가 없다.

Routing Algorithms - routing table을 구성하는 데 사용되는 정보 교환 및 계산
Two Routing Algorithms(Link State routing/Distance vector routing)

IP(Internet Protocol)
- IP address : host or router의 interface 에는 고유한 32bit IP 주소가 할당된다.
Subnet Addressing/Problems of IP address scheme/CIDR

NAT(Network Address Translation)
- Motivation : 로컬 네트워크는 외부에 관한 한 하나의 IP 주소만 사용
- Implementation: outgoing datagrams/remember/incoming datagrams

IP/ICMP/IGMP/ARP

7강 Transport Layer
Transport Layer protocols: 서로 다른 호스트에서 실행되는 애플리케이션 프로세스 간에 논리적 통신 제공
Sender/Receiver

Internet Transport Protocols(UDP/TCP)
UDP : 'best effort' service, connectionless
TCP : 혼잡, 흐름, 오류 제어 등을 구현
congestion control/End-to-end Flow Control/Error Control

8강 Application Layer

App-Layer protocols define:

# data[].attributes.body
6강 1부

Network Layer Service 길찾기

중요한 역할을 함

sender가 보내는 데이터를 receiver에게 안전하게 보내는 역할

라우터는 IP address를 보고 전달함

Network Layer의 function

라우터가 데이터를 입력 받아서 출력하는데 어디로 출력하느냐가 중요

Routing

어디로 보낼지 주소를 보고 판단하는 행위

패킷의 헤더를 보고 출력을 결정

forwarding

주소를 받고 전달하는 행위

Circuit-switched networks

유선 전화망, 옛날 전화 방식, 미리 회선(Circuit) 예약

1) Circuit을 만들고 2) 데이터를 전송하고 3) Circuit을 끊음

장점 : real time으로 오랜시간 통화할 때 good, 딜레이 없음

단점 : 채널의 낭비 존재

Message Switching

(Packet-switched networks 패킷 스위칭은 메시지 스위칭의 일부)

컴퓨터 통신망에서 사용

Pipelining 긴 메시지를 몇개의 패킷으로 나눠서 보냄 => 좀 더 빨리 보냄

미리 연결하지 않고 패킷단위로 쪼개서 보내는 것

모든 패킷이 동일 경로로 가는 것이 아님 정체구간이 있다면 다른 경로를 통해 리시버에게 전달 가능 => 패킷의 순서가 꼬일 수 있다.

문제는 아님 리시버가 알아서 순서 재정비함

메시지가 길어진다면 받는데 오래 걸림 + 메시지가 크면 버퍼도 커야함

=> Pipelining을 통해 작게 잘라줌

무조건 잘게 자른다고 좋은건 아님

=> 헤더가 계속해서 붙기 때문에 적절한 Pipelining 필요

라우터가 라우팅 테이블을 잘 만들어 놓으면 헤더를 보고 수신지까지 잘 전달 가능 따라서 라우팅 테이블 중요함

라우팅 알고리즘 Routing Algorithms

라우팅 테이블 만드는 것

라우터들이 스스로 계산함

각각의 노드는 이웃한 노드까지의 경로, 코스트만 알고 있다.

라우팅 알고리즘

Link State Routing

Dijkstra’s Algorithm 사용 -  다익스트라 알고리즘

라우터들이 서로 이웃한 라우터와 각각의 코스트 정보를 주고 받음

->  모든 노드가 똑같은 토폴로지를 그릴 수 있음

-> 최적의 라우팅 경로(Shortest Path)를 찾을 수 있음

라우팅 테이블에서 무한대는 직접적인 연결x

Distance Vector Routing

Bellman-Ford Algorithm - 벨만 포드 알고리즘

여기서는 이웃하고만 주고받음

이웃한 라우터들의 라우팅 테이블을 받아서 계산함

현실적으로는 Hierarchical Routing 계층적 라우팅

Autonomous System(자율 시스템)을 사용

각각의 Autonomous System에서 대표 라우터 선정

대표 라우터들끼리만 라우팅 테이블 교환

내부에서는 내부 라우팅 테이블 따로 만들고

6강 2부

IPv4 32바이트

IP address host와 network로 나뉘어짐

IP Address

크게 5가지 class로 구분 됨 - A, B, C, D, E

class A 0.0.0.0 - 127.255.255.255

1비트와 31비트(7비트 network ID 24비트 Host ID)

ㄴ 24비트를 가지고 컴퓨터에 할당 가능

ㄴ Host에 2^24개 = 약 1600만

ㄴ network ID를 살 수 있는 기관은 2^7 = 128개의 기관만 가능

class B 가장 많이 구매 - 128.0.0.0-191.191.255.255.255

Net ID 사용 가능한 기관의 수

Host ID 한 기관이 사용할 수 있는 컴퓨터의 수

Dotted Decimal Notation

32비트를 8비트씩 쪼개서 10진수로 쓰는 것

Subnet Addressing

Host ID부분을 가지고 세부 network로 쪼개서 쓰는 것

Subnet Mask

IP 주소에 대한 네트워크 아이디와 호스트 아이디를 구분하기 위해서 사용

궁금한 점

Subnet Mask는 건물에 부여하는 건가..?

IP address 주소 고갈 문제 해결

=> IPv6, short term solution(장비 교체 문제 때문)

* IP Address 부족 문제의 해법

- CIDR Classless Inter-Domain Routing

인터넷상의 데이터 라우팅 효율성을 향상시키는 IP 주소 할당 방법

기존의 class 문제 : 중간이 없다. 너무 작거나 너무 큼

IP Address 아낄 수 있음

Net ID를 가변적(동적)으로 사용 가능- Bit mask

- DHCP Dynamic Host Configuration Protocol

정규 IP Address가 아닌 임시 IP Address 할당 받아서 쓰고 반납하는 것

- NAT Network Address Translation

사설 IP와 외부(공인) IP간 변환

IP 실제 통신에 쓰임 데이터가 가는 것

ICMP Control Message 망 관리, 제어용, 데이터 전송은 X

IGMP Group 멀티 캐스팅을 하기 위한 프로토콜, 많이 사용은 X

ARP, RARP : Physical Address를 IP Address로 바꾸는 역할

Time to Live - 라우터를 거칠 때마다 숫자가 하나 씩 줄어 듦

즉 몇 번의 홉을 거쳐 목적지까지 갔는지 확인하는 용도

7강

Transport Layer

sender가 보낸 게 목적지에 잘 도착했는지 여부 등을 파악

트래픽의 종류에 따라 TCP/UDP 나누어 씀

UDP

간단한 프로토콜

좀 잃어버려도 되고, 전송이 좀 잘 안되어도 됨

중계 방송, 영화와 같은 멀티 미디어 트래픽

실시간 방송 - 스트리밍

best effort 전달 잘 되면 좋고 아님 말고

handshaking X

header size 8bytes

TCP

속도보다는 정확도가 우선

실수가 있어서는 안 됨 - 에러 허용 X Reliably(안정적)

계좌 이체 같은 경우

handshaking

Congestion Control 혼잡 제어

Flow Control 흐름 제어 - 보내는 속도 받는 속도 제어

Error Control

Flow Control

버퍼가 넘칠 때를 대비 sender 보내는 속도를 조절시킴

ACK(acknowledgement) 승인의 준말

sender가 receiver를 넘치지 않게 만들어주는 것

- Stop and wait

하나 보내고 ACK 기다리고 하나 보내고 ACK 기다리고

당연히 비효율적 => Pipelining을 통해 여러개 보냄

Sliding window flow control

Pipelining의 마지막 패킷의 ACK를 보고 그 다음을 보냄

window size를 움직여서 패킷을 보냄

window size : 동시에 보낼 수 있는 사이즈

receiver’s advertised window와 congestion window 중 더 작은 값으로 선정

TCP에서 congestion window와 receive window가 있는데, receive window는 receiver가 sender에게 '한 번에 이만큼 보내도 돼!' 라고 receiver가 요청

출처 : https://dnr2144.tistory.com/m/78

Error Control

주로 Go-Back N이 많이 쓰임

ARQ Automatic Repeat Request

신뢰성 있는 데이터 전달을 위해 재전송을 기반으로 한 에러 제어 방식

time out  : 충분히 ACK 올 때까지의 시간보다 커야 함

sender가 보낸 패킷이 중간에 소실되면 ACK이 돌아오지 않고 sender는 영원히 기다리는 문제 발생 => time out 을 두고 일정 시간 안에 ACK를 받지 못하면 retransmission 다시 보냄

Lost ACK timeout - timeout 똑같이 적용

Go-Back N ARQ(슬라이딩 윈도우에서 사용)

3번 패킷 소실, 4, 5번 도착했다고 해도

receiver는 3부터 걍 다 버림 그래서 3부터 걍 쭉 다시 보내면 됨

ACK이 사라지는 경우

1) 0, 1, 2, 3중 ACK에서 0과 3만 온 경우

모두 다 잘 받고 ACK만 사라졌구나 판단

ACK are cumulative(누적)

2) 0, 1, 2, 3중 ACK에서 0만 온 경우

1부터 다시 보냄

**Congestion Control

네트워크 트래픽도 트래픽이 몰리면 혼잡해짐 - 교통 체증

TCP 유선 네트워크를 가정하고 만든 프로토콜

ㄴ 에러가 발생하는 상황은 버퍼가 넘쳤다고 판단, 넘치면 패킷이 loss 됨

=> 트래픽 개수를 줄이는 방법을 사용

timeout 되면 retransmission함

Slow start : timeout에 의해서 loss를 탐지하는 경우

윈도우 사이즈는 threshold 값 전까지 2의 n승으로 증가함

threshold를 넘어가면 선형으로 증가

timeout에 의해서 패킷이 loss되면

현재 패킷의 개수 값을 threshold로 두고 다시 0부터 시작

다시 2^n으로 기하급수적으로 증가하다가

threshold만나면 선형으로 증가 이 과정을 쭉 반복

이 다음 방식은 Fast Retransmit

timeout으로 판단 X Duplicate Acks로 판단

Duplicate Ack이란? 만약 3번 소실되고 그 이후로 4,5, 6도착하면

receiver는 sender에게 3번을 기다리고 있다는 Duplicate Ack을 보냄

ㄴ 트래픽이 심각하게 혼잡하지는 않단 소리

=> Fast Retransmit는 현재값의 반으로 떨어져서 선형으로 증가

Slow는 0에서 다시 시작, Fast Retransmit는 threshold에서 선형으로 다시 시작

8강

Application Layer

Application : 전체를 이야기 하는 것

Application Layer Protocol :

그 Application을 인터넷에서 쓸 수 있도록 도와주는 프로토콜

ex. HTTP(Hypertext Transfer Protocol)

DNS Domain Name System

통신이 가능하게 만드는 가장 중요한 것 중 하나

IP Address를 Domain Name를 매핑해주는 것

분산해서 사용 - 트래픽 몰릴 걱정 + 통신 장애가 났을 때 대비

Recursive(재귀) resolution / Iterative(반복) resolution

재귀 : 쭉쭉 타고 들어가는 느낌

반복 : 전화돌리는 느낌 - 난 모르는데 쟤는 알걸? 쟤한테 물어봐 하고 번호 줌

현실은 Recursive와 Iterative섞여 있음

DNS cache

한 번  IP주소를 알게 되면 바로 버리는게 아니라 일정 시간 동안 내 PC에 저장해둠

HTTP

웹에 데이터를 전송하고 받는 과정을 처리함

TCP 사용

proxy(대리) server 사용

노드가 많이 걸리거나 트래픽이 몰릴 것 같을 때 많이 활용

MQTT Message Queue Telemetry Transport

사물통신, 사물인터넷과 같이 대역폭이 제한된 통신환경에 최적화하여 개발된 푸시기술 기반의 경량메시지 전송 프로토콜

메시지 매개자(Broker)를 통해 송신자가 특정 메시지를 발행하고 수신자가 메시지를 구독하는 방식

CoAP Constrained Application Protocol

레스트 기반의 경량 메시지 전송 규약

레스트 : 자원발견, 멀티 캐스트 등 기능을 지원하며 메시지 크기가 작고 기존의 HTTP와도 쉽게 변환되며 연동이 가능

대역폭이 제한된 통신 환경에 최적화하여 개발된 경량 메시지 전송 프로토콜

소감

서브넷 마스크와 비트 마스크 부분이 많이 어려웠다. 사실 지금도 잘 이해가 안 된다. 계산하라는 문제는 안 나왔으면 좋겠다.

# data[].attributes.body
6-1

1. Network layer: sender가 데이터를 보낼 때 recipient에 제대로 전달하는 역할을 수행한다.

2. Routing: 어디로 보낼 지 주소를 통해 결정한다.

3. Forwarding: 라우터가 데이터를 받아서 전달한다.

4. Circuit-switched

1) 회선을 미리 예약을 해서 완성되면 통화가 시작되고, 끝나면 예약 회선을 취소한다.

2) 서킷을 만들고 통화하고 서킷을 끊는 3가지로 구분한다.

3) 서킷이 한번 예약되면 오랜 시간 딜레이 없이 통화하기 좋다.

4) 단점은 채널의 낭비가 존재한다.

5. packet-switched

1) 하나의 데이터를 패킷으로 쪼개서 전달한다.

2) 메시지가 크면 시간이 오래 걸리는 단점을 해결한다.

3) 라우터는 길이 그때마다 다르기 때문에 순서를 재정비하여 다르게 도착할 수 있다

6. Routing Algorithms

알고리즘을 스스로 계산하여 라우팅 테이블을 만들고 코스트가 적은 경로를 설정한다.

1) link state routing algorithm: 각각의 노드가 이웃한 노드의 코스트를 교환하여 같은 topology를 추천한다.

2) distance vector routing: 이웃하는 cost 정보만 공유하여 가까운 라우팅 테이블을 고려하여 최적의 cost를 계산하고 설정한다.

6-2

IP Address:

32bit IP address를 사용하고 각 기관에서 네트워크 ID를 구매하고 Host ID를 할당한다.

Class는 A, B, C, D, E 5가지로 ㅜ분되지만 주로 A, B, C 사용한다.

Subnet addressing

세부 네트워크를 쪼개서 더 다양하게 사용한다. 몇 비트로 나눴는지 파악하기 위해 subnet mask를 사용한다.

DHCP: 임시 IP를 할당 받아 사용하고 반납하는 방식

NAT: IP를 하나를 가지고 여러 개로 할당하여 사용하며 많은 호스트에 연결하는 방식

7강

Transport Layer

전송된 데이터가 잘 도착했는지 확인하는 등 전송 관리 역할을 수행한다.

UDP

- 건단하고 전송이 잘 되지 않아도 되는 경우 사용함

Sender, receiver 정의 안하고 그냥 보내버림

TCP

데이터 전송속도보다 정확도가 더 중요한 경우 사용한다.

End-to-end Flow control

Sender가 데이터를 전달할 때, 보내는 속도와 받는 속도를 조절한다.

Congestion control

전달되는 패킷의 양이 많아 트래픽이 증가하는 상황에서 전송이 되지 않으면 대응한다.

Error control

에러가 발생했을 때 확인하고 대응

8강

Application layer protocols

포맷을 결정하고, 다양한 애플리케이션 데이터를 교환하는 유형이다.

DNS (Domain Name System)

IP address를 32bit로 처리하고 domain 이름을 사용해서 가능하게한다.

Web and HTTP: 서버에 캐시를 저장하여 캐시를 통해 접속이 쉽게 가능하고 파일 형식을 컴퓨터에서 볼 수 있다.

CoAP

센서에서 중간서버인 게이트웨이로 전달되고 HTTP로 host에게 전달한다.

# data[].attributes.body
6강 1부
- network layer:
- Routing: 어떤 주소로 가야할 지 결정하는 행위
- Forwarding: 받아서 전달하는 행위
- Circuit-switched networks: 옛날 유선 전화 방식(원하는 곳에 미리 회선을 예약을 하고 연결)
장점-오랜시간 통화할때 딜레이가 없음
단점- 채널의 낭비가 심함

- packet-switched: 하나의 데이터를 패킷으로 쪼개서 전달.

- Routing Algorithms: 알고리즘을 스스로 계산하여 라우팅 테이블을 만들고 코스트가 적은 경로를 설정
1) link state routing
링크 상태 정보를 모든 라우터에 전달하여 최단 경로 트리를 구성하는 라우팅 프로토콜 알고리즘

2) distance vector routing
- 이웃하고만 정보를 주고받는다. 가는 방법을 모두 계산하여 제일 짧은 경로를 선택

3)Hierarchical routing
가장 많이 씀.대표라우터를 선정해 대표  라우터끼리 라우팅테이블을 만듬

6강 2부
-IP addresses: class A,B,C,D,E 각 기관에서 네트워크 ID를 통으로 구매 후 Host ID 할당

-NAT: 부족한 ip address를 nat network를 통해 새롭게 할당함

7장
Transport layer: 센딜레이나 에러가 생길만한 부분들을 고려하여 확인

UDP: 데이터가 좀 없어지거나 존싱이 문제가 생겨도 괜찮을때 사용

TCP: 정확해야하는 것 ex) 금융
- congestion control: 트래픽 몰리는 혼잡 상황에 대응
-flow control: sender와 receiver의 전송, 수신 속도를 조절
-error control: 에러 일어난지 보고 대응하는 것

8강
Application Layer: 보내야할 메세지의 포맷 결정
Application Layer Protocol: 그 Application을 인터넷에서 쓸 수 있도록 도와주는 프로토콜

DNS cache: ip adress를 일정 시간 저장했다가 사용
Web: 다양한 웹 데이터를 전송하고 처리하는 과정 중에 다양한 파일들을 내 컴퓨터에서 실행되게 해주는 역할

MQTT: 데이터를 주기적으로 보내주면 그 중간 매개체가 유사 통신망을 통해 사전에 가입한 데이터 요구자들에게 바로보내주는 형태로 동작하는 기술

CoAP: 요청자료에 대해 게이트웨이를 거치지 않고 바로 호스트에게 제공

# data[].attributes.body
6강

Network Layer & IP

Networ Layer
- sender가 보낸 data를 receiver가 잘 받게
- routing : 어디로 보낼지 주소를 보고 판단
- forwading : 받아서 전달

Network
- circuit-switched : ~2.5G
- packet-switched : 3G~

Packet switching
- packet 단위로 잘라서 보냄
- router가 여러 경로로 보냄
- pipelining을 통해 ~~~

Routing Algorithm
- input -> output table
- router들이 스스로 계산을 함
1) Link State
Dijkstra's Algorithm
- 각각의 노드가 서로 교환, 모든 노드가 이웃된 정보를 알게됨
2) Distance vector
- 이웃 노드로부터 routing table 이용 계산
- 모든 노드에 대한 table을 만드려면 이웃 노드의 table을 받아 최단경로 계산

IP (Internet Protocol)

IP addresses
- Net ID, Host ID
- Class A, B, C (Class B를 주로 사용)

Subnet Addressing
- Class B -> 16bits (Net ID) 8 (Student ID) 8 (Host ID)
- subnet mask : 몇비트를 쓰는가

Problems of IP address scheme
- IP가 모잘므
- IETF solutions : IPv6을 만들자 -> 장비를 바꿔야 됨
- CIDR(Classes Inter-Domain Routing) : Net ID가 가변적

NAT(Network Address Translation)
- Sender는 바꾸고 Destination은 그대로 두고 보냄
-  돌아오는건 Sender랑 Destination이 바뀜
- Router 거치면 Destination이 원래 Sender로 바뀜

IP
- Transport Layer
- Application Layer
- ICMP, IGMP

7강
Transport Layer Protocols
UDP (Transmission Control Protocol)
- 정확성보다 속도
- 주로씀(스포츠 중계 : 재전송x 걍 봄)
TCP (User Datagram Protocol)
- 속도보다 정확성 (신뢰성 중요)
- Congestion control :
- End-to-end Flow control
- Error Control

TCP Flow control
- Stop-and-wait : ACK를 기다림(효율 구림)
- Sliding-window(Pipelining) : 여러 packet을 보냄
Go-back-n
Corrupted data packet : error가 나면 그 번호로 돌아가서 다시 보냄
Corrupted ACKs : sender가 못받고 걍 다음거 오면 상관 x
timeout전에 그러면 재전송

Error Control
- Error free opetaion :
- Lost data packet : 매번 timeout. ACK 못받을때 문제 해결
- Lost ACK timeout : 재전송

Congestion Control
- TCP 처음 가정은 유선 : error 가정 x
1) slow start
- th까지 지수적으로 증가하다 linear하게 증가, 이후 1로 감소, 반복

2) fast retransmit
- ACK
- 앞에는 잘 들어오는데 뒤에만 문제, 1로 감소하는게 아니라 그 지점으로

# data[].attributes.body
6.1강

network Layer/ip

network Layer

센터가 보낸 데이터를 리시브 쪽에 안전하게 보내는 역할

헤더에 ip address를 적어서 보내면 라우터를 통해 안전하게 목적지까지 보내는 역할

기능

routing : 데이터를 어느 곳으로 보내야 할지 주소를 보고 판단

forwarding : 입력층에서 받아서 출력층으로 보냄

circuit-switched

옛날 전화 방식

전화하고싶은곳에 번호를 누르면 미리 회선을 예약

예약이 되면 통화 시작

장점 : 한번 서킷이 예약이 되기 때문에 오랜 시간을 통화할때 좋음. 딜레이도 없음

단점 : 채널의 낭비가 존재

message switching

메시지가 길어지면 시간이 오래 걸린다

메시지가 크면 라우터의 저장 되어 있는 버퍼의 사이즈가 커야됨

이를 해결 하기 위해 packet-switching 사용

packet-switching

현재 컴퓨터 망

데이터를 쪼개서 보냄

경로가 한쪽 밀리게 되면 다른길로 안내해줌

리시브측에 도착하는 순서가 달라질 수 있지만 순서를 재정비해서 보내기 때문에 문제가 되지않는다

무조건 많이 쪼갤수록 좋은것은 아니다.

routing algorithms(중요)
: 각각의 라우터가 최적의 경로를 찾는 알고리즘(스스로 계산)

1) link state routing:
- 링크 상태 정보를 모든 라우터에 전달하여 최단 경로 트리를 구성하는 라우팅 프로토콜 알고리즘.
- 다익스트라(Dijkstra) 알고리즘 사용
- 각 라우터는 자신의 네트워크 정보와 전달받은 라우팅 정보를 이웃 라우터에게 전달

2) distance vector routing:
- 이웃하고만 정보를 주고받음. 가는 법을 모두 계산하여 제일 짧은 경로를 선택

3) Hierarchical routing
현실적으로 많이 씀. 대표라우터를 선정해 대표 라우터끼리 라우팅테이블을 만들고
대표 라우터 안에서 또 라우터끼리 라우팅테이블을 만듬

6.2강

IP(internet Protocol)

라우팅 알고리즘을 실제로 구현하는 프로토콜

IP addresses

32bit address를 전세계적으로 사용중

어떤 단말기 인지 확인 가능

종류
class A, class B, class C, class D, class E

class B를 가장 많이 사용한다.

호스트 아이디 부분을 효울적으로 쓰기 위해 Subnet ID(건물, 층), Host ID(기기)으로 나눔.

문제점

컴퓨터가 발달해서 IP address가 모자람

IETF solutions

장기적 대안- IP버전 6이라는 새로운 버전을 만들자(모든 장비를 다 바꿔야 됨)

단기적 대안 CIDR-영역을 나눌 때 기존 방식보다 유연하게 자신이 원하는대로 나눌 수 있음.

할당하는 방식

manual configuration

DHCP(Dynamic Host Configuration Protocol)

-NAT 가장 많이 쓰이는 방법

ip address 하나 가지고 많은 호스트를 연결 할 수 있는 방식

ip는 다양한 프로토콜로 이루어짐

7강

transport layer protocols : sender가 보낸 데이터가 잘 도착 헀는지 여부를 확인

sender 엄청나게 성능 좋은 슈퍼컴

receiver 성능이 그렇게 좋지않다

UDP

잃어버려도 큰 문제가 없는거

컨택을 미리 안하고 그냥 보낸다

TCP

아주 정확해야되는거 속도보다 정확성

에러 있으면 안되고 정확하게 도착

잘못 전달된 패킷 버린다

TCP Flow control

sender에서 receiver에 보낼떄 리시버 넘치지 않게 속도를 조절

stop- and- wait flow control

하나 보내고 기다렸다가 하나 보내고 반복

시간이 오래 걸림

sliding- window flow control

에크 올때마다 여러개를 보내고 받는대로 윈도우 사이즈를 옮겨서 다음 패킷 보낸다

Error control

에러 발생 시 어떻게 대응 할 지

Stop-and-Wait ARQ

- Error-free operation

- Lost data packet : ACK가 올 때까지 기다린다. -> timeout 사용 -> 일정시간안에 ACK를 받지 못하면 retransmission

- Lost ACK timeout : ACK 패킷 실종

Go-Back-N ARQ

- Corrupted data packet : 3번 실종 4,5번 제대로 도착 -> timeout으로 3번부터 다시 보냄

- Corrupted ACKs : ACK가 사라짐 -> 리시브는 전혀 문제 없다고 생각 -> cumulative

timeout전에 ACK가 사라지면 다시 전송

TCP Congestion Control : 트래픽 때문에 라우터가 넘침

- Timeout으로 해결

8강

application later protocol

다양한 포멧 결정, 다양한 애플리케이션 프로토콜을 써서 데이터를 주고 받음

DNS(Domain Name System)

주소를 치면 32bit를 이용해서 IP address로 변환해서 찾아줌

분산화해서 하는 이유

1)고장나면 큰 문제가 일어남

2)트래픽이 몰려서

루프 도메인 -탑레벨 도메인-세컨 레벨 도메인

루프는 전세계 13개 아시아쪽은 동경

다양한 탑레멘 도메인이 있다.

ex)com,edu,gov,mil,net,org,int

컨트리 코드 탑 레벨 도메인(ccTLDs)

Recursive resolution

하나씩 이전으로 되돌아가서 물어봄

Iterative resolution

직접 컨택해서 물어봄

현실은 섞여있는 경우가 많다.

DNS cache

한번 물어보면 또 쓸 수 있으므로 IP address를 저장

web and HTTP(HyperText Transfer protocol)

웹 페이지는 개체로 구성, 웹 페이지는 여러 참조 개체를 포함하는 기본 HTML 파일로 구성

web caches(proxy server)

한국의 모든 사람이 미국까지 web server를 연결하면 트래픽이 높고, 너무 멀어 비용 높음
Proxy Server를 두어 한번만 Web에서 당겨와 저장해두면 한국에서 가깝고 편하게 사용 가능
-> Web caches
Web Server와 Proxy Server의 내용을 지속적으로 같게 만들어주는 것이 중요함

MQTT : 브로커는 사전에 값을 받아서 그 값을 받기를 원하는 사람에게 보내줌

CoAP : HTTP의 슬림 버전, 센서들 끼리 통신 중간 서버가 받아서 호스트한테 보내줌

직접하고 싶으면 게이트웨이를 거치지 않아도 됨.

# data[].attributes.body
1)같은 조건하에서 3개 비교
파라미터가 같을 때 성능차이 비교

2)각각의 특징 담기
코드사진,주석 달린거 등등

3)token bus VS cd

token은 한명만 가질 수 있음
알고리즘
내가 보낼 데이터 있음 토큰 가지고 있따가 끝나면
다음사람에게 넘김.
-->토큰은 한명만 가지기에 충돌 X
대신 토큰 가지고있는애가 고장나면 고치기 어려움

충돌이 많이 날 확률에서는 버스가 유리

환경 어떻게 만들어줌?(복붙한 코드 변경)

네트워크 처리량: 각각의 단말이 보낸 데이터량 (100개 노드 다합친거)
tx_byte: 몇바이트 보냈나?
0이면 전부 못보냄
tx_throughtput: 초당 바이트
-----------------------------------------
강의

6강 1부
1.Network Layer Service
Sender가 보낸 데이터를 리시버 측에 안전하게 보내는 역할
Fowarding
Routing

2.Circuit switching

3가지 단계
Curcuit establishment
Data transfer
Curcuit termination

3.Message Switching
패킷을 보낼때 커넥팅 없이 패킷단위로 전송하는 방식.
메시지가 크면 버퍼사이즈도 커야함.
이를 위해 패킷을 잘라 파이프라인 진행.

4.Routing Algorithm
라우터가 수신지까지 알아서 경로를 정해주는데 그 알고리즘.

*2가지 알고리즘 방식
1)Link State Routing alogorithm
2)Distance vector routing

5.Hierarchical routing

6강 2부
1.IP addresses
class A,B,C,D,E로 존재
네트워크 ID는 통으로 사고 HostID는 각 컴퓨터로 할당.

2.Subnet Addressing
호스트 아이디를 세부 네트워크로 나눈 주소.

*subnet mask: Host id를 어떻게 나눴는지 알려주는 것.

3.Problems
IP 주소가 모자라게됨.
*long term solution:새로운 버전(IPv6)
*short term solution
CIDR(Host ID 세밀한 설정가능)
DHCP
NAT(Network Address Translation)
사적으로 할당된 아이디를 사용

7강
Transport layer

Sender와 Receiver 사이의 정보가 잘 도착했는지 확인.
TCP,UDP가 있음.

1.UDP
털털,간단 하기에 전송이 잘 안되도 상관없는 경우 사용 많이함
ex)streaming 등
header length 8 bytes

2.TCP
깐깐하기에 속도보다 정확해야한다.

*control
1)Congestion

2)end-to-end flow

3)error
-ARQ

-Lost ACK timeout:ack패킷이 사라진 경우

-Go BACK

-Corrupted data packet

-Corrupted ACKs

8강
1.Application Layer

Application을 인터넷 속에서 사용할 수 있도록 하는 것.

2.DNS(Domain Name System)
-gTDs--> 우리나라는 kr
-Authoritative name servers
원하는 아이피,주소,호스트네임을 변환하는 네임서버.

-DNS cache
아이피 주소를 한번쓰고 지우지 않고 일정기간 동안 저장해놓는 것.

# data[].attributes.body
<6강-1부>
*network layer
: sender가 보낸 데이터를 receiver측에 안전하게 전달하는 일
패킷의 헤더에 주소를 써서 보냄(ip address)
-> ip address를 보고 안전히 목적지 도착

데이터를 라우터가 받아서 Forwarding(전달)을 할 때 어느 방향으로 보낼지 주소를 보고 Routing한다.

circuit-switched networks : 유선전화망
packet-switched networks

*circuit switching
옛날 전화방식
전화 회선을 미리 예약해서 통화, 끝나면 끝났다고 전달
장점 : real time으로 오래 사용할 때 편함
단점 : 채널의 낭비가 존재

*message switching
예약과 끊는 과정 없이 message를 통채로 보냄

*packet switching
하나의 데이터를 여러 패킷단위로 쪼개서 보냄
라우터가 라우팅해서 보내는 사이에 다른 패킷이 전송되므로 시간이 효율적으로 단축됨
-> pipelining

packet message는 pipelining으로 보완되었지만, 헤더의 수가 많아져 overhead. packet이 많은 것이 좋은 것은 아니다.

라우터가 routing table을 잘 만들어 놓으면 헤더의 수를 보고 잘 전달하게 된다.

*routing algorithms
라우터들이 스스로 계산하는 알고리즘

- link state routing(Dijkstra's algorithms)
라우터 7개가 모든 노드와 이에 해당하는 cost를 공유. 이를 통해 최적의 routing path를 찾음

- distance vector routing(bellman-ford algorithm)
자신이 이웃한 노드만 정보를 공유. 각자가 가지고 있는 라우팅 테이블을 통해 계산

- hierarchical routing
대표 라우터를 선정하고, routing table을 만든다. 또 region 내부에서 routing table을 만든다.

<6강-2부>
*IP address
5개의 class로 이루어져 있음
(최상위 비트가 다르게 구분됨, net ID, host ID 의 개수가 다름)
-> class B 가장 많이 사용함(host ID가 너무 크거나 작기 때문에 B가 가장 적당함)

- host ID 부분을 쪼개서 subnet으로 사용
- subnet mask -> 몇 bit를 subnet으로 사용하는지 알 수 있음

*IP address의 문제
- ip address가 모자르게 됨
- 고갈의 문제 해결 : IETF solutions
-> IPv6 / CIDR

*CIDR : IP address를 할당하는 방식. 아낄 수 있음
ex) 200.23.16.0/27 -> 5bit가 host part인 것을 /를 통해 알려줌 (32 중 27개?)

*IP address 할당 방식
- Manual configuration : 메뉴얼
- DHCP : 임시 주소를 할당받아 쓰고 반납
ex) NAT

*NAT
WAN side addr / LAN side addr
공적 IP(destination) -> 여러 개의 사적 IP(sender)
destination은 공적 IP, sender 공적 IP로 바꿔치기
Reply가 오면 라우터가 사적 IP로 전달

*IP : 통신(데이터 전송)
ICMP : 망 관리, 네트워크 제어용 프로토콜
IGMP : 멀티캐스팅을 위한 프로토콜

<7강>
*Transport Layer protocols
UDP : 간단한 프로토콜 -> 데이터 손실 무관할 경우 사용
TCP : 중요한 트래픽 전송, 정확히 전송시 사용

*UDP
- 기본 골격만 유지
- handshaking 없이 바로 전달
- 패킷이 사라져도 상관x
- 멀티미디어 스트리밍시 사용
- header size : 8 bytes

*TCP
- Congestion control
: sender가 데이터를 보냈는데 잘 도착하지 않았을 때
- End-to-end Flow control
: sender와 receiver 사이에 보내고 받는 속도 컨트롤
- Error control
: 노이즈와 같은 에러 발생시

*TCP Flow control
- sender 성능 좋음 / receiver 성능 낮음
- sender가 보내는 속도 조절
- sender가 receiver가 넘치지 않게 만들어주는 방식

- Stop-and-wait flow control
: 하나 보내고 ACK(sender의 버퍼 알려줌)
너무 오래 기다려서 효율적이지 못함

- Pipelining -> 효율적
- Sliding-window flow control
: 여러 패킷을 보내고 패킷을 받는대로 window size를 오른쪽으로 움직이며 다음 패킷 보냄

*Error control
- Stop-and-wait ARQ
1) Error-free operation
: 하나 보내고 ACK받고
2) Lost data packet
: Time out를 두어 sender가 패킷을 보낼때마다 timer 작동하여 일정 시간안에 ACK를 받지 못하면 바로 retransmission
3) Lost ACK timeout
time out 시에 retransmission
동일 패킷을 받으므로 버리고 ACK 전송

- Go-Back-N ARQ(based on sliding window)
1) Error-free operation
2) Corrupted data packet
: 패킷이 중간에 오지 않은 경우 timeout이 걸리면 그 번호로 돌아가 뒷부분을 모두 재전송
3) Corrupted ACKs
: ACK가 중간에 오지 않았지만 뒷 부분 ACK가 오면 그 전까지도 다 잘 받았다고 생각하고 진행
BUT, 계속해서 ACK가 오지 않아 timeout이 걸리면 패킷 재전송

*TCP Congestion control
- 처음 유선네트워크로 만들어졌을 때는 모든 패킷이 에러뜨는 경우 없다고 판단, 라우터가 트래픽으로 인해 넘친 경우만 에러로 판단함
-> 푸는 방식

1) Congestion control by timeout(TCP Taeho)
- threshold값 이후에는 linear하게 증가
- timeout시에 threshold값이 현재의 반으로 설정
(slow starter)

2) Congestion control by 3 duplicate Acks
Fast transmit
- 패킷이 lost될 시 한 패킷만 문제이고 뒤의 패킷은 잘 온다고 생각. threshold값이 현재의 반이 되고, 이 값으로 떨어져 다시 linear하게 증가

congestion window값과 ACK에서 오는 receiver window값의 minimum이 실제 window값이 됨

<8강>
*Application layer protocol

*DNS(Domain Name System)
IP address를 몰라도 www.~로 접근 가능함
-> 32bit IP address로 변환하는 서버(mapping)
분산해서 관리

Root name servers
Generic Top Level Domains(gTLDs)
New gTLDs
Country Code Top Level Domains(ccTLDs)
Name servers(Local name servers, Authoritative name servers)

- Recursive resolution
: 하나씩 이전으로 되돌아가서 물어봄
- Iterative resolution
: 직접 컨택해서 물어봄
-> 현실은 두 방식이 섞여있다

*DNS cache
한번 물어보면 또 쓸 수 있으므로 IP address를 저장해둔다.
ipconfig /displaydns

*Web and HTTP
다양한 것을 가져와 내 컴퓨터에서 재생될 수 있게 하는 것이 web application, 그 역할을 하는 것이 http

*HTTP : uses TCP
- Web server에서 http를 이용해 링크와 텍스트를 포함하여 가지고 온다.
- pc화면에 멋있게 컴파일됨

- Web caches(proxy server)
한국의 모든 사람이 미국까지 web server를 연결하면 트래픽이 높고, 너무 멀어 비용 높음
Proxy Server를 두어 한번만 Web에서 당겨와 저장해두면 한국에서 가깝고 편하게 사용 가능
-> Web caches
Web Server와 Proxy Server의 내용을 지속적으로 같게 만들어주는 것이 중요함

*IoT에서 많이 쓰는 Application
- MQTT : 온도값을 주기적으로 broker에게 보내면 유선 통신망을 통해 사전에 온도 값을 받기 원하는 subscribe들에게 전송해줌

- CoAP : Sensor들끼리 CoAP 통신, 이를 CoAP Server(Gateway)가 받아서 HTTPS 형식으로 host에게 보내는 방식(CoAP, HTTP 프로토콜 모두 이해해야 함)

- MQTT&CoAP
만능 Gateway를 사용하면 모두 동작 가능

# data[].attributes.body
6강

Network Layer Services
: Network layer concerns with getting packets from the source all the way to the destination

Communication networks
- Circuit-switched networks
ex) 유선전화망 (1, 2세대)

- Packet-switched networks
ex) 최근 컴퓨터 통신망에서 사용 (3세대부터)

circuit switching
three phases: circuit establishment, data transfer, circuit termination

message switching
No call set-up procedures

packet switching(message switching의 일부)
packet을 보낼 때 미리 connection없이 데이터를 packet 단위로 쪼개서 보냄
하나의 데이터가 여러 개의 packet으로 쪼개서 가기 때문에 한 쪽이 밀리면 다른 경로로 갈 수 있음

Routing Algorithms
- link state routing
the calculations are based on Dijkstra's Algorithm
- distance vector  routing
it makes use of Bellman-Ford Algorithm for making routing tables

IP address
class A, B, C, D, E 5가지로 구분됨

7강

Transport layer protocols
- UDP
간단함, 잃어버리거나 전송이 잘 안되어도 상관이 없는 경우 사용
- TCP
속도보다 정확해야 되고 아주 중요한 트래픽을 전달해야 할 때 사용

# data[].attributes.body
6강

네트워크 레이어

데이터를 보내는 역할

라우팅이란 주소를 보고 어디로 보내야할지 판단하는 행위

포워딩이란 받아서 전달하는 행위

네트웍을 크게 두가지로 나누면

circuit-switched networks : 유선전화망 1,2세대

packet-switched networks : 컴퓨터통신망 3세대 이후

전화를 걸면 회선을 미리 예약을 걸면 전화가 시작됨

전화가 끝났다는 메세지를 보내서 전화 회선을 끊어줌

packet-switched networks은 message switching의 일부이다.

긴 메세지를 패킷으로 짤라서 보내는 것

라우팅 알고리즘

정해진 경로를 통해 주소를 보고 어디로 갈지를 알려주는 알고리즘

IP addresses : class A, B, C 등 각 기관에서 네트워크 id를 구매 : 포항공대는 class b이다

class B 1,0으로 시작 네트워크아이디 21비트, 호스트 아이디 8비트로 구성되어있다.

NAT : 네트워크 주소를 변환하는 기술

ip 주소를 다른 ip 주소로 변환해 라우팅을 원활히 해주는 기술이다.

7강

Transport layer protocols : 딜레이나 에러가 생길만한 부분들을 고려하여 확인

UDP : 데이터가 좀 없지거나 전송이 문제가 생겨도 괜찮을 때 사용, 생방송 느낌

TCP : 정확해야하는 것 금융 같은 것, 전송 중에 사라지거나 하면 안됨

TCP의 기능

Congestion control

센더가 데이터를 보냈는데 재때 전송이 안되었을때

라우터에 패킷이 여러방향으로 막 들어오면서 버퍼가 넘쳐 패킷 손실 발생

에크가 올 경우 윈도우 사이즈가 미리 정한 thresh 전까지 2^n으로 증가

타임아웃 전에 듀팩을 보내며 앞에건 안왔어도 뒤에 것은 전송되고 있는 것을 체크함.

End-to-end Flow Control

센더와 리시버 사이에 전송 속도 조절

센더는 성능 좋은 슈퍼컴, 리시버는 일반 컴퓨터

센더는 빨리 보내는데 리시버는 처리할 능력이 안되면 버벅이게됨

이러면 센더 쪽에서 속도를 조절해야함

리시버가 받을때마다 신호를 보내줌으로써 속도를 조절할 수 있게된다.

Error Control

에러에 관한 문제를 다룬다.

하나 보내고 에크를 받는다.

이때 에크를 받지 못했을 때 반응 했는 지를 판단할 수 없기에 일정시간 타이머를 통해 일정 시간 기다렸다가 다시 보내는 방식으로 관리한다.

8강

Application layer protocol 에플리케이션을 인터넷에 쓸 수 있도록 도와주는 프로토콜

DNS

포항공대 홈페이지 -> ip addrees를 알아야 갈 수 있음 -> 32비트로 변환해서 알려준다. 이를 통해 전송이 가능하다.

한곳에서 안하고 다 분산해서 한다. 문제가 발생하면 안되기 때문

Recursive resolution

서ip address를 얻는 방법으로 계속 다음 단계로 진행해서 물어보면서 알아내는 방법으로 알아낸 지점에서 다시 돌아온다.

Iterative resolution

ip address를 얻는 방법 로컬에 물어봐서 알 것 같은 곳으로 물어봄

이 두 가지를 섞어서 사용한다.

DNS cache

ip address를 일정 시간 저장했다가 사용

web , http

다양한 웹 데이터를 전송하고 처리하는 과정 중에 다양한 파일들을 내 컴퓨터에서 실행되게 해주는 역할

web caches

멀리서 오는 데이터들을 잠시 저장해주었다가 내보내는 역할, 중요한 것은 web server이랑 서로 내용이 같아야 한다.

IOT 에서 많이 쓰는 것

MQTT

어떠한 데이터를 주기적으로 보내주면 그 중간 매개체가 유사 통신망을 통해 사전에 가입한 데이터 요구자들에게 바로 보내주는 형태로 동작하는 기술

CoAP

중간 매개체가 HTTPS를 기반으로 전송하여 연결하거나 CoAP 그 자체로 데이터를 보냄.

# data[].attributes.body
[6강]- 1 - Network Layer & IP

Network Layer

- 데이터를 보내는 역할로, sender가 보낸 데이터를 receiver에게 전달하는 과정

- 패킷의 헤더에 IP 주소 등을 적어 보냄

- Forwarding(전송): 데이터를 받아서 식별 후 적절한 곳으로 전송하는 과정

- Routing(경로 설정): 어떤 경로로 전달할지 패킷의 주소를 보고 판단하는 과정

네트워크 분류

1) Circuit Switching: 전화망과 같은 유선 네트워크, 전화선 회선을 미리 예약하여 데이터를 전송하고 끝나면 회선을 해제하는 방식, 장점: 오랜시간 딜레이 없이, 단점: 낭비 발생

2) Packet Switching: 컴퓨터 네트워크와 같은 네트워크로, 메시지를 패킷 단위로 분할하여 전송하는 방식, 장점: 미리 예약x 단점: 정렬 필요

- Message Switching: 메시지를 패킷으로 분할하여 전송하는 방식

- 다른 경로로 전송, 순서 재조정 가능

- 메시지가 여러 곳에서 오면 버퍼 크기가 커야하지만, 패킷으로 나누어 전송하면 순서대로 차례차례 전송하여 시간 단축 가능

라우팅 알고리즘

- 최소 비용으로 전송하는 방법을 알고리즘이 계산

1) Link state routing(Dijkstra 알고리즘 기반)

- 각각의 이웃 노드와 cost 확인한 후 네트워크 토폴로지를 파악 후 알고리즘 돌림

- 최단 경로를 찾는 방식

2) Distance vector routing

- 자신의 이웃 노드로부터 라우팅 테이블을 이용하여 계산

- 전체 다 라우팅 테이블을 만들면 복잡, 내부적으로만 만들자(계층적 라우팅)

- 대표 라우터를 선택하여 사용

[6강]- 2 – IP

IP Address: 32bit, version 4 사용중,

- 클래스 5단계로 나누지만 주로 a,b,c만 사용, class a를 살수있는 기관의 개수는 2의 7승 밖에 되지않음, class c는 2의 21승의 기관이 살 수 있지만 host id가 2의 8승밖에 되지않아 주로 b사용

- Subnet addressing: 세부 네트워크로 나누어 더 다양하게 사용 가능, 몇비트로 쪼개는지(subnet mask)

IP의 문제 해결하기위한 방안

- CIDR: class a,b,c 상관없이 /를 써서 네트워크 부분이 몇임을 알려줘서 ip address 할당하는 방식

- DHCP: 임시 IP address 할당받아 사용하고 반납하는 방식

- NAT(Network Address Translation): 동적으로 할당받은 ip를 마음대로 할당해서 사용

IP 레이어: Application, Transport, Network, Data Link

[7강] Transport Layer

- 데이터 전송을 관리하는 역할(잘 도착했는지, 딜레이가 있는지 등)

- TCP/IP와 UDP/IP 프로토콜을 주로 사용

UDP: 데이터 손실이나 전송 실패에 대해 신경쓰지 않아도 되는 경우 사용(중개 영상 화질 전송)

- sender, receiver 정의 안하고 그냥 보내버림

TCP는 데이터 전송의 속도보다 정확성이 중요한 경우에 사용(은행 거래)

- congestion control: 트래픽 몰리는 혼잡 상황에 대응

-flow control: sender와 receiver의 전송, 수신 속도를 조절

-error control: 에러 일어난지 보고 대응하는 것

[8강] Application Layer

- 보내는 메시지 및 comment을 결정

- Application은 전체, application layer는 쓸 수 있도록 도와주는 프로토콜

- User agent: 유저와 application 사이의 인터페이스(웹 브라우저, 메일리더)

- DNS, Web&HTTP, Mail, telnet 등등 사용

DNS(Domain Name System)

- 도메인 이름을 사용하여 통신을 가능하게 함

- 분산된 계층 구조의 데이터베이스로 구성되어 있음: 한 곳에서 관리하면 다 문제 될 수 있음

- 루트 네임 서버는 전세계에 13개 있음

- Recursive resolution: 계층적으로 하나씩 다 물어봐야함

- iterative resolution: 직접 다 물어봄

- DNS 캐시: ip address를 한번 매핑하면 pc에 저장해둠

Web&HTTP(HyperText Transfer Protocol)

- TCP 사용

- web 캐시: 모든 사람이 웹 서버를 사용하면 서버 용량 과부하, 프록시 서버에 캐시를 저장해두면 캐시를 통해 쉽게 접속 가능

IoT에서 많이 사용되는 프로토콜: MQTT와 CoAP

Message Queue Telemetry Transport(MQTT): 구독하는 대상에게만 전송(트위터)

Constrained Application Protocol(CoAP): 경량화, 서버에서 받아서 기기에 적용

# data[].attributes.body
CHAP 6.
Network Layer
- sender가 보낸 데이터를 receiver에게 전달하는 과정
- 패킷의 헤더에 IP address를 써서 보낸다
- 라우터를 통해 ip address를 보고 안전히 보냄

기능 :
Forwarding : 입력층에서 받아서 출력층으로 보냄
Routing : 주소를 보고 데이터 보낼 곳을 판단

circuit switching
- 전화 회선을 예약하여 데이터를 전송하는 방식
- 회로설정, 데이터 전송, 회로 종단
- 장점 : 장시간 통신에 좋음
- 단점 : 비효율적

Packet-Switching
- 데이터를 작은 패킷 단위로 분할하여 전송
- 대상 호스트 주소를 사용하여 패킷을 전달

IP Address
: 호스트 또는 라우터의 각 인터페이스에는 고유한 32비트 IP 주소가 할당
- netID, HostID 다름

AddressID 문제
- IP 주소가 모자람

CHAP 7
Transport Layer
: sender가 보낸 데이터가 잘 도착했는지 여부 확인

UDP : 간단한 프로토콜
TCP : 중요한 트래픽 전송

CHAP 8
Application Layer
- 앱을 인터넷 속에서 사용할 수 있도록 하는 것

DNS cashe
- 아이피 주소를 한 번 쓰고 지우지 않고 일정기간 동안 저장해놓는것

Web
- Web 서버와 Proxy 서버의 내용을 지속적으로 같게 만들어줘야 함

MQTT
- 브로커는 사전에 값을 받아 원하는 사람에게 할당

CoAP
- 센서들끼리 통신 중간 서버가 받아서 호스트에게
- 게이트웨이 굳이 필요 X

# data[].attributes.body
6강 1부

Network Layer Service : sender에서 보낸것을 Recipient에 안전하게 보내는 것

Network Layer

- Routing : 어떤 주소로 가야할 지 결정하는 행위

- Forwarding : 전달하는 행위

유선전화망 Circuit switched

무선전화망 packet switched

packet switching : 패킷을 보낼 때 커넥션없이 패킷 단위로 보냄

많이 쪼개면 헤더가 많이 생겨서 오버헤드

Routing Algorithms

A-> F로 가는 최적의 경로를 찾음, 각각의 노드는 이웃한 노드까지 가는 경로의 수를 알 수 있음 -> 최적의 경로 찾음

Link state routing : 각가의 노드가 이웃한 노드로 가는 경우의 수를 교환해서 각각의 노드의 경로를 알 수 있음 -> 최적의 경로를 찾음

A, AD, ADE, ADEB, ADEBC, ADEBCF 순으로 최단 경로를 계산함

이웃한 노드로부터 라우팅 테이블을 만듬

Hierarchical routing : 각 region을 만들어 라우팅 테이블을 간단하게 만듬

6강 2부

IP addresses : class A,B,C,D,E 각 기관에서 네트워크 ID를 통으로 구매 후 Host ID를 할당

A에 비해 C는 많은 ID를 살 수 있음 그 대신 Host ID 개수가 적어짐

Host ID를 어떻게 효율적으로 쓸까?

- 세부 네트워크로 쪼개서 쓴다 = subnet ID

몇 비트로 쪼갰는지 알기 위해 subnet mask를 쓴다.

DHCP : 임시 IP를 할당 받아서 쓰고 반납

NAT : IP 하나에 엄청나게 많은 호스트를 연결 가능

1번 컴퓨터가 ID를 보냄 -> 라우터가 받아서 NAT translation table에 입력한 후 공적인 IP를 보낸다. -> IP address 부족 문제 해결

IP datagram header format

- 20 octets

7장

Transport layer : sender가 보낸 데이터가 잘 도착했는지 여부를 확인

TCP : 속도보다는 정확도가 중요, 깐깐함(실수 용납 X)

- congestion control : 샌더가 데이터를 보냈는데 제 때 전송이 안됐을 때

- End-to-end Flow Control : 샌더와 리시브 사이에 보내는 속도와 받는 속도 조절

- Error Control : 패킷이 노이즈에 에러가 떴을 때

- Stop- and- wait flow control : 하나씩 전송 받음, 효율적이지 X

Sliding-window flow control : window size를 오른쪽으로 보내면서 패킷 전송

- congestion window

TCP Flow control : 샌더가 리시브를 넘치지 않게 만들어 주는 방식

Error Control : 에러 발생 시 어떻게 대응할지

Stop-and-Wait ARQ

- Error-free operation

- Lost data packet : ACK가 올 때까지 기다린다. -> timeout 사용 -> 일정시간안에 ACK를 받지 못하면 retransmission

- Lost ACK timeout : ACK 패킷 실종

Go-Back-N ARQ

- Corrupted data packet : 3번 실종 4,5번 제대로 도착 -> timeout으로 3번부터 다시 보냄

- Corrupted ACKs : ACK가 사라짐 -> 리시브는 전혀 문제 없다고 생각 -> cumulative

timeout전에 ACK가 사라지면 다시 전송

TCP Congestion Control : 트래픽 때문에 라우터가 넘침

- Timeout으로 해결

UDP : 간단한 프로토콜, 전송이 안돼도 상관없음(화질이 찌글어지거나, 목소리가 안들려도 괜찮음)

8강

Application Layer : 다양한 포맷 결정, 다양한 애플리케이션 프로토콜을 써서 데이터를 주고 받음

user agent : 유저에게 보이는 웹 브라우져

application layer protocols

-DNS : IP address를 32비트 id address로 알려줌, 분산해서 처리함

Web and HTTP : 다양한 파일 형식을 내 컴퓨터에서 보여준다.

HTTP는 TCP 사용

Web caches : proxy server를 둬서 web server 데이터를 볼 수 있음

MQTT : 브로커는 사전에 값을 받아서 그 값을 받기를 원하는 사람에게 보내줌

CoAP : HTTP의 슬림 버전, 센서들 끼리 통신 중간 서버가 받아서 호스트한테 보내줌

직접하고 싶으면 게이트웨이를 거치지 않아도 됨

# data[].attributes.body
6강
* Network Layer: 데이터를 리시버에 전달, Routing, Forwarding
* Circuit sithching, Message-switching
* IP Address, Subnet Address, DHCP, NAT

7강
* Transport layer protocols: Sender, Receiver
* UDP, TCP

8강
* App-layer protocol
* DNS, Web, HTTP, MQTT, CoAP

# data[].attributes.body
6강

* network layer services

- 센더가 리시버한테 안전하게 보내는 데 중요한 역할 함

- 데이터를 받아서 forwarding, routing

* 네트워크: circuit-switched/ packet-switched 두개로 나뉨

- Circuit-switched: 채널 낭비 존재

- packet switching: 패킷 잘라서 보냄

* 라우팅 알고리즘

- 라우터 각자 스스로 계산

- link state routing: 각각의 노드가 전체 네트워크 topology를 앎

- distance vector routing

- hierarchical routing

* ip addresses

- 호스트나 라우터의 각각의 인터페이스는 유니크한 32비트 ip address가 할당됨

- 컴퓨터 발달로 ip address 모자람

- subnet addressing

- ip address scheme의 문제점: 인터넷의 과도한 성장 / IETF 해결책

* NAT

- 네트워크 주소를 변환하는 기술

7강-transport layer

* transport layer protocols

- 다른 호스트들에서 진행되는 어플리케이션 과정들 사이의 logical communication을 제공

- TCP / UDP

* UDP

- 간단한 프로토콜

- 데이터 손실과 무관할 때 사용

- 기본 골격만

* TCP

- 중요한 트래픽 전송

- 정확하게 전송할 때 사용

- 데이터 교환 전 TCP 커넥션 설치

- flow control

- congestion control: 트래픽 때문에 라우터 넘침 / 잃어버린 패킷으로 유발된 RTO / 3개의 duplicate acks

- end-to end flow control

- error control

8강 – application layer

* application layer protocol

- 메시지 포맷 결정

- lower layer protocols로 제공되는 커뮤니케이션 서비스 사용

* DNS( domain name system)

-  IP 주소 및 기타 데이터를 저장하고 이름별로 쿼리할 수 있게 해주는 계층형 분산 데이터베이스

* Web과 HTTP

- 웹페이지는 objectfh rntjd

- http: 웹 어플리케이션의 layer 프로토콜

- web caching : 클라이언트 요청에 대한 응답 시간을 줄임

* MQTT

- 만능 gateway를 사용하면 모두 동작 가능

*CoAP

# data[].attributes.body
배운점

[Chap 6] Network Layer & IP(Internet Protocol)

- Network Layer Services

sender가 보낸 data를 receiver 측에 안전하게 제대로 전달하게 만드는 역할

IP가 주로 하는 일이기도 함

header에 IP address를 써서 보냄,

IP 주소를 보내서 라우터가 IP 주소를 보고 packet을 받아서 안전하게 도착하게 만드는 역할

- Network Layer

Forwarding – 라우터 입력층에서 받아서 출력층으로 보내는 역할

Routing – 어느 곳으로 보내야 할 지를 주소를 보고 판단하는 행위

- Taxonomy of Networks

Circuit-switched networks – 예전에 쓰던 유선 전화망, 1,2 세대

Packet-switched networks - 최근에 쓰고 있는 컴퓨터 통신망, 3세대부터 바뀜

Circuit switching : 옛날 전화 방식, 통화를 하고 싶은 전화선을 미리 예약 함 -> 예약이 완성되면 그 때부터 전화,통화 끝나면 예약했던 회선을 끊어 버림,

circuit을 여는 행위 ( 미리 예약하는 행위 ), 예약 끝나면 끝났다고 알려주고 그 다음부터 통화, 통화 끝나면 끝났다고 끊는 행위 필요

Circuit establishment(서킷을 만들고), Data transfer(통화를 하고), Circuit termination(서킷을 끊는)
-> 시간이 적게 들지만 오버헤드가 될 수 있다.

장점: 서킷이 예약이 되기 때문에 real-time으로 오랜 시간 통화할 때 좋음, 딜레이 없음

단점: 채널의 낭비가 존재함

바로 메시지를 보내는 방식이 Message Switching,

Packet switching이 message switching의 일부

메시지를 중간중간 잘라서 packet으로 나눠서 보내는 것이 message switching

packet switching: 그냥 packet을 보낼 때 미리 connection 없이 데이터를 packet 단위로 쪼개서 보내는 것, 하나의 데이터가 여러  packet으로 쪼개서 가기 때문에 혹시라도 중간에 경로로 가다가 한쪽이 밀리게 되면 라우터가 다른 경로를 알려주기 때문에 receiver 측에 도착하는 순서가 달라질 수 있다. 하지만 문제되지 않음. 순서가 바뀌어서 받더라도 알아서 순서 재정비해 줌

메시지가 크면 buffer의 사이즈가 커야 함, 그 문제를 해결하기 위해서  packet 잘라서 pipeline
-> 시간 단축, pipeline 때문

데이터 사이즈와 header 사이즈가 비슷하면 overheader가 된다. -> 무조건 잘게 쪼개는 것이 좋은 것은 아님

라우터가 routing table을 잘 만들어 놓으면 헤더에 들어가 있는 수를 보고 수신지까지 잘 전달하게 됨

- Routing Algorithms

routing table을 만드는 알고리즘이 Routing Algorithms

각자 라우터들이 스스로 계산함.

노드는 이웃한 노드의 cost만 알고 있음

cost가 가장 작은 최적의 경로를 찾고 routing table 만드는 알고리즘 -> Link State routing, Distance vector routing

Link State routing algorithm (Dijkstra’s Algorithm 활용)

각각의 노드가 자기들끼리 연결되어 있는 이웃한 노드와 cost를 알고 있으므로 서로서로 교환함, topology가 어떻게 구성되어 있는 지 알게 됨,
-> 각각의 노드가 알고리즘을 돌림. 최적의 routing path 찾음

Distance vector routing algorithm(Bellman-Ford Algorithm 활용)

이웃이랑만 정보를 주고받음, 각자가 가지고 있는 routing table을 활용하여 라우팅 테이블 제작

현실적으로는 세상의 많은 라우터들을 계산할 수 없기 때문에 대표 라우터를 선정해서 대표 라우터끼리 라우팅 테이블 주고받고, 라우팅 알고리즘 돌려서 내부 라우팅에 의해 전달되게 하는 것

-> Hierarchical routing

- IP (Internet Protocol)

라우팅 알고리즘을 실제로 구현하는 프로토콜이 IP임

IP addresses: 32bit IP addresses를 전세계적으로 쓰고 있음
IP address로 어떤 단말인지 알 수 있게 됨

IP address는 호스트 부분 네트워크 부분 나누어져 있음(net ID, host ID)

IP address는 크게 다섯가지로 구분
- class A, class B, class C, class D, class E

Net ID – 통으로 어떤 기관의 ID,

나머지를 컴퓨터에 할당하는 구조 – Host ID

Class B를 가장 많이 선호함

Subnet Addressing :Host ID를 어떻게 효율적으로 쓸까? -> 호스트 ID 부분을 기관에서 사서 세부 네트워크로 쪼개서 쓸 수 있다 => Subnet

외부에는 대표 라우터만 보이게 됨

subnet mask: 한 조직기관에서 subnet을 몇 bit로 쪼갰는 지

너무나 많은 사람들이 인터넷을 쓰고, IoT 때문에 가전제품도 IP를 가져야 할 필요가 있기 때문에 IP addresses 가 모자라게 됨. 그래서 주소가 고갈되는 문제를 어떻게 풀 것인가?

기본적인 솔루션은 IPv6, 새로운 버전을 만들자, 그러나 많은 장비를 바꿔야 하는 어려움이 있음

short term solution: CIDR - 기존의 클래스 방식이 아니라 네트워크 부분을 알려주고 나머지 bit가 Host part 인 것을 알려주는 방식으로 IP address를 할당하는 방식, 상당히 IP address를 아낄 수 있게 됨. 최근에 많이 사용

IP address를 어떻게 할당하느냐?

Manual configuration – 자기가 매뉴얼로 IP address를 할당하는 방식
DHCP – 정규 IP address 가 아니라 임시 IP address를 할당 받아서 쓰고 반납하는 형식

NAT(아이피 주소가 고갈되는 것을 해결하는 방법 중 하나)
아이피 어드레스 하나를 가지고 엄청나게 많은 Host를 연결할 수 있는 방식, 내가 할당 받은 아이피 어드레스는 하나, 내부 기관에서 라우터에 사설 아이피(내 마음대로 아이피를 할당해서 쓰는 방식) 존재.

- IP(Internet Protocol)

IP는 다양한 프로토콜로 만들어짐

다양한 Application을 정의하고 있음, TCP / UDP : 인터넷에서 사용되는 프로토콜, 그리고 IP, ICMP, IGMP가 있음, 실제 통신에 쓰이는 것은 IP, ICMP는 컨트롤 메시지, 망 관리 하거나 네트워크 컨트롤 하기 위한 용도, IGMP는 멀티 테스킹을 하기 위한 프로토콜, ARP/RARP는 Physical address를 IP address로 서로 변환 할 때 사용

IP는 20byte의 헤더가 있음, 뒤에 실제 데이터가 실리게 됨

TTL: sender가 receiver에게 보낼 때 걸리는 시간 측정하는 거였지만 실제적으로는 라우터가 라우터를 거칠 때마다, 몇번의 hops을 거쳐서 도착했는지 측정하는 것으로 쓰임

[Chap 7] Transport Layer

- Transport Layer protocol

sender가 보낸 Data가 destination에 잘 도착했는지, 중간에 에러가 났는지, traffic이 몰려서 delay가 있는지, 여러가지 상황이 발생할텐데 그런 것들에 대해서 transport layer에서 잘 도착했는지에 대한 여부 등의 일을 하게 됨

UDP: 간단한 프로토콜, 잃어버리거나 전송이 제대로 안 되도 상관없음, 기본적인 골격만 유지하는 프로토콜, 전송이 잘 되면 좋지만 안되도 어쩔 수 없다. 노력은 해보겠다. 미리 sender와 receiver가 handshaking이라고 하는 connection 하지 않음

TCP: 정확해야 함, 중요한 traffic을 전송할 때 사용, 까다로움

- TCP Flow control

Flow Control: sender와 receiver 사이에 보내는 속도와 받는 속도 조절 위해 사용
Sender가 엄청난 데이터를 보내는데, receiver가 처리할 능력 부족 -> buffer가 넘치게 됨,

sender가 보내는 속도를 조절할 필요가 있다

ack를 보낼 때, sender가 어느정도 buffer가 있는 지 알려줌

sender가 receiver를 넘치지 않게 만들어주는 방식

stop-and-wait flow control(하나씩 보내는 방식): 보낸 다음에 stop하고 ack가 오길 기다림

sliding window flow control(여러 개 보내는 방식): 여러 패킷을 보내고 패킷을 받는 대로 윈도우 사이즈를 움직여 다음 패킷을 보내는 방식

둘 중의 윈도우 사이즈가 작은 것으로 윈도우 사이즈 결정

- Error Control

Error Control: packet이 중간에 가다가 error가 났을 때, 어떻게 대응할 지에 대한 것

Stop-and-Wait ARQ

1. Lost data packet: receiver가 packet 받지 못함, sender는 packet을 보냈기 때문에 ack가 올 때까지 기다림, 영원히.. -> timeout 둠, 일정 시간안에 ack를 받지 못하면 바로 retransmission

2. Lost ACK timeout: ack packet이 사라짐, -> timeout 걸리면 retransmission. 다시 받은 것은 버리고 ack를 못 받았다고 인식 후 ack.

Continuous ARQ

Go-Back-N ARQ: 슬라이드 윈도우 사용했을 때,

1. Corrupted data packet: packet 사라짐 -> receiver는 그 다음부터 버림. timeout 걸리면 알아서 retransmission.

2. Corrupter ACKs: ACK가 오다가 사라지는 경우, a) 앞의 ack를 못 받았는데 뒤에 ack가 먼저 옴 -> 뒤에 것이 온 게 앞에 것도 도착한 것이라고 인식하기 때문에 전혀 문제가 없다고 생각함 => cumulative ACK
b) time-out 값에 따라서 다시 전송해야함

- TCP Congestion Control

sender가 데이터를 보냈을 때, congestion 생기면 어떻게 할 것인 지
TCP는 congestion 문제가 모든 사용자들이 해결해야 하는 문제라고 생각하고 프로토콜 만들었음 -> congestion control

에러가 발생하는 경우는 중간에 라우터에 buffer가 넘쳤다고 생각 -> traffic 개수를 줄이는 방식을 취함. 모든 노드가 내가 traffic을 일으켰는지 아닌 지 상관없이

1. Congestion control by timeout: time-out되면 retransmission,

2. Congestion control by 3 duplicate Acks: dupack - 앞에 거부터 다 문제가 되는 게 아니라 앞에는 패킷이 사라졌지만 뒤에는 잘 들어오는 구나.. -> 심각하게 traffic 된 것이 아니구나!

[Chap 8] Application Layer

- Application Layer protocol

보내야 할 message와 다양한 format 결정. 결국 다양한 Application들이 Application Layer protocol을 사용해서 데이터를 주고받는데, 밑에는 당연히 TCP or UDP,

Application은 전체를 얘기하는 것, Application Layer Protocol은 그 Application을 인터넷에서 쓸 수 있도록 도와주는 프로토콜

User agent: 유저한테 보이는 웹브라우저나 이메일리더 등

- DNS

통신이 가능하게 만드는 것에서 가장 중요한 것 중 하나, 32bit IP address와 name(ex. www.postech.ac.kr) 을 mapping 해주는 것

한 곳에서 다 하지 않고 분산해서 함: 한곳에서 다 관리하면 그곳이 고장 나면 문제가 되기 쉬움, 트래픽 몰림.. 등

Root Domain – Top-level Domain – Second-level Domain

Name servers

Local name servers(ex. postech)

Authoritative name servers: 내가 원하는 IP address와 host name을 변환 시켜 주는 것을 갖고 있는 name server

Recursive resolution
local name server에 정보가 없는 경우, 상위 서버로 물어보고 또 정보가 없으면 root까지, root도 정보를 가지고 있지 않다면 name server에 물어보고.. -> root에 부담됨

Iterative resolution
일일이 contact 해서 정보가 있는 지 물어봐야 함

현실은 두가지가 섞여 있는 경우가 많음. recursive + iterative

DNS cache

한번 확인한 IP address와 name server는 또 사용할 수 있기 때문에 pc에 일정기간동안 저장해둠

-  Web and HTTP
Web – Application/ HTTP – Application Layer protocol
HTTP가 실제로 웹의 데이터를 전송하고 받는 과정들을 처리함. 파일 일수도, 이미지 일수도, 다양한 것들 것 내 컴퓨터에서 재생되게 만들어주는 것이 web application, 그 역할을 하는 것이 HTTP

HTTP

HTTP는 TCP 사용, PC running Explorer에서 request를 하면 Web server의 내용을 링크와 텍스트 포함해서 가져옴, 그럼 PC에서 compile해서 마치 PC running Explorer에 있는 것처럼 화면에 멋있게 뜨게 됨.

Web caches(proxy server)
예시 – 월드컵 중계 방송을 보고 싶음, 한국에서 미국까지 모든 사람이 직접 연결하게 되면 서버가 마비될 수 있고 너무 멂. 그럴 경우에 한국에 Proxy server를 둬서 이 내용들을 한번만 저장해 놓으면 한국의 사용자가 편리하게 사용

그때마다, Web server와 proxy server 내용이 같게 만들어 주는 것이 중요함

- IoT and Internet Protocols
IoT에서 많이 사용하는 Application

MQTT

CoAP

- MQTT
미리 subscribe하고 subscribe 한 사람에게만 정보 보내는 것과 비슷한 방식, sensor 값이 올 때마다 그 값을 받기를 원하는 host한테 보내주는 방식, broker 역할이 중요

- CoAP
HTTP 통신의 슬림한 버전, sensor들끼리는 CoAP 통신을 하고, Gateway 또는 Broker라고 불리는 CoAP Server가 받아서 HTTP 방식으로 기존의 단말, host들한테 보내주는 방식

만능 Gateway를 쓰게 되면 두 개의 Protocol을 다 이해해서 동작을 같이할 수 있다.

느낀점

routing table을 만드는 Routing  Algorithms에 대해서 이해하기가 어려움이 있었습니다. 하지만 새롭게 배울 수 있어서 흥미로웠습니다.

# data[].attributes.body
[6강] Network Layer & IP

Network Layer Services
네트워크 계층은 source에서부터 목적지까지 패킷을 전달하는 데 필요한 여러 가지 중요한 서비스를 제공

Network Layer

송신 호스트에서 수신 호스트로 데이터 패킷을 전송하는 역할을 담당

패킷 전달 과정에서 라우팅 프로토콜과 라우팅 테이블을 활용하여 패킷이 가장 효율적인 경로로 전달되도록 함

네트워크 계층의 두 가지 주요 기능

포워딩(Forwarding) - 패킷을 입력 포트에서 적절한 출력 포트로 전달하는 역할

라우팅(Routing) - 네트워크에서 패킷의 경로를 결정하는 과정, 트래픽을 적절한 경로로 전달하여 패킷이 목적지로 도달할 수 있도록 함

Taxonomy of Networks(Network core)

Circuit switching

회선을 미리 예약을 해서 통화를 하는 방식 통화가 끝나면 예약했던 회선을 끊는 방식

단계: Circuit establishment - Data transfer- Circuit termination

장점: 회선이 예약되면 지연이 없기 때문에 장기 통신에 적합하다

단점: 채널의 낭비가 존재함

Message switching

긴 메시지를 잘게 쪼개서 보내는 방식

Packet switching

Routing Algorithms

Link State routing algorithm

모든 노드가 모든 링크의 비용을 알고 있어서 다익스트라 알고리즘을 이용해 최적의 경로를 계산할 수 있다.

Distant vector routing

각 노드는 자신에게 연결된 이웃 링크의 비용만 알고 있어서 벨만-포드 알고리즘을 이용해 최적의 경로를 계산할 수 있다.

Hierarchical routing

IP adress

net ID와 host ID의 쌍으로 구성

NAT(Network Address Translation)

네트워크 주소 변환의 약자로, 개인 네트워크에서 인터넷에 접속하기 위해 사용되는 기술

개인 네트워크 내부의 호스트들이 인터넷과 통신할 때, 사설 IP 주소를 공인 IP 주소로 변환해주는 역할 → IP 주소 공간을 효율적으로 사용하고 네트워크 보안을 강화할 수 있음

IP(Internet Protocol)

인터넷에서 데이터 패킷을 주고받기 위한 프로토콜

IP 주소는 각 호스트 또는 라우터의 인터페이스에 할당된 고유한 32비트 IP 주소로 구성3) IP 주소는 32비트의 이진 숫자로 표현되며, 보통 4개의 8비트로 구성된 네트워크 주소와 호스트 주소로 구분됨 (ex - 192.168.0.1과 같은 형식으로 표기)

인터넷에서 패킷의 송신 및 수신을 위해 중요한 역할 → 패킷은 출발지 IP 주소와 목적지 IP 주소를 포함하여 전달되며, 이를 기반으로 라우터가 패킷을 적절한 경로로 전달

[7강] Transfer Layer
Transfer layer protocols

Internet Transport Protocols

UDP(User Datagram Protocol)

TCP(Transmission Control Protocol)

TCP Flow control

Stop-and-wait flow control

데이터 링크 계층에서 사용되는 흐름 제어 기법 중 하나

수신자가 데이터를 받은 후에 송신자에게 확인 응답(ACK)를 보내야만 송신자가 다음 데이터를 전송할 수 있는 방식

이렇게 함으로써 송신자와 수신자 사이의 데이터 흐름을 조절하고 오버플로우를 방지 → 신뢰성과 안정성을 보장하지만, 전송 속도가 비교적 느리다는 단점 존재

Sliding-window flow control

Error Control

데이터 전송 중 오류가 발생한 경우, 송신자에게서 수신자로부터 재전송 요청을 받는 방식을 의미

ARQ(Automatic Repeat reQuest) 주요 기술 중 하나

Stop-and-Wait ARQ

Error-free operation

Lost data packet

Lost ACK timeout

Go-Back-N ARQ

Error-free operation

Corrupted data packet

Corrupted ACKs

TCP segment Format

TCP Congestion Control

[8강] Application Layer
Application layer protocol

네트워크 응용 프로그램 간의 통신을 위한 프로토콜을 정의

사용자가 인터넷을 통해 이메일, 웹 브라우징, 파일 전송, 동영상 스트리밍 등과 같은 다양한 네트워크 서비스를 이용할 수 있도록 지원

DNS(Domain Name System)

DNS 캐싱은 이전에 조회한 도메인 이름과 IP 주소의 매핑을 임시로 저장하여 다음 조회 시에 캐시된 정보를 사용한다. 이를 통해 DNS 조회의 성능을 향상시키고 네트워크 부하를 줄일 수 있다.

Web and HTTP(HyperText Transfer Protocol)
CoAP
MQTT & CoAP

경량 메시징 프로토콜로, 신뢰성 있고 효율적인 인터넷 통신을 위해 설계된 프로토콜

주로 IoT (Internet of Things) 디바이스와의 통신에 많이 사용

# data[].attributes.body
6-1강
Network Layer Services : 소스에서 목적지까지 패킷을 가져오는 것과 관련된 네트워크
Circuit sithching : S와 D 사이에 전용 경로 존재, 연결의 전체 수명 동안 고정된 용량 차지
3 phases - circuit establishment
- data transfer
- circuit termination
장점 - 회로가 설정되면 낮은 지연, 장시간 통신에 적합
단점 - 비효율적인 채널 용량, 특히 간헐적으로 트래픽이 급증
Packet switching, Message switching : 종료 시간의 차이
Routing Algorithms : 테이블을 관리하고 대상에 대한 경로를 가장 잘 제공할 링크를 선택
- Link state routing : 각 노드는 전체 네트워크 토폴로지를 알고 있음.
너무 오래걸리고 길어서 잘 이용 X

6-2강
IP Address : 각 인터페이스에는 고유한 32비트 IP 주소가 할당됨.
Subnet Address : 인터넷의 원래 2레벨 계층은 각 사이트에서 단일 네트워크를 가정,
시간이 지남에 따라 사이트가 여러 네트워크를 개발함에 따라 일부 메커니즘이 필요했음.
DHCP : IP 네트워크에 사용되는 네트워크 프로토콜.
NAT : IP 패킷에 있는 출발지 및 목적지의 IP주소와 포트 숫자 등을 바꿔 재기록하며 네트워크 트래픽을 주고 받게 하는 기술.
현재는 IP version 4 사용중. 일반적으로 S와 D 사이의 경로를 따라 어딘가에서 발생.

7강
Transport layer protocols : 서로 다른 호스트에서 실행되는 애플리케이션 프로세스 간의 논리적 통신 제공
- Sender : 응용 프로그램 메시지를 세그먼트로 나누고 네트워크 계층으로 전달
- Receiver : 세그먼트를 메시지로 재조립하고 애플리케이션 계층으로 전달
UDP : 재전송 없음, 중복 가능
TCP : 정확, 까다롭다, 정확한 도착, 다양한 제어
- Congestion control, End-to-end Flow control, Error control

8강
App-layer protocol : 교환되는 메시지 유형, 메시지 유형의 구문.
DNS(Domain Name System)
- 모든 정보를 아는 단일 사이트는 없다.
- 각 사이트는 자체 데이터베이스를 유지하고 인터넷을 통해 다른 시스템이 쿼리할 수   있는 서버 프로그램을 실행한다.
DNS가 분산된 이유 : Single point of failure, traffic volume...
Name server; Local name servers, Authoritative name servers
Recursive resolution : 서버가 최종 답변을 제공할 것으로 기대, 서버에 정보가 없으면 다른 서버로 요청을 보내고 응답을 기다림.
Web and HTTP : 웹 페이지는 개체로 구성, 웹 페이지는 여러 참조 개체를 포함하는 기본 HTML 파일로 구성
MQTT : Machine to machine, 경량 장치에서 신뢰할 수 있는 메시지
CoAP : HTTP 모델을 변환하도록 설계되어 기본적으로 인터넷과 호환 가능, 소형 장치의 웹 서비스를 위한 경량 프로토콜

# data[].attributes.body
<6장 1부>
Network Layer & IP
1. Network Layer Services : 데이터를 보낼 때마다 헤더에 주소를 써서 보냄. 이 때 사용되는 주소가 IP주소.
-라우터로 데이터를 받아 패킷 수신자 쪽으로 주소를 보고 전송.
-주소를 보고 어디로 보낼지 결정 : routing
-데이터를 받아 전달하는 행위 : forwarding

네트워크는 circuit-switched networks와 packet-switched networks로 나뉨.
1)circuit-switching
- 미리 해당 회선을 예약하고 통화가 끝나면 끊는 행위가 필요함.
장점 : 실시간으로 통화 가능. 딜레이 없음.
단점 : 채널의 낭비가 발생.(대화하지 않는 시점)

2)packet switching
-예약 없이 패킷단위로 쪼개서 보냄. 하나의 데이터를 패킷 단위로 쪼개기 때문에 라우터가 다른 경로로 알려줌. 하지만 순서가 바뀌어서 패킷을 받더라도 순서를 재정비함.
-메시지가 크면 시간이 오래걸림. 라우터의 용량이 커야함
→이를 해결하기 위해 메시지를 패킷 단위로 나눈다.
너무 많이 쪼개면 헤더의 영향이 커져 오히려 시간이 늘어남.

2. Routing Algorithms (매우 중요!!!!)
-라우팅 테이블을확인하여 최적의 경로를 추천해줌.(cost가 가장 적은 최적의 경로로 추천)
1) link state routing algorithm
-각각의 노드가 이웃한 노드의 cost 정보를 공유하여 최적의 경로로추천. 모든 topology와 cost를 알고 추천. (수식 어려움.)
-step별로 얻은 정보를 기반으로 가장 저렴한 cost를 가지는 경로로 진행. 경로를 알수 없으면 무한대로 표현됨.

2) distance vector routing
- 이웃하고만 cost 정보를 공유함.
- 가까운 라우터의 라우팅테이블만 고려하여 최적의 경로를 계산. 즉, 거쳐가는 경로를 순차적으로 cost 계산.
-가까이 있는 라우터까지의 경로를 계산하고 그 라우터로 전송했으면 다음 가까운 라우터까지의 경로를 계산. 이를 반복하여 최종 경로 설정.

<6장 2부>
IP(Internet Protocol)
-Ip addresses는 5가지 클래스로 구분됨.(A,B,C,D,E)
class A : 0부터 시작. 기관의 아이디가 7bit, 나머지 24bit를 컴퓨터에 할당.
class B : 아이디가 14비트, 나머지 16비트를 컴퓨터에 할당.(가장 많이 사용됨. 아이디와 컴퓨터에 할당하는 비트 량이 가장 적절해서)
class C : 아이디가 21비트, 나머지 8비트를 컴퓨터의 할당.

-Subnet Addressing : 호스트ID 부분을 쪼개서 Subnet으로 사용.
최근에는 ip address 가 모자람 → 새로운 버전의 IPv6 or short term solution.
-CIDR : 클래스에 상관없이 network part와 host part를 나누어 사용. B와C사이를 나누어 사용. IP절약.
-DHCP : 임시 IP 주소를 할당받아 사용 후 반납.

-NAT(Network Address Translation) : IP 주소 부족을 해결하는 해법 중 하나로 ip 주소 하나로 수많은 host에 할당할 수 있음. sender와 Destination을 바꿔 주며 사용. 마지막엔 둘이 교체됨.
IP는 20byte의 헤더가 있다. 아래에 수천 byte의 데이터가 실린다.

<7장>
Transport Layer
- sender와 receiver 사이의 전송이 잘 됐는지에 대해서 확인하는 layer가 transport layer이다.
1.TCP : 속도보다 매우 정확해야함. (송금할때와 같이 정확도가 요구될 때 사용)

1)congestion control-혼잡도 조절(중요!!)
-라우터로 들어오는 패킷의 량이 너무 많을때!  트래픽이 증가해 패킷이 loss됨. 이를 해결하기 위한 것이 congestion control.
-  윈도우 사이즈가 2^n으로 증가하다가 쓰레쉬홀드값을 넘어가게 되면 선형적으로 증가. time out에 의해서 패킷이 오지 않았을 경우, 현재 값의 반을 쓰레쉬 홀드 값으로 주고 다시 1부터 시작. 쓰레쉬 홀드 값을 넘어가면 다시 linear하게 증가.

2)end-to-end flow control : sender는 성능이 매우 좋지만 receiver는 성능이 낮고 메모리도 낮음. 리시버가 처리할 능력이 안될 때 sender가 보내는 속도를 조절. 즉, sender에서 보내는 데이터가 넘치지 않게 조절하는 것.
-stop-and-wait flow control :하나 보내고 기다렸다가 다음거 보내고를 반복. 시간이 오래 걸리고 효율이 떨어짐.
-sliding-window flow control : 여러개를(윈도우 사이즈 만큼)보내고 ack가 올 때마다 추가적으로 보냄. 윈도우 사이즈가 오른쪽으로 움직이는 형식이라서 슬라이딩 윈도우 방식이라고 부름.

3)error control : 에러 발생 여부를 보면서 대응.
-stop-and-wait ARQ : ACK가 오지 않으면 패킷은 영원히 기다림 →time out을 설정해서 일정 시간안에 ack를 받지 않으면 재전송.
-Go-Back-N ARQ: 슬라이딩 윈도우 방식과 비슷함. 사라진 패킷을 reciever가 다음 패킷을 받아도 버리고 사라진 패킷을 기다림. sender는 해당 패킷부터 순차적으로 다시 보냄.
-ack가 중간에 누락된 경우는 가장 마지막 ack를 확인하여 올바르게 ack를 받았다고 판단.
-time-out을 설정하면 받지못한 ack의 해당 패킷부터 다시 보냄.

2)UDP : 속도는 빠르지만 정확도가 떨어짐. (데이터가 화질이 좀 깨지거나 손실되어도 상관없는 경우 사용)
-사전에 sender와 receiver가 연결되지 않고 바로 데이터 전송.
-헤더의 사이즈가 8 bytes 밖에 안되는 간단한 프로토콜.

<8장>
Application Layer
1. Application layer protocol
-TCP/IP모델의 가장 상위층. TCP와 UDP를 사용.
-DNS,Web HTTP, Telnet, etc

1)DNS(Domain Name System)
- 32bit의 ip address를 도메인 네임과 맵핑해주는 시스템.
- 모든곳에서 분산해서 관리.
- Root Domain → Top-level Domains → Second-level domains 순으로 내려감.
- Root Domain은 전 세계에 13개.
- top level domains(com,edu,org,net)
- conutry code tlds : 우리나라는 .kr을 사용 ex) www.postech.ac.kr

- Recursive resolution(추가하기)
- Iterative resolution : 하나씩 접촉해서 물어봄.
현실에는 recursive와 iterative가 섞여있음.
-DNS cache : 어떤 사이트에 대한 ip주소를 알게되면 일정 시간동안 컴퓨터에 저장.→caches

2) Web & HTTP(Hyper Text Transfer Protocol)
-host name + path name
-HTTP는 TCP 방식 사용.
-Web caches(proxy server) : 거리와 양에 따른 웹서버 마비를 방지하기 위해 proxy server에 저장하여 거리를 가깝게 하고, 트래픽을 감소시킴. 중요한것은 실시간으로 proxy server와 web server의 내용이 같아지게 만들어야함.

2. IoT Protocols
1) MQTT : 브로커가 정보를 구독한 사람들에게만 정보를 제공.
2) CoAP : HTTP의 슬림한 버전.  센서에서 정보를 받으면 게이트웨이(브로커)로 전달되고 이후에 HTTP방식으로 host에게 전달하는 방법.
→ MQTT와 CoAP의 두 프로토콜을 모두 이해해서 사용할수도 있다.

# data[].attributes.body
6강
network layer
헤더에 주소를 써서 보냄(ip address)
라우터가 입력에서 받아서 출력으로 보냄
수신자 주소를 보고 어디로 보낼지 결정

circuit-switched
유선 통화 방식
packet switching
데이터를 패킷 단위로 쪼개서 보냄

routing algorithms
각각의 라우터가 최적의 경로를 찾는다
유명한 알고리즘~

ip address : 5개의 클래스로 구성
class A - 0으로 시작
class B - 1, 0으로 시작
class C - 1, 0, 0으로 시작
class D
class E

ip address 부족 해결
ipv6, CIDR, DHCP, NAT

7강
transport layer : 데이터 전송 관리(전송한 데이터 도착 여부 확인)
TCP/IP, UDP 프로토콜 사용
UDP - 간단함
TCP - 정확함. 에러 허용하지 않음
end-to end flow: 보내는속도-받는속도 조절
stop-and-wait flow: 하나씩 받음

8강
application layer
DNS : ip에 맞는 호스트 네임 변환해줌
DNS cache: 일정시간동안 ip주소 pc에 저장
http : 웹데이터 전송,처리
MQTT : 사전에 받은 값을 원하는 사람에게 전송
CoAP

# data[].attributes.body
6-1장

1. Network layer services
- 데이터 전송시 패킷의 헤더에 ip주소 저장
- 라우터를 통해 다른 호스트로 패킷 전송

* 네트워크 방식 2가지
1) circuit switch
- 전화통신
- 미리 회선을 예약하여 통신
- 통신 끝나면 예약한 회선 끊음
- 장점 : 오랜시간 전송가능
- 단점 : 미리 회선을 예약하기 때문에 낭비생김

2) packet switch
- message switch(packet switch의 일종)
- 데이터를 패킷단위로 끊어서 전송
- 라우터를 통해 다양한 회선으로 데이터 전송
- 패킷의 저장 단위를 너무 작게 잡으면 전송 시간이 오래걸림

* 송수신 방법(routing algorithms)
- 라우터 사이의 node의 cost 계산
- cost = 비용, 시간 등
- 최적의 cost를 찾아 해당 경로로 전송

1)Link satae routing(Dijkstra's Alg)
- 해당 지점에서 low cost 라우터 지정
- 이동후 이동한 곳에서 인접한 경로 계산
- 이전 결과값과 비교한 후 최적의 경로 계산
- 계속해서 반복 -> shortest path 생성
- 모든 라우터들 끼리 정보 공유

2)distance vector(bellman ford Alg)
- 인접한 라우터만 지정 -> low cost선택
- 이동한 라우터에서 인접한 라우터의 low cost선택

6-2장
1. IP Address
- subnet mask로 동일 ip정보 구분함
- CIDR : ip을 다양하게 할당하는 방법

2. NAT
- 부족한 ip address를 nat network를 통해 새롭게 할당함

7장

1. TCP
- congestion control
- end to end flow control : 송수신 속도 조절
- Error control
1) error-free operation
- 수신한 후 일정시간동안 ack를 받지 못하면 재전송

2) go -back-n
- slid window방식 사용
- error발생시 발생지점으로 돌아가서 지점부터 남은 데이터까지 다 전송
- time out 값에 따라 ack여부 다름

2. UDP
- 송수신자가 즉각적으로 정해짐
- 패킷 손실시 대처 x

8장

1. application layer
1) protocol
- DNS
- Web and HTTP
- E-mail

2) DNS(Domain Name Stytem)
- 각 ip에 맞는 호스트 이름 알려줌
ex) naver.com -> 네이버

3) Ip 주소 요청
- Recursive
: 호스트에 연결된 상위 노드에 호스트가 원하는 주소에 대한 정보 물음 -> Tree형식

- Iterative
: 호스트와 연결된 모든 노드에 정보 물음

실제론 recursive와 iterative를 같이씀

4) DNS cache
- 자주들어가는 사이트 정보 저장

3. MQTT(Message Queue Telemetry Transport)
- 서버에 호스트정보를 미리 등록시킴
- 이후 호스트들이 요청하는 정보에따라 다르게  정보제공

4. CoAP(Constrained Application Protocol)
- 요청자료에 대해 게이트웨이를 거치지 않고 바로 호스트에게 제공하는것

# data[].attributes.body
6강(1)
1) Network Layer Services : 패킷에 있는 헤더에 IP address를 넣어줘서 sender가 보낸 패킷을 receiver에게 보내준다.

2) Routing : 주소를 보고 어디로 보낼지 결정하는 것

3)Fowarding : 받아서 전달하는 것

4) Circuit-switched networks : 옛날 유선 전화 방식(통화를 원하는 곳에 미리 회선을 예약을 하고 연결하여 통화를 하고 통화가 끝나면 회선을 끊어준다.)

장점 : 1대1 연결이기 때문에 real time으로 오랜 시간 통화하기에 좋다(딜레이가 없음)

단점 : 채널의 낭비가 존재한다.

5) Packet-switched networks(Message-switched networks의 일부) : 예약 없이 데이터를 패킷단위로 쪼개서 보내는 것
- 라우터가 알려주는 길이 그 때 그 때 다르기 때문에 순서가 다르게 도착할 수 있다. 하지만 문제가 되지 않는다. 순서를 재정비하기 때문이다.
- Message-switched networks는 메세지 하나를 전부 보내고 다음 메세지를 보내서 시간이 오래 걸린다. Packet-switched networks는 파이프라인을 이용해서 시간을 단축할 수 있다.
- 파이프라인은 잘게 자른다고 좋은 것이 아니다. 잘게 잘라서 헤더의 크기보다 작아진다면 오버헤드이므로 오히려 오래 걸린다.

6) Routing Algorithms : 주소를 보고 어디로 갈지 알려주는 알고리즘
- Link State routing algorithm(다익스트라 알고리즘) : 각각의 노드의 정보를 주고받아서 하나의 toplogy 그림을 만들 수 있다.
-> 작동 방식 : 출발 노드에서 각각의 노드까지의 거리를 계산한다.(연결되어 있지 않다면 무한대로 처리한다) 가장 짧은 거리의 노드를 선택한다. 그리고 이 통로를 이용해서 다시 거리를 계산해보고 더 짧으면 업데이트하고 아니면 그대로 둔다. 반복하여 가장 짧은 거리를 구할 수 있다.

- Distance vector algorithm(Bellman-Ford Algorithm) : 이웃(연결되어 있는)하고만 정보를 주고 받는다. 그리고 가는 방법 다 계산해서 제일 짧은거 선택

7) Hierarchical routing : 위의 두 방법은 현실적이지 못하다. 세상에 너무 많은 라우터가 있기 때문에 Region을 나누고 각각 라우팅 테이블을 작게 만드는 것.

6강(2)
1) IP addresses
- class A : 0 으로 시작하고 7비트는 Net ID, 24비트는 Host ID,
2의 7제곱만큼만 판매 가능하고 많은 컴퓨터에게 할당 가능하다.
- class B : 1 0 으로 시작하고 14비트는 Net ID, 16비트는 Host ID, 2의 14제곱만큼 판매 가능하고 할당 가능한 양도 적당하여 가장 많이 판매되었다.
- class C : 1 1 0 으로 시작하고 21비트는 Net ID, 8비트는 Host ID, 2의 21제곱만큼만 판매 가능하고 많은 컴퓨터에게 할당해야 한다면 사용이 불가능하다.
- class D
- class E

2) Subnet Addressing : Host ID부분을 가지고 세부 네트워크가 가능하다.

3) IP address 부족의 해결
- IPv6 : 더 길게 만들어서 해결한다. 다 만들어졌지만 적용하기 위해서는 다 바꿔야 하기 때문에 길게 보는 중이다.
-  CIDR : 기존에 클래스로 나눠서 정의하던 IP정보를 클래스 없이 나눠주는 기법
- DHCP : 임시 IP address를 할당받아 사용하고 반납하는 방식
- NAT : IP address 하나를 갖고 사적으로 여러개로 할당하여 사용하는 방식(밖으로 데이터를 보낼 때는 공적 IP로 바꾸어서 보내서 문제가 없다, 보내는 곳의 주소를 기억해두고 돌아오면 보내온 곳의 주소랑 비교하여 보내준다.)

7강
1) UDP : 실수가 있더라고 속도가 빠르게

2) TCP : 속도가 좀 느리더라도 실수가 없게

3) TCP Flow control : sender가 receiver 가 넘치지 않도록 함
-> Stop-and-wait flow control : 하나를 보내고 잘받았다고 ACK를 보내면 다시 보내는 방법(시간이 너무 오래걸린다.)
-> Sliding-window flow control : 여러개를 보내고 ACK가 오면 또 다시 보내는 방법(minimun : receiver가 ACK 보낼 때 넣어보내는 window size값과 congestion window size를 보고 더 작은 것을 사용한다.)

4) Error control
-> Stop-and-Wait ARQ : ACK가 안올 때 무작정 기다리면 무한으로 기다려야 하니까 Timeout을 정해준다. ACK를 보냈는데 또 똑같은 패킷이 온다면 ACK를 못받았다는 것이니 ACK을 다시 보내준다.
-> Go-Back-N ARQ : 1번부터 10번까지 보낸다면 3번이 안오고 4,5,6에 대한 ACK가 왔다면 Timeout이 될 경우 3번부터 다시 보낸다.

5) TCP Congestion Control : 트래픽이 몰려 Congestion이 생긴다. 이 때 해결하는 것
- Slow start : 1개를 보내고 잘오면 2개 보내고 잘오면 4개 보내고 2의 n제곱으로 증가한다. ssthresh값 부터는 1씩 증가한다. 만약 잘돌아오지 않는다면 지금 값의 절반을 ssthresh값으로 바꾸고 다시 처음부터(1부터) 진행한다.
- 3 duplicate Acks : Slow start와 앞의 부분은 같지만 현재 값의 절반을 ssthresh값을 정하고 거기서부터 다시 시작한다.

8강
1) Application layer protocol : 보내야 할 메세지의 포맷 결정, 다양한 애플리케이션들이 에플리케이션 레이어 프로토콜을 사용하여 데이터를 주고받는다 (TCP, UDP)
애플리케이션 : 전체
애플리케이션 레이어 프로토콜 : 그 애플리케이션을 인터넷에서 쓸 수 있도록 도와주는 프로토콜이다.

2) DNS : IP address를 모르지만 찾아가기 위해서 사용, 텍스트방식이니 훨씬 이해하기 쉽다(전화번호 외우기 힘드니 이름으로 저장해두는 것과 같은 원리)
- Root name servers : 13개
- gTLDs : com, edu 같은 것들 지금은 인터넷이 크게 발전하여 매우 많은 종류가 있다.
- ccTLDs : .kr, .us와 같은 것들

3) Recursive resolution : local에 물어보고 모르면 그 상위에 물어보고 모르면 root까지 간다. root도 갖고 있지 않다면 com에 모르면 cnn에 물어본다

4) Iterative resolution : local에 물어보고 모르면 얘가 알꺼라고 ip를 알려주면 거기로 물어보고 반복을 하는 것. 돌아오는 부분이 없어짐

5) DNS cache : 계속 물어볼 수 없으니 어떤 사이트에 대한 ip를 알게된다면 다시 사용할 수 있으니 일정시간동안 저장해둔다.

6) proxy server : 한국에서 미국의 데이터를 매번 가져오면 힘들기 때문에 proxy server에 한번 가져와서 저장해두고 사용하게 만드는 것 (동기화가 중요하다)

7) MQTT : 어떤 곳에 온도 센서가 있고 측정한 값을 브로커에게 보낸다면 브로커가 온도 값을 받고싶은 고객들을 받은 후에 값을 받으면 뿌려주는 것

8) CoAP :

# data[].attributes.body
6강 1부

Network Layer
- forwarding: 입력층에서 받아서 출력층으로 보냄
- routing: 데이터를 어느곳으로 보내야할지 주소를 보고 판단

communication networks
1) Circuit-swiched networks: 통신 회선을 예약하여 데이터를 전송하는 방식으로, 통신 세션 동안 전용 경로를 유지
2) Packet-swiched networks: 데이터를 작은 패킷 단위로 분할하여 전송하는 방식으로, 패킷은 독립적으로 경로를 통해 전달

routing algorithms(중요)
: 각각의 라우터가 최적의 경로를 찾는 알고리즘
1) link state routing:
- 링크 상태 정보를 모든 라우터에 전달하여 최단 경로 트리를 구성하는 라우팅 프로토콜 알고리즘.
- 다익스트라(Dijkstra) 알고리즘 사용
- 각 라우터는 자신의 네트워크 정보와 전달받은 라우팅 정보를 이웃 라우터에게 전달

2) distance vector routing:
- 이웃하고만 정보를 주고받음. 가는 법을 모두 계산하여 제일 짧은 경로를 선택

6강 2부

IP (Internet Protocol)
- 32bit IP address 사용
- net ID, host ID 로 나뉘어져있음
- IP Addresses
1) class A: 0, Net ID(7), Host ID(24)
2) class B: 1,0,Net ID(14), Host ID(16)
3) class C: 1,1,0, Net ID(21), Host ID(8)
4) class D: 1,1,1,0 Multicast Address
5) class E: 1,1,1,1,0, Reserved for future use
Subnet addressing: Host ID 부분을 가지고 세부 네트워크가 가능

CIDR(Classless Inter-Domain Routing)
: 클래스 없는 도메인간 라우팅 기법
- 사이더는 0~32 까지 총 32비트까지 사용가능
NAT(Network Address Translation)
: 네트워크 주소를 변환하는 기술

즉, IP 주소를 다른 IP 주소로 변환해 라우팅을 원활히 해주는 기술

NAT는 기본적으로 하나의 네트워크 주소에 다른 하나의 네트워크 주소로 변환하는 1:1 변환이 기본이나 IP 주소의 고갈 문제를 해결하기 위해 여러 개의 IP를 하나의 IP로 변환하기도 함

7강
UDP
: 비연결형 프로토콜로서, 인터넷상에서 서로 정보를 주고받을 때 정보를 보낸다는 신호나 받는다는 신호 절차를 거치지 않고 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜
- TCP와 다르게 연결 설정이 없음
- 혼잡 제어를 하지 않기 때문에 TCP보다 전송 속도가 빠름
- 데이터 전송에 대한 보장을 하지 않기 때문에 패킷 손실이 발생할 수 있음

TCP
: 데이터를 중요하게 생각하여 확실히 주고받고 싶을 때 사용.
- TCP는 통신할 컴퓨터끼리  서로 확인 메시지를 보내면서 데이터를 주고받음
- 통신의 높은 신뢰성
- 웹이나 메일, 파일 공유 등과 같이 데이터를 누락시키고 싶지 않은 서비스에서 사용

8강
Application Layer: 보내야할 메세지의 포맷 결정, 다양한 애플리케이션들이 이를 사용하여 데이터를 주고받음.
DNS(Domain Name System)
: 모든 정보를 아는 단일 사이트는 없다. 각 사이트는 자체 데이터베이스를 유지하고 인터넷을 통해 다른 시스템이 쿼리할 수 있는 서버 프로그램을 실행한다.
gTLDs(Generic Top Level Domains)
- com, edu, gov, mil, net, org, int ,,,
ccTLDs(Country Code Top Level Domains)

Recursive Resolution
:local에 물어보고 모르면 그 상위에 물어보고, root까지 감. root 도 갖고있지 않을 경우 com -> cnn에 물어봄

Iterative resolution
: Host가 naver.com에 대해 query를 보내면 Local DNS server가 root name server에 query를 보내 com담당 server의 주소를 return 받고, 다시 com 담당 server에 query를 보내 naver.com이 변환 요청을 보낸다. 이렇게 최종 IP 주소를 받을 때까지 요청과 응답을 계속해서 local name server가 반복하는 방법

CoAP
: 무선 센서 네트워크 노드처럼 자원에 제약이 있는 장치들에서 사용할 목적으로 고안된 서비스 계층 프로토콜

# data[].attributes.body
<6강 1부>
Network Layer
센더가 보낸 데이터를 리시버 쪽에 안전하게 전달하는 역할을 함
데이터(패킷)를 보낼때마다 헤더에 주소를 써서 보냄(보내는 호스트, 받는 호스트, ip 주소)

Network Layer의 핵심 기능
Routing : 어느 곳으로 보낼지 주소를 통해 판단하는 행위
Forwarding : 라우터가 패킷의 헤더를 보고 패킷을 전달하는 행위

Circuit-switching
옛날 전화방식
서킷을 만듬 -> 통화를 함 -> 서킷을 끝냄
장점 : 한번 서킷이 예약이 되기 때문에 오랜시간을 통화할때 좋음 딜레이도 없음
단점 : 채널의 낭비가 존재

Message-switching
중간 중간 잘라 몇개의 패킷으로 나눠서 보냄
메시지를 전송하면 전송한 메시지를 일정한 단위로 나누어서 버퍼에 저장하여 저장이 완료되면 다시 그것을 읽어 전송경로를 결정하는 전송방식
메세지가 길어지면 시간이 오래 걸림
메세지가 크면 라우터의 저장되어있는 버퍼의 사이즈가 커야됨
이 문제를 해결하기위해 나눠 보내는 Packet-switching 사용

Packet-switching
하나의 데이터를 여러 단위의 패킷으로 잘라서 보냄
송신 측에서 모든 메시지를 일정한 크기의 패킷으로 나눠서 전송 -> 수신 측에서 이를 원래의 메세지로 조립
길이 밀리면 라우터에서 다른 경로로 데이터를 전송하는데 도착 순서가 달라도 순서를 다시 재정비해서 보내기에 문제가 되지는 않음
Message-switching 보다 시간을 단축시킴(버퍼의 사이즈가 커야되는 Message-switching의 문제를 해결하기 위해 패킷으로 나눠서 보내면 순서대로 보내 시간 단축)
무조건 잘게 자른다고 좋은 것은 아님
잘게 많이 자르면 패킷에 비해 헤더가 영향을 많이 끼침

라우팅 테이블 : 컴퓨터 네트워크에서 목적지 주소를 목적지에 도달하기 위한 네트워크 노선으로 변환시키는 목적으로 사용. 네트워크 상의 특정 목적지까지의 거리와 가는 방법 등을 명시하고 있는 테이블
라우터가 라우팅테이블을 잘만들어놓으면 헤더를 보고 수신지까지 잘 전달함

Routing Algorithms : 라우팅 데이블을 만드는 알고리즘(스스로 계산)
코스트가 적은 경로를 탐색
1) link state routing 알고리즘
각각의 노드가 알고 있는 이웃한 노드와 코스트를 서로서로 다 교환을 하면서 모든 노드가 똑같은 토콜로지를 만듬
dijsktra's Algorithm 사용
1. 어느 한 노드에서 각각의 노드로 가는 코스트를 계산
2. 코스트가 가장 적은 노드를 선택
3. 위에서 선택한 노드를 걸쳐서 각각의 노드로 가는 코스트를 계산하여 가장 코스트가 적은 것을 선택
4. 위와 과정을 반복하고 선택이 되지 않은 노드 중 코스트가 적은 노드를 먼저 선택
결과로 각각의 노드로 가는 최적의 경로(코스트가 적은 경로)가 계산됨
-> 각각 노드의 라우팅 테이블을 만들 수 있음

2) distance vector routing 알고리즘
Bellman-ford 알고리즘 사용
자기의 이웃하고만 데이터를 주고 받음
이전에 계산한 최단경로를 이용해 최단경로를 갱신하는 식

3) Hierarchical routing
현실적으로 많이 씀. 대표라우터를 선정해 대표 라우터끼리 라우팅테이블을 만들고
대표 라우터 안에서 또 라우터끼리 라우팅테이블을 만듬

<6강 2부>
IP(Internet Protocol)
라우팅 알고리즘을 실제로 구현하는 포로토콜

IP addresses
32bit address를 전세계적으로 사용중
IP addresses를 가지고 어떤 단말인지 알 수 있음
호스트 부분과 네트워크 부분으로 나뉨
class A
0으로 시작 네트워크아이디(7비트), 호스트아이디(24비트)
class A를 살 수 있는 기관이 2^7(네트워크아이디)개 밖에 안됨
class B
1, 0으로 시작 네트워크아이디(14비트), 호스트아이디(16비트)
가장 많이 사용하는 것
class C
1,0,0으로 시작 네트워크아이디(21비트), 호스트아이디(8비트)
class A를 살 수 있는 기관이 2^21개나 되지만
기관에서 사간 후 2^8개(호스트아이디, 컴퓨터) 밖에 할당못함

Class B 에서 호스트 아이디 부분을 효율적으로 쓰기 위함
-> Subnet ID(건물, 층), Host ID(기기)으로 나눔

subnet mask : host id를 몇비트로 쪼갰는지 알기 위함

문제점
컴퓨터 발달 -> IP address가 모자라게 됨
근본적인 솔루션
IP버전 6라는 새로운 버전을 만들자 but) 모든 장비를 다 바꿔야됨
CIDR(Classless Inter-Domain Routing)
IP address의 영역을 나눌 때 기존 방식보다 유연하게 자신이 원하는 Network address와 host address를 나눌 수 있음

IP address를 할당하는 방식
1) manual configuration
자기가 매뉴얼방식으로 할당하는 방식
2) DHCP(Dynamic Host Configuration Protocol)
임시 IP address를 할당받았다가 거기서만 쓰고 다시 반납하는 방식
- NAT(Network Address Translation)
ip address 하나 가지고 엄청 많은 호스트를 연결할 수 있는 방식
라우터가 사설 아이피(공적으로 인정되지 않은 아이피)를 내 맘대로 할당해서 사용
사설 IP 주소공간을 별도로 정하고는, IP 주소변환에 중점을 둠 기본적으로, 인터넷 상에 동일 IP 주소를 재사용할 수 있게 하는 것

IP는 다양한 프로토콜로 이루어짐
- Application Layer(User process)
- Transport Layer(TCP, UDP) : 인터넷에서 사용되는 프로토콜
- Network Layer(ICMP: 망, 네트워크 관리, 제어용, 데이터 전송에 쓰이지는 않음, IP: 실제 통신에 쓰임, IGMP : 멀티캐스팅을 하기 위한 프로토콜, 많이 사용되지는 않음)
- DATA Link Layer(ARP, Hardware Interface, RARP) : pysical address를 ip adress로 변환할때 사용

IP datagram header format
ip는 20바이트의 헤더를 가지고 그 뒤에 몇천바이트의 데이터가 실림
Time to live field : 센더가 리시버까지 보낼때의 시간을 측정하는 것
실제로는 그렇게 쓰이지 않고 몇번을 걸쳐서 목적지로 가는지를 카운팅 하는 것
자세한 설명은 복잡하기에 생략

<7강>
Transport layer
센더와 리시버 사이에 데이터 전송이 이뤄질 때
Transport layer 센더가 보낸 것이 에러가 났는지 등 잘 도착했는지 여부 등을 확인

트래픽의 종류에 따라 나뉨
UDP(User Datagram Protocol)
잃어버려도 상관이 없고 전송이 제대로 안되어도 큰 문제가 없을때 사용
ex) 실시간 월드컵 축구에서 딜레이가 있고 화면이 잠깐 멈춤(이미 재전송을 해봤자 쓸모가 없음)
헤더 사이즈 : 8바이트

TCP(Transmission Control Protocol)
에러가 있으면 안됨. 아주 정확해야되는 중요한 트래픽을 전송할 때 사용
하는 일이 많음

TCP가 하는 기능 세가지
1. congestion control
센더가 데이터를 보냈는데 제때 전송이 안됐을 때 어떻게 할 것이냐
라우터에 패킷이 여러 방향으로 막 들어오니까 버퍼가 넘치면서 패킷을 손실하게 됨 -> 이것을 해결하는 것
- timeout
에크가 잘 오면 윈도우 사이즈가 미리 설정한 thresh 전까지 2의n승으로 증가
-> 타임아웃에 의해 패킷이 오지않으면 현재 값의 반을 thresh로 설정하고 위와 같은 방식으로 진행
- fast retransmit
timeout 전에 듀팩(discard하지않고 안받은 것이 있다고 에크를 보냄)을 보냄 앞에 꺼만 안오고 뒤에껀 잘 전송되고 있다는 것을 의미

2. end-to-end Flow control
보내는 속도와 받는 속도의 조절을 위해 사용
EX) 센더(성능이 굉장히 좋음), 리시버(성능이 안좋음)
이런 상황에서 리시버가 처리할 성능이 안됨. 센더가 보내는 속도를 조절할 필요 가 있음
센더가 데이터를 보내면 리시버 측에서 잘받았다고 에크(ack)를 보냄
에크에 리시버가 가능한 메모리스페이스에 대한 정보를 포함시켜서 보냄
센더 측에서 에크를 보고 속도조절
- stop and wait flow control
하나 보내고 잘받았어 두개 보내고 잘받았어 하는 것
데이터를 보낸 다음에 멈춘 뒤 에크가 오는 것을 기다림
오래 기다려야 하기 때문에 효율적이지 않음
- slidig-window flow control
데이터 여러개를 보내고 올때마다 하나씩 더 보내는 방식

3. Error control
에러가 떴을 때의 문제를 다룸
ARQ(Qutomatic Repeat reQuest)
1) stop-and-wait ARQ
위와 동일하게 하나 보내고 에크를 받는 방식
- lost data packet
센더가 보낸 데이터가 손실됐을 때 센더는 에크가 올때까지 기다림 -> 타이머를 돌려서 일정시간까지 기다리다가 재전송
- lost ACK timeout
에크 패킷이 사라진 경우에도 위와 동일하게 재전송하고 똑같은 데이터가 있기 때문에 삭제하고 에크를 다시 보냄

2) Continuous ARQ
-Go-Back-N
slidig-window 방식
여러개 보내고 올때마다 에크를 보냄
-- Corrupted data packet
도중에 데이터가 손실된 경우 리시버가 그 뒤로 온 데이터들을 다 버려버리고
--Corrupted ACKs
에크가 오다가 사라진 경우
0번 에크는 잘 왔는데 그 뒤로 3번만 도착한 경우 센더는 전혀 문제가 없다(1, 2번도 잘 받았구나라고 생각)고 판단하고 계속 그대로 보냄
0번 에크만 받고 그 뒤로는 못 받은 경우 타임아웃을 걸고 타임아웃 값에 따라 재전송여부 판단
-Selective repeat request

<8강>
Application Layer
Application을 인터넷에 쓸 수 있도록 도와주는 것
User agent
: 유저한테 보이는 웹브라우저, 이메일 리더 등
Application layer protocols
: DNS, Web and HTTP, Electronic Mail 등

DNS(Domain Name System)
www.postech.ac.kr -> 32비트 ip address로 변환해서 알려줌
한곳에서 다하지 않고 분산해서 관리(트래픽이 몰리기 때문에)

gTDLs : com, gov, net 등
ccTLDs : 우리나라는 kr

local name servers
Authoritative name servers
: 내가 원하는 ip address, 호스트네임을 변환시켜주는 것을 가지고 있는 네임서버

서버 알아내는 방법
recursive 방식
점점 상위로 가서 물어보는 것
Iterative 방식
로컬에 물어봤는데 물어봤는데 모르면 알 것 같은 아이피주소를 알려줌
현실적으로는 recursive, Iterative 두 방식이 섞어서 사용

DNS cache
아이피 주소를 알게 되면 한 번 쓰고 지우는게 아니라 일정시간 저장해놓음

Web, HTTP(웹에 데이터를 전송하고 받는 방식을 처리하는 것)

web cache
서버 지연을 줄이기 위해 웹 페이지, 이미지, 기타 유형의 웹 멀티미디어 등의 웹 문서들을 임시 저장하기 위한 정보기술

IoT에서 많이 사용하는 Application
MQTT(Message Queue Telemetry Transport)
작은 코드 공간이 필요하거나 네트워크 대역폭이 제한되는 원격 통신을 위해, 즉 IoT와 같은 제한된, 혹은 대규모 트래픽 전송을 위해 만들어짐
연결지향적
브로커(역할 중요)를 통한 통신
미리 구독한 사람들에게만 컨탠츠 전송

CoAP
클라이언트-서버(or Request-Response) 모델을 기반으로 동작하며 클라이언트-서버간에 상태 정보를 전송하기 위한 모델에 적합한 One-To-One 프로토콜

# data[].attributes.body
<6장 1부>
Network Layer & IP
1. Network Layer Services : 데이터를 보낼 때마다 헤더에 주소를 써서 보냄. 이 때 사용되는 주소가 IP주소.
-라우터로 데이터를 받아 패킷 수신자 쪽으로 주소를 보고 전송.
-주소를 보고 어디로 보낼지 결정 : routing
-데이터를 받아 전달하는 행위 : forwarding

네트워크는 circuit-switched networks와 packet-switched networks로 나뉨.
1)circuit-switching
- 미리 해당 회선을 예약하고 통화가 끝나면 끊는 행위가 필요함.
장점 : 실시간으로 통화 가능. 딜레이 없음.
단점 : 채널의 낭비가 발생.(대화하지 않는 시점)

2)packet switching
-예약 없이 패킷단위로 쪼개서 보냄. 하나의 데이터를 패킷 단위로 쪼개기 때문에 라우터가 다른 경로로 알려줌. 하지만 순서가 바뀌어서 패킷을 받더라도 순서를 재정비함.
-메시지가 크면 시간이 오래걸림. 라우터의 용량이 커야함
→이를 해결하기 위해 메시지를 패킷 단위로 나눈다.
너무 많이 쪼개면 헤더의 영향이 커져 오히려 시간이 늘어남.

2. Routing Algorithms (매우 중요!!!!)
-라우팅 테이블을확인하여 최적의 경로를 추천해줌.(cost가 가장 적은 최적의 경로로 추천)
1) link state routing algorithm
-각각의 노드가 이웃한 노드의 cost 정보를 공유하여 최적의 경로로추천. 모든 topology와 cost를 알고 추천. (수식 어려움.)
-step별로 얻은 정보를 기반으로 가장 저렴한 cost를 가지는 경로로 진행. 경로를 알수 없으면 무한대로 표현됨.

2) distance vector routing
- 이웃하고만 cost 정보를 공유함.
- 가까운 라우터의 라우팅테이블만 고려하여 최적의 경로를 계산. 즉, 거쳐가는 경로를 순차적으로 cost 계산.
-가까이 있는 라우터까지의 경로를 계산하고 그 라우터로 전송했으면 다음 가까운 라우터까지의 경로를 계산. 이를 반복하여 최종 경로 설정.

# data[].attributes.body
6강
1) Network Layer Services : 패킷에 있는 헤더에 IP address를 넣어줘서 sender가 보낸 패킷을 receiver에게 보내준다.

2) Routing : 주소를 보고 어디로 보낼지 결정하는 것

3)Fowarding : 받아서 전달하는 것

4) Circuit-switched networks : 옛날 유선 전화 방식(통화를 원하는 곳에 미리 회선을 예약을 하고 연결하여 통화를 하고 통화가 끝나면 회선을 끊어준다.)

장점 : 1대1 연결이기 때문에 real time으로 오랜 시간 통화하기에 좋다(딜레이가 없음)

단점 : 채널의 낭비가 존재한다.

5) Packet-switched networks(Message-switched networks의 일부) : 예약 없이 데이터를 패킷단위로 쪼개서 보내는 것
- 라우터가 알려주는 길이 그 때 그 때 다르기 때문에 순서가 다르게 도착할 수 있다. 하지만 문제가 되지 않는다. 순서를 재정비하기 때문이다.

# data[].attributes.body
익숙할 것이라고 하셨지만 멀게만 느껴졌던 오늘의 내용... 데이터를 주고 받는 과정에서 생길 수 있는 문제들을 확인하고 이를 해결하는 방법을 정해간다거나 하는 것들이 흥미로운 주제였다.
=====================

[6강 - 1부]  Network Layer
- sender가 보낸 data를 receiver에게 전달하는 과정
- packet, header, IP address...
1) Forwarding: 데이터를 받아서 ID 보고 판별하여 보내는 것
2) Routing: 데이터를 보고 어디로 갈 지 찾아 보낼지 판단하는 것

* communication networks (Taxonomy of NW)
1) circuit-switched networks: 유선전화망
- 전화선circuit을 미리 예약establishment, transfer, 끝나면 끊어버림termination
2) packet-switched networks: 컴퓨터
- message switching (packet이 이 일부임)
: message를 packet 단위로 쪼개서 보냄
>> 길이 밀리면 다른 경로로 갈 수는 있지만 순서 재정비 가능해서 크게 문제가 되지는 않음
>> 메세지가 여러군데서 오면 buffer size 커야 하는데 packet 잘라서 보내면 순서대로 차례차례 보내며 시간 단축함
>> 잘게 자른다고 무조건 좋은 것은 아님

* routing algorithm
- 중요함! 알고리즘이 스스로 계산함. cost가 가장 적은 방법으로 가는 것을 선택함,,
1) link state routing
- cost를 서로 교환하여 각각이 이웃한 node 와 cost 를 확인한 후 topology 파악
- shortest path 찾기
2) distance vector routing
- 자기 주변 이웃 node로부터 routing table만 이용하여 함
- 많은 route 중 대표 알고리짐을 알고..!  infra_AD
- hierarchical routing
>> 전체 테이블 대표 router reasonable, full X

===========================
[6강 2부] IP - internet protocol
routing algorithm을 구현하고 있는 것 : IP

ID address: 32bit - Host/net ID로 구분 :: net은 기관이 통으로 구매한 것, host는 컴퓨터 부여된 것 (2^n)
- dotted decimal notation으로 표기 32bit를 8bit씩 쪼개서 10진수로 쓰는 것
1) A: 0, netID 7, 나머지 Host ID 24 :: 2^24개는 너무 많은 컴퓨터
2) B: 10, netID 14 나머지 Host ID 16 :: 가장 많이 구매
3) C: 110, netID 21, 나머지 Host ID 8 :: 2^8 개 이상 컴퓨터 있으면 비추
----- ↓ 아래는 보통 할당되어 있는거라 ↑ 위를 주로
4) D : multicast
5) E : reserved for future use
-------------------------------
2) B를 선택할 경우,  →  subnet addressing

1,0, net 14 → net이 16이라고 봄
host 16을 어떻게 하면 잘 활용할까? 8 subnets (건물, 층에 주자), 8 host (기기에 주자)
-------------------------------
* IP address의 부족문제 어떻게 해결?
- IETF 의 IPv6 : 장비 바꾸는 문제 있어 longterm sol.
- CIDR: classless inter-domain routing → NW part / host part
>> IP address 할당하는 새로운 방식 (NW 먼저 할당 후 / 다음에 나오는 걸로 host 개수 확인, ex_ /24: (32-24= 8 => 2^8))

> IP address 어떻게 할당?
- manual configuration

- DHCP: 임시 ID address
→ NAT Network Address Translation
>> 공적 IP + router ID (local NW)
1) 처음에 router IP로 sender IP 지정
2) router가 Sender를 공적 IP 로 변경 (destination 고정)
--- WAN addr (공적 IP, LAN addr: router IP)
3) reply는 2번 값의 sender<>receiver 바꿔주기
4) NAT translation table을 보고 다시 원래 LAN address로 바꾸기
5) 1번 전의 값과 비교했을 때, send <> receiver 위치 정확히 반대로 바뀌어 있음
=> IP addr가 필요한 문제를 위와 같은 식으로 해결함
-------------------------
* Internet Protocol(IP) layering
- 다양한 protocol
1) application Layer
- user processes
2) transport Layer :: 인터넷에서 사용되는 protocol
- TCP, UDP
3) network Layer
- ICMP (망,network update), IP, IGMP(multicast 위한 protocol
4) Data Link Layer
- ARP, HW I/F, RARP
------------------------------
* IP Header 20 bits 아래에 데이터 붙음
- 현재는 ver.4 사용
- net들이 각자 다른 언어, packet 사이즈 다름..!

*TTL: time to live
- sender 가 receiver까지 보내는데 걸리는 시간이었는데, 실제로는 router (hoc)을 몇 번 거쳐서 desti.까지 가게 되었나를 측정하는 것으로 쓰여짐

=====================
[7강] Transport Layer (protocol)

sender > NW layer의 IP - packet단위 (data) 전송- > receiver
잘 도착했는지 중간 도착? error, delay 등 확인하는 것
- TCP-IP, UDP-IP 로 TCP/UDP layer 아래 IP를 사용

------------------------------
* UDP : User Datagram Protocol 털털 간단
- 좀 잃어버려도 상관 없고, 전송이 제대로 안되어도 문제 없는 경우에 사용
- 요즘엔 많이 쓰긴 함. 중계방송의 경우 실시간이니까 정지되고 끊기고 하면 곤란
> retransmission 같은 것이 필요 없는 경우. streaming 등의 경우 화질이 좀 깨져도 전송되는 것이 나음

- 장식(frill) x, 기본 골격만 있음
- 전송 잘되면 괜찮지만 전달 안되어도 상관 없음
- sender-recevier 미리 컨택 안하고 걍 진행

- 간단: header length 8 bytes (32bit)
1) source port # 16, destination port # 16 -- application 구분
2) message length 16, checksum 16 -- 간단한 error checking
3) data

-------------------------------
* TCP : Transmission Control Protocol
- 속도보다는 '정확'해야 하는 경우에 사용
- 은행 간 송금 등 완전 정확해야 하는 경우에 사용, 까다롭고 reliable 해야 함
- 전송 중 사라지면 다시 보내고, 방해 받으면 안되고,, 하는 일 많음

*** control
1) congestion (중요!!)
- sender가 데이터 보냈을 때 고속도로 밀린 것처럼 제 때 전송 안되었을 때
- 유선 NW 가정하고 만들었었음 (유선은 안정적이므로 error 나는 것 없다고 가정)
→ error가 발생한다 중간 router의 buffer 가 넘쳤다고 생각함 (traffic ↑↑↑)
▶ 넘치면 packet loss → 매우 해결해야 하는 문제~~

congestion window size 조절로 문제 해결
1-1) slow start: timeout
- ack 잘 오면 window size가 2^n으로 증가, 미리 설정된 thresh 전까지! 이후에는 linear 하게 증가.
→ timeout에 의해 packet 오지 않으면 현재 값의 반을 thresh 로 두고 처음과 같은 방식으로 진행함

1-2) fast retransmit: timeout 전에 dupack을 보냄, 앞에꺼만 안오고 뒤에껀 잘 들어오고 있다는 것을 의미함
- dupack: discard하지 않고 안받은 것 있다고 ack을 보내는 것

2) end-to-end flow
- sender~receiver 사이 보내는 속도 조절용
> sender SUPER COM.  ~~ receiver NOT SO GOOD : 데이터 받아도 전송하는 속도가 느림 (메모리 공간 buffer space 적고.., buffer space가 더 중요하긴 하나 전송속도가 느리면 매한가지이긴 함)
>> sender가 막 보내는데 receiver가 잘 못 받으면 buffer 가 넘쳐서 쓸데없이 많이 보내는 꼴이 되어 버림 ▶ sender 가 보내는 속도 조절이 필요함!
→ receiver가 잘 받았다고 메모리 정보를 포함한 ack를 보내야 함

→ sender 가 receiver를 넘치지 않게 해주는 방식
1) stop and wait
- 하나 보내고 ack 받기: 비효율적
2) sliding window
- 여러 개를 보내고 올 때마다 하나씩 더 보내는 방식
- ack가 올 때마다 window가 옆으로 움직이는 것 같다고 해서 sliding window 방식
- window size는 receiver가 ack 보낼 때 보내는 window size ~ sender가 보고 있는 sliding window 중 min 값으로 설정해야 함
> congestion window는 뒤에 설

3) error
- packet이 가다가 중간에 noise 등으로 error 생겼을 때 보고 대응

- ARQ (Automatic Repeat reQuest)
1)) Stop and Wait
- 하나 보내고 ack 받고 하는 것은 유사하나, error 발생하면...

1-1)) lost data packet: packet을 보냈기 때문에 sender는 ack 올 때까지 기다림..
→ 그래서 timer 설정, 일정 시간 내 ack 받지 못하면 다시 transmission
→ timeout: 특정 ack가 오기 전까지 충분한 시간을 유지해야 함

1-2)) lost ack packet: ack이 사라진 경우 얘는 일정 시간 기다려서 ack이 안오니까 retransmission 하는데 이 때 동일한 것을 다시 받은거니까, ack missing 이라고 생각하고 다시 ack을 보내고 동일하게 받은 것은 삭제

2)) continuous (based on the sliding window)
2-1)) go-back-n 주로 많이 쓰임
- packet이 사라진 경우: 여러개를 동시에 묶어서 보내다 보니까, 만약에 같은 pack에서 묶인 것의 ack을 받지 못했다면 그 pack 전체가 ack을 날리지 않고 일정 시간을 기다렸다가 그 후에 retransmit 받으면 ack을 날려

- ack이 사라진 경우:
1))) time out 전: 중간 ack이 안왔으면 문제 없이 진행함 (cumulative ACK)
1))) time out 후: 시간이 지났는데도 안오는거라고 생각하고 retransmit, 또 받은거면 지우면 됨 ㅎ

2-2)) selective repeat request (selective reject)

- TCP Segment Format 20bytes (<>UDP 8bytes)
1) source port # , destination port #  -- application 구분
....

============================
[8강] Application Layer
보내야 할 message & syntax 등을 결정해야 함 (by TCP-IP, UDP-IP)
- app. vs. app.protocol 의 차이
> app은 전체, ~protocol은 그를 위한 규칙

- user agent: web browser, email....

- protocols: DNS, HTTP, ...

1) DNS (Domain Name System): 통신이 가능하게 해주는 중요한 것 중 하나
- IP addr. 말고 DNS를 쳐서 들어가기! 이름이라 쉽게 이해할 수 있으니까
> 주소를 치면 IP addr로 매핑시켜 바꿔줌
> 한 곳에서 관리하지 않고 분산해서 처리 함
> distributed / hierarchical DB
→ Root Domain → Top-level Domains (edu, gov, com, net...) → second-level Domains...
=> gTLDs 엄청 많이 늘었음 (generic domains ==  organization domains)
> country Code (.kr, .cn...., country domains == geographical..)

- local name servers: postech
- authoritative name servers: 내가 원하는 IP addr.와 host name을 변환시켜주는 것을 가지고 있는 서버 (서울대 web을 알고 싶을 때, 어떤 node가 그걸 가지고 있으면,,)

- server 알아내는 법
1) recursive resolution: 하나씩 거꾸로 감 (root가 너무 부담이 감)
2) Iterative resolution: 보통 씀..(모르는 애가 일일이 컨택해서 물어봄)
=> 현실은 두 개 섞어서 같이 물어보는 경우가 많

(DNS cache)
매번 IP addr.를 물어보진 않고 일정 시간동안 저장해 둠

---------------------------------------
2) Web (application) & HTTP (protocol)
HTML이 web에 뭘 전송하고 받는 과정들을 의미
- host name (보통의 주소) + path name (보통 / 다음)

(HTTP) TCP 방식 사용
가져와서 complie 하면 됨
- caches 사용
> 모든 사람이 직접 연결하고 나면 복집하고 비용도 많이 듦. web을 하나 복제해서 proxy server로 만들어 둠. 그 때 그때 두 개 서버가 같도록 만들어주는 것이 중요함
-----------------------------------------

*IoT에서 많이 사용하는 application

1. MQTT (Message Queue Telemetry Transport)
- 미리 구독한 사람들에게만 컨텐츠를 보내는 방식
- 데이터 → MQTT broker → 구독자(host)들에게만 보냄 (broker 역할 중요)

2. CoAP (Constrained Application Protocol)
- HTTP 의 슬림한 버전 (sensor끼리 통신, broker와도 통신..하여 기존 host에게 보내)
- CoAP 그 자체를 이해하는 인터넷이라면 직접 통신도 가능

=> 만능 gateway를 쓰게 되면 MQTT, CoAP 둘 다 이해해서 동작 가능