# data[].attributes.body
Chap 5. Network Layer & IP

Network Layer Services

ip adress를 붙여서 전달함.

송신 -> 패킷 -> 라우터 -> 라우터 -> 라우터 -> 수신

ip adress를 보고 어디를 가야 될지 정함

-> 이걸 Routing 이라고 함.

0111을 받아서 라우터를 통해 전달하는 행위를 forwarding 이라고 함.

Circuit switching

Circuit switching : 서킷을 만들고, 데이터를 전달하고, 서킷을 끊는 행위

장점 : 오랜시간 사용할 때, 딜레이가 없음.

단점 : 채널의 낭비

Message switching

Packet switching : 하나의 데이터를 여러개의 패킷으로 쪼개서 보내는 방법.

패킷 스위칭의 특징 : 순서가 다를 순 있으나 문제없음.

Message switching : 서킷 스위칭의 초록색 부분 없이 바로 보냄. -> 더 좋음, but 메시지가 길어지면 시간이 오래걸린다는 단점이 있음.

패킷 스위칭은 패킷을 쪼개서 보내기 때문에 메시지 스위칭보다 전달 속도 훨씬 빠름.

a)는 기존 메시지 스위칭, 그림을 보면 헤더의 낭비도 있음 -> 무조건 많이 쪼갠다고 좋은건 아님. c,d 그림 d가 더 느림.

각각의 라우터에는 라우팅 테이블이 필요

-> 라우팅 테이블을 잘 만들면 속도 향상 가능(중요!!!!)

질문 : A->F로 갈 수 있는 경로?

Link State routing algorithm

Djkstra’s Algorithm(디스 알고리즘)

A에서 출발할 때, 각각의 코스트가 주어졌을 때, A에서 각 라우터에 갈 수 있는 최적의 경로 구하는 방법

D(해당) = 해당 라우터에 갈 때 드는 코스트

p(해당) = 어디서 출발 하는지

처음엔 A에서 갈 수 있는 라우터에 값을 구함 이후 동일

step0 가 끝나면 step1 시작은 cost가 가장 적은 경로로 시작 AD

=> 이후 코스트가 전보다 큰건 쓸필요없음.(그래서 B는 안씀)

코스트는 전 꺼 + ex AD D(C),p(C) 는 4, D(1+3)

코스트가 같을 경우 둘 중 하나 택

마지막에 모든 경우의 수가 끝나면 테이블에 적힌 코스트가 가장 작은 경로가 최적의 경로가 됨.

Distance vector routing

최적 경로 탐색 방법

ex) J에서 B로 갈 때

J->A = 8, A->B = 12 ==> 20

J->I = 10, I->B = 36 ==> 46

J->H = 12, H->B = 31 ==> 43

J->K = 6, K->B = 28 ==> 34 따라서 A로 가는게 제일 빠름

이렇게 테이블을 만들 수 있음.

실제로는 이렇게 씀.

전체를 만들지 않고, Hierarchical table 작성 region으로 가는 hierarchical 테이블 만들고 내부에서 전체 테이블 사용

# data[].attributes.body
5-1장. Network layer & IP

Network Layer 역할

->sender가 보낸 데이터를 receiver측에 안전하고 제대로 전달하게 만듬.

->네트워크 계층에서는 주로 IP가 이런 일을 함.

-패킷이라는 데이터를 보낼 때마다 헤더에 IP adress를 써서 보냄.

Network Layer의 기능

-입력층에서 받아서 출력층으로 보냄.

forwarding:라우터로부터 라우터로 보내는 행위

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

네트워크의 분류

1.Circuit-switched networks(유선 전화망)

-옛날 전화방식

Circuit Switching이란?

-회선을 미리 예약함,예약이 완성되면 통화하고 끝나면 회선 취소

순서:Circuit establishment->Data transfer->circuit termination

장점:circuit이 예약되기 땜에 real time 좋고 delay 없음

단점:채널 낭비 심함.

2.packet-switched networks(컴퓨터 통신망에서 쓰는 방법)

packet swithcing이란?

-메세지 스위칭의 일부

-미리 커넥션 없이 메세지를 보낼 때 일부를 잘라서 보냄

문제점:순서가 엉망일 수도(라우터가 다른 방향을 알려주기 때문)->하지만 문제가 되진 않는다 받을 때는 순서를 재정비해서 알아서 행함.많이 쪼개면 header낭비

Routing Algorithms->Routing table을 만드는 방법

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

종류 2가지

1.Link State routing

각각의 노드가 자기 이웃 정보를 공유함

모든 노드가 똑같은 topology그림을 암.

각각의 노드가 dijstra’s Algorithm을 돌림

Dijkstra’s Algorithm

-shortest cost를 고름

2.Distance vector routing

ex)Bellman-Ford Algorithm

->자기의 이웃하고만 데이터를 주고 받음

->이웃한 노드로부터 이웃들의 라우팅 테이블을 받고 이웃에 가서 가는 방법 계산

Hierarchical routing

즉,autonomous system에서 대표 라우터들끼리 라우팅 테이블을 주고받아 테이블 만들고 내부 라우터들끼리 라우팅 테이블을 주고받아서 만들자.

5-2장.IP(Internet Prococol)

IP addresses

-버전4(32bit)

-단말인지를 알 수 있음

-클래스 5가지로 구성(Class A~E)

-class는 0또는 1의 배열과 Net ID(기업,기관의 ID)와 Host ID로 구성

->Net ID는 숫자가 많을수록 많은 기관이 살 수 있음,하지만 host ID의 비트수가 적어지므로 적절한 수로 구성된 class B가 인기가 가장 많다.

Subnet Addressing

:class의 host ID부분을 세부 네트워크로 쪼개씀->효율성을 위해

subnet mask->뒷 부분을 몇비트로 쪼개야하는지 알게함.

problems of IP address scheme(class-ful addresses)

->인기가 너무 많아서 주소 고갈

이를 극복하기 위해 Long term solution(ipv6)와 short term solution(CIDR)

CIDR(Classless Inter-Domain Routing)

-기존의 class-ful이 아니라 /숫자를 붙여서 network부분을 알려주고 나머지 비트가 host 비트인 것을 알려주는 방식

IP address를 어떻게 할당하는가?

1.매뉴얼로 할당하는 방식

2.DHCP-임시 ip adress를 쓰고 다시 반납하는 방식

NAT(Network Address Translation)

-IP address의 부족성을 해결하는 방법

-하나의 ip address로 많은 네트워크를 할당받는 방법

-라우터가 NAT translation table을 사용하여 sender의 ip를 공적 ip로 전환함

-IP의 버전은 4

-IP header의 Time to Live(TTL)는 라우터를 거칠 때마다 숫자가 하나가 줄어듬.즉,몇 번을 거쳐서 가는지 확인 가능

6장.Transport Layer

Transport layer protocols

-TCP(Transmission Control Protocol)

-UDP(User Datagram Protocol)

UDP(털털한 프로토콜)

-기본적인 골격의 전송 프로토콜

-전달 안되어도 노상관

-sender,receiver가 그냥 보내버리는 프로토콜

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

-8바이트의 간단한 프로토콜

TCP 기능

1.혼잡제어(Congestion Control)

-TCP congestion Control을 만들어 놓음

하지만 유선네트워크에서의 혼잡만 생각하여 오류 상황이 라우터때문이라고만 생각함

그래서 packet loss를 푸는 방법을 만듬

1.time out

잘 오면 window size를 키움 2의 엔승씩

ack이 오지 않으면 값을 반으로 줄이고 다시 linear하게 증가(slow start)

window가 0

2.test transmit

엄청난 혼잡상황은 아니라고 판단하여 window수를 현재 값 반으로(after 3 dupack)

2.Flow Control

-sender와 receiver사이의 속도 제어

-잘 받으면 ack를 보냄

보내는 방식

2-1.Stop and wait flow control

-보낸 다음 ack를 기다림

-비효율적임

2-2.Sliding-window flow control

*pipelining:여러 개를 보내고 올 때마다 하나식 더 보내는 방식

-window size가 오른쪽으로 움직임

-여러 패킷을 보내고 ack받는 대로 오른쪽으로 이동

#윈도우 사이즈는 receiver의 ack에 들어있는 윈도우 사이즈와 비교해서 작은 걸로 선택

3.Error control

방식

1.Stop-and wait ARQ

-ack를 받지 못하면 무작정 기다리는 것을 방지하기 위해 timeout을 둠

-ack패킷이 사라지면 데이터를 한번 더 받게 되니까 다시 ack을 보냄

2.continuous ARQ

2-1.Go-Back-N(sliding window방식)

-데이터가 오지 않으면 그 전의 번호로 돌아가서 다 보내는 방식

-ack가 사라지면 그 전까지 잘 받았다고 생각함(ACKS are cumulative)

2-2.Selective repeat request

TCP segment Format

-20bit

# data[].attributes.body
nerwork layer

발신자 보내는 데이터를 안전하게 수신자에게 보내주는 역할을 함

데이터에 헤드를 붙임, ip address

nerwork layer fuction

1.Forwarding 데이터를 입력측에서 받아서 출력 측에 보내는 행위

2.Routing 데이터의 주소를 보고 어디로 보내는 지 판단하는 행위

communication networks

1.circuit switched networks

예약을 하고 데이터를 보낼 수 있을 때 보내고 통신을 끊는 행위

장점 예약을 함으로써 real time으로 오랜시간 통신가능, 딜레이도 없다

단점 채널의 낭비가 있다

2.Packet switched networks(message switching 의 일부)

한 메시지를 나눠서 보낸다

데이터를 packet단위로 쪼개서 보낸다

각각 헤더가 붙기 때문에 많이 분리하면 오히려 시간이 증가한다

Routing table

헤더에 들어간 수가 어디로 보낼지 나타내는 테이블

Routing algorithms 중요!!

Routing table을 만드는 알고리즘, router가 계산해서 최적으로 거리를 산출

1.link routing algorithms

각각의 노드가 주위의 노드와 코스트를 안다,

dijstra's Algorithm

hierarchial routing= 많은 라우터중 축소하여 대표 라운터 선정

hierarchical routing

대표 라우팅 테이블을 만들고 각 라우팅테이블 끼리 라우팅 테이블을 만든다

ip(internet protocol)

ip addresses - 32bit address

host , ID

class ABCDE로 나눠짐

ip address= net id, host id
ip address 종류 =class A,B,C,D,E
A= Net Id=7 Host Id=24
b= Net Id=14 Host Id=16
c= Net Id=21 Host Id=8
d= multicastaddress
e= teserved for future

# data[].attributes.body
5장 Newtwork Layer

forwarding: ex hearder(01110)을 받아서 outputlink로 전달
routing: 주소를 보고 어디로 보낼지 결정
* 라우팅테이블을 잘만들어야 header가 정보를 잘 전달함.

Taxonomy of Networks
1. couumunication networkds( circuit-swithced networks vs Packet_switched networks)

Circuit switching(유선 전화망 process)
미리 회선 circuit을 포항에서 수원까지 연결하면 미리 회선을 만들어 연결함. 통화후 회선을 끊음.
장점> 회선 circuit이 예약되므로 실시간으로 오랜시간 통화시 유리함.
단점> 비효율적인 채널 수용력

Message Switching
circuit을 만들거나 끊는 것없이 바로 보내는 것
- Packet switching: Message switching의 일부
메세지를 여러 packet으로 잘라서 메세지 전달
* 경로가 독자적이므로 나뉘어진 pakcet이 한 path가 막혔을 때, 다른 경로로 이동할 경우 도착 순서가 원래 분할한 packet순서와 다를수있지만 문제가 없음. 순서를 재배열해서 올바른 packet의 배열을 재정립하기때문임.

Effect of packet size on transmission time
10배만크의 헤더 발생시 파이프라이닝이 너무 커지면 data size와 header size가 비슷해지므로 오버헤드가 발생해 오히려 효율이 떨어짐.

Routing Algorithms: 라우팅 테이블 형성 방법
-최적 경로 파악 방법
각각의 노드가 자신의 이웃 경로와 코스트를 알면 그 연결된 노드들을 이어 결국엔 똑같은 topology

Dijkstar's Algorithm
모든 로드를 잇는 방법:
연결된 cost의 역계산의 합계와 이전에 배당된 코스트값과 비교해 노드 경로를 찾음.

Bellman-Ford Algorithm
한 점의 이웃하고만 주고 받음.
연결된 경로와 이어지는 가장 짦은 경로를 지정해 Outgoing Link와 New delay를 이용해 라우팅 테이블을 생성함.

Hierarchical routing
autonomous systems: 대표 라우터를 이용해 Region으로 가고 이동.
* 원래 만든 라우팅 테이블을 대표 라우팅 테이블로 표현한다고 생각하면 됨.

Internet Protocol
Class B( [0,1,NetID(14)] = 16bit, Host ID(16))을 많이 사용함(포항공대도 이를 사용.)
_ Subnet Addressing:  Host ID를 두개로 분할해 사용함
IP의 문제
32bit 기반 주소 체계여서, class별 세분화가 되어있지 않음
>해결방식: CIDR(기존 class pool의 A,B,C,D,E가 아닌 더 세부 표현법으로, prefix length를 제외한 32-prefix length부분을 host할당을 주어 class를 더욱 세분화 함)
ex) class B와 class C사이에 /24,/22,/20,..에 값을 두고 이후 값에 0을 두어 host address를 심어 값을 세분화함.

Dynamic Host Configuration Protocol
정규 IP를 사용하는 것이 아닌 일정만 IP를 빌려쓰고 반납함.
*NAT: 공적으로 할당받은 IP외에 사적으로 할당된 IP주소를 만들어 라우터를 통해 사적이 IP를 공적으로 IP를 변환하고 사적인 IP를 공적으로 변환해 일시적인 IP를 받아 IP address문제를 해결함.

Transport Layer: packet이 잘 도착했는지를 판별
* traffic종류에 따라 나뉨

-UCP: 하는일이 없어서 간단하며 목소리가 조금 흔들리거나 화질이 저하되는등 전달이 나이브하게 판별

TCP:철저하게 reliable
1. conjection control:
라우터에 많은 packet이 들어왔을 때 output의 속도가 느려 packet lost가 발생하면 window size를 조절함으로 conjection을 조절함.

2. TCP flow control
sender와 receiver의 처리속도 차이로 sender가 Ack를 제대로 처맇자미 못할때 하나보내고하나 받았음을 표하는 stop-and-wait를 사용하거나 윈도우 사이즈만큼 보내어 속도 차이 조절

3. Error control
pakcet lost나 Ack 패킷이 안왔을 때  timeout을 두어 error을 탐지해 다시 packet을 보내어 packet의 lost문제를 해결하거나 Ack을 받음

# data[].attributes.body
[질문]

Q1. “Effect of packet size on transmission time”을 보면, packet을 특정 수로 쪼개면 되려 시간이 길어지는 때가 있는데, 적정 값을 찾으려면 실험적으로 찾아보는 방법뿐인가요?

Q2. Kijkstra algorithm은 각 router에서 독립적으로 연산되는 것인지, central node에서 연산하는 것인지 궁금합니다.

Q3. CIDR을 적용하면, subnet ID는 따로 두지 않는건가요?

Q4. DHCP방식의 NAT을 사용하게 되면, router에 처리해야할 정보량이 많아져 과부하되지는 않나요?

Q5. Congestion control 방식의 ssthresh 값을 정하는 기준은 무엇인가요?

[CH 5-1. Network Layer & IP]

1. 역할

우편시스템과 같이, sender가 보낸 데이터를 receiver에게 안전하게 전달되도록 하는 역할 수행. N.L의 protocol인 IP의 역할이기도 하다.

packet이란 데이터를 보낼 때마다 IP Address를 붙여 router를 거쳐 목적지에 도달한다.

1.1. NL의 역할

Router를 지나갈 때 forwarding을 하는데, 어디로 보낼지 주소를 보고 판단하는 행위인 Routing을 한다. 그리고 데이터를 보내는 행위를 forwarding이라 한다.

1.2. Taxonomy of Networks

- Circuit switching

미리 circuit을 예약(Circuit) à Data transfer à Circuit termination 세 가지 행위로 구성.

장점: circuit을 예약하기 때문에 real-time으로 오랜 시간 통화할 때 유리

단점: 채널의 낭비로 인해 손실이 발생

- Message Switching

미리 circuit 예약없이 바로 보내는 행위.

- Packet Switching

Packet을 보낼 때 미리 connection없이 데이터를 쪼개서 packet 단위로 보냄. 따라서 경로가 밀린다면, 다른 경로로 보냄. 따라서 receive data의 순서가 달라질 수 있음.

장점: circuit이 없지만,

단점: message가 길어지면 시간이 오래 걸림. 메시지가 크면 router의 크기 또한 커져야 함. 이를 위해 Packet을 쪼깨어 시간을 단축.

- Effect of packet size on transmission time

Q. 무조건 Packet을 잘게 쪼개면 좋은걸까?

A. Packet 당 헤더의 숫자도 함께 늘어나기 때문에 시간이 길어진다.

1.4. Routing Algorithms

각 router가 갖고 있는 Routing table을 잘 만들어야 path를 효율적으로 짤 수 있다. Central node가 전달하는 것이 아니라, 각 router가 스스로 계산하는 알고리즘.

두 가지 종류가 있다. “Link State routing”, “Distance vector routing”

1) Link State routing

나의 이웃과 cost를 알고 이것을 공유한다. 이것을 모든 router가 주고 받으면, 모든 node가 똑같은 topology를 얻을 수 있다.

각 노드는 topology를 바탕으로 Dijkstra’s Algorithm을 적용한다.

- Dijkstra’s Algorithm

각 노드를 거칠 때 마다 topology와 cost를 계산해 최적 경로를 탐색. Shortest path algorithm

2) Distance vector routing

이웃 node와 data와 cost를 주고 받는다. 각자가 가지고 있는 routing table을 받는다. 단, router가 너무 많기 때문에 현실적인 한계가 존재. 이 문제를 해결하기 위한 방법으로 Hierarchical routing

[CH 5-2. IP (Internet Protocol)

1. IP Addresses

크게 5개 classA~E로 구분. 최상위 비트를 다르게 부여해서 구분.

Net ID는 기관이 살 수 있는 class. Host ID는 기관 내에 있는 IP주소의 수.

- subnet Addressing : Host ID의 address에서 쪼개서 만든 ID로, 비상용 address라고 생각하면 됌.

- subnet mask :

문제는 IP address가 부족하다. à 새로운 IP 버전을 개발. 하지만 CIDR(Classless Inter-Domain Routing) : 각 Class에 따라 낭비되는 Host ID address를 예방하고자, 32bit 중 network가 차지한 bit를 제외한 bit를 모두 host part에 분배. 그 결과, 다양한 크기로 host addresses를 줄 수 있다.

- DHCP (Dynamic Host Configuration Protocol) : 정규 IP Addresses가 아니라 임시 addresses를 받는 방식.

2. NAT (Network Address Translation)

- Router가 본인에게 연결된 device에 addresses를 할당.

3. IP (Internet Protocol)

-(p57) IP packet의 format은 20byte의 헤더, 그 뒤로 몇백몇천의 데이터.

- (p60) Internet = network of networks. 여러 network는 packet 사이즈가 다르기 때문에 서로 통신을 할 때면, packet을 쪼개야한다. 그것을 위해 Identification, Fragment Offset 등이 들어가야 한다.

- Time to Live(TtL)은 몇 번의 호흡을 거쳐 destination을 가는지 count하는 역할

[CH 6. Transport Layer]

1. Transport layer protcols

- UDP : No ack, no retransmission. 털털

- TCP : Reliable, 깐깐

1.1. UDP (user Datagram Protocol)

- No frills / best effort / connectionless / often used for

- hear size가 8byte

1.2. TCP (Transmission Control Protocol)

- Congestion control : sender가 보낸 데이터가 도착하지 않았을 때 할 행동

- End-to-end Flow Control : sender와 receiver 사이에 받는 속도 조절을 위함

- Error Control

1.2.1. TCP Flow control

sender는 빠르고, receiver는 느리다고 가정. 속도 조절이 필요. Receiver가 데이터를 받고 ACK를 보낼 때, spare room (memory space) 정보를 함께 보내면 속도 조절이 가능.

- Stop-and-wait flow control : 보내고, 잘받았어~, 보내고, 잘받았어~ à 시간효율에서 떨어짐.

- Sliding window flow control : 여러 개를 보내고, 올 때마다 더 보내는 방식. Window 사이즈는

1.2.2. Error Control

- ARQ (Automatic Repeat reQuest)

- Classification

- Stop-and-wait ARQ

ACK가 오지 않을 때 영원히 기다리는 문제를 해결하기 위해 Timeout을 도입. Timeout은 ACK올 때까지 만큼 충분히 커야한다.

만약 ACK packet이 사라진 경우는, sender에서 “너 ACK 안보냈어!”라고 말해준다.

- Go-Back-N ARQ

에러가 나면, time-out하고 그 때로 돌아가서 그때부터 나머지 데이터를 보내는 방식. 만약, 중간 packet만 받지 못했다면?

1.3. TCP Congestion Control

유선을 기반으로 만들었기 때문에, trafic이 넘치면 router에 문제가 생긴다.

# data[].attributes.body
5장 Network Layer & IP

1. Network Layer

1) Network Layer란

- 데이터 패킷을 전송하는 역할

- 데이터 header에 송신,수신 host의 IP가 저장되어 있다.

- 중간에 Routing을 통해 주소를 식별하고 전달한다.

2) Circuit-switch networks

- 옛날 전화 방식

- 1,2 세대 스마트폰

- 서킷을 만들고, 데이터를 변환하고, 서킷을 종료하는 과정

- delay가 없어 오랜 통화 유리하다.

- 채널 낭비가 존재한다.

3) Packet-switching networks

- Message Switching의 일부

- 긴 메시지를 여러 패킷으로 나누어 보냄

- 너무 많은 패킷을 쪼개면 헤더가 많아져 비 효율적이다. (Overhead)

4) Routing Algorithm

- Link State routing

(1) 이웃한 노드들끼리 연결정보와 cost를 알고 있기 때문에 정보를 주고 받으면 같은 topology를 그릴 수 있다.

- Distance vector routing

(1) 이웃하고만 정보를 주고 받는다.

- Hierarchical routing

(1) 라우팅이 많고 멀리 있어 현실적으로 힘든 부분이 있어 만든 알고리즘

(2) 대표하는 라우터를 지정하여 데이터를 주고 받고 내부 라우터에 전달

2. IP

1) IP addresses

- ipv4: 32bit

- Net ID: 기관

- Host ID: 기관 내 컴퓨터

- classA ~ E로 5개 나뉘어짐 (그 중 A,B,C는 우리가 자주 봄)

(1) class A

- 7bit / 24bit (Net ID, Host ID)

- 0.0.0.0 ~ 127.255.255.255

(2) class B

- 14bit / 16bit

- 가장 많이 쓴다 (포항공대)

- 128.0.0.0 ~ 191.255.255.255

(3) class C

- 21 bit / 8bit

- 192.0.0.0 ~ 223.255.255.255

2) Subnet Addressing

- Host ID를 Subnet ID 8bit/8bit로 세분화한다.

- X.X.0.0는 대표 라우터이다.

3) CIDR (Classless Inter-Domain Routing)

- ipv4의 단점 host ID는 8bit, 16bit, 24bit 3개 밖에 선택 할 수 없는 단점을 보완

- /숫자 를 붙여 network part를 알려주고 나머지 값들은 host part

4) IP address 할당 방법

- Manual configuration: IP 하나를 할당

- DHCP: 임시 IP address 할당

5) NAT

- ip 부족 해법중 하나

- ip address하나로 많은 host를 연결

- 공적 / 사설 ip로 나눠 사설 ip를 할당해준다.

- Sender를 중간에 router를 통해 바꾼다.

6장 Transport layer protocols

1) UDP

- 실패, 정보를 잃어버려도 된다.

- no frills: 장식이 없다

- bare bones: 기본적인 골격만 유지

- best effort: 전송이 잘 되면 좋고 안되면 어쩔 수 없다.

- connectionless: 커넥트가 없다.

- header size 8byte

2) TCP

- 속도보단 정확

- 실시간 중계, 은행간 송금
- 에러가 있으면 안된다.

- Congestion control: sender가 데이터를 보냈는데 제 때 전송이 안됐을 때 어떻게 처리 할 것인가 문제

- Flow Control: sender, receiver 사이 보내는 속도, 받는 속도를 조절

- Error Control

3) TCP Flow control

- sender는 슈퍼컴퓨터, receiver 안좋은 컴퓨터라고 가정

- sender는 빠르게 보내지만 receiver가 잘 받지 못하는 경우 속도를 조절

- ack를 보냄으로 데이터 송신 성공 신호를 보냄

- 종류

(1) Stop-and-wait flow control

- 하나 보내고 ack 받고 또 하나 보내는 방법

- 느리다는 단점

(2) Sliding-window flow control

- 여럿 패킷을 보내고 윈도우 사이즈를 오른쪽으로 보내면서 다음 패킷을 보냄

- 윈도우 사이즈 : 한 번에 보낼 수 있는 패킷의 크기(receiver’s advertised window/congestion window 값 중 작은 값을 택)

4) TCP Error Control

- 종류

(1) Stop -and-wait ARQ

- 일정 시간 ack를 받지 못 할 경우에 timeout을 준다

(2) Go-back-and

- window size를 준다.

- 에러가 발생하면 다시 돌아와 에러 났던 부분 부터 다시 데이터를 보냄

- 중간 ack가 사라졌을 때 마지막 ack가 정상적으로 보내지면 정상이라고 판단

5) TCP Congestion control

-  요청이 많이 들어올 경우를 대비해 timeout설정

- 종류

(1) Slow start

- 윈도우 사이즈를 점점 늘리다가 timeout으로 packet 오지 않으면 현재 사이즈 값의 반을 ssthresh 설정하여 다시 처음부터 시작

(2) Fast retransmit

- 중간 ack가 사라졌을 때 마지막 ack가 정상적으로 보내지면 정상이라고 판단하고 (3dupack) ssthresh를 절반으로 설정, n/2값부터 시작

# data[].attributes.body
1. 배운점
#5장
Network Layer Services
sender가 보낸 데이터를 reciever측에 전달하는 역할 (ip adress 붙여서 보냄)
router가 입력측에서 받아서 출력쪽으로 보내는 결정을 할 때 주소 확인
routing 주소를 보고 어디로 보낼지 결정 Forwatding 보내는거
circurt switching 옛날 방식 - 전화선 미리 예약 후 통화 시작 / 끝나면 취소
Message Switching은 바로 보냄 *메시지 길어지면 오래 걸리고 버퍼가 커야함
Packet Switching은 쪼개서 보냄 한쪽이 밀리면 다른 경로로 데이터 보냄 / 순서 재정비
packet을 쪼개서 시간을 단축할 수 있음. (Pipelining) - header가 많아져서 무조건 많이 쪼개는게 좋은 건 아님
routing table을 만드는 알고리즘 : Routing Algorithms
각각의 router가 비용이 최소인 최적의 경로를 찾는 알고리즘을 만듦
link state routing- 이웃한 노드만 알고 있으므로 서로서로 주고받아서 전체 맵 그림 shortest path 알고리즘 적용
distance vector routing - Bellman Ford Algorithm이용 / 이웃한 노드 routing table 받아서 routing table 만듦
대표 router만해서 만드는 것을 hierarchical routing

IP(internet protocol) -host 부분과 net 부분으로 나뉨
net id가 n이면 2^n까지 확장가능
host id 부분을 세부적으로 subnet과 host로 나눠서 쪼개서 쓸 수 있음.
subnet mask를 씀 - 225.225.225.0 8bit 전체를 subnet으로 쓰는거...
ip address 고갈되는 문제를 풀기 위해IETF solutions은 IPv6 새로운 버전을 만들자는 것. (장기)
2^8 너무작음 2^16 너무 큼
CIDR
DHCP 임시 ip address 받았다가 반납
NAT : ip address 1개로 많은 기기와 연결 (사적 ip주소로 할당) Sender를 Destination과 바꾸며 데이터 교환
ICMP는 제어용, IGMP는 multitasking용
network마다 언어가 달라서 여러 network 제어하다 보면 ... ?

#6장
Transpork later protocols : logiclal communication
UDP는 간단함, 전송 안되서 문제없는 트래픽 전송
TCP는 깐깐함, 실수가 있어서는 안되는 트래픽 전송

Stop-and-wait flow control 효율적이지 못함
pipelining increases utilization 효율이 좋음 / 여러개 보냄
congestion이 생길경우  TCP congestion control error가 발생하면 없다 생각하고 트래픽 갯수 줄임

# data[].attributes.body
5-1장 Network Layer

- 데이터 보낼때 주소를 써서 보냄 → 여기서 주소는 것은 IP이다.

- network layer : 라우터가 입력측에서 받아서 출력측으로 보내는 역할

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

- forwarding : 보내는 행위

- message switching : 정한 경로로 바로 보냄

- packet switching : 다른 경로로도 갈 수 있게 보냄 → 순서가 바뀌어서 와도 다시 정렬해줌 / message switching으로 보내면 message가 클 경우 라우터의 용량이 커져야하므로 message를 packet으로 짤라서 보냄 → 시간 축소

- 데이터 보냄 → 라우터(라우팅 테이블에서 라우팅 헤드를 보고 데이터를 보냄) → 데이터 받음

- 이때 라우팅 알고리즘(라우터끼리 스스로 계산)을 통해 라우터 경로를 판단함

- 라우팅 알고리즘

(1) Link State routing = Dijkstra’s 알고리즘

누가 어디에, 어떤 호스트와 노드로 연결되어 있는지 ‘모두에게’ 알려줌 → 이웃해 있는 host를 통해 cost를 계산한다. → 다른 host로 가는 node의 cost를 step의 수만큼 구하여 가장 작은 cost를 선정한다. → 계속 가장 작은 cost의 경로를 선정한다. → 최적의 경로 (해당 host로 가는 경로에 더 작은 cost가 있으면 안적음)

(2) Distance vector routing = Bellman-Ford Algorithm

모든 라우터의 이웃 라우터로 가는 링크를 ‘이웃하고만’ 서로 안다. → 가장 짧은 길을 계산함

- Hierarchical routing → 너무 사이즈가 크니까 routing tables를 각각 Region으로 묶어놓자.

5-2장 IP

- IP는 ABCDE 다섯가지 class로 구분됨

- net ID : 조직(기관)에서 사용하는 ID (2^( )개의 조직이 사용할 수 있음)

- host ID : 2^( )개의 컴퓨터를 사용할 수 있음

- class B가 net ID = 2^14, host ID = 2^16으로 적당해서 가장 많이 사용됨

- Dotted Decimal Notation = 8개 bit 씩 나눠서 값을 표현 ex) 10000000 00001010 00000010 00011110 → 128.10.2.30

- Subnet addressing → host ID를 여럿이서 쓰는것 ex) 한층에서 같은 host ID를 씀 or 한 부서가 같은 host ID를 씀

- 141.223.0.0의 라우터 → 141.223.162.0, 141.223.161.0,,, 등등 141.223.X.X의 ID를 가지고 있음

- 한 기관에서 몇비트로 쪼갰는지 알기 위해서 subnet mask를 쓴다 ex)11111111 11111111 11111111 00000000 → 255.255.255(이걸 subnet으로 쓴다).0 → host는 써야하니까 0!

- IP가 방대해져서 IPv6이 나옴 → 더 필요 → CIDR : class 상관없이 200.23.16.0/27 처럼 ‘/’를 붙여서 뒤의 숫자만큼 32bit에서 빼서 해당 bit만큼 숫자를 늘림

- DHCP : 임시 IP 주소를 할당 받아서 쓰고 반납하는 방식

- NAT : ex) 138.76.29.7이라는 공적 IP를 라우터에 받음 → 10.0.0.4, 10.0.0.3, 10.0.0.2,,, 등등 사적인 IP를 만들어서 사용

- NAT translation table에 (사적인) sender IP와 Destination IP를 적음 → 라우터를 통과할때 Sender IP를 공적인 IP로 바꿔서 보냄 → 돌아올때는 공적인 IP로 옴 → 이때 NAT translation table에 적힌 Destination IP를 보면서 누가(사적인 sender IP) 보냈지? 살펴봄 → 라우터에서 IP를 바꿔서 걔한테 보냄

6장 Transport Layer

- transport layer protocols : 잘도착했는지 알아봄

- UDP(털털)

- TCP(깐깐)

(1) Congestion control

- slow starter : ssthresh 값까지 2승개씩 congestion window가 걸리고 이후로 선형적으로 증가함 → timeout까지 증가하다가 다시 1로 줄어듦 → 2승개씩 증가하는데 이전 최대값의 절반까지 증가 → ,,, <타임아웃에 의해서 packet이 오지 않는 경우>

- fast retransmit : slow starter에서 1로 줄어들지 않고 이전 최대값의 절반까지만 줄어듦 → ‘별로 congestion이 안됐구나’ 라고 생각됨

(2) End-to-end Flow Control (=flow control) : sender가 receiver가 넘치지않게 만들어 주는 방식, spare room을 만들어서 보냄

- stop-and-wait flow control = ack가 올때까지 안보냄 → 효율 x, 오래걸림

- sliding-window flow control = 여러개를 미리 보내놓는 방식

(3) Error Control

- stop-and-wait ARQ : ack 올때까지 기다림 → 일정시간을 정해서 ack이 안오면 다시 보냄

- Go-Back-N ARQ : 3개를 먼저 보내고 ack가 오면 ‘잘받았구나!’ 하고 하나씩하나씩 미리보냄 → ack가 안오는 에러가 나면 다시 거기부터 보냄

- cumulative 현상(?) : 0이 오고 바로 3이 오면 1, 2번도 받았다고 생각함(단, timeout 안에 있을때)

# data[].attributes.body
5장 Network Layer & IP

1. Network Layer
sender가 보낸 data를 receiver에게 안전하게 전달
a)
forwarding:  input -> output
routing: 어디로 보낼지 IP로 판단

b) communication network
i) Circuit switched networks
유선망 -> 1,2G
통화 걸면 미리 회선 예약 후, 시작과 끝
ex) Message switching
connection없이 message 보냄
-> message 클 시 buffer 사이즈 문제
-> 쪼갬 : Packet switching
주의: 많이 쪼갠다고 짧게 걸리는 것 아님
(header와 data 비율 비슷할 시, 효율↓)

c) Routing algorithms
-> routing table만드는 알고리즘
-> 최소비용 최대 효율
i) Link State routing algorithm
-> 서로 인전한 것을 공유하여 모든 node가 경로를 알 수 있게함
ex) Dijkstra's Algorithm
->최소 cost 노드로 늘려가며 각각 최소 cost 노드 고름
ii) Distance vector routing
ex) Bell-Ford Algorithm (for node X)
-> 이웃하고만 인전합 것 공유함(모든 node에겐 x)
-> 인접한 node의 router table 과 인접node와 현재 node의 거리를 재고 더해서 모든 곳에 최소 값을 정함

-> 근데 이런 것들 많이 하기 매우 비효율
-> Hierarchical routing
: 각각 AS에서 대표 router 선정, 그 router만 routing table 작성, 내부는 내부에서

2. IP
32bit IP address
-> 방식에 따라 class 나뉨
Net ID: 기관의 IP
host ID: 컴퓨터가 할당 받은 IP
-> subnet addressing
host ID부분을 기관에서 사서 세부 네트워크로 쪼개서 사용
-> class 간 bit 차이가 많음(중간이 없음)
-> CIDR로 해결

- IP address 할당 어떻게?
a) Manual configuration: 하나씩
b) DHCP: 임시 IP 할당 ex) wifi
-> IP address 부족문제 해결: NAT

-NAT
하나의 address로 여러명 host
(정식)                         (local)
sender를 바꾸거나,
destination 바꾸는 형식

6장 Transport Layer
1. transport layer
-> sender와 receiver사이에 data 전송(packet 단위로 보내는 것)
-> 이 과정 잘 이뤄지는 지 여부 확인
a) UDP
간단, 전송 제대로 안되도 문제 x
b) TCP
깐깐함, 아주 정확해야, 제대로 전송되어야
i) Congestion control
-> sender가 data보낼 때, data전송이 제 시간에 안될 때 해결
ii) End-to-end Flow Control
-> sender와 receiver 사이에 송수신 속도 조절위해
iii) Error control
-> packet이 중간에 noise, error있을 때 문제 다룸

-TCP flow control
sender와 receiver 성능 차 심할 때, data 전송 속도 조절
i) Stop and wait flow control
-> 하나씩 보내고 ack 받기
-> 비효율

ii) Sliding window flow control
-> 여러개 보내고 ack올 때마다 하나씩 더 보냄

- Error Control
i) stop and wait ARQ
timer로 해결
: timeout value 정해서 그 시간 넘어버리면 다시 전송
-> data lost, ack lost
ii) sliding window
a) Go back N ARQ
ㄱ) data lost
-> lost된 data부터 timeout되면 다시 전송(lost 이후 data는 discard)
ㄴ) ack lost
I) ack받았을 시, 그 전 거는 왔다는 소리이므로 그냥 진행
II) ack 못받을시, 다시 보냄

- TCP Congestion control
: 들어오는 것에 비해 나가는 것 매우 적어 buffer 넘치는 문제 해결
a) Slow start
windowsize 점점 늘리다가 packet 오지 않은 것 견시, ssthresh를 cwnd/2로 설정하여 다시 1부터 시작
b) Fast start
Slow start인데, dupack으로 traffic congestion 정도 파악 후, ssthresh를 cwnd/2로 설정 후, 적절한 위치에서 시작

# data[].attributes.body
Chap 5 Network Layer & IP

Network Layer Services

sender가 보낸 데이터를 receiver 측에 안전하게 보내는 중요한 역할을 함

헤더에 보내는 사람, 받는 사람 주소를 작성해서 보냄

패킷들을 라우터를 거쳐서 목적지까지 전달

라우터는 주소를 보고 패킷이 가야 될 주소를 보고 포워딩을 한다

라우팅 - 어느 곳으로 보내야 할지 주소를 보고 판단하는 행위

Taxonomy of Networks (Network core)

Circuit-switched networks : 유선 전화 망에서 쓰임

Packet-switched networks : 컴퓨터 통신 망에서 쓰임

Circuit Switching

서킷 생성 - 데이터 전달 - 서킷 끊음

장점 : 한번 서킷이 예약이 되기 때문에 오랜 시간 통화 할 때 좋음

단점 : 채널의 낭비가 존재

Message Switching

Packet Switching

패킷을 보낼 때 미리 커넥션 없이 미리 쪼개서 보내는 것

데이터 밀림이 생기면, 라우터가 다른 길로 알려줌(도착 순서가 달라질 수 있음)

파이프라이닝을 하기 때문에 빠르다

Routing Algorithms

라우팅 테이블을 만드는 알고리즘

Link state routing algorithm

다익스트라 알고리즘

각각의 노드와 이웃한 노드의 정보를 알고 서로 주고 받으면

모든 노드가 경로를 알게 된다.

IP (Internet Protocol)

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

IP addresses

32bit ip 주소 전 세계적으로 쓰는 중

호스트, 네트워크 부분으로 나뉨

class A: 7비트 (Net ID), 24비트(Host ID) 0~127

class B: 14비트 (Net ID), 16비트(Host ID) 128~191

class C: 21비트 (Net ID), 8비트(Host ID) 192~223

class D : 멀티캐스트를 위해 할당 224~239

class E : 미래에 사용될 용도 240~247

Subnet Addressing

호스트 부분을 효율적으로 사용하기 위함

ex) 16비트 (Net ID), 8비트(subnet ID), 8비트(Host ID)

141.223.0.0와 같이 0은 대표하는 것이고, 내부의 라우팅 테이블에 대한 정보를 가지고 있음

255.255.255.0 0부분의 8비트만 호스트로 쓴다는 뜻

CIDR

클래스 상관없이 슬래시 해서 네트워크 부분이 어딘지 알려주고 IP 주소를 알려줌

ip주소를 아낄 수 있음

DHCP

임시 IP 주소를 받아서 쓰고 반납하는 방식

NAT

공적으로 할당받은 IP, 사적 할당 IP를 모두 사용

IP는 다양한 프로토콜로 만들어짐

TCP, UDP, ICMP(전송X, 제어담당), IGMP(멀티캐스팅용도), ARP(물리주소 → IP주소), RARP(IP주소->물리주소)

현재 IP version은 4

TTL

몇 번에 걸쳐 목적지까지 갔는지에 이용

Chap 6 Transport Layer

Transport layer protocols

sender가 보낸 것이 receiver에 잘 전달 됬는지 여부를 확인 하는 일을 함

ex) TCP, UDP

TCP

속도 보다는 정확성이 우선

congestion control : sender가 데이터를 보냈는데 혼잡되었을때 제어

flow control : sender와 receiver 사이에 보내는 속도 조절 제어

stop-and-wait flow control : 하나 보내고 ack를 기다림, 효율적이지 못함

pipelining : 동시에 여러 개를 보냄

sliding-window flow control : 여러 패킷을 보내고 윈도우 사이즈를 옮기고 다음 패킷을 보냄

error control : 노이즈 있을 때 제어

stop-and-wait ARQ : 하나 보내고 ack를 기다림, 타임아웃을 이용

go-back-n ARQ : 슬라이딩 윈도우 방식,

UDP

간단한 프로토콜, 전송에 문제가 있어도 큰 영향 X

TCP Congestion Control

혼잡되면 버퍼가 넘침 → ssthresh 이용 (타임아웃에 의해)

# data[].attributes.body
5장
Network Layer
- Sender가 보내는 것을 안전하게 receiver에게 전달하는 중요한 역할
- IP가 주로하는 일
-Routing : 어느 곳으로 보내야할지 주소를 보고 판단하는 행위

Circuit switching
-circuit establishment
-data transfer
-circuit termination
이점 : 한번 circuit이 예약이 되기 때문에 오랜시간 통화할때 delay 없이 가능함
단점 : 채널의 낭비가 존재한다

Message switching
- 미리 circuit을 만들거나 끊는 행위 없이 message를 보내는 방식
- Packet switching은 message switching의 일부
- Packet switching은 packet을 보낼때 connection 업시 그냥 데이터를 packet단위로 쪼개서 보내는 것

- Routing Algorithms : Routing table 를 어떻게 만들건지 그 table 만드는 알고리즘
누가 만들어 주는게 아니라 라우터들이 스스로 계산

Two routing Algorithms
-Link state routing/ Distance vector routing

Ip address
- Ip address 를 가지고 어떤 단말인지를 알 수 있음
- 크게 5가지 클래스로 구분한다/ Class A, B, C, D, E
- Class A는 너무 크고  ClassC는 너무 적다보니 ClassB를 가장 많이 구매함

Dotted Decimal Notion : 32비트를 8비트씩 쪼개서 10진수로 쓰는 것

CIDR
- host id의 개수가 클래에서 따라 차이가 크기 때문에 문제 발생함
-클래스 상관 없이 /에 숫자를 붙여서 네트워크 파트와 호스트 파트를 알려줌
- 클래스와 클래스 사이에도 다양한 개수의 아이디를 줄 수 있음

Ip address 할당 방식
-Manual confoguration
-DHCP(Dynamic Host Configuration Protocol)

Ip address가 부족한 것을 어떻게 해결할까?
==> 해법 중 하나가 NAT

NAT(Network Address Translation)
-Ip address 하나를 가지고 엄청 많은 호스트를 연결할 수 있는 방식

NAT, CIDR, Ipv6 이런 다양한 해법으로 Ip address가 부족한 문제를 해결하고 있다.

ICMP : 망관리하거나, 네트워크의 컨트롤하기 위한 용도
IGMP : 멀티캐스팅을 하기 위한 프로토콜로 아주 많이 사용하지 않음

6장
Transport Layer
-UDP : 간단, 큰문제가 없는 경우에 쓴다/ 기본적인 골격만 유지하는 프로토콜

-TCP : 속도보다는 정확해야하는 아주 중요한 트래픽을 전송할 때 씀/ 에러가 없어야하고 잘못된 packet를 버려야함

- Flow control : sender와 sender가 receiver를 넘치지 않게 만들어 주는 방식

# data[].attributes.body
5장 Network Layer & IP

<Network Layer Services>

-sender가 보낸 데이터를 receiver측에 안전하게 보내는 역할

-컴퓨터 네트워크는 패킷을 보낼 때마다 헤더에 주소를 적어서 보냄-> 주소를 보고 라우터가 destination에 안전하게 보냄

<Network Layer>

-Routing : 라우터가 주소를 보고 패킷을 보낼 경로를 결정

-Forwarding : 결정된 경로에 패킷을 보내는 행위

<Taxonomy of Networks>

Communication networks

1. Circuit-switched networks(유선전화망) - 1,2세대

전화를 걸면 회선을 미리 예약을 하여 전화를 연결하고 전화가 끝나면 회선을 끊음

- Three phases : Circuit establishment> Data transfer >Circuit termination

장점 : 오랜 시간 통화할 때 딜레이가 없음/ 단점 : 채널의 낭비가 존재

2. Packet-switched networks(컴퓨터통신망) - 3세대~

- Message Switching의 종류

-패킷을 보낼 때 connection 없이 패킷으로 쪼개서 보냄

-트래픽이 발생하면 라우터가 다른 경로로 알려주기 때문에 패킷 보낸 순서와 도착순서가 다를 수 있음(순서를 재정비해서 상위 계층으로 보내기 때문에 문제x)

- 장점 : pipelining으로 인한 시간 단축

-단점 : 패킷을 잘게 쪼개면 오버헤드 확률 증가

<Routing Algorithm>

-라우팅 테이블을 만들어주는 역할

-각 라우터가 스스로 계산하는 알고리즘 채택

-cost가 가장 적은 최적의 경로를 채택

-한 라우터는 이웃하는 라우터 간 cost만 알고 있음

1. Link State Routing algorithm(Dijkstra’s algorithm)

-각 노드(라우터)가 모든 다른 라우터와 정보를 교환해 모든 노드의 Topology가 동일해짐(브로드캐스팅)

2. Distance vector algorithm(Bell-man code algorithm)

이웃 노드(라우터)와만 정보를 교환하여 각 라우터가 가지고 있는 라우팅 테이블을 받아 계산하여 최적의 경로를 설정함

3. Hierarchical routing

현실적인 방법으로 대표 라우터(Region)를 선정한 뒤 라우팅테이블을 교환하여 계산하고 내부라우터테이블을 교환해 계산하는 방식

IP

<IP addresses>

-32비트의 IP주소를 전국적으로 사용

-ip주소를 가지고 어떤 단말인지 확인 가능

-크게 5가지 class로 분류(A,B,C중요)

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비트)로 구성

-Net ID는 어떤 기관에서 구매할 수 있는 주소, 나머지 비트는 컴퓨터에 할당(Host ID)

-class A는 2^7만큼의 기관만 주소를 구매할 수 있으나 컴퓨터에 할당되는 비트가 크다는 장점이 있고 class C는 2^21만큼의 기관이 주소를 구매할 수 있으나 컴퓨터에 256기가만 할당이 가능하다는 단점을 가짐 그래서 class B를 가장 많이 사용

- Dotted Decimal Notation – each byte written in decimal
: 32비트를 8비트로 나눠서 10진수로 쓰는 방식

<Subnet Addressing>

-Host ID를 효율적으로 사용하기 위해 쪼개서 사용하는 ID주소

-8비트를 가지고 건물이나, 한 층을 주고 나머지 호스트에는 나머지 단말기에게 부여해서 좀더 체계적으로 관리할 수 있음

-서브넷id를 가져도 대표 라우터와 연결되어 외부적으로는 라우터로만 통신함

-Subnet Mask : 한 조직 기관에서 Host ID를 subnet ID로 쪼개는 1로 나타내는 부분

<IP주소의 고갈 문제>

-처음엔 노드4개를 연결하는 연구용으로 시작했으나 현재는 많은 사람들 및 IoT로 인해 많은 제품들이 센서를 가져야하기 때문에 32비트를 사용하는 현재의 IPv4의 주소가 고갈되는 문제가 나오게 됨

-IETF Solutions

1)Long term solution : 32비트의 IPv4를 128비트로 늘려 IP주소를 증가시키는 근본적은 해결책을 제시 -> 모든 장비를 바꿔야하므로 오랜 시간이 걸린다는 단점을 가짐

2)Short term solution

i) CIDR(a.k.a 사이다)

-ip주소의 class 관계없이 네트워크 prefix length를 부여해 호스트 주소를 클래스보다 더욱 다이나믹하게 나눌 수 있는 방법 -> ip주소를 매우 아낄 수 있음

-자신이 manual로 ip 주소를 할당하는 방식

ii) DHCP

임시 ip주소를 할당 받은 후 다시 반납하는 방식

iii) NAT(Network Address Translation)<- 현재 가장 많이 사용

-하나의 IP주소를 가지고 엄청나게 많은 호스트를 연결할 수 있는 방식

-내부기관에서 사설 IP를 마음대로 할당하여 사용한 뒤 인터넷을 사용해야할 때는 공적인 하나의 IP주소로 라우터를 통해 통신

-내부기관에 있는 COM이 자신의 주소를 사설IP로 보내면 라우터는 NAT translation table을 통해 자신의 주소인 공적인 IP주소로 sender의 주소를 바꾸어 destination에 데이터를 전달하게 됨 또한 외부에서 데이터가 오게 되면 라우터는 NAT translation table을 통해 사설IP로 destination의 주소를 바꿔서 전송을 하게 됨 => 다양한 해법을 통해 ip주소 고갈 문제를 해결하고 있음

cf.)

-ICMP(Internet Control Message Protocol) : 망 관리 및 네트워크 컨트롤 역할의 네트워크 계층의 프로토콜, 실제 통신에는 사용하지 않음

-IGMP(Internet Group Message Protocol) : 멀티캐스트를 위해 정의된 네트워크 계층의 프로토콜로 역시 실제 통신에는 사용하지 않음

<IP datagram header format>

-IP패킷은 20바이트의 헤더 + 실제 데이터로 구성

-Version : IPv4로 4를 사용

-각 망들마다 패킷을 받을 수 있는 크기가 다르게 설정되어있어 데이터를 전송할 때마다 쪼개지는 패킷의 정보 역시 헤더에 담음

-TTL(Time To Live) : sender가 receiver한테 데이터를 전송할 때 걸리는 시간을 측정하는 포맷이나 실제로는 패킷이 몇 번의 hop를 거쳐 destination까지 갈 수 있는지 계산하는데 사용

-Source address : Sender의 IP주소

-Destination address : Destination의 주소

6장 Transport Layer

<Transport Layer protocols>

- Transport Layer에서는 sender가 receiver한테 데이터 전송하는 계층

- Transport Layer protocol은 데이터가 목적지에 잘 도착했는지 확인하는 역할을 담당

트래픽의 종류에 나눠서 2개의 전송 계층의 프로토콜을 나누어서 사용

1.UDP

-데이터의 전송에 문제가 생겨도 상관없을 때 사용하는 프로토콜

-무연결성

-멀티미디어 스트리밍 서비스에 사용

-8비트의 헤더

2. TCP

-신뢰성 있는 데이터 전송을 보장하는 프로토콜

-TCP가 하는 일 세 가지(모두 연관되어있음)

1) End-to-end Flow Control

sender가 패킷을 보내는 속도를 receiver의 남은 저장 공간에 따라 조절함

receiver는 sender에게 Ac신호를 보낼 때 spare room에 남은 메모리 공간에 대한 정보를 포함시켜서 보내면 sender는 데이터 송신 속도 조절이 가능해짐

i)Stop-and-wait flow control : 하나의 패킷을 보낼 때마다 수신자에게 ack신호를 받은 뒤 다음 패킷을 보내는 flow control 방식 => 시간이 오래걸려 효율이 떨어짐

ii)Sliding window flow control

- Pipelinig increases utilization : 여러 개의 패킷을 보내고 여러 개의 ack신호를 받는 방식 => stop-and-wati에 비해 효율이 증가

-window size : 한 번에 보낼 수 있는 패킷의 크기(리시버의 advertised window/congestion window 값 중 작은 값을 택)

-여러 개의 패킷을 보낸 다음에 ack신호가 오면 다면 다음 패킷을 보내는 방식

2) Error Control

패킷이 노이즈 등으로 인해 에러가 생겼을 때 해결함

i) Stop-and-Wait ARQ

-Error-free-operation

-Lost data packet :일정시간(timeout) 내에 수신자에게 ACK신호가 오지 않은 경우 패킷을 재전송하는 방식(timeout의 크기는 ack신호가 올 수 있는 최대시간보다 더 커야함)

Lost ACK timeout : 송신자 측이 ack신호를 받지 못해 패킷을 재전송하기 때문에 이전에 받았던 패킷을 버림

ii) Go-back-N ARQ(Sliding window방식)

-Error-free operation

-Corrupted data packet : ACK신호가 오지 않은 패킷이후의 모든 패킷을 재전송  하는 방식

-Corrupted ACKs : timeout 값에 따라 재전송하냐/안하냐가 정해지는 방식

방식1) ACKs are cumulative -> 재전송x

방식2) timeout이 될 때까지 마지막 패킷의 ack가 오지 않는 경우->재전송

3) Congestion control

라우터의 버퍼 부족 문제를 해결하는 방식

i) Slow Start(Congestion control by timeout방식)

- 먼저 최초의 ssthresh값까지 1부터 2^n으로 window size가 증가하다가 ssthresh에 오면 선형으로 증가 -> cwnd(혼잡윈도우크기)에 도달하면 송신측은 timeout까지 ack를 받지 못하게 됨 -> cwnd/2를 두 번째 ssthresh로 설정하여 1부터 다시 과정 반복

ii) Fast Retransmit(Congestion control by 3 duplicate Acks방식)

- 이전의 일부패킷에 대한 ack신호가 오지 않았다는 신호는 dupack신호를 받았다면 1부터 window size가 증가하지 않고 cwnd/2부터 다시 증가하는 과정

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

Network Layer Service
Network로 패킷을 전달할 때에는 보내는 곳과 받는 곳의 IP 주소를 따져 송수신한다.
Routing : Fowarding을 할 때 어디로 보내야 하는지 정하는 행위
Circuit-switched networks : 전화(1~3세대)
Circuit을 만들고 데이터 전송 후 Circuit을 끊는 3단계의 과정이 진행된다.
장점 : 한 번 Circuit이 예약되기 때문에 Real-time으로 오랜시간 통화하기 좋다(delay가 적음)
단점 : 채널의 낭비가 발생한다. (오버헤드가 발생할 수 있다.)
Packet-switched networks(Message Switching) : 유선망 (4세대 이후)
Packet을 보낼 때 예약 없이 미리 데이터를 패킷단위로 쪼개서 보내는 방법.
트래픽이 발생하는 경우 라우터가 루트를 우회하기 때문에 리시버에서 받아들이는 순서가 다를 수 있다.
메시지가 크면 전달에 소요되는 시간이 길어지기 때문에 덩어리를 쪼개어 전달받는 즉시 받아온 패킷을 전달한다. 이 때 헤더가 추가되기 때문에 패킷을 너무 작게 자르는 것은 비효율적이다.

**Routing Algorithms
Destribute router들이 스스로 최적의 길을 찾는 알고리즘을 갖고 정보를 전달한다.
전달하는 행위 : 포워딩
알고리즘을 통해 Cost(비용)이 가장 적은 최적의 경로를 찾는다. (헤더를 보고 경로를 판단한다.)
-*Link State routing algorithm(Di's algorithm)
각각의 라우터가 라우터 내 노드와 이웃한 라우터의 노드 중 연결된 노드 간 이동에 필요한 Cost 및 node 구성정보를 교환한 뒤 각 노드간 이동cost를 저장해둔다. (routing table) 이후 인접한 노드별로 최저비용의 전달을 한 뒤, 다시 최저비용을 계산하여 전달을 반복한다.
코스트는 패킷이 직접 연결된 경우에만 계산 가능하다. 이 중 가장 cost가 낮은 경로를 선택하고, 선택된 경로에서 경로가 달라짐에 따라 cost가 작아진 경우와, 최저 cost경로를 기록하여 소요된 cost를 기록하고, 하나의 경로가 끝나면 그 다음으로 cost가 낮은 경로기록을 모두 기록하여 모든 node을 경유하는 데에 들어가는 최소비용경로를 계산하는 트리를 작성하는 알고리즘(shortest path algorithm) 기법이다.
이렇게 작성된 테이블의 노드와 호스트 정보를 공유하고 활용하여, 전달해야 할 패킷의 head 정보를 보고 경로를 결정하여 패킷을 전달한다.

Bellman-Ford Algorithm(for node X)
이웃하고만 정보를 교류하며, 각자가 갖고 있는 routing table을 활용하여 경로를 결정한다.
이웃한 node로 가는 cost와 table 내 cost의 합이 가장 작은 경로를 이용한다.

Hierarchical Algorithm
대표 라우터들끼리 라우터 테이블을 만들고, 해당 라우터들끼리의 거리만 계산하여 전달 후, 전달받은 Region내에서 스스로 경로를 계산하게 하는 기법이다.

5-2
IP addresses
전 세계적으로 버전2(32bit)를 사용중이다.
크게 5가지 calss로 구분되며, D와 E는 특수용도로 제작되었다.
회사 혹은 기관에서는 IP class를 구매하여 사용하며, Net ID와 Host ID를 32bit 내에서 할당하여 사용한다.
Net ID는 구매가능한 기관의 개수이며, 7bit가 할당된 경우 2^7개의 기관이 구매할 수 있음을 의미한다.
가장 대중적인 것은 Net ID가 14bit인 class B이다.(IP Addresses 128.0.0.0 - 191.255.255.255범위 내에 존재)

Subnet Addressing
Host ID를 효율적으로 사용하기 위해 Subnet ID를 지정하여 세부 네트워크를 형성하여 사용할 수 있다.
대표 라우터는 전체 네트워크를 대표하는 주소로, 모든 네트워크에 해당하는 routing table을 가지고 있다.
처음에는 IP가 대중화 될 것을 예측하지 못하여 IPv4버전(노드가 4개)로 만들었으나, IoT의 대중화 등으로 IP주소가 부족하게 되어 새로운 버전인 IPv6도입 및 CIDR(Classless Inter-Domain Routing : 기존 class의 고정된 개수의 IP주소를 할당하는 것이 아닌, /00을 추가하여 임의로 bit수를 조정하여 사용하는 방식)을 도입한다.
CIDR를 활용하여 IP주소를 얻는 방법은 Manual configuration(수동 지정)
DHCP(동적 IP, 임시IP)할당 방식이 있다.
NAT(Network Address Translation)
라우터가 공적 IP주소를 받은 뒤, 사적 IP주소를 형성하여 임의로 컴퓨터에 IP주소를 할당하는 방식.
여러 네트워크를 지나가다 보면 정해진 패킷의 사이즈가 다르기 때문에 패킷을 쪼개어 지나가야 하는 경우가 생긴다.

Time to Live : 라우터를 거칠 때 마다 숫자가 하나씩 줄어, 몇 번을 거쳐 목적지에 도착하는지 측정하는 것

6장
Transport layer protocols
sender와 receiver 사이에 transportation이 일어나는데, 잘 보내졌는지, 트래픽이 몰려 지연이 발생했는지 검사하는 역할을 수행한다.
TCP, UDP가 있다.
User Datagram Protocol (UDP)
No ack, 관리가 허술해도 되는 경우에 사용하는 것. 좀 흘려도 ok
중계방송처럼 실시간으로 전송하는 것이 더 중요한 경우(화질, 음성 등의 손실이 발생해도 큰 문제가 없는 경우) 등에 사용한다.
헤더 사이즈가 8bit밖에 안되는 간단한 프로토콜이다.

Transmission Control Protocol (TCP)
전달 과정에서 손실, 실수 등이 발생하면 안 되는 경우에 사용한다.
은행간 송금 등 중요한 정보를 다루는 곳에서 사용한다. 신뢰성이 있어야 하며, 정확한 전달을 요구하기 때문에 잘못된 패킷이 발생하면 버리고, 손실된 패킷이 발생하면 재전송을 요청하는 등 절차가 까다롭다.
*가장 중요한 3가지
*Congestion control
sender가 data를 보냈지만, 트래픽이 발생하여 데이터 전송이 밀리는 경우 사용
*End-to-end Flow Control
sender와 receiver 사이에 보내는속도 받는속도를 조절하기 위해 사용한다.
*Error Control
패킷에 노이즈가 꼈거나 손실이 발생했을 때 사용한다.

TCP Flow control
Sender가 데이터를 보내면 Receiver가 잘 받았다고 ack를 보내는데, receiver가 더 받을 수 있는 공간을 알려주고, 이를 확인하여 sender가 receiver의 수용능력이 넘치지 않도록 조절하는 방식이다.
Stop-and-wait flow control
데이터를 보낸 뒤, ack가 돌아오는 동안 기다려 sender의 버퍼상태를 확인하는 방법이지만, 대기시간이 길어 효율이 많이 떨어진다.
Pipelining increases utillization
한 번에 다수의 데이터를 보내고 대기하는 방식으로, 앞의 방법보다 효율이 크게 증가한다.
Sliding-window flow control
패킷의 전송량을 늘려 가며 윈도우의 사이즈를 파악하는 방식이다. ack와 receiver의 윈도우 사이즈 중 작은 값을 채택하여 데이터를 송신한다.

Error Control
sender는 매 회 패킷을 보낼 때 마다 ack를 기다리는데, 손실이 발생한 경우 대기시간이 무한해지는 경우가 생겨 최대 대기 시간을 설정한다. 이 시간(time out)은 ack가 도착하는 최대 시간보다 길어야 한다.
Go-Back-N ARQ
Sliding window방법을 사용할 때 적용된다.
Corrupted data packet
패킷이 도착하지 않은 경우 그 이후의 모든 패킷데이터를 time-out 이후에 다시 보낸다.
Corrupted ACKs
데이터는 수신되었으나 ACK가 회신되지 않은 경우 time-out내에 받은 ACK 사이에 수신되지 않은 ACK들에 대해서는 데이터가 성공적으로 전송된 것으로 판단한다.
time-out내에 ACK가 도착하지 않은 경우에는 time-out이후에 해당 순서 이후의 데이터를 일괄 재전송한다.

*TCP Congestion Control
유선 네트워크는 상당히 안정적이므로, 데이터가 제대로 전송되지 않은 경우에는 혼잡상황이 발생하여 라우터가 넘친 상황으로 판단한다. 이를 해결하기 위한 방법이다.
Congestion time-out
지정된 ssthresh값까지는 2의 제곱배만큼의 segments를 송신하고, 이후 선형적으로 전송량이 증가하다가 timeout이 발생한 이후로 초기 개수부터 다시 증가하며, ssthresh값을 증가시킨다.

fast retransmit
dupack이 3회 발생하고 나면, segments를 반으로 줄인 뒤 선형적으로 증가시킨다.
(dupack : 패킷이 도착하지 않은 경우, 해당 패킷에 대한 ACK를 지속적으로 보내 재전송을 요청하는것)

질문)트래픽이 발생한 경우에 routing algorithm은 최소의 cost경로만을 따라가나요? 아니면 차선책의 경로를 선택하여 우회경로를 설정하나요?

# data[].attributes.body
<5장> : network layer & IP

1. network layer services

역할: 센더가 보낸 데이터를 리시버 측에 안전하게 전달하게 만듦, IP가 주로 수행함

두 가지 주요 기능

forwarding: 라우팅에서 주소를 받아서 보고 전달하는 행 위

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

2. 네트워크의 분류

1. Circuit-switched networks

옛날 전화 방식

circuit 만들기 → 통화하기 → circuit 끊기

장점: 한번 circuit이 예약되기 때문에 리얼타임으로 오랜시간 통화하기 좋음, 딜레이도 없음

단점: 채널에 낭비가 존재함

2. Packet-switched networks

mesagge switching: circuit 만들고 끊는 것 없이 바로 메시지를 보내는 방식

packet-switched networks는 mesagge switching의 일부

packet을 보낼 때 데이터를 packet 단위로 쪼개서 보냄. 전송 중 한쪽 경로가 밀리게 되어도 순서만 바뀔 뿐 문제가 되지는 않음

cirtcuit 만들고 끊는 과정 없음

시간 오래 걸림, 메시지가 클 때 데이터를 잘게 자름으로써 전송시간을 절약함, 하지만 작게 자를수록 시간이 짧아지는 것은 아님

3. Routing Algorithms: 라우팅 표를 만드는 방법

라우터가 스스로 계산

두가지 라우팅 알고리즘

1. link state routing

Dijkstra’s Algorithm

각각의 노드(라우터) 7개가 이웃한 노드, 코스트를 알고 있음.

각각의 노드가 전체 네트워크 topology를 공유함, 알고 있음

알고리즘 진행 과정 잘 알아둘 것

2. distance vector routing

bellman-ford algorithm

자신의 이웃하고만 데이터를 주고 받음

hierarchical routing

세상의 많은 라우터를 같은 방식으로 만들기는 힘듦

각각의 시스템에서 대표 라우터를 설정하고 대표 라우터와만 소통할 수 잇게 만듦

4. IP: 라우팅 프토콜을 구현하는 방법

1. IP addresses

현재 32비트 ip address를 전 세계적으로 사용 중(버전 2)

net ID와 host ID로 나누어짐

크게 5가지 클래스로 구분함(A, B, C, D, E)

net id: ip를 통으로 산 기관(기업 등)의 id

기관에 사관 후 나머지 비트를 컴퓨터에 할당하는 구조 → host id

2. subnet addressing

host id를 효율적으로 사용하기 위해 subnet id를 만들어 세부 네트워크로 나눔

몇 비트로 나눌지는 기관에서 정할 수 있음

3. problems of IP address scheme(class-ful addresses)

5. d. CIDR(Classless Inter_domain routing)

host id의 개수가 클래스에 따라 차이가 크기 때문에 문제 발생

클래스 상관 없이 슬래쉬(/ )에 숫자를 붙여서 네트워크 파트와 호스트 파트를 알려줌

클래스와 클래스 사이에도 다양한 개수의 아이디를 줄 수 있음

6. e. host가 ip address를 얻는 방법

manual configuration(일일히 할당), DHCP(Dynamic Host Configuration Protocol, 임시 아이피주소를 할당받아 쓰고 반납)의 두가지 방ㅅ

NAT: DHCP이서 가장 많이 쓰는 방법 중 하나 - ip address가 부족할 때

아이피 주소 하나(공적 아이피) 가지고 엄청많은 호스트(사적 아이피)를 연결할 수 있음

7. f. Ip는 데이터를 전송하는 역할을 한다.

Ip 구체적인 구조는 강의에서 생략

8. <6장> : Transport Layer

센더가 보낸것이 목적지에 잘 도착했는지, 중간에 에러가 났는지, 딜레이가 있는지 등에 대해서 확인

종류 : TCP, UDP

UDP

어느정도 오류 있어도 상관없는 전송시 사용

전송이 잘되면 좋지만 안되면 어쩔수 없음

미리 센더와 리시버가 컨택하지않고 바로 전송

TCP

실수 없고, 절대 틀리지 않아야하는 전송시 사용

다양한 컨트롤: 가장 중요한 세가지

1. Congestion control: 혼잡 상황이 생겼을 때

2. Flow control: 센더와 리시브 사이에 속도 조절

3. Error control

flow control

센더는 성능이 좋고 리시버는 성능 좋지 않을때, buffer가 넘치게됨

센더가 보내는 속도 조절필요 → flow contorl

리시버에서 잘 받으면 에크 팩킷을 센더에 보냄 → memory space 정보를 포함시켜 보내 센더가 확인할 수 있도록 함

따라서 리시버가 넘치지않도록 할 수 있음

Stop-and-wait: 센더 보낼때마다 ack 확인, 비효율적

Pipelining : 여러개의 팩킷을 동시에 보냄, 훨씬 효율적임

Sliding window: 여러개 보내고 ack 올때마다 데이터 추가해서 다시보냄. 윈도우 사이즈 만큼.

Error control

Stop and wait: ack를 받지 못하면 센더가 ack를 영원히 기다림 → 타이머 설정. Ack 이 사라진 경우에도 사용

Go back n arq를 많이 사용: sliding window 기반. 에러나면 그 번호부터의 window size만큼 데이터를 다시 전송. Ack가 사라진 경우 cumulative. 윈도우의 마지막 번호의 ack가 있을땐 문제없이 전송되지만, 그렇지 않은 경우에는 다시 전송

Congestion Control(중요)

어느 시점에 한곳에 트래픽이 몰리면 혼잡 상황 발생

유선을 가정하에 만들었음 → 안정적이기 때문에 전송중 에러는 없다고 가정, 에러가 있다면 라우터에 버퍼가 넘쳤다고 생각함 → 트래픽 개수를 줄이는 방식을 취함

# data[].attributes.body
Chap. 5
Network Layer & IP

Network Layer Services :
-sender가 보낸 데이터를 receiver가 제대로 받을 수 있도록 만드는 역할, header에 sender와 receiver의 IP 주소를 보냄.

Two Key Network-Layer Functions:
1. Forwarding : 입력을 받아 다음 라우터로 전달.
2. Routing : 주소를 보고 어디로 보낼 지 판단.

Circuit-Switched networks : 유선전화망
Packet-switched networks : 컴퓨터 통신망

Circuit switching : 과거의 전화 방식.
-번호 입력 > 회선 예약 > 통화 > 회선 취소
-오랜 시간 통화에 delay가 없어 좋다.
-채널 낭비가 있다.

Packet switching :
-버퍼 사이즈의 해결을 위해 하나의 데이터를 여러 개의 packet 사이즈로 쪼개어져 보내어 시간도 단축.
-중간에 어느 경로가 밀리면 다른 경로로 갈 수 있음.
-도착 순서가 바뀔 수 있지만 알아서 순서 확인을 하므로 문제 없음.
-너무 잘게 쪼개면 header의 수 증가로 인해 오히려 시간이 증가할 수 있음.

Message switching :
-Circuit의 끊어내는 부분이 없으므로 좋을 수 있지만 보내는  message가 커지면, buffer의 사이즈가 커져야 함.

Routing Algorithms:
- 라우터들이 스스로 계산을 함.
- 각각의 노드는 이웃한 경로의 cost만 알고 있음.
- 라우팅 테이블을 만드는 알고리즘.

1. Link State routing algorithm :
-Dijkstra's Algorithm으로 문제 해결.
-특정 노드에서 시작 > 모든 노드들과 연결 이때, 인접한 노드들은 cost를 입력, 인접하지 않은 경우 무한대로 기록 > 가장 작은 코스트를 가진 노드 선택 > 위의 방법 반복하며 routing table 제작
- routing table 에서 source에서 모든 노드들로 가는 최단 거리를 확인 할 수 있음.

2. Distance vector routing :
-Bellman-Ford Algorithm으로 문제 해결
-source에서 인접한 노드와 cost만 먼저 table을 만듦.
-이후 각각의 인접했던 노드들에서 다른 노드로 가는 cost table을 만듦.
-source와 인접한 노드의 table로 특정 노드로 가는 cost 계산 후 비교.
-가장 작은 크기 선택.

3. Hierarchical routing :
- 각 AS에서 대표 라우터 선정 후, 대표 라우터끼리 라우팅 테이블 생성, 이 때 내부의 라우팅 테이블 또한 생성.
- 두 테이블을 통해 cost 계산

IP(Internet Protocol)

1. IP addresses :
- 현재 버전은 4로, 32bit IP address 사용.
- class A : Net ID(7) , 판매하는 기관 수가 작음. Host ID(24) , 2^24개 만큼 컴퓨터 할당이 가능.
- class B : Net ID(14), Host ID(16)
- class C : Net ID(21), Host ID(8)
- Subnet Addressing : Host ID를 세부적으로 쪼개어 더 효율적으로 사용함으로써 체계적 관리가 가능함. 이때 Host ID와 Subnet ID의 크기는 사용자가 설정.

IP 주소 고갈 문제 해결을 위한 방법
1. IETF solutions : (Long term solution : IPng[IPv6] = 새로운 버전으로 바꾼다. 모든 장비를 교체해야 하므로 short term solution나옴.)
Short term solution > CIDR
CIDR(Classless Inter-Domain Routing) :
- class에 상관없이 가변적으로 네트워크 IP 크기를 나눌 수 있음.
- 기존의 IP 주소에 /를 사용하여 host part를 알려주는 방식.

호스트가 IP 주소 할당하는 방법
1. Manual configuration
2. DHCP(Dynamic Host configuration Protocol) : 임시 IP 주소를 받아 쓰고 반납.

NAT(Network Address Translation) :
- IP 주소의 부족을 어떻게 할당하여 해결할 것인지에 대한 해법
- IP 주소 하나(공적 IP)로 많은 host(사설 IP)를 연결.
-라우터가 사설 IP의 Sender, Destination 주소를 라우터가 받아 sender의 주소만 공적 IP로 바꾸어 보냄.

Network Layer에 있는 protocols
1. IP
2. ICMP : 망, 네트워크 제어용 프로토콜
3, IGMP : 멀티캐스팅을 위한 프로토콜

Data Link Layer에 있는 protocols
ARP, RARP : Physical address를 IP address로 바꿔주는 프로토콜.

TTL(Time to live) field : 원래는 sender가 reciever에게 보내는 시간 측정 용도.
몇 번의 Hop을 거쳐 Destienation으로 갔는지 측정하는 용도로 사용.

Chap 6. Transport Layer

Transport layer protocols : 여러 상황(잘 도착했는지, 지연이 있는지 등)을 확인하는 역할
1. UDP(User Datagram Protocol) :
- 데이터를 조금 잃어버리거나 전송이 실패해도 상관 없을 때 사용하므로 간단함.
- sender, receiver 컨택 없이 바로 보냄.
- streaming multimedia applications에서 주로 사용

2. TCP(Transmission Control Protocol) :
- 에러가 있으면 안되는 데이터를 보낼 때 사용하므로 속도보다 정확성을 중요시함.
- (1)Congestion Control : sender가 보낸 데이터가 전송이 지연되는 경우 사용.
- Slow start : 처음에 window size=1로 시작 ACK가 잘 온다면 미리 정해진 threshold 사이즈까지 2^n으로 늘리며 보내다. thresh 사이즈와 동일해지면 Linear하게 1씩 증가. Time out으로 인해 ACK가 오지 않으면 그 시점의 값을 반으로 thresh를 두고 1로 돌아가 시작.
- Fast restransmit : 특정 packet이 오지 않고 그 다음 packet들이 오면 특정 packet이 오지 않았다는 ACK를 보냄. 이때는 Time out 발생 시 1로 시작하지 않고, 한계 값의 반으로 시작한 뒤 Linear하게 증가함.
- (2)Flow Control :
- sender, receiver 사이에 송수신 속도를 위해 사용, 둘 의 성능의 차이로 인해 리시버 처리 능력 부족으로 버퍼가 초과하면 sender는 쓸데 없이 데이터를 보내는 일을 함. 이런 상황을 방지하기 위해 receiver는 ACK packet(가능한 memory space를 포함한)을 보냄. sender는 memory space를 통해 속도를 조절함.
- Stop-and-wait flow control : sender에서 데이터를 보내면 리시버가 받고 확인을 위한 ACK를 보낼 때까지 sender가 기다렸다 확인 후 다음 데이터를 보냄.
- Pipelining : 윈도우 사이즈의 수만큼 데이터를 보내고 그에 맞는 ACK 도착 시 다음 것 보냄. stop-and-wait에 비해 효율이 좋음.
- Sliding-window flow control : window size만큼 보내고 ACK가 오면 다음 packet를 보냄.

-Window size : reveiber's advertised window, congestion window 중 작은 것으로 함.

- (3)Error Control :
에러 발생시 사용
- Stop-and-wait ARQ(일정 시간 동안 ACK가 오지 않으면 다시 보냄), Continuous ARQ로 분류.
-Continuous 의 GO-Back-N(sliding window에 기반을 둠)을 많이 사용
-Corrupted data packet : 에러 발생으로 오지 않은 packet으로 돌아가 다시 그 packet부터 보냄.
-Corrupted ACKs : 타임아웃 시간 내에 ACK가 다음 packet에 대한 ACK가 도착하면 문제가 없다고 판단하고 그 다음 packet을 보냄.

# data[].attributes.body
<AIoT 5-1강>

네트워크 레이어와 IP의 특징을 배우고 최소의 코스트를 파악하는 방법을 알 수 있었습니다.

<Network Layer & IP>
#Network Layer
- Fowarding : 라우팅이 판단한 것을 받아서 전달하는 행위
- Routing : 어느곳으로 보내야할 지 주소를 보고 판단을 하는 행위

#Circuit switching (옛날 전화방식)
-Three phases (Circuit establishment, Data transfer, Circuit termination)
- 장점 : 한 회선에 딜레이가 작다
- 단점 : 비효율적인 채널 특성

#Massage switching
- 메세지가 크면 버퍼가 커야됨
-> #Packet switching
- Data를 쪼개면 Time이 줄어듦. 대신 헤더가 많아지는 단점이 존재(무조건 많이 자르는게 좋은게 아님)

#Routing Algorithms (Link State routing, Distance vector routing)
- 라우터가 라운팅 테이블을 잘 만드는것이 중요

#Link State routing algorithm
- 노드가 서로서로 공유하면 topology의 구성을 알 수 있음
- #Dijsktra`s Algorithm
- shortest path from A to all destinations

#Distance vector routing
- 각각의 라우터가 가장 잛은 거리를 알고 있음

<AIoT 5-2강>

IP개념을 이해하기가 어려웠습니다ㅠ

5가지 클래스로 구분 (A, B, C, D, E)

#Subnet mask
- Net ID, Subnet ID, Host ID의 비트 자리를 정하여 구성

#DHCP
- 임시 주소를 받고 후에 반납하는 Host IP

#NAT (Network Address Translation)
- router가 주소 바꿔치기

- ICMP : 망관리
- IGMP : 멀티테스트를 위한 프로토콜
- IP 망을 통해 Layer이동

<AIoT 6강>

UDP와 TCP의 개념과 차이점을 배우고, TCP에서 발생하는 에러를 Control하는 3가지(Congestion control, End-to-end Flow Control, Error Control) 방법에 대해 알 수 있었습니다.

<Transport Layer>

#UDP

-      User Datagram Protocol, no frills(장식이 없다)

-      축구 경기 중계방송에서 딜레이(화질저하 등)가 생겨도 큰 문제가 없다면 UDP를 쓰고, 은행과 같이 문제가 있다면 TCP를 쓴다.

-      Best effort : 노력은 해보겠으나 문제가 생겨도 어쩔 수 없다~

-      하는일이 없어서 간단하다. 헤더8바이트인 간단한 프로토콜

#TCP

-      Congestion control, End-to-end Flow Control, Error Control 기억하기

#Flow Control

-      Sender는 슈퍼컴퓨터, receiver는 느리다고 가정, 버퍼가 금방 넘침, 그걸 조절하는게 Flow Control, 리시버가 가능한 메모리 스페이스에 대한 정보를 포함시켜서 보내면 센더가 에크를 볼 때마다 속도를 조절할 수 있다.

-      대신 효율적이지 않음(오래 기다리니까), -> sliding-window 방식을 사용한다면 기존보다 3배 효율적임

#Error Control

-      Ack가 받지 못한다면 일정 기간 이후 retransmission 진행

-      #Lost ACK timeout(ACK 패킷이 사라진 경우) 이전에 받았던 패킷은 중복되니까 discarded되고 ACK보냄

#Go-Back-N ARQ

-      만약 Corrupted data packet인 경우, 패킷을 일정 time out동안 discard하고 다시 보냄

-      만약 Corrupted ACKs인 경우, sender는 전혀 문제 없구나 생각하고 계속 진행함

-      대신 Time-out동안 못받는다면 안온것부터 다시 시작

#Congestion Control

-      문제가 발생할 경우, 버퍼가 넘쳐 패킷이 Loss가 된다고 생각하고 해결한다.

-      #time-out이후, window size is reduced to 1mss하는 방법(34p참조)

-      #fast retransmit이후, window size is reduced in half하는 방법(36p 참조)

# data[].attributes.body
[AIoT 5-1장]
- network layer: ip address 이용
- forarding: moving input->output/routing: route to destination
- communication networks
- circuit switching
- circuit establishment/data transfer/circuit termination
- packet switching
- routed independently(pipelining) -> reordering(@ receiver)
- data size > header -> overhead
- routing algorithm: configure routing table(: destination|next node|cost)
- link state routing/distance vector routing
[AIoT 5-2장]
- IP addresses: host/router -> 32bit address
- class A/B/C/D
- pair of net ID/host ID
- subnet addressing
- ex) classB: NetID(16)|SubnetID(8)|HostID(8)
- internet ↑ ip addresses exhaustion
-> ↓ rate of depletion of remaining addresses
- CIDR: format -> a.b.c.d/x (x: # of bits in network portion of address)
- host <- IP address
- DHCP (dynamic host configuration protocol) -> NAT (Network address translation)
[AIoT 6장]
- transport layer protocols
- logical communicaion running on different hosts
- internet protocols
-> TCP(reliable)/UDP(no retransmissions)
- TCP
- congestion control: controls source send rate
- retransmission timeout(by lost packet-> cause: congested router)
-> windowsize 조절 (linearly increase <-> 1)
- 3 duplicate acks
-> fast retransmit mechanism
- end to end flow control: sender faster than receiver (buffer overflow) 방지
- stop and wait flow control: 1 segment wait for ack
- sliding window flow control: send W segments without ack
- error control: duplicate, error detection/retransmission
- stop and wait ARQ
- continuous ARQ
- go back N
- selective repeat request

# data[].attributes.body
Ch 5-1, 5-2, 6

[Network Layer & IP]

네트워크 레이어에서는 라우터에서 라우터로 데이터 패킷을 이동시키거나(forwarding), 목적지까지의 경로를 결정한다(routing).

네트워크는 서킷스위칭방식(주로 유선)과 패킷스위칭방식(최근의 컴퓨터통신망)이 있다.

서킷스위칭은 사전에 서킷을 예약한 후, 데이터 전송을 하고, 서킷을 종료하는 과정으로 구성된다.

패킷스위칭은 서킷을 예약하지 않고, 데이터를 패킷에 나누어 전송하면서 전체 전송 시간을 단축할 수 있다.

*단, 패킷이 일정 수 이상 증가하면 ‘overheader’가 발생하여 결과적으로 전체 전송시간이 길어질 수 있다.

라우팅알고리즘(최적경로찾기)

-dijkstra’s algorithm: 전체 노드와 정보공유

-bellman-ford algorithm: 자신이 이웃한 노드만 정보공유

[IP]

IP address:전체 32bit로, net ID + host ID로 구성됨

*Dotted Decimal Notation: 32bit를 8bit씩 쪼개서 10진수의 4묶음으로 표현하는 방식

*subnet addressing – host ID를 카테고리를 표현하는 subnet과 연결가능한 기기 개수인 hostID로 구성하는 방식.

*IETF 솔루션: 기존의 단말기를 IPv6로 바꾸는 long-term solution과 IP주소 뒤에 ‘/’와 숫자를 통해 주소를 가변적으로 표현하는 방식이 있다.

[Transport Layer]
transport protocol에는 TCP방식과 UDP방식이 있다.

-UDP: 정밀하지 않고, 털털하고 가벼운 트래픽사용, “best-effort”service(약간의 오류도 허용)

-TCP: 정밀하고 정확한 트래픽 사용

*TCP는 congestion control/ flow control/ error control 수행하고 각각은 서로 연관되어 있다.

-TCP flow control: sender와 receiver 사이에 성능차이가 많이 날 때 reciver의 buffer가 부족해지는데, receiver가 ACK를 보낼 때 buffer 여유공간정보를 함께 보낸다. sender는 receiver의 buffer가 넘치지 않도록 데이터전송량을 조절한다.

-stop&wait flow control: 패킷을 1개만 보내고 응답이 올 때까지 기다리는 방식.

*pipelining: 동시에 여러 개의 패킷을 보냄.(효율이 좋아짐)

-sliding-window flow control: ACK를 받을 때마다 window size가 이동하기 때문에 sliding window flow라고 불린다.

*lost data packet: receiver가 데이터 패킷을 받지 못한 경우 ACK를 전송하지 않으므로, sender는 영원히 ACK를 받을 수 없게 되고 동작을 멈춰야 하는 문제가 발생한다. >> “timeout”을 설정하여 일정 시간이 지난 후 마지막 데이터 패킷을 재전송한다.

*lost ACK timeout: receiver가 데이터 패킷을 잘 받았으나, sender가 ACK를 받지 못한 경우

-go-back-n ARQ:

*corrupted data packet: 애러가 나면 그 번호부터 다 버리고, 에러나 난 지점부터 다시 data packet을 전송하게 됨.

*corrupted ACKs: 1과 2의 ACK가 손상되고, 0(처음)과 끝(3)의 ACK만 도착할 경우, sender는 오류가 없다고 판단해버리는 문제가 발생. 평소에는 큰 문제가 되지 않지만, timeout 내에 1,2 ACK가 도착하지 않으면 sender는 문제가 있다고 판단하여 다시 1번 data packet을 재전송함.

-TCP Congetion control: 유선 network를 가정하고 만들어졌기 때문에, 에러의 경우의 수를 충분히 고려하지 못하였고, 에러발생시 router의 buffer가 넘쳤다고 생각.>> 해결방법으로 traffic개수를 줄여버림.

*dupacks: corrupted ACK를 연속적으로 받게 되는것.(모든 데이터를 유실하지 않았다는 것을 판단하고 ssthresh를 현재 값의 반으로 떨어져서 linear하게 증가)

# data[].attributes.body
Network Layer Services

컴퓨터 네트워크에서는 데이터를 전송할 때마다 헤더에 주소를 써서 보냄 = IP address 전세계 공통의 주소 체계
라우터? IP 어드레스를 보고 packet을 받아서 안전하게 목적지까지 보내는 역할

Network Layer
데이터를 받아서 포워딩(라우터가 입력측에서 받아서 출력측으로 보내는 역할)
수신자측 주소를 보고 데이터를 어디로 보내야 하는지 받아서 포워딩을 하는데 포워딩을 할 때 라우팅이라는 것을 함

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

packet의 헤더에 수신측 주소를 달고 오면 router는 알고리즘에 따라 (인터페이스로)보내는 기계적인 역할을 함.
주소를 보고 어디로 보내게 할지 결정하게 하는 것이 routing.

받아서 주소를 보고 전달하는 행위를 forwarding이라고 함.

Taxonomy of Networks(Network core)

Communication networks
1. Circuit-switched networks : 1세대, 유선전화망
- 옛날 전화방식
- Circuit을 여는 행위, 즉 미리 예약하는 행위, 예약이 끝났다고 알려주면 통화를 하게 됨. 통화가 끝나면 끊났다고 끊는 행위가 필요함
- 세가지 행위로 구분됨 (Circuit을 만들고, 데이터를 전하고, circuit을 끊음.)
시간이 작지만 오버헤드 될 수 있음.
- 장점 : 한번 circuit이 예약되기 때문에 real time으로 오랜시간 통화할 때 좋음, 딜레이 없음
- 단점 : 이런 행위로 인해서 채널에 낭비가 존재함.

＊ Message Switching (3세대~ 방식인 Packet-switched networks가 포함됨)

- Packet Switching
하나의 데이터를 여러개의 packet으로 쪼개서 감
경로에서 한쪽이 밀리게 되면 router가 다른 경로를 찾아감.
- 메세지가 길어지면 경로당 시간이 오래걸림, 메세지를 저장하려면 버퍼의 크기가 커야 함. >> 문제를 해결하기 위해 Packet을 짤라서 파이프라인이라는 것을 함. >> 시간이 단축됨.
- 많이 쪼개면 헤더가 데이터 부분에 상당히 영향을 끼침(오버헤드가 됨) >> 무조껀 잘게 짜른다고 좋은 것이 아니다.

테이블은 어떻게 만들어진 것일까?
- 라우터가 라우팅 테이블을 잘 만들어놓으면 헤드에 들어가있는 수를 보고 수신지까지 잘 전달해줌.
>> 라우팅 테이블이 중요함

- Routing Algorithms
Central road가 경로를 정하는 것이 아니라 각 packet이 스스로 경로를 정하는 알고리즘을 채택함
각각의 노드는 이웃까지 가는 경로만 알고 있음.

- Two routing algorithms
1. Link State routing
각각의 노드가 자기네들끼리 연결되어 있는 코스트를 알고 있음.(서로서로 교환)
모든 노드가 서로 이웃한 코스트 및 노드 등 몇개로 구성되어 있는지 파악 가능 >> 모두가 똑같은 알고리즘을 파악

2. Distance vector routing(=Dijkstra's Algorithm?)
- 최적의 routing path를 찾는 과정

＊ Hierarchical routing
- 대표 라우터를 선정하고 대표 라우터들끼리 돌려서 라우팅 테이블을 주고받아서 알고리즘을 만들고
내부에서는 내부의 라우팅 테이블을 만들자는 형식
- Region으로 가는 Path를 하고 Region으로 가게 되면 내부의 routing에 의해서 전달될 수 있도록 만드는 과정

5장 IP (Internet Protocol)

＊ IP addresses
- 32bit의 IP address를 전 세계적으로 쓰고 있음 >> IP address를 가지고 단말인지를 알 수 있음
- Class A, B, C, D, E로 구분

- Class A : Net ID(2^7개만큼)는 어떤 조직에서 통으로 구매. >용> 나머지 24bit(2^24)를 가지고 컴퓨터에 할당하는 방식
- Class C : Net ID(2^21개), Host ID(2^8)

- Class B는 Net ID(2^14), Host ID(2^16)으로 적절

＊ Subnet Addressing
- Host ID를 어떻게 효율적으로 사용할 것인가 >> Host ID 부분을 기관에서 사서 세부 네트워크로 쪼개서 사용하는 방식이 Subnet Addressing

＊ NAT(Network address Translation) : 공적 IP + 사적 IP
- IP주소 부족의 해결 방법 중 하나, 공적으로 할당받은 IP를 가지고 내부기관에서 할당해 Host를 사용하는 방식

＊ Time to Live
- 몇 번의 router를 거쳐 목적지까지 가는지 측정하는 용도로 사용

6장

＊ Transport layer protocols
- 트렌스포트 레이어에서 잘 도착했는지 여부를 확인
- TCP와 UDP가 있음

* UDP (User Datagram Protocol)
- 중요하지 않은 데이터 전송시 사용, 데이터가 조금 손실돼도 상관없을 경우

＊ TCP (Transmission Control Protocol)
- 중요한 데이터 전송시 사용, 속도보다는 정확해야 함.
- 까다로움, 에러가 있으면 안됨.
- Congestion control
- End-to-end Flow Control
- Error Control

- TCP Flow control
센더가 리시버를 넘치지 않게 만들어주는 방식

- Stop-and-wait flow control
하나 보내고 ACK이 올때까지 기다림. 효율적이지 않음. (너무 오래기다림)

- Sliding-window flow control
여러개를 보내고 올때마다 하나를 더 보내는 방식

* Error control
- 에러가 일어나는지 안일어나는지를 보고 대응하는 방법
- Error-free operation : 하나를 보내고 ACK을 받고 (이렇게 하는 방식?) 이렇게?
- Lost data packet : packet을 하나 보내고 ACK를 받고 두번째꺼 보내고 리시버가 받지 못하면 센더는 이걸 보냈기 때문에 ACK가 올때까지 기다림>> 언제까지? 영원히 >> so, timeout이라는 것을 둠 >> 일정시간 안에 ACK를 받지 못하면 바로 retransmission
if) ACK packet이 사라지게 될 경우, 일정시간 기다리고 retansmission.
가
Go-Back_N ARQ
- Error-free operation
- Corrupted data packet : 에러가 나면 그 번호로 돌아가서 그때부터 나머지 packet을 다 보내는 방식

TCP Congestion Control
- traffic이 몰려서 router가 넘치면 packet을 잃어버림
- slow start : 현재값의 반을 쓰레쉬홀드값으로 두고 2배수로 증가하다가 쓰레쉬홀드에 도달하면 선형적으로 증가 >> 에러나면 다시 1로 가서 다시 증가
- fast retransmit : timeout되기 전에 3dupack(못받은 패킷에 대한 ack를 계속 보냄)이 나오면 1로 떨어지는 것이 아니라 현재값의 절반으로 줄어 다시 선형적으로 증가

# data[].attributes.body
>>>Ch.5

<Network Layer>

Network Layer Services

-sender가 보내는 것을 안전하게 receiver에게 전달하는 역할(IP가 주로 하는 일이기도 함)

Network Layer Functions

-fowarding : 입력 층에 데이터를 받아 출력 층에 전달

-routing : 데이터 fowarding 시 어느 곳으로 보낼지 판단하는 행위

Taxonomy of Network

-Circuit-switched network

=옛날 전화방식(1G, 2G에 사용), circuit(회선)을 미리 연결한 후 이용 후 circuit 끊음

=delay 없음, 채널의 낭비 존재

-Packet-switched network

=Message switching의 일부

=미리 연결하지 않고 패킷단위로 쪼개서 보내는 것, 한 쪽이 밀리면 다른 경로를 찾아줌

=데이터가 밀려서 순서가 바뀌어 들어와도 순서를 재정비하기 때문에 문제가 없음

=패킷으로 보내면 시간 절약가능

Routing Algorithms

-routing table 만드는 알고리즘, 스스로 계산하는 것

-Link State : Dijkstra’s algorithm을 이용

=각각의 노드가 서로의 노드와 전체 정보 주고받아 topology와 cost 알고 있고 이를 기반으로 최적의 알고리즘을 찾음

=시작점(A)에서 갈 수 있는 노드의 cost 비교, 직접경로 없으면 무한대 → 제일 작은 노드 찾아서 해당 지점 작성(D) → AD를 통해서 해당지점으로 가는 cost가 A를 통해서 가는 cost 보다 작으면 작성 → A, AD 중 cost 값 낮은 것 찾아서 해당지점 작성(E) → 모든 지점 갈 때 까지 반복

-Distance vector : Bellman-Ford algorithm을 이용

=자기와 이웃한 노드의 cost는 알고 있고 그들끼리만 데이터 주고받음(JA : JI → IA 의 cost 계산)

<Internet Protocol>

IP address

-어떤 단말인지 알 수 있음

-5개 클래스로 구분, 보통 A, B, C 보게 되는 경우가 만음

-class A : 0 Net ID(7) Host ID(24)

-class B : 1 0 Net ID(14) Host ID(16)

-class C : 1 1 0 Net ID(21) Host(8)

-Net ID(n)는 살 수 있는 기관 2^n, Host ID(h)는 할당할 수 있는 컴퓨터 수 2^h

-class B 가장 많이 구매

Subnet Addressing

-Host ID를 세분화 하여 쪼개서 사용

-subnet mask+Host ID

IP 주소 문제 해결

-IPv6 : 기본적인 해결 방법, 한 번에 모두 바꾸기 어려움

-CIDR : short term solution, IP address 할당, 네트워크 부분 알려주며 “/” 사용, 호스트 파트 구분, 최근에 많이 사용

IP 주소 할당

-Manual configuration

-DHCP : 정규 할당이 아니라 임시로 받아 쓰고 반납하는 방식

=NAT : DHCP 중 가장 많이 사용하는 방식

=IP 하나로 많은 호스트 연결, 공적 할당(인증된) IP → 라우터 → (사적할당, 마음대로, 내부에서만 사용)

=사적 할당된 컴퓨터가 데이터 보내고 받을 주소를 라우터로 하여 받고 라우터가 다시 할당

IP layering

-Network Layer

=IP : 실제 통신

=ICMP : 망관리, 네트워크 제어, 전송에 사용되지 않음, 데이터는 IP로

=IGMP : 멀티캐스팅 위한 프로토콜

IP datagram header format

-header 20 byte + data

-TTL : 현재는 몇 번의 hop을 거쳐 목적지까지 갔는가로 사용

>>>Ch.6

<Transport Layer>

Transport Layer protocols

-logicla communication 제공

-UDP : 간단한 프로토콜, 별로 중요하지 않은 전송

=기본적인 프로토콜, sender와 receiver가 contact 하지 않고 보냄

=header 8byte로 간단

-TCP : 중요한 전송, 전송 중 사라지면 다시 전송, 다양한 control, 실수 용납되지 않음

=Congestion control

=End to end flow control : sender, receiver 의 주고받는 속도 조절 위해

=Error Control : error 발생 시의 문제

Flow Control

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

-sender가 보내는 속도 조절 필요 할 때 사용

-ack에 가능한 메모리 공간에 대한 내용 포함하여 보내 sender가 속도조절 가능

-Stop and Wait flow Control : 하나씩 보낸 다음 ack 기다림, 비효율적

-Pipelining increases utilization : 동시에 여러 개 보낸 후 하나의 ack가 오면 다시 하나보내기 반복, sliding window

Error Control

-Stop and Wait ARQ : ack가 오지 않으면 계속 기다려야 해서 time out 도입

-Go Back N ARQ : sliding window 방식, 오지 않은 데이터 패킷부터 나머지 다 보냄, ack 패킷 오지 않아도 괜찮음(그 전까지 잘 받았고 ack가 사라졌구나 라고 인식)

Congestion Control

-처음에는 유선을 가정하고 생성

-갑자기 패킷이 많이 들어오면 버퍼가 넘치게 되고 이때 패킷이 사라짐, 이를 대비하는 control

-slow start : time out에 의해 패킷이 오지 않는 경우를 detection

-fast retransmit: 동일한 ack을 세 번 이상 받으면 바로 재전송

TCP segment Format

-header 20byte

# data[].attributes.body
Chap 5. Network Layer & IP

1. Network Layer

Sender가 receiver에게 데이터를 안전하게 전송하는데 중요한 역할

IP가 주로 하는 일

Sender -> routers -> receiver

Router

2. Router

IP address를 고려해 보내야 할 곳으로 보냄

기능

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

forwarding: 보내는 행위

Routing table

3. Taxonomy of Network

1. Circuit-switched

유선전화망

3 단계

Circuit establishment

Data transfer

Circuit termination

장단점

real time 전송이 좋고 지연이 덜하지만 채널이 낭비될 수 있음.

2. Packet-switched

컴퓨터통신망

특징

message switching의 일부

회선 예약없이 바로 보냄

메시지를 packet으로 잘라서 보냄

패킷마다 다른 router를 이용해서 보내질 수 있기 때문에 도착하는 순서가 다른데 receiver가 순서를 재정비하므로 상관없음

Pipelining

버퍼가 넘치는 것을 방지하기 위함

패킷을 많이 쪼개는 것이 좋은 것만은 아님

4. Routing Algorithm

1. Routing table을 만드는데 사용되는 알고리즘

2. Router 각자 스스로가 routing table을 만듦

3. Link States routing

각각의 router가 연결되어 있는 정보를 전체적으로 공유

각각의 router가 독립적으로 자신과 주변의 router 사이의 가장 짧은 경로를 탐색함

경로 탐색은 Dijkstra's algorithm

4. Distance Vector routing

각각의 router는 인접한 router의 정보만을 가지고 있음

각자의 최단 경로를 알고 있음

인접한 router끼리 서로 정보를 교환

이것이 반복되어 전체 최단거리를 알아냄

Bellman-Ford algorithm

5. Hierarchical Routing

1. Antonomous system 이용

2. 대표 router를 설정

대표끼리의 routing table

내부만의 routing table

6. IP

1. Internet과 연결된 호스트, 또는 router는 고유한 32bit의 IP address가짐

2. (net ID, host ID)

3. class

A

Net ID : 7

Host ID : 24

B

Net ID : 14

Host ID : 16

C

Net ID: 21

Host ID: 8

4. Subnet Addressing

IP address를 효율적으로 사용하기 위함

Subnet mask

7. Problems of IP address scheme

1. Long term solution: IPv6

2. Short term solution: CIDR

중간이 없는 기존 방식 해결

슬래시 숫자를 붙여서 네트워크 부분이 몇이다 알려주고 나머지 5개의 비트가 호스트 파트라는 것을 알려주며 IP address를 할당함

8. IP 할당방법

1. Manual configuration

2. DHCP: temporary IP address를 할당받고, 사용이 끝나면 반납함

9. NAT

IP address 절약 방법 중 하나

IP address 하나를 가지고 엄청나게 많은 호스트를 연결할 수 있는 방식

내부기관에서 사설 IP라고 해서 기관 마음대로 IP를 할당해서 쓰는 방식

Router 이전에 할당 받은 ip는 공적 ip (공적으로 할당받은 인정된 ip)

Chap 6. Transport Layer

1. Transport Layer protocols

센더와 리시버 사이에 데이터 전송(패킷단위)이 이루어질 때, destination에 잘 도착했는지 중간에 에러가 났는지, traffic이 몰려서 delay가 있는지에 대해 관여

2. UDP

Ack가 없음

재전송 없음

데이터를 조금 잃어도 좋으니 지연을 지양함

실시간 중계방송

3. TCP

아주 정확해야함

안정적임

은행 간 송금

4. Controls of TCP

1. Congestion control

By time-out

By 3 duplicate Acks

2. End-to-end Flow control

sender가 receiver의 성능을 고려해 보내는 속도를 조절함

Stop-and-wait flow control

Sliding-window flow control

3. Error control

에러 유무를 확인하고 에러에 어떻게 대응할 것인

Go-Back-N

# data[].attributes.body
5장
Network Layer & IP

network layer
- 네트워크 간에 데이터 패킷을 주고받는 계층

1) forwarding
- 포워딩 테이블에 적힌 목적지 주소에 대응된 출력 포트로 패킷을 이동시키는 작업
2) routing
- 주소를 보고 데이터를 어디로 보내야할 지 판단하는 행위

communication network
- circuit-switched networks (1G, 2G)
- packet-switched networks (3G~)

circuit switching

- 사용되는 회선 전체를 독점 -> 다른 사람이 끼어들 수 없음
- 장점 : circuit이 예약되어 있으므로 오랜시간 통화할 때 좋음
- 단점 : 점유하고 있는 circuit에서 정보를 보내지 않는 시간동안은 회선이 낭비됨
ex) 전화망

packet switching

- message의 크기가 크면 라우터의 buffer가 커야함
->송신할 데이터를 packet이라는 단위로 쪼개서 전송
- 어느 한쪽의 라우터에 병목현상이 일어나면 다른 경로로 보낼 수 있음
-> receive쪽에 도착하는 순서가 달라질 수 있다
-> network layer에서 순서를 정리해서 다음 layer로 전송하기 때문에 문제 x

* pipelining을 하더라도 header와 data의 크기가 비슷하면 overhead가 된다
-> 잘게 자른다고 다 좋은것은 아님

Routing Algorithms
-router 각자가 스스로 계산해서 routing table을 만드는 알고리즘

1) link state routing
- 네트워크 정보가 글로벌 할 경우
- 모든 노드가 전체 네트워크 topology와 cost를 안다.
-Dijkstra's Algorithms : 모든 정점까지의 최단경로 구하기

2) distance vector routing
- 네트워크 정보가 지엽적인 경우
- 자기의 이웃하고만 정보를 주고 받음
- Bellman-Ford Algorithm

Hierarchical routing
- 네트워크가 커질수록 routing table의 크기가 너무 커지는 문제점을 해결하기 위해 만들어짐
- AS 단위로 routing table을 만듦
- 각 AS는 gateway router로 서로 연결될 수 있음
- 내부의 라우팅 정보는 Intra-AS routing protocol 이용해서 작성
- 각자의 AS 내의 라우터들의 정보를 Inter-AS routing protocol을 이용해서 공유

IP addresses
- 호스트 또는 라우터의 각 인터페이스에 할당된 32비트 ip주소
- 주소는 netID, hotID로 나눠짐

*Dotted Decimal Notation
- 32bit를 8bit씩 쪼개서 10진수로 나타내는 것

Subnet Addressing
- HostID부분 16bit를 효율적으로 사용하기위해 subnetID 와 hostID 부분으로 나눔

CIDR
- 부족해지는 IPv4주소를 보다 효율적으로 사용하게 해준다

NAT(Network Address Translation)
- 제한된 수의 IPv4 주소 문제를 해결하기 위해 개발
- NAT라우터를 사용해서 다수의 사설 IP주소를 하나의 공인 IP주소로 변환하는 기술

6장
Transport Layer

Internet transport protocols
1) UDP (User Datagram Protocol)
- 간단한 프로토콜
- 최선을 다하지만 손실을 보장할 수 없음
- sender와 receiver 사이에 connection이 없음

2) TCP (Transmission Control Protocol)
- 두 개의 호스트를 연결해서 데이터를 교환
- congestion control, End-to-end Flow Control, Error Control

TCP Flow Control

-sender가 보내는 속도를 조절하게 하는 것
-receive가 ACK packet에 사용가능한 memory space를 넣어서 보내면 sender가 속도조절 할 수 잇음
-stop-and-wait flow control/ sliding window flow control

Error Control

-ARQ ( receiver가 packet을 받았을 때  ACK를 보내는 것

-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 Congestion Control

# data[].attributes.body
chap 5

○ Network Layer

Network Layer

Sender가 보낸 데이터를 Receiver에 안전하게 전달하는 역할

라우터가 Sender에게 데이터를 받아 수신자 IP주소를 보고 어느 방향으로 보낼지 판단

Routing Algorithms

Link State routing

Dijkstra’s Algorithm

-> 각 노드 들이 cost를 공휴하는 broad casting 방법

Distance vector routing

Bellman-Ford Algorithm

-> 이웃한 Node 끼리만 정보 공유

-> 이웃한 Node로부터 routing table을 받아 최단 경로 찾기

Hierarchical routing

-하지만 라우터 종류 多 & node들이 많아지면 위의 알고리즘 사용할 경우 많은 시간 소요

-> 대표 라우터를 만들고 대표 라우터들 끼리 정보를 전달하자 -> autonomous systems(AS)

Communication network

Circuit-switched network

예전 전화 방식(회선 예약)

예약 -> 통화 -> 끊는 단계

overhead 문제

2. Packet- switched network

* Message Switching 방법 중 하나

# Message Switching

- 회선을 만드는 행위 x -> 바로 메시지 전달

- 메시지가 길어지면 전달 시간 길어짐 & 라우터의 버퍼가 커져야함.

-> 그러니깐 메시지를 쪼개서 보내자 = packe – switched network

-> 시간 절약 but 너무 잘게 쪼개면 x (헤더와 데이터 size가 비슷해져 overhead 발생)

○ IP

IP

Internet Protocol

IP Address를 통해 device 구분 가능

IP Address

- class(A~E) 5개의 종류가 있음, but host id에 16bit 할당된 classB 사용

Host ID를 체계적 관리 & 효율적 사용을 위해 Subnet ID와 HostID로 쪼개 사용

인터넷 사용자 증가 -> 32bit인 IP주소가 부족해 짐.

-> 해결 방법 : IPv6(주소를 바꾸자), CIDR(xxx.xx.xx.x/OO를 사용해 32-00bit만큼 hostpart를 할당해주자), DHCP(임시 IP사용 후 반납 #NAT<DHCP사용 기반>-> 라우터가 연결 NODE에 사적 IP 할당)

Chap 6

○ Transport Layer

Transport Layer

Sender와 Receiver 사이의 데이터 전송이 잘 이루어졌는지, 에러 or traffic delay 발생 여부 확인

Internet Transport Protocols

UDP

loss가 좀 있어도 괜찮은 경우 사용 (ex. 축구 경기)

2. TCP

중요도 : 속도 << 정확도

reliable delivery로 실수 용납 x (ex. 은행 송금)

TCP가 하는일

Flow control

S-R 사이의 송수신 속도 조절(Sender의 전송 속도가 R이 처리 못할 정도로 빠른 경우 loss 발생)

ACK를 보낼 때, receiver가 감당 가능한 버퍼 정보를 함께 보냄 -> S의 전송 속도 조절

* ACK 패킷 전송 방식

1. stop-and-wait flow control : 하나씩 보내기 -> 기다리는 시간이 긺 -> 효율 낮

2. Sliding window flow control: 여러개 보내고 ACK가 올때마다 하나씩 더 보내기 -> 시간 절약 -> 효율 높음

2. Error Control

패킷 전송 중 error , noise 발생 시 해결 방법

3. Congestion Control

트래픽이 몰려 라우터 버퍼가 넘치면 패킷이 loss됨

congestion 해결 by (1. timeout / 2. 3duplicate Acks)

# data[].attributes.body
5장 <Network Layer & IP>

● Network Layer
- Router와 입력측에서 데이터를 받아서 출력측으로 보내는 역할 수행. 데이터를 받아서 packet을 받아서 수신자 주소를 보고 데이터를 어디로 interface 보내야하는지 forwarding할 때 routing(어디로 보낼지 주소를 보고 판단)함.

- Network의 분류

-Communication networks
1)Circuit-switched networks : 옛날 전화 방식

- 회선을 예약해서 예약 완성되면 통화 시작, 통화 종료면 종료 신호를 주어 통화를 끊음.

- 실시간으로 오랜 통화를 할 때 좋음(예약 때문에), 채널 낭비의 단점 존재
2)Packet-switched networks : Message Switching 의 일부
- Packet 을 보낼 때 미리 connection 없이 데이터를 쪼개서 바로 보내는 것.

- packet을 쪼개서(pipe line) 훨씬 시간 단축 가능

● Routing Algorithms
-routing table 만드는 알고리즘, router들이 스스로 계산

1) Link state routing
- Dijkstra’s Algorithm 을 통해 계산. 모든 노드와 cost 정보를 주고 받음. 서로서로 정보를 다 공유

2) Distance vector routing

- Bellman-Ford Algorithm 은 자기와 이웃한 노드만 데이터를 주고 받음. 이웃한 노드의 routing table을 받아 cost 구함.

- Hierarchical routing : 전체 테이블을 만드는 것이 아닌 대표router . region으로 가면 region내부의 routing에 의해서 전달 되도록 하는 것.

●IP address

:4바이트 32bit를 전세계적으로 사용, ip주소로 단말 인지를 알 수 있다.

-host ID 와 net ID
-class A(0, Net ID{7}, Host ID{24})
-class B(1,0, Net ID{14}, Host ID{16}) - 가장 많이 사용
-class C(1,1,0,Net ID{21}, Host ID{8})

-class D(1,1,1,0,Multicast Address)

-class E(1,1,1,1,0, Reserved for future use)

- Subnet Addressing : Host ID를 세부 네트워크로 쪼개서 사용하는 것.

- IP address 고갈 문제
- IPv6 새로운 버전 만듬 → short term solution → CIDR 32비트 뒤에 추가 비트 할당.
Network part + host part
- IP address 할당 방법
- 하나를 할당하여 Manual configuration

- 임시 IP address를 할당받아 거기서만 쓰고 반납하는 방식

-NAT
-공적 할당받은 인정된 IP를 Router를 통해 내부 기관에서 마음대로 IP를 사적으로 할당받아 사용

● IP(Internet Protocol)

Internet protocol layering = Application + Transport + Network + Data Link

● Transport layer protocol
:Send와 Receiver 사이에 데이터 전송이 이루어짐. 앞에 있는 Network layer에 IP가 주소를 가지고 packet 단위로 보내서 transport destination에 도착 시킨다.

- UDP

: 조금 잃어버려도 상관없고 전송이 제대로 안되어도 큰 문제가 없는 경우 사용
- No frills, bare bones
- 전송이 잘되어도 좋지만 안되어도 상관 없다.

- TCP
: 속도보다 정확해야 하는 경우 사용, 실수 용납 x
- Congestion control
-traffic 이 다량 들어오면 buffer가 넘쳐 congestion 발생. → 이를 해결 by time out
- End-to-end Flow Control
- Error Control

- ARQ
1) Error-free operation
2) Lost data packet
- Classification
1) Stop-and-Wait ARQ
2) Contiuous ARQ
(1) Go-Back-N

- TCP Flow control : Sender가 Receiver에게 보내는 속도를 control 하는 것
- Stop-and-wait flow control : 비효율
- Sliding window flow control : 여러 개를 보내고 올 때 마다 하나씩 더 보내는 방식

# data[].attributes.body
챕터5 - network layer & IP

Network layer : 샌더가 보낸 데이터를 리시버 측에 안전하게 제대로 도착하게 하는 역할

- Forwarding : 받아서 전달하는 행위

- Routing : 주소를 확인하고 어디로 보낼지 결정하는 행위

Communication Networks

- Circuit–switched networks : 3G 이전

서킷을 예약하고 연결하고 끊는 행위가 존재

예약하고 끊는 행위는 시간은 짧지만 오버헤드가 될 수 있음

장점 : 리얼타임으로 오랜시간 통화할 때 유리함 / 딜레이 없음

단점 : 채널의 낭비가 존재

- Message Switching : 서킷을 만들거나 끊는 행위 없이 바로 메시지를 보내는 방법

- Packet-switched Networks : 3G 부터 / Message switching의 일부 / 파이프라이닝

데이터를 Packet 단위로 쪼개서 전송하는 방법

데이터를 쪼개기 때문에 경로 진행 도중 밀리면 라우터가 다른 경로로 안내하여 리시버에 도착하는 순서가 달라질 수 있음 à 순서 재정비 후 발송하기에 상관없음

파이프라이닝을 통하여 데이터를 쪼갠 뒤 발송

효율적인 패킷 사이즈 결정은 시간측면에서 아주 중요함

데이터 사이즈에 맞는 패킷 사이즈 결정이 요구됨 (Routing Table)

Routing Algorithm : Routing Table을 만드는 알고리즘

- 각 노드는 이웃한 노드까지의 경로 Cost만 알 수 있음

- 각 라우터가 노드를 보고 최적의 경로를 찾는 알고리즘 : 2가지 종류

Link State Routing : Dijkstra’s Algorithm

모든 라우터(노드)가 모든 링크의 비용을 알고 있기에 다익스트라 알고리즘을 이용하여 최적의 경로를 계산, 한 노드에서 다른 모든 노드까지의 최적 경로를 계산하여 Routing Table에 저장한다.

Distance vector Routing : 각 노드는 자신과 연결된 이웃 링크의 비용만을 알고있기에 벨만-포드 알고리즘을 이용하여 최적의 경로를 찾을 수 있음.

반복적이고 분산적 / 이웃끼리 반복해서 정보를 교환하여 최적의 경로를 갱신하는 방법

Hierarchical Routing

각각 대표 라우터들을 설정하고, 대표 라우터들끼리 라우팅 테이블을 주고받아 라우팅 테이블을 만들고, 내부에서 또 따로 라우팅 테이블을 만들자는 알고리즘

IP Address

- 크게 5가지 클래스로 구분할 수 있음(보통 a,b,c중 하나를 볼 것) / a는 너무 많이 남고, c는 너무 부족해서 대부분 b 클래스를 사용한다

- Subnet Addressing

Host ID부분을 기관이 구매하고, 세부 네트워크로 쪼개서 사용하는 것

- 부족한 IP Address를 어떻게 해결할까

CIDR

IPv6

NAT : 하나의 IP 주소를 가지고 수많은 Host를 연결할 수 있는 방법

할당받은 하나의 IP주소로 라우터를 통해 내부 기관이 마음대로 IP를 할당해서 사용하는 방식

라우터는NAT translation table을 통해 마킹을 하고, sender를 공적 IP주소(자기 주소)로 변환하여 데이터를 발송

돌아오는 답변은 리시버는 샌더가 되고, 샌더는 리시버가 되어 돌아옴

NAT translation table을 통해  도착한 리시버 주소를 내부 라우팅에 의하여 처음 보낸 샌더의 IP가 리시버로 바뀌어서 데이터를 전달할 수 있게됨.

- IP 패킷의 포맷 : 헤더가 20바이트 나머지 부분이 실제 데이터 부분 존재

- 네트워크마다 서로 다른 언어를 사용하고, 사이즈가 모두 다르기 때문에 네트워크를 지나가면 서로 다른 패킷 사이즈로 인하여 쪼개지기도 함.

- TTL (Time to live): 샌더라 리시버까지 걸리는 시간을 측정하는 것이었지만, 라우터를 지날 때 마다 숫자가 하나씩 줄어듬 / 몇번의 홉을 거쳐 목적지까지 갔는지를 측정하는 용도로 사용됨

6장 – Transport Layer Protocols

- UDP : 털털하고 간단함 / 전송이 잘 안돼도 상관없음

Ack가 없고, retransmission이 없음

à 장식이 없고, 기본적인 골격만을 유지하는 프로토콜 / 전송이 잘되면 좋고 안되면 어쩔수 없지뭐 ~ / 미리 샌더와 리시버가 컨택하지않고(no handshaking) 바로 전송하는 프로토콜

à 헤더 사이즈가 8byte밖에 안되는 간단한 프로토콜

- TCP : 속도보다 정확한 전달이 중요한 데이터의 전송에 사용됨 / 아주 깐깐한 편

완전 정확해야 하는 경우에 TCP 사용

패킷이 전송중에 사라지면 retransmission함

다양한 control 이라는 말이 나옴

헤더가 UDP에 비하여 큼 (20바이트)

à Congestion Control : 샌더가 데이터를 보냈는데, 제때 전송이 안되었을 경우 어떻게 할건지?

: 유선이라 패킷이 가다가 없어지는 경우는 없음 따라서 에러가 발생하면 버퍼가 넘치는 것. à 트래픽의 개수를 줄이는 방식을 취함.

Slow start : 타임아웃에 의하여 패킷이 도착하지 않는 것을 해결하는 방법 / 현재 쌓여있는 양의 절반치를 쓰레쉬홀드값으로 설정하고 다시 1로 떨어뜨린뒤 처음부터 재진행

Fast retransmit : 타임아웃 이전에 발생한 경우 dupack이 옴 / 듀팩이 3개 오면 1로 떨어지는게 아니고 쓰레쉬홀드값을 양의 절반으로 바꾸고 시작. à 슬로우 스타트할 필요가 없기 때문

à flow control : 샌더와 리시버 사이의 수발신 속도 조절을 위해 사용

: 만약 샌더가 슈퍼 컴퓨터이고 리시버는 안좋은 경우, 샌더는 빠른속도로 데이터를 보내지만 리시버는 처리 능력이 안됨. 이경우 샌더의 전송속도 조절이 요구됨 : 플로우 컨트롤 but 비효율적임

파이프 라이닝 : 여러 개를 동시에 보냄

슬라이딩 윈도우 : 여러 개를 보내고 올때마다 하나씩 더 보내는 방식

윈도우 사이즈와 리시버가 애크 보낼 때 넣어보내는 윈도우 사이즈증 미니멈 값으로 윈도우 사이즈를 설정하여 보내게됨.

è GO-Back-N : 슬라이딩 윈도우를 사용했을 때 방식

1)    윈도우사이즈가 3이라면 3개 보낸 뒤 애크가 오고, 첫 애크가 도착하면 네번째 애크를 보내는 방법을 반복

2)    네번째 데이터프레임이(3번) 사라지고 4,5번 데이터프레임이 오면 리시버는 데이터프레임4,5를 버림 / 타임아웃 이후 다시 에러가 발생한 애크로 되돌아가서 재전송하는 방식

3)    0,1,2번 중 1,2번 애크가 안오고 3번 애크가 오면, 3번 애크가 왔다는 것은  1,2번 모두 잘 도착했던 것이라고 생각하고 리트랜스미션 하지 않고 계속 데이터 프레임 전송을 시작함.(애크가 중간에 사라진 것으로 간주)à cumulative ack

à Error Control : 노이즈나 에러 상황

: 샌더는 패킷을 보낼때마다 항상 타임아웃을 둠. 일정 시간안에 애크를 받지 못하면 타임아웃으로 인하여 retransmission / 타임아웃은 애크가 올 시간보다 충분히 커야함

데이터 패킷이 사라진 경우가 아니라 애크 패킷이 사라진 경우 à 타임아웃을 통해 리트랜스미션, 리시버는 자신이 보낸 애크가 돌아왔기에 버려버리고 동일한 애크를 다시 재전송

à 실수가 용납되지않음

# data[].attributes.body
Network & IP

Packet : 데이터
Router, Forwarding

Circuit switching : 옛날 전화방식

미리 circuit 예약 후 사용, 낭비가 있으나 실시간 전송가능

Packet switching (Message switching) : 사전 Connection 없이 데이터를 Packet 단위로 쪼개서 전송

쪼개진 데이터가 서로 다른 길로 갈 수 있음 (병렬)

Header를 달아 쪼개진 데이터들의 순서를 기록함

Routing Algorithm

Network 안 Router 들의 번호를 할당하기 위함

1. Link State routing = Dijkstra

2. Distance vector routing = Bellman-Ford algorithm

IP

IPv4 : 4 byte(32bit)

Subnet mask : Host ID를 쪼개서 Subnet 생성 (더 많은 Node를 생성하기 위함)

Transport layer

TCP(Transmission Control) : 속도관계 없이 정확히 데이터전달(전송이 제대로 안되면 재 전송)
	* 20byte header
UDP(User Datagram) : 데이터가 부정확하게 전달되도 됨. > 동영상 같은경우 노이즈가 있어도 됨
	* header가 8byte
	* Sender와 Reciver가 사전에 연결되지 않아도 됨

TCP

Flow control : sender와 reciver의 속도를 맞춰 낭비가 없도록 조절 (reciver가 넘치지 않도록)

Acknowledgement(ACK)를 Reciver가 전달함.

Sliding window : 쪼갠 데이터를 window size로 한번에 보냄.

ACK가 돌아오는 속도를 계산하여 Window size 계산, 데이터를 쪼개서 보냄

Error Control : Error 대응

Time out : ACK를 못받을 때 정지

Go-Back-N

Congestion control : 트래픽이 몰릴 때 대응법

TCP는 유선랜을 가정하고 만들어서 Packet loss는 Router가 넘칠 때로 한정함.

Router가 받을 수 있는 packet size를 제한함으로써 해결함(threshold 계산 알고리즘)

# data[].attributes.body
#5-1강

[Network Layer & IP]

1.Network Layer의 역할

-sender가 보낸 data를 receiver측에 안전하게, 제대로 전달함.

-컴퓨터 network에서 packet이란 data보낼때 header에 주소 써서 보냄. IP address 전 세계 공통의 주소체계를 사용.

2.Network Layer의 Function
-Routing : 주소를 보고 어디로 보낼지 결정
-Forwarding : 정보를 전달

3.Network의 구분

(1)유선 전화망 : Circuit-switched networks. 1,2G

(2) 컴퓨터 통신망 : Packet-switched networks, 3G부터

3-1) Circuit switching

-전화를 받을 사람의 번호를 누르고 미리 회선(Circuit)을 예약함. 통화가 끝나면, 예약한 회선 취속

-Circuit establishment → Data transfer → Circuit termination

-장점: 한번 circuit이 예약되면 real-time 으로 오랜시간 통화할 때 좋다.

-단점: circuit 만들고 끊는것이 overhead가 될 수 있다. channel의 낭비가 존재한다.

3-2) Message Switching

-바로 메세지를 보내는 방식. Packet switching은 message switching의 일부이다.

3-3) Packet Switching

-packet을 보낼 때 데이터를 packet단위로 쪼개서 보낸다.

-순서 바뀌어도 순서 재정비해서 상관없음.

4.Switching 비교

-message switching은 circuit Switching 처럼 circuit을 만들고 끊지 않아서 바로 보낼 수 있음.

-하지만 메세지가 길때는 시간이 오래 걸림.

-메세지가 크면 저장되어있는 buffer size가 커야함.

-이 문제를 해결하기 packet switching. packet을 잘라서 pipeline을 함. message switching보다 빨리 끝남.
5.Effect of packet size on transmission time

-무조건 잘게 짜르면 좋은 것인가? No!

-5개로 쪼갠 것 보다 10개로 쪼갰더니 더 길어짐. 왜냐면 하얀색이 data 부분인데, 그것에 비해서 header가 상당히 영향을 끼친다.
6.Routing Algorithms (중요)

-목적지로 가는 최적 경로 찾음. local forwarding 테이블을 만드는 알고리즘. 라우터들이 스스로 계산함.

-선 위에 숫자들은 cost임. 돈,비용, 간. 제일 작은게 좋음

(1) Link state routing

-각 node가 이웃한 cost 정보를 서로 교환함. 모든 node가 전체 경로의 모습을 앎. 모든 노드가 같은 topology.

-Dijkstra’s Algorithm : 특정 지점에서 다른 점으로 가는 shortest path 계산. 이를 통해 routing table 만들 수 있음 .

Or경로에 대한 모든 이동 경로 cost 계산. 노드를 하나씩 연결하면서 최소의 cost가 되는 경로를 만듦.

(2) Distance vector routing

-각각 노트는 인접한 노드들의 비용만 앎. 어느 거리를 가는데에 걸리는 시간이 얼마인지에 따라 경로 결정

-Bellman-Ford Algorith : 인접한 노드들로부터 해당 노드들의 routing table를 받아서 자신과의 cost와 합산해서 비교함.
7.Hierarchical routing

-Routing table 시간 소모 큼. 현실적으로 같은 단위 AS 마다 대표 router 선정해서 routing table만듦. 내부에서도 routing table를 만듦.

#5-2강

[IP (Internet Protocol)
1.IP addresses

-Host와 net으로 나뉨. 다섯 가지 class로 구분됨.

-Net Id : 기관에서 공통으로 사용하는 IP

-Host ID : 각 기관의 기기들이 사용하는 ID

-class A : Net ID 2^7(128개), Host ID 2^24

-대부분은 A와 C의 중간인 class B 사용.
2.Subnet Addressing

-Subnet ID와 Host ID로 나누어 사용. 건물마다 subnet ID를 줌

-대표 라우터는 전체 네트워크를 나타냄

-141.223.0.0 : 141.223.x.x 형태에 대한 routing table를 갖고 있음.

-subnet mask : 한 조직에서 몇 개의 subnet으로 나누었는지 알기 위해 사용

-ex) IPv4 주소 141.223.108.201 / 141.223는 포스텍의 전체 IP. 108 인공지능연구원 3층

-subnet mask 255.255.255.0 / 108에 해당하는 부분 전체를 다 host id로 사용
3.Problems of IP address scheme

-인터넷 발전으로 IP 주소가 부족함. → 해결책 IPv6.
4.CIDR (Classless Inter-Domain Routing)

-Class를a,b,c로 안나누고 / 사용해서 알려줌.

-network ID를 가변적으로 활용.
5.How to get IP address?

(1) Manual configuration : 아예 하나를 줌. 수동으로 IP를 할당받음

(2) DHCP (Dynamic Host Configuration Protocol) : 임시 주소를 할당받아서 정해진 공간에서만 쓰고 반납함. (ex.스마트폰)
6.NAT (Network Addres Translation)

-공적으로 할당받은 공적 IP내에서 router를 통해서 local network 내에서 마음대로 사적인 IP를 할당받아서 사용가능.
7.IP (Internet Protocol)

-다양한 protocol들의 정의

(1) ICMP (Internet Control Message Protocol) : 망 관리, 네트워크 제어시 사용

(2) IGMP (Internet Gorup Management Protocol) : multicast를 위한 것

#6장

[Transport Layer]

1.Transport layer protocols

-sender가 보낸 것이 destination에 잘 도착했는지. 에러, 딜레이 등의 여부 파악. 2개의 Protocol.

1-1) UDP (User Datagram Protocol)

-간단한 protocol. 잃어버려도, 전송 안되도 큰 문제가 없음. 화질이나 목소리 좀 망가져도 괜찮은 것 (streaming mltimedia app)

-”no frills” 장식이 없음. “bare bones” 살이 없음. 뼈만 있는 protocol

-“best effort” 전송 잘 되면 좋지만 어쩔 수 없다. 노력은 해 보겠다.

-connectionless 미리 컨택하지 않고 바로 보내버림.

-header size가 8byte 밖에 안됨.

1-2) TCP (Transmission Control Protocol)

-아주 정확해야하는, 중요한 정보 전달시 (ex. 은행에서 정보 보낼때)

-reliable 실수 용납 안됨. error 없어야함. 반드시 정확히 전달. 전송 중에 사라지면 retransmission.

-가장 중요한 3가지 control 기억
2.TCP Flow control

-Sender는 슈퍼컴퓨터, receiver는 성능이 안좋다고 가정. 보내는 속도를 조절해야함. receiver가 잘 받았다고 보내는 ACK packet에 대한 정보를 보내서, sender가 이걸 보고 속도 조절 가능

2-1) stop-and-wait flow control

-정보 보내고 stop. ACK올때까지 기다림. 그다음에 보냄. 1개씩 보내서 너무 오래 기다림. 비효율적임.

2-2) Sliding window flow control

-pipelining 동시에 여러개 보냄. window size 오른쪽으로 움직이면서 다음 packet 보냄.
3.Error Control : 에러에 대한 대응

3-1) Stop-and-wait ARQ

①Error-free operation : 1개 보내고, 1개 받고. stop-and-wait와 비슷

②Lost data packet : 2번째 receiver가 못받음. sender는 ACK를 영원히 기다림. timeout 사용. 일정 시간 ACK 못받으면 바로 retransmission. timeout 시간은 ACK올때까지 충분해야함.

③Lost ACK timeout : ACK packet이 사라진 경우. timeout retransmission.

3-2) Go-Back-N ARQ (주로 쓰임)

①Error-free-operation : 에러 없는 경우

②Corrpted data packet : 보내는 도중에 3번 packet 에러남. receiver는 0,1,2 보내다가 3이 안오고 4,5번은 옴. 그러면 쭉 버림.

③Corrupted ACKs : ACK가 오다가 사라지는 경우. time-out에 따라 보낼수도 아닐수도.
4.TCP segment Format

-UDP가 8byte 였던것에 비하면 20byte. 큼.
5.TCP Congestion Control (중요)

-네트워크 트래픽 몰리면 congestion 생김. 모든 사용자가 함께 해결해야하는 문제라고 여겨서 congestion protocol 만들었음.

-맨 처음엔 유선 network를 가정해서 만듦. 상당히 안정적이어서 router가 넘치는 경우만을 가정. 트래픽 개수 줄이는 방식.
-Congestion control by timeout (TCP Taeho) : timeout 사용

-Fast Retransmit

# data[].attributes.body
Network Layer Services
- sender가 보낸 data를 receiver측에 안전하게 도달하게 하는 역할

Two Key Network Layer Functions
- Forwarding : 주소를 보고 그 쪽으로 전달하는 행위
- Routing : 어느 곳에 보내야 될지 주소를 보고 확인하는 행위

Circuit Switching (옛날 전화 방식)
- Three Phases : Circuit establishment, Data transfer, Circuit termination
- 장점 : 오랜시간 통화 가능
- 단점 : 낭비가 있다.
- 전화번호 누르면 회선을 미리 예약한다. 예약이 완성되면 통화하고 끝나면 끊어버린다.

Message Switching
- 미리 circuit을 만들거나 끊는 행위 없이 바로 메세지 보내는 방식
- 메세지 사이즈가 크면 버퍼 사이즈 커야함
Packet switching
- 중간중간 잘라서 보내는 방식, 패킷 단위로 보냄
- 단말에서 패킷 하나를 보낸뒤에 다른 버퍼에서 그 패킷을 보내면 단말에서 다음 패킷을 보내는 방식
* 패킷을 무조건 작게 자르는 것이 좋은 것은 아니다. 헤더 사이즈가 있기 때문에 적당히 자르는 것이 좋다. 헤더사이즈가 있기 때문에 너무 많이 자르면 적게 자르는 것보다 더 커질 수도 있다.

Routing Algorithms
- 라우팅 테이블을 만드는 알고리즘, 각자 스스로 계산하는 알고리즘 채택
- 2가지 알고리즘 : Link State routing, Distance vector routing

Link State routing
- Dijkstra's Algorithm기반
- 각각의 라우터는 이웃한 노드의 cost를 알고있음. 이걸 서로서로 다 교환함. 그러면 모든 노드가 구조를 알 수 있음.
- 목적지까지의 비용을 계산해서 최적의 경로를 찾아낼 수 있다.

Distance vector routing
- Bellman-Ford Algorithm 기반
- 하나의 이웃하고만 정보를 주고 받음. 그리고 각자가 가지고 잇는 routing table을 이용하여 계산한다.
- 예를 들어 포항에서 대전 갈때 영덕, 안동, 대구까지의 비용은 알고 있다. 그리고 3도시에서 대전가는 비용을 안다면 계산할 수 있는 것이 Bellman-Ford Algorithm

IP(Internet Protocol)

- Problems of IP address scheme
- IETF solutions
- IPng(IPv6) : 모든 장비를 바꿔야 됨. 시간이 많이 걸림
- CIDR

Transport Layer
- sender와 receiver 사이에 데이터 전송이 이루어짐. 잘 도착했는지 여부 확인 등의 일을 함.

UDP(User Datagram Protocol)
- 사람으로 치면 털털하고 간단하다.
- 패킷을 조금 잃어버려도 상관없다.

TCP(Transmission Control Protocol)
- 속도보다는 정확
- Congestion control : sender가 데이터를 보냈는데 제 때 전송이 안 됐을 때와 비슷한 상황
- Retransmission timeout : timeout에 의해 ack가 오지 않음 그래서 처음으로 떨어짐.
- 3 Duplicate Acks : 3dupack이 오게 되면 timeout이 아니라 현재 값이 반으로 떨어져 다시 선형적으로 증가하는 방식
- End-to- end Flow control : sender와 receiver 사이의 보내는 속도와 받는 속도 조절
- Stop-and-wait flow control : 데이터를 보내고 ack가 오길 기다리는 방식
- Sliding-window flow control : 여러개를 보내고 올 때마다 하나씩 더 보내는 방식
- Error control : 패킷이 가다가 노이즈나 기타 이유로 에러가 생긴 경우
- Stop-and-Wait ARQ
- Lost data Packet
- Lost ACK timeout
- Go-Back-N ARQ
- Error-free operation
- Corrupted data packet
- Corrupted ACKs

# data[].attributes.body
Network Layer & IP
주소를 보고 reciver에게 전달.

Network Layer가 하는 function : 데이터를 받아서 forwarding에서 받아서 Routing으로 보냄

- 보내는 방향을 결정한다

Routing : 주소를 받아 어디로보낼지 판단하는 것

유선 네트워크망

- Circuit(회선) switched networks (1,2세대)

- Packet-swiched networks (3세대부터~)

Circuit switched networks

오랜시간을 통화할 때 아주 좋음

채널의 낭비가 존재함

Packet-swiching networks : 하나의 데이터가 여러개의 Packet로 쪼개보냄

순서가 바뀌어 받았을 때 스스로 순서를 재정비함

파이프라이닝 : Packet 1을 보내고 2를 보낸 사이에 다음 routing에서 packet1을 보냄

파이프라이닝을 통해서 빠른 전송 가능

파이프라이닝이 너무많이하면 오히려 안좋아짐

Routing algorithm

라우팅 테이블은 헤더를 보고 수신지까지 잘 전달 가능

라우팅 테이블을 어떤식으로 만들건지 만드는 알고리즘
router > router 이동간 cost 발생 >> 최소 cost로 가는 알고리즘 (2가지)

(1) Link State routing algorithm : 각각의 노드가 전체 노드경로를 알고 있다.

(2) Distance vector routing algorithm

IP(Internet Protocol)

- 5가지 클래스로 구분된다(class A ~ E)

- 0 / Net ID / Host ID [class A = 0 / 7 / 24] (class C = 110 / 21 / 8]

- 한 조직기관에서 몇 비트로 쪼갰는지 알 수 있기 위해 subnet mask를 쓴다.

IP adress 사용자가 많아지며 수가 부족해짐.

IPv6 : 새로운 버전을 만든다

CIDR

DHCP : 임시 IP 주소를 받아 쓰고 반납하는 방식

NAT (Network Address Translation, IP 문제 해법 중 하나)

공적 인증 IP + 내맘대로 설정한 사적 IP

사적 IP에서 보낸 정보를 라우터를 거쳐 공적 인증 IP로 발신자를 변경

<6장 Transport layer>

UDP / TCP
UDP : 간단한 프로토콜

TCP : 정확한 전송을 요구할 때

stop and wait : 하나 보내고 잘보냈다는 ACK을 표시
파이프라인기술을 통해 여러개를 보내고 올때마다 하나씩 더보내는 방식

TCP Congestion Control

중간에 라우터에 버퍼가 넘친다고 가정 > 개수를 줄이는 방법을 함
time out :  2^n만큼 증가 > 점차 2씩 증가, 과부하가 되면 처음부터 시작.

# data[].attributes.body
5장

-Network Layer
forwarding: 주소를 보고 패킷이 가야될 router로 전송
routing: 패킷이 가야할 router를 결정

Circuit-switched networks - 유선 전화망
통화를 하고 싶으면 미리 전화선을 예약
통화가 끝나면 예약했던 회선을 취소
연결과 통화, 끊는 행위 필요
장점: 실시간으로 오래 통화할 때 좋다 -> 딜레이가 없음
단점: 채널의 낭비가 존재

Message Switching
잘라서 낱개로 보낸다
Packet-switched - 컴퓨터 통신망
사전 연결없이 패킷 단위로 쪼개서 보낸다(하나의 데이터를 여러 패킷으로 분해)
만약 밀리게 되면 router가 다른 경로를 찾아준다.
하나의 패킷을 보내고 남는 시간에 다른 패킷을 보낸다 -> 시간 단축
무조건 패킷을 잘게 쪼갠다고 좋은게 아니다
순서가 바뀌어서 받더라도 데이터에는 문제 x

Routing Algorithm을 통해 최적화된 routing 경로를 찾는다.(최소한의 비용)
1)Link State routing algorithm
각각의 노드는 전체 노드의 구성을 안다.
각 스텝에서 노트를 거쳐 주변으로 가는 경로를 계산 -> 각 경로를 거쳐 최적 경로 계산 -> routing table을 작성
2)Distance vector routing algorithm
자신 이웃 노드의 데이터만 주고 받는다
이웃노드가 목표 노드로 가는 경로와 이웃노드로 가는 경로 고려해서 계산

-IP Addresses
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

-subnet addressing
Host ID(16)를 subnet id(8)와 host id(8)로 나눈다.

iot의 등장으로 ip주소가 점점 모자르게 된다 -> IPng
NAT: 하나의 공적 IP address를 받아서 사설 ip address를 만들어서 할당

6장

-UDP(User Datagram Protocol)
오류가 생겨도 문제 없는 경우 사용 ex) 축구 방송
기본적인 골격만 존재 -> 간단
전송이 잘되면 좋지만 전송이 안될 수도 있다.
패킷이 사라질수도 있다.

-TCP(Transmission Control Protocol)
오류가 없어야하는 경우 사용 ex) 은행 업무
까다롭다
congestion control
end-to-end control
error control

-Error Control
Stop-and-Wait ARQ: time-out 사이에 ACK를 못받으면 재 요청
Go-Back-N ARQ: time-out 사이에 다음 ACK를 받으면 이전 패킷이 잘 전송되었다고 생각하고 재요청하지 않는다.

-TCP Congestion Control
고속도로가 막히면 해결해야한다
만약 유선에서 에러가 발생한다면 router에 오류가 발생했다고 생각한다 -> 모든 노드가 트래픽을 줄인다.
time out에 의해서 패킷이 오지 않는다면 현재 값의 반을 ssthresh 값으로 둔다.
빠른 재요청후 window size를 반으로 줄인다.

# data[].attributes.body
5장

<Network Later Services>

sender가 보낸 데이터를 recipient가 안전하게 제대로 전달하게 만드는 역할, IP가 주로하는 일

1. Network Later의 기능

- Forwarding: 입력측에서 packet을 header에 주소를 써서 출력측에 전달하는 행위
- Routing: 어느곳으로 보낼지 주소를 보고 판단하는 행위

2. Taxonomy of Networks (Network core)

- Circuit-switched networks: Circuit을 미리 예약하는 행위를 하고(Circuit establishment ), 예약이 끝났다고 알려주면 통화가 시작되고(Data transfer) 통화 종료 후 통과가 끝났다고 알림 Circuit termination)

장점: 오랜 시간 통화 시 좋고, 적은 딜레이

단점: 채널의 낭비가 존재함

- packet-switched networks: Packet을 보낼 때 미리 커넥션없이 데이터를 Packet 단위로 쪼개서 전송
=>쪼개서 보내기 때문에 혹시라도 어느 쪽이 밀리게 되면 Router가 다른 경로로 안내

Massage Switching

Packet Switching

- Massage Switching과 Packet Switching 비교

Packet은 파이프라이닝을 사용해서 전송시간이 짧다

그러나 Packet Switching이 Massage Switching 보다 무조건 좋은 것은 아니다. 데이터를 잘게 쪼갤 수록 header의 수도 늘어다 비효율적인 구간이 발생할 수 있음

3. Routing Algorithms

Router들이 스스로 계산, 각각의 node는 인접한 node의 코스트를 알고 있음. 이를 바탕으로 최적의 경로를 판단함

- Link State routing: Dijkstra’s Algorithm을 기반한 algorithm, 각각의 node가 이웃한 노드와의 정보를 인식 및 교환, 최종적으로 모든 node가 같은 topology를 만들 수 있음

Dijkstra’s Algorithm: 교통망 같은 곳에서 나타날 수 있는 그래프에서 꼭짓점 간의 최단 routing path를 찾는 algorithm

- Distance vector routing: Bellman- Ford Algorithm을 활용한 algorithm, 거리를 기반으로 데이터 패킷에 대한 최적의 경로를 결정

Bellman- Ford Algorithm: Dijkstra’s Algorithm과 달리 이웃한 node에 대한 최단 routing path를 찾는 algorithm

<IP>

1. IP addresses

Host 부분과 Network 부분으로 나눠져 있음, 다섯가지 class로 구분

Net ID: 기관전용

Host Id : 31(전체) - Net ID

class A: 0, Net ID(7), Host ID(24), Range(0.0.0.0-127.255.255.255)

class B: 1, 0, Net ID(14), Host ID(16), Range(128.0.0.0-191.255.255.255)

class C: 1, 1, 0, Net ID(21), Host ID(8), Range(192.0.0.0-223.255.255.255)

class D: Multicast Address (우리는 잘 사용하지 않는다)

class E: Reserved for future use (우리는 잘 사용하지 않는다)

*Range: 32bit를 8bit씩 잘라서 10진수로 표현한 숫자

*n비트는 2^n의 수를 할당

- Subnet Addressing: Host ID를 효율적으로 분배하기 위해 고안된 방법( class A와 class B에는 너무 많은 host가 존재)

Subnet mask: 한 조직 및 기관에서 사용하는 Host ID를 몇 bit로 쪼갰는지 표현하는 기법

*1=Net ID, subnet ID, 0=Host ID

ex) Net ID(16bits)/subnet ID(8bits)/Host ID(8bits)

=>1111111111111111/11111111/00000000

- IP address의 문제: 인터넷의 폭발적인 성장과 이로 인한 IP address의 고갈

장기적 해결방안: IETF의 IPng(IPv6)

단기적 해결방안: CIDR=기존 IP address 뒤에 “/”를 사용하여 host part를 알려주는 방식으로 IP address 를 할당하는 방식

- Host가 IP address를 얻는 방법

매뉴얼을 통한 할당

DHCP(Dynamic Host Configuration Protocol) => 임시 IP를 할당 받아서 쓰는 방식으로 스마트폰에서 많이 쓰임

- NAT(Network Address Translation): IP주소 부족의 해결 방법 중 하나로써 공적으로 할당받은 IP를 가지고 내부기관에서 할당해서 Host를 사용하는 방식

2. IP(Internet Protocol)

IP는 다양한 protocol로 구성됨 (Application layer, Transport layer, Network layer, Data Link layer)

6장

<Transport layer protocols>

Sender가 보낸 패킷이 Reciever에게 잘 전달됐는지 확인 두 가지 protocol이 존재함

- User Datagram Protocol(UDP): 정확도, ack, 재전송 불필요

- Transmission Control Protocol(TCP): 속도보단 정확하고 중요한 트래픽을 전송할 때 사용

Congestion control: Router에 트래픽 발생 시 Packet이 넘치며 buffer 발생=>packet 유실=>Congestion 발생, timeout과 retransmission으로 해결하는 방식

slow retransmission: window사이즈가 ssthresh값 이상일 시 선형으로 증가하다 timeout에 의해 act이 도착하지 못할 경우 window사이즈는 1부터 다시 시작하고 cwnd 값 반의 ssthresh값을 가지고 이를 반복함

3 Dupack 이후에는 window 사이즈가 반으로 줄어든다

End-to-end Flow control: Flow control과 상당히 유사한 방식

TCP Flow control: Sender가 Receiver보다 성능이 월등히 우수할 경우 데이터 전송 시 buffer가 넘치게 되며 이에 따라 buffer가 넘치지 않도록 조절하는 방식

Stop-and-wait flow control: Sender가 packet하나를 전송 후 Receiver가 ack를 받게되면 다음 packet을 하나씩 전송하는 방식, 오래 걸리기 때문에 비효율적

Sliding window flow control: 여러 packet을 보내고 추가로 올 때마다 window size를 밀어 하나씩 더 보내는 방식

Error control: Error가 일어났는지에 대한 여부로 대응하는 방식

ARQ(Automatic Repeat reQuest): Stop-and-wait flow control와 유사하나 error로 인해 다음 packet이나 act를 받지 못할 경우 타이머를 설정하여 재 전송을 실시

Classification

# data[].attributes.body
Chap 5

Network layer & IP

Network layer services
: 데이터를 안전하게 리시버까지 보내주는 역할

Network layer 의 두가지 중요한 기능
- forwarding : header value 에 맞는 output link로 전달하는 행위
- routing : header value에 대응하는 output link 결정

Communication networks
- circuit- switched networks : 유선전화에서 쓰는 방식, 1G- 2G
- pocket-switched networks : 컴류터 통신망에 쓰는 방식, 3G

Circuit switching
: 연결위주의 통신방식
- 세가지 단계
①circuit establishment : circuit(회선) 만들기
②data transfer : ex) 통화
③circuit termination : circuit 끊기
- 장점
: real time으로 오랜 시간 통화에 좋다. Delay가 없다.
- 단점
: ‘세가지 단계’ 로 인한 채널 낭비가 존재한다.

Message switching
: 통신경로가 미리 설정되어있지 않다.
: message 가 길어지면 오래걸린다. 길면 버퍼의 용량이 커야한다.

Pocket switching
: message 가 커서 쪼개는 것
: 시간이 단축된다.
: 무조건 잘게 쪼갠다고 시간이 길어지는 것은 아니다. header 때문. Header 크기와 data의 크기가 비슷해질수록 시간단축효과가 떨어진다.

Routing algorithms
: routing table 을 만드는 알고리즘
: router 각자가 계산해서 table을 만든다.

Hierarchical routing
: 넓은 네트워크를 몇개의 네트워크 레벨로 크기를 분할하여 경로를 간소화하고 계층화하는 것.

IP(Internet Protocol)

IP
: IP주소는 net ID, host ID 두가지가 있다.
: 크게 5가지 클래스로 구분된다. (Class A ~ Class E) 그 중 B를 가장 많이 선호.

Subnet Addressing
: host ID를 세부 네트워크로 subnet ID와 host ID로 쪼개서 사용하는 것.
: 몇개dml subnet으로 나눴는지 알기위해 사용하는 것 : subnet ID

IP주소 부족 문제의 해결책
: CIDR(Classless Inter-Domain Routing)
: NAT(Network Address Translation)

Transport layer

Transport protocols
- UDP
- TCP

UDP(User Datagram Protocol)
- 인터넷에서 사용되는 프로토콜 중 가장 간단
- ‘best effort’ service 전송이 잘 되면 좋지만 안 되어도 괜찮다.
- connectionless : UDP sender 와 recevier 사이에 handshaking 없음
- 멀티미디어 스트리밍에 많이 쓰인다.

TCP(Transmission Control Protocol)
: 에러가 있으면 안 되고 정확해야한다.
- 대표적인 control 3가지
① Congestion control
② End-to-end Flow control : sender 와 receiver 사이에 보내는 속도 조절을 위해 사용
③ error control

TCP Flow control의 over flow를 방지하는 방법
- stop-and-wait flow control : segment 하나를 주고 ack를 받고 하는 방식, 효율이 떨어진다.
- sliding-window flow control : pipelining를 이용하여 해결

Error control
- stop-and-wait ARQ
- Go-Back_N ARQ

stop-and-wait ARQ
- lost data packet : ACK가 안 오면 올 때 까지 기다린다. 이 문제를 해결하기위해 time out을 설정한다. 설정된 시간 후 같은 데이터 재전송
- Lost ACK timeout : 같은 데이터를 두번 받았을 경우, 각 데이터의 헤더에 sequence number을 이용한다. Receiver 가 같은 시퀀스 번호를 발견했을 경우, 그 데이터는 폐기된다.

Go-Back_N ARQ
- Error-free operation
- corrupted data packet
- corrupted ACKs : 첫번째 두번째 데이터를 받지 못해도 time out 안에 세번째 데이터를 받으면 그냥 계속 진행

# data[].attributes.body
5장 Network Layer & IP

Network Layer : 정보를 전달하는 데 중요한 역할
=> 데이터를 보낼 때 쓰는 주소를 IP adress 라고 한다.

Routing => 어디로 데이터를 보낼지 주소를 보고 확인하는 행위
Forwarding => Routing 후 데이터를 보내는 행위

Communication networks

Circuit Switched Networks
1G, 2G에서 사용하던 방식
미리 회선을 예약하고 전달한 뒤 전달이 끝나면 회선을 취소하는 방식
장점:  circuit을 예약하기 때문에 오랜 시간 연결이 가능함
단점:  예약을 하는 과정에서의 낭비가 있음

Packet Switched Networks
3G이후부터 사용하는 방식
즉각적으로 데이터를 보냄
순서를 상황에 맞게 바꿈 (이 과정에서 Router 필요함)
데이터를 쪼개서 보냄

Routing Algorithm
Router가 데이터를 보내는 곳을 선택하는 데에 사용되는 기술

1. Link state routing
각각의 노드가 인접하는 노드들에게 데이터를 전송하는 데에 필요한 cost가 얼마인지 서로 공유하여 각 노드가 모든 cost를 알고 있는 상태에서 전송을 하는 방식

이 후 정해진 노드로 갈 수 있는 가장 작은 cost를 알고리즘으로 계산 (꼭 알아두기)

질문) Class를 A,B,C종류로 나눌 때, A는 Net/Host의 비율을 7/24, B는 14/16, C는 21/8이라는 정해진 비율로만 나누는 이유는?
(C는 Host가 너무 적어 비효율적이지만 Net을 많이 쓰는 경우 B보다 더 많은 Net이 필요한 경우가 있을 수 있음)

NAT (Network Address Transtation)
Router를 이용해서 여러개의 컴퓨터에게 신호를 보내는 방식

6장
Transfort Layer
sender(S)가 보낸 것이 목적지에 잘 도착했는지 여부를 파악하는 것
종류:UDP, TCP

1. UDP(User Datagram Protocol)
중요하지 않은 정보를 보낼 때 사용
중간에 데이터 손실이 있을 수 있음
속도가 빠름
ex) 스포츠 중계 등

2.TCP(Transmission Control Protocol)
정확도가 높고 중요한 정보를 전송하는 데에 사용 ex)은행정보

정확하고 데이터 손실을 줄이기 위해 여러 control이 사용되어짐

1. congestion control
2. End-to-end Flow control
3. Error control
이 세가지는 매우 중요하기 때문에 꼭 기억하기

End-to-end Flow control
sender(S) 와 reicever(R) 사이의 속도 차이가 클 때, 특히 S의 속도가 R의 속도보다 빠를 때, S의 속도를 낮추는 방식
1. Stop and Wait Flow Control
하나 보내고 ACK 확인 후 다시 보내는 방식
속도가 느려지고 비효율적임

2. PiPelining increases utillization
여러개씩 보내고 ACK를 받을 때마다 다시 하나씩 전송하는 방식
위의 방식보다 배로 빨라짐

Error control
1. Error Free Operator
하나하나 보내서 오류를 없앰
2. Lost Data Packet
전달이 실패하여 ACK가 오지 않으면 일정 시간을 확인 후 다시 전송을 하는 방식
3. Lost ACK Timeout
ACK의 전송이 실패하여 R에게 다시 데이터를 보내면 R이 데이터가 2개임을 확인하고 한 개의 데이터를 지운 뒤 ACK를 보내어 전송을 확인하는 방식
4.Go-Back-N ARQ
slide window를 사용하는 방식
여러개의 데이터를 전송한 뒤 ACK의 도착을 확인하면서 보내다가 ACK의 전송이나 패키지의 전송에서 오류가 발생하면 오류가 발생한 곳부터 다시 전송을 하는 방식

Congestion Control
전송시 많은 데이터가 전송되어 Router가 막히는 문제가 발생할 때 이를 해결하는 문제

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

Network Layer Services

미국으로 편지를 보낼 때 우체국 - 미국 - 미국 우체국

send측에서 보낸 데이터를 receiver측에서 안전하게 전달하게 만드는 역할을 하는 것.

Network protocol인 IP가 주로 하는 역할.

컴퓨터에서는 패킷이라는 데이터를 보낼때 마다 header에 주소(ip)를 써서 보냄

Network Layer Function

Forwarding 입력층에서 받음, 출력층으로 보냄

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

Circuit-switching(옛날 전화 방식)

-전화선을 미리 예약함

-circuit(회선)을 미리 예약을 해서 예약이 완성이 되면 그때부터 통화가 시작됨.

통화가 끝나면 끝났다는 메시지를 보내서 회선을 끊음.

3가지 과정

circuit establishment

Data transfer

Circuit termination

장 : circuit이 예약이 되어서 계속 전화할 때 좋음. delay도 없음

단 : 채널의 낭비가 일어남

Message Switching

층을 나누는게 없음.

메세지가 길어지면 시간이 오래 걸림

메세지가 크면 버퍼의 사이즈가 커야 함.

packet switching

-message switching의 일부

-packet을 보낼 때 미리 connection 없이 한데이터를 packet단위로 쪼개서 보냄.

-경로가 밀리게 되면 router가 동일한 길로 안내를 해주지 않고 다른 경로를 알려줌→ receiver측에 도착하는 순서가 달라질 수 있음. 순서를 다르게 받아도 순서를 재정비해서 보내기 때문에 괜찮.

Routing algorithm

router가 routing table 을 잘 만들어두면 ,header만 따라가도 잘 도착함.

2가지

Link State routing

Distance vector routing

1)Link State routing

각각의 노드가 교환을 하게 되면, 모든 노드가 이웃의 cost도 알고 있고 동일한 topology그림을 만들 수 있음.

2)Distance vector routing

이웃만 데이터를 주고 받음.

-routing table을 모두 만들면 현실적으로 너무 오래걸림.

각각의 AS에서 대표 router를 선정하고 대표 router들 끼리만 routing table을 주고 받음.

IP

-크게 5가지 class로 구분(A-C를 주로 사용)

-각각의 address는 net ID와 hostID로 구분됨.

Subnet Addressing

-host ID를 효율적으로 사용하기 위해서

CIDR

-기존의class를 나누는 방식이 아닌 (class2와 class3사이의 host address가 없음)

/숫자(network part)를 사용하여 class2와 class3사이의 host address를 만듦

2가지 방식

Manual configuration

DHCP

chap6.

Transport Layer protocol

-sender가 보낸것이 destination에 잘 도착했는지, 에러나 delay는 없는지를 살피는 곳.

UDP : 간단, 에러가 있어도 괜찮 ex)축구경기

TCP : 정확 , 재전송 ex)은행전송

1.congestion control(sender가 데이터를 보내는데 전송이 안됨)

2.end-to-end flow control(보내고 받는 속도 조절)

1)stop-and-wait flow control : 효율이 떨어짐.

2)sliding window flow control : window size 만큼 보내고 1개씩 더보냄.

3.error control

1)stop-and-wait ARQ

(1)error-free operation

(2)lost data packet

(3)lost ACK timeout

2)go-back-n-ARQ

-sliding window 사용

(1)Error-free operation

(2)Corrupted data packet

데이터를 보내고 ack를 받지못하고 timeout이 되면 다시 데이터를 보냄

(3)Corruped ACKs

1, 2 ack를 못 받았지만 3번 ack를 받으면 1,2번도 당연히 받은것으로 보고 3번 ack가 사라진 것으로 판단. 이후 계속 진행

# data[].attributes.body
5장

* network layer : 수신자의 주소를 보고 forwarding을 하는데 그 과정에서 routing(어디로 보낼지 주소를 보고 판단하는 행위)

forwarding : 데이터를 받아서 출력 측으로 보내는 역할

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

*circuit switching

옛날 전화 방식, circuit을 만들고 circuit을 예약하고 circuit을 끊는 행위가 필요함.

장점 : 리얼 타임으로 오랜 시간 통화할 때 좋음 딜레이가 없음

단점 : 채널 낭비가 있음

패켓 스위칭 : 하나의 데이터가 여러개로 쪼개서 나감. 밀리면 순서가 바뀜. 시간 단축(pipe line)

라우팅 알고리즘 : 라우터들이 스스로 계산하여 최적의 경로를 만드는 것

link state routing algorithm : 선택되고 나면 라우팅 테이블을 만듦. 이웃한 노드와 cost 노드를 전체에게 알려줌.

distance vector algorithm : 자기 이웃하고만 데이터를 주고 받음. 이웃한 노드의 라우팅 테이블을 이용해 최적 경로를 만듦.

5-2장

IP(Internet Protocol) : 라우팅 알고리즘을 실제로 구현하는 프로토콜

CIDR : 기존의 class 방식으로 나누는 것이 아니라 ‘/’와 숫자를 더해서 5bit가 host part임을 나타냄.

IP address를 어떻게 할당하느냐?

Manual configuration : 자신이 메뉴얼로 할당하는 방식

DHCP : 정규가 아닌 임시 ip를 사용하고 반납하는 방식

NAT : 공적 ip 이외에 사적 ip를 내부에 따로 할당하여 사용.

IP 다양한 프로토콜로 만들어짐

Time to Live : 라우터를 거칠때마다 몇번의 홉을 걸쳐 destination 까지 갔는지를 측정하기 위해 사용.

6장

Transport layer protocols : 송수신시 에러, 딜레이 등 여러 전달 상황을 확인.

UDP: 간단한 트래픽을 전송할 때 사용

TCP: 실수가 없어야 하는 트래픽을 전송할 때 사용

stop and wait flow control : 보낸다음 스탑하고 ack가 오길 기다림. 효율성 떨어짐.

Sliding window flow contrel : 여러개를 보내고 올때마다 하나씩 더 보내는 방식.

Error control

congestion control : 네트워크 트래픽이 몰리면 congestion이 일어난다.

모든 로드가 트레픽이 몰려서 버퍼가 넘치면 필요한 방법이다.

# data[].attributes.body
Chp.5-1 -----

# Network Layer Services

packet 에 ip 주소를 써서 보낸다. 그럼 라우터를 거쳐서 기지국에 가게 되고 다시 라우터를 거쳐서 해당 ip 주소로 데이터가 보내진다.

- Network Layer

forwarding >> 라우터에서 입력받은 패킷을 보내야 할 라우터 방향으로 패킷을 출력시키는 것

Routing >> 주소를 보고 어느 곳으로 데이터를 보내야하는지 판단하는 행위

데이터 >> 라우터 >> 포워딩 >> 라우팅

- Taxonomy of Networks ( Network core)

Cummunication networks

Circuit- switched networks >> 전화망 1,2, 세대

먼저 회선을 예약을 하고 끝나면 취소하는 방식

장점 : 리얼타임으로 오랜 시간으로 데이터 전송이 좋다 딜레이도 적다

단점 : 채널의 낭비가 있다.

Message Switching

바로 메시지를 보내는 방식

Packet-switched networks >> 컴퓨터 통신망 3세대

패킷을 보낼때 예약없이 패킷단위로 쪼개서 보내는 방식

>> 딜레이 발생시 딜레이가 발생한 라우터가 아닌 따로 방향을 모색하여 보낸다.

>> 쪼개진 패킷이 도착하는 시간은 순서에 맞지 않을 수 있다

>> 순서를 재정비하기때문에 (상관x)

메시지가 길어지면 라우터의 버퍼가 커져야 한다

>> 때문에 패킷을 쪼개서 보낸다. ( 파이프라이)

>> 시간이 절약된다.

쪼개는 방법 >> 잘게 짜른다고 좋은 것은 아니다.

CF : Effect of packet size on tracsmission time

보내야 하는 데이터에 비해 헤더가 많아지면서 문제 발생

- Routing Algorithms

라우팅 테이블을 만드는 알고리즘

라우터가 각자 스스로 계산한다. (Destination Routing)

거리와 비용의 관계

종류

1.Link State routingChp.5-1 -----

1-1. 라우터는 이웃한 노드와 비용을 알고 있으니 라우터끼리 이 정보를 교환한다.

1-2. 모든 노드가 연결 관계(Topology)를 알게 된다.

1-3. Dijkstra’s Algorithm >> 각 경로의 비용을 계산하여 비용이 더 낮은 방향으로 간다.

2.Distance vector routing

2-1. 이웃 라우터끼리 정보를 주고 받는데 각자가 가지고 있는 라우팅 테이블을 두고 계산을 한다.

2-2. Bellman-Ford Algorithm

Chp.5-2 -----

# ip address (net ID + host ID)

클래스 A,B,C,D,E 가 존재

최상위 비트는 0으로 시작

클래스 B 를 가장 많이 사용

- Subnet Addressing

ip 를 효율적으로 분배하기 위해 고안됨

Host ID = subnet ID + host ID

- Subnet mask

로컬 네트워크 내부에서 접속한 호스트의 ip 대역을 외부 네트워크와 명학하게 구분할 수 있는 수단

- NAT

외부 ip 를 내부 ip로 바꾸므로써 ip 고갈 문제를 해결하는 방법

Chp.6 -----

Transport Layer

# Transport Layer

UDP (User Datagram Prptocol)

일방적인 통신 (신뢰성이 떨어진다)

ex) 인터넷 방송 , 채팅

TCP (Transmission Control Protocol)

신뢰할 수 있는 통신

ex) 은행간 송금

Flow control >> 오버 플로우 를 방지하는 방법

Stop-and-wait flow control >> 하나씩 보내는 방법

Sliding window flow control >> 여러개를 보내는 방법

- Error Control

1.Stop-and-wait ARQ

1-1.Error-free operation

하나를 주고 ack 를 받는 방식

1-2.Lost data packet

하나를 주고 ack 를 받고 두번째거를 보냈는데 ack 가 오지 않았다

이 경우 time out 을 주어 무한 대기를 해결한다.

1-3.Lost ACK timeout

ack 패킷이 사라진 경우 재전송을 요청

2.Go-Back-N ARQ

ex)

2-1.Error-free- operation

2-2.Corrupted data packet

에러 발생 1개가 빠짐 >>해당 ack를 버리고 타임아웃이 걸리면 다시 보낸다

2-3.Corrupted ACKs

ack 가 오지 않은 경우 time out 값에 따라서 다시 보내거나 아예 보내지 않는다.

# TCP Congestion Control

패킷이 과도하게 한 곳에 모이는 상태

유선 네트워크이기 때문에 애러때문에 발생하는 경우는 없다

중간에 라우터에 패킷이 넘칠때 발생

이를 해결하기 위해서 time out 을 건다

# data[].attributes.body
Ch5. Network Layer & IP
<Network Layer>
1. Forwarding & Routing
- Forwarding : 라우터가 입력층에서 출력층으로 데이터를 전달
- Routing : 어느 곳으로 보내줘야 할지 주소를 보고 판단하는 것

2. taxonomy of networks
- circuit-switched networks
: 유선전화망, 전화하고 싶은 전화선을 미리 예약하므로 안정적이지만 channel 낭비
- packet-switched networks
: 몇 개의 packet으로 나눠 보내는 것
: 시간 단축 가능하지만 많이 자른다고 무조건 좋은 것은 아님

3. ★Routing Algorithms
1) Link State Routing
- Dijkstra's Algorithm
: source에서부터 이웃한 라우터들끼리 cost를 계산
: 가장 짧은 경로를 선택하며  반복해서 routhing table을 제작
--> source로부터 모든 목적지까지의 최단 경로를 알 수 있음

2) Distance Vector Routing
-Bellman-Ford Algorithm
ex. J의 이웃한 노드는 A,I,H,K 이고
각 이웃한 노드에서 각 노드까지의 cost를 알고 있는 routing table을 활용하여 최단 경로를 알 수 있음

4. Hierarchical routing
: 대표 라우터를 선정하고 내부의 라우팅 테이블을 만든 후, 각 region에 갔을 때 각 region 내부의 routing table을 사용하는 방식

<IP(Internet Protocol)>
1. 32bit IP address (net ID, host ID)
1) class A 0 net ID(7) Host ID(24)
2) class B 10 net ID(14) Host ID(16) <- 주로 이용
3) class C 110 net ID(21) Host ID(8)

2. Subnet Addressing
: Net ID(16bit) Subnet ID(8bit) Host ID(8bit)
- Subnet Mask ex) 255.255.255.0
: Net ID랑 Subnet ID는 1로, host ID는 0으로 해서 서브넷과 host를 구별할 수 있음

3. IP address양 증가가 필요하다
1) 장기적으로는 IPv6
2) 단기적으로 CIDR
ex) 200.23.16.0/27 -> 앞에서 부터 27bit만큼 network part로 설정하여 class B와 class C 사이도 이용 가능함

4. IP address를 할당받는 방법
: DHCP - 임시 IP address를 할당받아 반납
-> NAT (Network Address Translation)
: 할당받은 공적인 IP address가 있고 기관 내부에서는 사적으로 각 host마다 IP address를 사용함
: 내부에서는 사설 IP를 사용하지만 외부로 전달할 때는 공적인 IP address를 사용 (NAT translation table)

5. IP layering
1) Application Layer
2) Transport Layer (TCP, UDP)
3) Network Layer (IP)
4) Data Link Layer

Ch6. Transport Layer (TCP, UDP)
1. UDP
: 좀 잃어버려도 상관 없는 경우 ex. 실시간 운동 경기
"전송이 잘되면 좋지만 안되면 어쩔 수 없다."

2. TCP
: error없이 깐깐하게 정확해야 함 ex. 은행 송금
1) Congestion Control
- Slow Start
: window size를 1부터 시작하며 2의 n승으로 증가하다가 ssthreshold를 넘어서부터 linear하게 증가
: 만약 ACK가 도착하지 않아 timeout이 발생한다면, window size는 다시 1부터 시작되며 ssthreshold는 마지막 timeout이 발생할 때의 window size/2
-Fast Retransmit
: slow start와 마찬가지로 시작하다가 3 dupack을 받게 된다면 ssthreshold(마지막 window size/2) 에서 다시 시작
cf) dupack : Go-Back-ARQ에서 receiver에 3번 packet이 도착하지 않아서 3번 packet을 기다린다는 메세지를 3번 전달했을 때

2) End-to-end Flow Control
: sender가 receiver의 범퍼가 넘치지 않도록 속도를 조절
: receiver에서 ACK를 보낼 때 사용 가능한 buffer size를 전달
- Stop-and-wait flow control : 보낸 후 ACK가 올 때까지 stop
cf) pipelining : 여러 packet을 나눠서 전달하는 것
- Sliding-window flow control : window size만큼 packet을 전달, ACK가 도착할 때마다 window size가 한 칸씩 이동
cf) window size : receiver가 소화 가능한 buffer 크기

3) Error Control
- Stop-and-Wait ARQ(Automatic Repeat reQuest)
: ACK가 올 때까지 sender가 기다리다가 time out되면 재전송
: Receiver가 packet을 받았지만 ACK가 누락된 경우에도 time out 이후에 sender에서 packet 재전송
-Go-Back-N ARQ
: sender에서 순서대로 packet을 보내다가 receiver가 packet을 받지 못한다면 sender에 ACK를 보내지 않음
: 따라서 sender에서는 ACK가 도착하지 않아 일정 시간 후 timeout 됨
: sender는 timeout이후 ACK가 도착하지 않은 packet에서 부터 retransmit
: receiver는 누락된 packet부터 timeout 되기 전까지 받았던 packet들을 버림
but if
:0번 ACK가 도착한 이후 3번 ACK가 도착했다면 Receiver가 1,2번 packet을 받지 못했다면 discard 했을 것이므로 1,2번 packet을 받았으나 ACK가 누락된 것으로 간주
: 따라서 sender는 순차적으로 계속 packet을 보낼 수 있음 (cumulative ACK)
but
: 3번 ACK를 받기 전 1번 ACK를 받지 않아 timeout에 걸린다면 다시 1번 packet부터 retransmit

# data[].attributes.body
Chap 5 Network layer & IP

Network layer : sender가 보낸 데이터를 receiver측에 안전하게 전달하는 역할-> ip가 주로 하는 역할이기도 함

- 데이터를 보낼 때마다 헤더에 주소를 써서 보냄

- 공통의 주소체계를 만들어 놓은 IP address로 받는 호스트, 보내는 호스트 주소를 써서 보냄

- 주소를 써서 보내면 라우터가 address를 보고 안전하게 목적지로 경로설정

network layer function

데이터를 받아서 forwarding - 라우터가 입력층에서 받아서 출력층으로 보내는 역할을 함, 어디로 보낼지 결정(주소를 보고)

routing - 주소를 보고 어느 곳으로 보내야 할지 결정하는 행위

network 방식은 크게 두 분류로 나뉨

1) Circuit-switched networks

2) Packet-switched networks

두 개는 무척 다름

1세대는 Circuit-switched, 3G부터는 Packet-switched networks 방식으로 바뀜

Circuit-switching (옛날 전화 방식)

- Circuit이라고 불리는 회선을 예약, 써킷을 여는 행위

- 써킷을 만듦 – 통화 - 써킷을 끊음 (써킷을 만들고 끊는 행위는 시간이 짧지만 overhead 될 수 있음, data가 길 때는 이 정도는 overhead가 아님 )

- 장점 : 한 번 써킷이 예약이 되면 real-time으로 오랜시간을 통화할 때 좋음

- 단점 : 채널의 낭비가 존재

Message switching

- 써킷을 예약하거나 끊는 것 없이 바로 메시지를 보내는 형태 → 더 좋을 수 있음

- 메시지가 크면 오래걸림, 큰 버퍼가 필요

→ 중간중간 잘라서 패킷으로 나누어 전송; packet switching - 라우터는 다른 경로도 추천해 줄 수 있어 메시지가 도착하는 순서가 달라질 수 있음, 그러나 순서를 알고 있어서 문제가 안됨

→ 파이프라인으로 시간 단축 효과

* 패킷을 작게 자르면 좋을까?

→ 쪼갤 때 시간이 줄어들 수 있음(파이프라이닝을 통해 효과), 너무 작게 자르면 데이터의 양에 비해 헤더가 커 시간이 더 길어짐

→ 라우팅 테이블은 어떻게 만들어졌을까? 라우터가 라우팅테이블을 잘 만들어 놓으면 헤더에 들어가있는 수를 보고 수신지까지 잘 전달

Routing Algorithms

- central node가 만들어서 다 전해주는게 아니라 각 라우터들이 스스로 계산

- cost가 가장 적은 경로 찾기

1. Link State routing – Dijkstra’s algorithm(Shortest past)

→ 선택되고 나면 라우팅 테이블을 만듦, N1이 브로드캐스팅 (이웃한 노드와 cost노드를 전체에게 알려줌)

2. Distance vector routing – Bellman-Ford algorithm

- 자기 이웃하고만 데이터를 주고 받음

- 나머지 모든 노드로 가는 라우팅테이블을 만들겠다 하면 이웃한 노드에게서 라우팅테이블을 받음, 즉 이웃한 노드의 라우팅테이블을 이용해 최적 경로를 만듦

Hierarchical

많은 라우터들을 똑같이 하기에는 힘듦 → 시스템에서 대표라우터를 선정하고 대표라우터끼리 라우팅테이블을 만들고 내부에서는 내부의 라우팅테이블을 만들자

IP (Internet Protocol)

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

IP address

- 현재 버전 4를 사용, IP address를 가지고 어떤 단말인지 알 수 있음

- 호스트 부분과 네트워크 부분으로 나뉘어져 있음

- 다섯가지 클래스

1) class A

> 0.0.0.0 - 127.255.255.255

> 7비트는 net ID, 24비트는 host ID로 사용2^24만큼 할당 가능

2) class B

> 10으로 시작 net ID 14비트, host ID 16비트

> 사람들이 가장많이 구매하여 사용

3) class C

> 110으로 시작 net ID 21비트, host ID 8비트

4) class D

5) class E

host ID를 어떻게 효율적으로 쓸지 고민 → Subnet 개념; 쪼개서 씀

한 조직에서 몇 비트로 쪼갰는지 알 수 있는 방법 - Subnet mask

너무 많은 호스트, IP address 필요 → 주소 고갈 문제 해결 방법 고민

IETF 솔루션;

1) longterm solution – IPv6

2) short term solution – CIDR

: (중간선택지가 없는) 기존의 클래스별로 만드는 방식이 아니라 ‘ / ’를 붙여서 network를 알려주어 IP address를 할당하는 방식

network ID 부분이 가변적으로 변하게 되면 다양한 길이를 다이내믹하게 만들 수 있음

IP address도 어떻게 할당하느냐

- Manual configuration

- DHCP : 정규 IP address가 아니라 임시 IP address를 할당받아서 반납하는 방식

DHCP방식으로 가장 많이 쓰는 방식 – NAT

- IP address 하나를 가지고 엄청나게 많은 호스트를 연결할 수 있는 방식

- 내부 기관에서 라우터가 사설 IP라고 하여 내 마음대로 IP를 할당하여 쓰는 방식

- NAT translation table에서 마킹 → sender를 공적인 IP로 바꿈

- 데이터 도착시에는 그 주소로 보낸 호스트를 찾아서 주소를 변경하여 수신

IP는 다양한 프로토콜로 만들어짐

network layer 중

1) ICMP : control message - 망을 관리하는 용도로 쓰임, 제어용일 뿐 전송에 쓰이지는 않음

2) IGMP : group message - 멀티캐스트하기 위한 프로토콜

IP packet의 format

- 20바이트의 헤더

- 뒤에 데이터가 실림

- TTL(time to live) : 라우터를 거칠때마다 하나씩 줄어드는, 몇 번의 홉을 거쳐서 목적지까지 갔는지

Chap 6 Transport layer

Transport layer protocols

- TCP, UDP 두개의 프로토콜

User Datagram Protocol (UDP)

- 데이터가 좀 없어져도 문제가 안되는 경우에 쓰는 프로토콜

- 바로 보내는 프로토콜

ex. 스포츠중계방송 : 오다가 목소리가 안들리거나 끊겨도 상관없음

→ format이 간단, 헤더사이즈가 8byte

Transmission Control Protocol (TCP)

- 속도보다는 아주 중요한 데이터를 전송해야 할 경우에 쓰는 프로토콜, 아주 깐깐

- Reliablity 제공

- 없어진 패킷 재전송

ex. 은행 송금

- error control 세가지

1) Congestion control

: sender가 데이터를 보냈는데 마치 traffic congestion처럼 밀려서 제때 전송이 안됐을 때 어떻게 할 것인지에 대해

2) End-to-end Flow Control

: 보내는 속도와 받는 속도의 조절을 위해 사용

3) Error Control

: 패킷이 중간에 노이즈가 꼈을 때 문제를 다룸

TCP Flow Control

- sender가 슈퍼컴퓨터, receiver는 성능이 좋지 않은 컴퓨터일 때 receiver가 처리할 능력이 안되면 버퍼가 금방 넘치게 됨 → sendor가 보내는 속도를 조절 → ack를 통해 속도 파악

- Flow Control의 overflow 방지 기법 2가지

1) Srop-and-wait flow control : 하나 보낸 다음에 ack를 기다림 → 오래 기다려서 효율이 적음

2) Sliding window flow control

→ Pipelining으로 해결 : 세 개를 보내고 ack가 오면 456번째 보냄 → 효율 세 배 증가

→ window size가 오른쪽으로 움직인다 하여 sliding window

- 윈도우 사이즈와 ack 보낼 때마다 보낸 윈도우 사이즈 중 더 작은 값으로 윈도우 사이즈를 정해서 보냄

Error Control

1) Stop-and-Wait ARQ

- sender는 일정시간 동안 ack를 기다림 – 일정 Timeout이 되면 retransmission

- timeout은 ack가 올 때까지 충분히 커야한다.

- Ack packet이 사라진 경우도 timeout이 지나면 retransmission

2) Go-Back-end

- sliding window를 썼을 때 방식

- 중간에 packet 하나가 안오면 뒤에 다 안받음 → 일정 timeout후에 다시 못받은 패킷부터 전송 → ack가 사라져도 다음 ack를 받았으면 그 전 패킷을 다 잘 받았음을 알 수 있음(문제가 없구나)

TCP Congestion Control

- traffic이 몰려서 라우터가 넘치면 packet을 잃어버림

- slow start : 현재값의 반을 threshhold값으로 두고 2의 배수로 증가하다가 threshhold에 도달하면 선형적으로 증가 → error가 나면 다시 1로 가서 다시 증가

- fast retransmit : timeout 되기 전에 3dupack(못받은 패킷에 대한 ack를 계속 보냄 )이 나오면 1로 떨어지는 것이 아니라 현재값의 절반으로 줄어서 다시 선형적으로 증가

# data[].attributes.body
1. 배운점

<Network Layer>

- 역할 : sender가 보낸 데이터를 receiver 측에 안전하게 전달(Forwarding과 Routing)

- packet의 헤더에 IP 주소(보내는 호스트, 받는 호스트) 정보 포함 → 라우터가 읽고 전달

- Forwarding : 입력 측에서 받아서 출력 측으로 전달(어디로? : Routing)

- Routing : 데이터를 어디로 보낼지 결정

<네트워크 분류>

- Circuit-switched networks : (1, 2세대) 통신하고자 하는 전화선을 미리 예약 → 예약이 완성되면 전화 시작 → 통신이 완료되면 예약된 회선을 취소(termination)

- Circuit-switched networks의 장점 : 장기간 통신에 용이

- Circuit-switched networks의 단점 : 채널 낭비

- Message Switching : 회선 예약 없이 메시지 전송(queueing delay가 심함, 버퍼의 크기가 거대함)

- Packet Switching : 메시지를 packet으로 나누어 전송 (Pipelining)

- Packet Switching에서는 정해진 경로가 밀리면 라우터에서 다른 경로를 추천하여 전송 → 이러한 이유로 순서가 뒤바뀐 상태로 전달되더라도 receiver 측에서 순서 재배열. 단, 데이터의 크기와 헤더 사이즈가 동일할 정도로 message를 세분화할 경우 오버헤드 발생

<Routing Algorithms>

- 각 노드는 이웃 노드까지 걸리는 cost만 알고 있음

- 각 노드들은 라우팅 테이블을 스스로 만들며 라우팅 테이블을 잘 만들어야 함

- 두가지 라우팅 알고리즘 (Link State routing, Distance vector routing)

<Link State routing algorithm-Dijkstra’s Algorithm>

- 각 노드들이 가지고 있는 이웃한 노드 종류와 이웃 노드까지 걸리는 cost 정보를 공유

- 결과적으로 모든 노드들이 똑같은 topology 그림을 만들 수 있음

- 이 topology 그림으로 shortest path routing 알고리즘을 돌림

ex) 시작 노드(A)에서 다른 모든 노드(B,C,D,E,F)들까지 걸리는 cost를 조사 (경유X)

→ 그 중 가장 적은 cost의 노드를 집합 S에 추가(S = {A,D})

→ 직전에 가장 적은 cost를 가졌던 경로 (A-D)를 거쳐 B,C,E,F까지 걸리는 cost와 기존의 A에서 직접 걸렸던 cost를 조사하여 작은 cost 값을 경로에서의 직전 노드와 함께 기입

→ 현재 테이블에 있는 값 중 가장 적은 cost의 노드를 집합 S에 추가(S={A,D,E}) (가장 적은 cost를 가진 노드가 2개 이상일 경우 하나만 선택)

→ 직전에 가장 적은 cost를 가졌던 경로 (A-D-E)를 거쳐 B,C,F까지 걸리는 cost와 기존 cost를 조사하여 작은 cost 값을 경로에서의 직전 노드와 함께 기입

현재 테이블에 있는 값 중 가장 적은 cost의 노드를 집합 S에 추가(S={A,D,E,B})

→ 직전에 가장 적은 cost를 가졌던 경로 (A-B)를 거쳐 C,F까지 걸리는 cost와 기존 cost를 조사하여 작은 cost 값을 경로에서의 직전 노드와 함께 기입

→ 모든 노드가 S에 추가될 때까지 반복

→ 라우팅 테이블(Destination, Next node, Cost)

<Distance vector routing-Bellman-Ford Algorithm>

- 이웃 노드에게만 정보를 공유함( 각 노드들은 이웃 노드들 종류와 임시 shortest path 정보(임시 라우팅 테이블) 소유 )

- 이웃 노드들의 정보를 이용하여 shortest path 정보 갱신

ex) 노드 A, I, H, K와 이웃한 노드 J

→ A, I, H, K를 거쳐 B까지 가는 cost를 계산할 수 있음 → 최소 cost를 계산하여 라우팅 테이블 갱

신

<Hierarchical routing>

- 라우터가 너무 많기 때문에 현실적으로는 autonomous 시스템(AS)을 구축하여 AS 간(inter-as routing)은 대표 라우터끼리 라우터 테이블을 만들고, 내부에서는 내부 라우터들끼리(intra-as routing) 라우터 테이블을 만들어서 사용

<IP>

- IP 주소는 net ID와 host ID 쌍

- class A(net ID(7)-Host ID(24)) : 2^7 기관을 구분할 수 있도록 하는 net ID와 2^24개의 기관 내 호스트를 구분할 수 있도록 하는 host ID

- class B(net ID(14)-Host ID(16))

- class C(net ID(21)-Host ID(8))

- Dotted Decimal Notation : 8비트(1바이트)씩 조개서 10진수로 표현하는 방식

<Subnet Addressing>

- 세부 네트워크로 쪼개서 (Subnet ID) 관리하는 방식

ex) class B의 Host ID(16) 건물의 한층은 같은 Subnet ID(8)를 사용, 한층 내 호스트는 나머지 8비트로 표현

- 141.223.0.0의 IP로 향하는 모든 트래픽은 대표 라우터로 향하고 해당 라우터는 141.223.0.0에 대한 모든 라우팅 테이블을 가지고 있음

<Subnet mask>

- net ID과 subnet ID의 서브넷 마스크 값은 1

- host ID는 0

<IP 주소 구성의 문제점>

- IP 주소의 부족 : 근본적인 해결책은 IPv6 사용

- 그러나 너무 오래 걸리므로 단기 해결책인 CIDR을 사용

<CIDR>

- 300개의 IP 주소가 필요하다고 할 때, 2^8의 호스트를 구분할 수 있는 class C는 부족하고 class B는 너무 크다. 따라서 class와 상관없이 사용할 수 있는 주소가 필요하다

-200.23.16.0/27에서 “27”은 네트워크 파트를 의미한다. Dotted Decimal Notation를 2진수로 다시 바꾼 11001000 00010111 00010000 00000000 중 앞에서부터 27비트는 네트워크 파트이며 뒤의 3비트가 호스트를 구분하는 주소이다.

<IP 주소를 할당받는 방식>

- 수동 설정

- DHCP(임시(동적) IP 주소 할당)

<NAT(Network Address Translation)>

- 1개의 공인 IP 주소를 통해 많은 사설 IP 주소를 호스트에 할당하는 방식

ex) 10.0.0.1(사설 IP 주소) 호스트가 128.119.40 에 datagram 전송

→ NAT 라우터에서 사설 IP 주소를 138.76.29.7(공인 IP 주소)로 바꿔줌

→ reply가 전송되어 오는 과정에서 NAT 라우터를 경유(목적지 주소는 138.76.29.7;공인 IP 주소)

→ NAT Router가 138.76.29.7를 10.0.0.1로 변환

<Network 계층의 프로토콜>

- IP : 신뢰성 보장 X. 신뢰성은 상위 계층 담당

- ICMP : 인터넷 제어 메시지 프로토콜, 에러 메시지 등 다른 중요 정보 교환

- IGMP : multicasting에 사용됨

<Data Link 계층의 프로토콜>

- ARP and ARP : 논리적인 IP 주소를 물리적인 MAC 주소로, 혹은 반대로 변환

<IP datagram header>

- Time to Live : 라우터를 거칠 때마다 -1. 몇 번의 hop을 거쳐 destination에 가는지를 표현

- 망끼리는 쓰는 패킷 사이즈가 다를 수 있다 →Fragmentation(Identification, Fragment Offset)

<Transport layer protocols>

- sender에서 receiver까지, 서로 다른 호스트 간 응용 프로세스 사이의 논리적인 통신 제공

- 2개의 프로토콜 : TCP, UDP

- UDP는 좀 잃어버려도 큰 문제가 없음 ex) 스포츠 중계 : 영상이 좀 깨져도 괜찮음. 정확도보다 속도

- TCP는 신뢰성 보장, 순서대로 전달, 속도보다 정확도가 특징 ex) 은행 송금

<UDP>

- “best effort” service

- handshaking 없이! 바로 전송

- header도 작음(8 바이트)

<TCP>

- Congestion control, end-to-end flow control, error control

- 세그먼트 헤더는 20바이

<TCP Flow control>

- 만일 sender의 속도가 빠르고 receiver의 속도가 느리다면? 버퍼가 넘쳐서 쓸데없는 전송이 됨

트- 따라서 sender가 보내는 속도를 조절해야 함 : TCP Flow control

- sender가 receiver에게 segment를 보내면 receiver를 ack을 보낸다. 이때 ack에 가능한 메모리 space 정보를 포함시키며 sender는 receiver의 사용 가능한 메모리 space 증감을 파악할 수 있다.

<TCP Flow control : Stop-and-wait flow control>

- 하나 보내고 멈춰서(stop) ack이 올 때까지 기다림(wait) : 비효율적

- pipelining : 3개를 동시에 보냄

<TCP Flow control : Sliding-window flow control>

- 여러개를 보내고 ack이 올 때마다 하나씩 더 보냄

- window 크기는 ack 없이 보낼 수 있는 데이터 양

- 수신자가 데이터를 저장 가능한 receiver’s advertised window와 congestion window 중 최소값

<Error Control>

- ARQ : 자동 반복 재전송, sender는 ack를 기다리다가 timeout이 넘어가면 재전송

<Stop-and-Wait ARQ>

-sender는 세그먼트 하나를 보내고 ack를 기다리다가 timeout이 넘어가면 재전송, timeout은 충분히 길어야 함

- 만일 ack이 유실될 경우 기존에 수신한 패킷은 버린다.

<Go-Back-N ARQ>

- sliding window 기반

- 오류가 발생한 패킷으로 돌아간다.

- (데이터 패킷 전송 오류) 2번 ack까지 수신받았을 경우(3번 패킷 통신에 문제) 4번, 5번 패킷을 받았더라도 버리고 3번부터 재전송한다.

- (ack 전송 오류) 1번의 timeout 내 0번 ack과 3번 ack이 도착했다면, 1,2번 역시 문제없이 전송되었다고 판단한다. 단, 1번의 timeout 내 아무것도 도착하지 않으면 1번부터 재전송

<TCP Congestion Control>

- 유선 통신을 가정(에러 없음), 에러(packet loss, timeout)가 발생했다면 트래픽이 몰려서 라우터 버퍼가 넘친 것이므로 트래픽을 줄인다.

<Congestion control by timeout – TCP Tahoe>

- 초기 congestion window 크기는 1 MSS(한 개의 세그먼트 전송), 이에 대한 ack을 받으면 congestion window 크기를 2배로 늘림timeout을 감지할 때까지)[slow start], timeout을 감지하면 congestion window 크기를 1로 재설정한 후 packet loss가 발생하였을 때의 cwnd/2를 slow start threshold(ssthresh)값으로 설정한다.

- 이후 slow start 방식으로 cwnd를 1mss에서 2배씩 증가시키다가 ssthresh값에 도달하면 cwnd를 1씩 천천히 증가시킨다.[Congestion Avoidance] timeout을 감지하면 congestion window 크기를 1로 재설정한 후 packet loss가 발생하였을 때의 cwnd/2를 slow start threshold(ssthresh)값으로 재설정한다.

<Congestion control by 3 duplicate Acks>

- 3번 패킷 loss → 4,5,6번 세 개의 패킷이 와도 3번 ack을 전송 ;세번 duplicate ACK(dupack)를 수신할 경우, 이는 앞의 패킷은 사라졌지만 뒤의 패킷은 잘 전송되었다고 판단하여 cwnd를 1이 아닌 현재의 절반으로 줄인다.[Fast retransmit]

# data[].attributes.body
[AIoT 5장]

[Network layer services]
packets 어디 주소로 보낼 지 concern
라우터가 데이터 받아서 수신자 주소 보고 어디로 보낼지 forwarding할 때 routing함

[Taxonomy of Networks]
1) circuit-switched Network(번호부르면 예약->완성 되면 통화transfer->끝나면 끝났다termination고 신호)//딜레이 없는게 장점이나 채널 낭비가 존재
2)packet-swithed networks(3세대부터~)// 중간중간 잘라서 packet으로 만들어 보냄 일단 보냄. 쪼개져서 보내기 때문에 경로에서 밀리게 되면 라우터가 다른길로 알려줌. 도착하면 재정비하기 때문에 순서는 상관없음 packet으로 자르는건 버퍼의 사이즈 limitation때문에 돌림노래처럼 보내는거 하지만 잘게 자른다고 다 좋은건 아니다(해더가 많아지기 때문 해더는 패킷 자를때마다 생기는거)

[Routhing Algorithm]//되게 중요
- 라우터들이 스스로 계산함(distribute routing)
- 각 라우터는 본인의 인접한 node까지의 cost만 알고 있음
- 이 때 최적의 경로를 찾는 알고리즘

(1) Link State Routing Algorithm//중요,,,,
- Dijkstra Algorithm 기반 // 가장 짧은경로부터 탐색  + 다른 경로와 비교
- 이웃한 노드 말고도 다른 곳에도 데이터 주는 상황
(2) Distance Routing Algorithm// 아주 중요 bellman- ford 알고리즘 사용
- 이웃하고만 주고 받는 상황
- 테이블 있으면 + 이웃까지 가는거리로 총합 계산해서 숫자 작은 path 선택

[Hierarchical routing]//현실적으로 위 방법 안 쓰고 대표 라우터들을 선정해서 그들끼리 라우팅 테이블 기반하에 주고받고
내부에서 작은 라우터들은 그들끼리 라우팅 테이블 있어서 주고받음

[5-2장]

IP adress (class A~E, usually A~C(각 호스트 아이디 길이= 24,16,8bit))
Class B //가장 많이 쓰임(적당한 net ID(14bit), host ID(16bit))
16bit/8bit/8bit
netID/subnetID/hostID , 이 때 subnet ID는 건물주소(관리 용이하게 하기를 위함)

각 인터페이스는  32bit 할당받음
Subnet Addressing

CIDR // Classless Inter Domain Routing
ex)200.23.16.0/27 <- slash를 사용해서 그 뒤를 host ID로 사용

어떻게 IP를 할당하는가? 2가지 방식
- manual // 데스크탑처럼 아예 계속 가지고 있는 거
- DHCP//Dynamic Host Configuration Protocol. 스마트폰에 IP할당 받듯 일시적으로 받는거

NAT(Network Adress Translation)
- DHCP 방식
- WAN side address(공적으로 할당받은 아이피) + LAN side address 사적으로 할당되는 아이피 local IP
- sender 주소를 바꿈 , reciever(destination)은 그대로

IP// Internet Protocol

Application layer - User process 관련
Transport Layer - TCP, UDP
Network Layer - ICMP, IP, IGMP // 여기  IP가 있음
Data Link Layer - ARP , RARP// 하드웨어 인터페이스 관련

IP header format
헤더는 20bit , 그 뒤에 몇천 bit실림

[AIoT 6장]

Transport Layer // 샌더와 리시버 사이에 Data 전송이 이루어지고 패킷을 보내 destination에 도착
- 이 때, 잘 도착했는 지 여부에 관한 일을 함
- 종류는 TCP, UDP가 있다
- UDP)간단, 털털 -> 없어져도 괜찮
- TCP)아주 정확해야 됨.. 실수 용납ㄴㄴ,까다로움 ex)은행

UDP
- no frills . . . , bare bone. . .
- best effort //노력은 하지만 안 되면 워쩔 수 없다
- connectionless
- packet 유실돼도 됨
- 주로 멀티미디어에 사용 (영상같은)

TCP // 중요 . . 세 컨트롤 기억할 것
종류:
1)congestion control
2)End to end Flow Control
3)Error Control

[congestion control] // 되게 중요 -
- Retransmission timeout(RTO) caused by a lost packet
- 3 duplicate ACKs

packet lose 원인
:1) unrealiable transmission media
2) congested router //usually -> 에러 원인은 '트래픽이 너무 많은 경우 라우터에 버퍼가 넘치는 경우'로 가정 , 이 문제를 푸는 방식을 congestion control이라고 한다

congestion control
처음에 윈도우 사이즈=1로 시작
ack이 잘오면 윈도우 사이즈 =2
잘오면 window size= 2^2
...
이렇게 n승으로(지수적으로)
till 미리 설정한 threshold값까지 증가
이후부턴 linear하게 증가함
timeout에 의해 패킷이 오지 않은 걸 알게되면 현재값의 1/2을 threshold값으로 재 설정하고 다시 window size=1로
다시 threshold값 만나면 이후 linear하게 증가함
//slow start라고한다

이와 달리 fast start도 있는데,

timeout되기 전에 다른게 오게 되면,
ACK를 sender가 계속 3번 보내게됨 (이걸 dupack이라고 함)-> congestion이 심각한게 아님을 의미하는걸 알게돼서
-> window size를 반으로 줄임 (slow와 달리 1까지 안 떨어뜨린다)

[End-to-end Flow Control]
ㅇ sender , reciever사이에 보내고 받는 속도 조절
ㅇ 센더는 슈퍼컴퓨터, 리시버는 성능이 좋지 않아 데이터 전송 속도라고 가정))
이 때, 센더가 보내는 속도를 조절해야되는데 이걸 flow control이라고 한다
ㅇ 잘 받으면 ack를 보냄
ㅇ 리시버가 메모리 스페이스 관련 정보를 포함시켜 보내면, 센더가 보내는 속도 조절하는 방식
- 하나씩 보내는 거랑 ) stop & wait(till ACK)방식 - 비효율적
- 여러개 보내는 방식이 있음    - pipelining, sliding window 방식
패킷 받는대로 윈도우 사이즈가 오른쪽으로 움직이며 다운사이즈 함
- 윈도우 사이즈를 최소값으로 정해서 보낸다

[Error Control]
ㅇ 노이즈 등 문제를 다룬다
- ARQ(Automatic Repeat reQuest)
- 하나 보내고 ACK받고 하나 보냄 // 에러가 없을 때
- 패킷 보냈는데 리시버가 받지 못하면 -> ACK를 영원히 기다림//에러시 ->이 때 타이머를 보내서 끝날때 까지 안오면 기다리는거 포기
- ack packet사라진 경우 //에러
-> 받은걸 버리고 retransmission

Go Back & ARQ //window slide 방식

- 패킷(예를들면 3번에)에 에러가 생기면 -> 리시버가 ACK4를 안하고 타임 아웃까지 기다린 뒤 다시 3부터 다시 보냄
- ACK가 사라지는 경우 -> 타임아웃값에 따라 다시 전송 리시버가 중복돼서 받으면 그냥 버리면 된다

# data[].attributes.body
<5장 Network Layer & IP>

Network이라는 sender가 reciver에게 안전하게 전달.

Network Layer가 하는 function : 데이터를 받아서 forwarding(입력)측에서 받아서 Routing(출력)측으로 보냄

- 보내는 방향을 결정하게 된다.

Routing : 주소를 받아서 어디로보낼지 판단하는 행위

유선 네트워크망

- Circuit(회선) switched networks (1,2세대)

- Packet-swiched networks (3세대부터~)

Circuit(회선) switched networks 장점

- 오랜시간을 통화할 때 아주 좋다(delay도 없고)

- 채널의 낭비가 존재한다.

Packet-swiching networks : 하나의 데이터가 여러개의 Packet로 쪼개서 보냄

- 순서가 바뀌어서 받더라도 받았을 때 알아서 순서를 재정비함.

- 파이프라이닝 : Packet 1을 보내고 2를 보낸 사이에 다음 routing에서 packet1을 보냄

* 파이프라이닝을 통해서 빠른 전송 가능

* 너무 많이 파이프라이닝해도 오버핸드 할 수 있다

Routing algorithm

- 라우팅 테이블을 잘만들어놓으면 헤더를 보고 수신지까지 잘 전달 가능

- 라우팅 테이블을 어떻게 만들건지 만드는 알고리즘

- router > router 이동간 cost 발생 >> 최소 cost로 가는 알고리즘 (2가지)

(1) Link State routing algorithm : 각각의 노드가 전체 노드경로를 알고 있다. **

(2) Distance vector routing algorithm **

IP(Internet Protocol)

- 5가지 클래스로 구분된다(class A ~ E)

- 0 / Net ID / Host ID [class A = 0 / 7 / 24] .... (class C = 110 / 21 / 8]

- 한 조직기관에서 몇 비트로 쪼갰는지 알 수 있기 위해 subnet mask를 쓴다.

- 포항공대(Class B) : 141.223.108.201 / 서브넷 마스크 = 255.255.255.0

IP adress 사용자가 많아지며 수가 부족해짐.

- IPv6 : 새로운 버전을 만들자. (장비를 교체해야 하기 때문에 힘듬)

- CIDR : 주소 마지막 /뒤에 호스트파트(5bit)를 추가

- DHCP : 임시 IP address를 받아서 쓰고 반납하는 방식

NAT (Network Address Translation, IP 문제 해법 중 하나)

- 공적 인증 IP + 내맘대로 설정한 사적 IP

- 사적 IP에서 보낸 정보를 라우터를 거쳐 공적 인증 IP로 발신자를 변경

<6장 Transport layer>

- UDP / TCP

* UDP : 간단한 프로토콜, 잃어버리거나 전송이 안되도 상관없음

* TCP : 속도보단 정확한 전송을 요구할 때

TCP

- sender와 reciver사이에 보내는 속도 조절

* stop and wait : 하나 보내고 잘보냈다는 ACK받고...반복

> pipelining 기술을 통해 여러개를 보내고 올때마다 하나씩 더보내는 방식

Error Control

- ACK 받지 못하면 데이터 다시 보냄

TCP Congestion Control

- 중간에 라우터에 버퍼가 넘친다고 가정 > 개수를 줄이는 방법을 채택

* 1. time out : sshtresh 값 전까지 2^n만큼 증가 > 점차 2씩 증가, 과부하 오면 다시 처음부터 시작.

# data[].attributes.body
5장

네트워크 계층

- 데이터 전송 결로 결정, IP주소로 상대방 호스트 구분, 패킷 : 전송 데이터의 명칭

회선교환

- 1,2 세대, 고정대역의 전송률을 지원하는 연결설정, 연결지향형, 연결이 유지되는 동안

다른 연결사용 X

구조 단순, 라우팅 등 작업이 쉬움

패킷 교환

- 3세대 이상, 패킷 단위로 나누어 전송, 가변전송률지원, 연결/비연결 지항형 지원, 구조 복잡

- 패킷이 개별 라우팅 과정을 거쳐 목적지에 도착

- 장점 : 전송효율이 좋다, 이론상 호스트 무한수용 대신에 혼잡도가 증가해 전송지연을 고려해야 한다.

- 단점 : 전송지연

메시지 교환

- 전체 데이터를 하나의 단위로 교환

- 단점 : 메시지 크기가 증가하면 시간 비용 증가, 버퍼사이즈 증가

라우팅 테이블 : 네트워크 구성 형태에 관한 정보 관리

Dijkatra’s 알고리즘 : source가 최적의 라우팅 경로를 찾는 과정

6장

IPv4 : 5개의 클래스로 구분, 이진표가법과, 십진 표기법에서 클래스 찾기

subnet mask : 몇 비트로 쪼개었는지

IPv6 : IPaddress 사용 증가로 만들어짐

CIRD : host part를 알려줌

ICMP : 오류에 관한 처리지원

IGMP : 특정 그룹에 속한 모든 호스트들에게 메시지 전송

ARP : IP주소와 MAC주소 사이에 변환 기능 수행

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

<Network Layer>

-패킷들을 sending->receiving에게로 전달함

-network layer의 두가지 중요한 역할:Forwarding&Routing

Forwarding:패킷을 라우터 인풋에서 아웃풋으로 전달

Routing:패킷의 방향을 결정

<Taxonomy of Network>

1.     Circuit-switched networks

2.     Packet-switched networks

<1.Circuit-switched networks>

예전 방식, 전화->회선예약->전화끝

-단계-1.circuit(회선)만들기2.data transfer(통화)3.회선 끊기

-장점:오랜 시간 통화할 때 좋다/단점:circuit을 만들고 끊는 과정이 비효율적이다

<2.Packet switching>

예약없이 패킷 단위로 data전송,pipelining,하지만 패킷 사이즈가 작다고 좋은건아님->헤더가 data에 비해 길어지면 오히려 시간 증가

<Routing Algorithms>

-routing table 만드는 알고리즘

-종류 : 1.link state routing 2.distance vector routing

<1. Link state routing>

-해당 라우터는 자신의 neighbor router들에 대한 정보를 모두에게 보내고 구조가 변할 때마다 정보공유가 이루어진다 따라서 모든 노드들은 전체 네트워크 구조를 알고있음

-가장 짧은 경로 계산 알고리즘은 Dijkstra’s Algorithm

<2.Distance vector routing>

-neighbor끼리만 연결 정보를 알고 있다, 라우팅 테이블을 만들기 위해 Bellman-Ford~알고리즘을 사용한다

<Hierarchical routing>

-모든 라우터들이 라우터 테이블을 만들 수 없음,그래서 region 별로 묶어서 라우팅 테이블을 짧게만 만든다…

[IP]

<IP addresses>

-아이피 주소는 net ID 와 host ID로 이루어짐

-5가지 class

Class A : netID-기관 등에서 사가는 id(7)/Host ID(24)

Class B:Net ID(24)/Host ID(16)

Class C : ID(21)/Host ID(8)

Class D

Class E

<Subnet Addressing>

-기관에서 IP사간 후 또 쪼개서 사용하는 것ex)층별

<아이피 주소 고갈 문제의 해결방법>

1.     장기적 해결책-IPv6 이라는 새로운 버전 개발

2.     CIDR

<2.CIDR>

-기존 방식의 문제점 : host id 가 너무 크거나 작다

-host부분을 추가적으로 나눌 수 있다

<3.DHCP>

임시 IP 주소를 사용하는 방법

<방법4.NAT>

:IP주소 하나로 수많은 호스트 연결 가능

:공적 IP 주소-Router-사적IP 주소를 가진 호스트들

6강 Transport Layer

종류:TCP, UDP

<UDP>

-간단한 프로토콜, 조금 잃어버려도 상관없을 때

-기본골격만 있음, 노력은 하지만 잘 안되도 어쩔 수 없다,멀티미디어 스트리밍에 많이 씀

<TCP>

정확하게 전달해야 할 때, 중요한 전송 시

1.     congestion control

2.     end-to-end control

3.     error control

세가지가 있고 다 연관되어 있음

<TCP Flow control>

Receiver 의 buffer가 넘치며 sender가 보내는 걸 못 받을 수 있다->sender의 전송 속도를 조절해야함->ack보낼 때 가능한 저장공간의 memory 정보를 보냄->sender가 속도조절

1.     stop-and-wait~

2.     sliding window flow control

<Stop-and-wait flow control>

: data하나씩 보내고 ack기다리는 방식->비효율적임

: Pipelining으로 동시에 보내서 효율성을 높인다

<Sliding-window flow control>

:

:

<Error control>

1.     stop and wait ARQ

하나씩 보내고 ack기다림 무한히 기다릴 수 없으므로 timer가 있음

Data 잃어버렸을 때 : 일정시간 지나면 재전송/Ack잃어버렸을 때 : 데이터 재전송->이미 받았으므로 삭제->ack 재전송

2.     Go back N ARQ

-data 패킷이 안왔을 때:3번 잃어버렸으며면  그 다음꺼 다 버리고 3번부터 다시 전송

<TCP congestion control>

# data[].attributes.body
질문1. DHCP으로 IP주소 할당 받는 것의 단점은? 동적으로 할당받은 IP 주소는 host가 반납하는가?

AIoT 5-1강

[check]

- Network Layer의 역할

- Forwarding과 Routing의 차이

- Circuit Switching vs Packet Switching

- LS VS DV

Network Layer : transport 밑의 Layer로 packet을 sending host에서 receiving host로 전송한다.

Forwarding과 Routing

- Forwarding : 라우터의 input에서 output으로 패킷을 보내는 것, 즉 전달하는 과정이다.

- Routing : source에서 destination까지 경로를 정하는 것, 즉 길을 찾는 과정이다.

Forwarding VS Routing

- forwarding은 hop-by-hop

- routing은 end-to-end

network는 전송 방식에 따라 Circuit-switched network와 Packet-switched network로 구분할 수 있다.

Circuit-switch : S와 D사이에 경로를 설정하고 그 라인을 오로지 사용하는 것. 채널을 예약하고 쓰므로 오랫동안 사용할 경우 유리하다. 그러나 채널을 낭비한다는 단점이 있다.

Packet-switch : Message Switching 방식의 하나로, message를 packet으로 나누어 앞에 header를 붙여 나누어 전송한다. 이 경우, circuit-switch 방식에 비해 buffer의 크기를 아낄 수 있어 효율적이다. 나누어진 packet은 final destination에서만 재조립 된다.

Routing 알고리즘에는 2가지가 있다. Link State routing과 Distance vector routing. 그 중에서, 우리가 주목할 알고리즘으로는 Dijkstra’s Algorithm과 Bellman-Ford Algorithm이 있다.

Dijkstra’s algorithm : Link State routing의 일종으로, link cost가 모든 노드에게 알려져 있다. 모든 노드는 같은 정보를 갖는다. 최소 비용의 경로를 찾는다. 알고리즘의 복잡도는 노드의 개수가 n일때, 모든 노드를 확인해야하므로 n(n+1)/2. 즉, O(n^2)가 된다. cost가 같을 경우, Oscillations possible이라는 문제점이 발생할 수 있다.

Bellman-Ford Algorithm : Distance vector routing의 일종으로, 각 노드는 자신의 거리 벡터를 이웃한 노드에게만 보낸다.

<추가로 보충한 공부>

LS(Link State) VS DV(Distance Vector)

[message complexity]

- LS:n개의 노드와 E개의 링크가 있을 때, O(nE)

- DV:이웃한 노드끼리만 교환

[speed of convergence]

-LS:O(n^2) 알고리즘은 O(nE)의 메시지를 요구함, oscillation 문제 발생 가능

-DV:convergence time varies, count-to-infinity 문제 발생 가능

[robustness] : 만약 router가 오작동하면?

-LS:node can advertise incorrect link cost.

-DV:node can advertise incorrect path cost, error propagate through network.

그밖에 Hierarchical routing도 있다.

AIoT 5-2강

[check]

- IP 주소란?

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

- IP 주소가 부족해진 배경, 그걸 어떻게 해결할까?

IP(Internet Protocol) address : 32bit의 IP주소. 클래스 A~클래스 E까지 구분 가능. 예) host id가 16비트 → 2의 16개 할당 가능

NET ID 14비트, Host ID 16비트인 Class B를 가장 많이 구매함. (class A는 Net ID가 너무 적고, Class C는 Host ID가 너무 적음)

Host ID를 어떻게하면 더 효율적으로 쓸 수 있을까? → Subnet ID로 8/8 나눠서 사용 (subnet part는 high order bits, host part는 low order bits 사용)

Subnet이란?

- 라우터 거치지 않고 physically reach가능, 라우터를 제거했을 때, network가 고립되면 subnet.

IP 주소 scheme (class-full addresses)

: IP주소가 많이 필요해짐. 즉, 주소가 모자라짐 → IPv6를 만들어 해결

IPv6 : 기존의 32 비트 주소가 부족해서 생김. 고정된 40byte 헤더를 가짐, fragmentation을 허용하지 않음.

CIDR (Classless Inter-Domain Routing)

- IP주소의 임의의 길이를 subnet portion으로 가정하는 것.

- class 체계는 중간이 없고 bit수가 너무 적거나 너무 큼. IP 주소 뒤에 슬래시를 붙여 x bit만큼 host part를 알려준다.

예) 200.23.16.0/23

11001000 00010111 00010000 00000000 (여기서 오른쪽 9개 비트가 host part)

host는 IP 주소는 어떻게 할당받는가?

1) fixed IP address : 직접 세팅한다. 매번 직접 세팅해야한다는 단점이 있다.

2) DHCP : 서버로부터 임시 ip주소를 동적으로 할당받음, plug-and-play가 가능하다는 장점이 있다. 재사용이 가능하다. subnet에 할당된 것보다 많이 쓸 수 있다. subnet이 다 같은 host portion을 쓸 수 있으니까.

NAT(Network Address Translation) : local network는 하나의 IP 주소만 사용한다. 사설 IP주소를 공인 IP주소로 바꾸는 과정이다. NAT을 사용하는 이유는 첫째로, 공인 IP주소를 절약하기 위함이고, 두 번째는 보안을 위해서이다.

AIoT 6강

[check]

- Transport Layer

- TCP와 UDP의 차이

- TCP의 3가지 control

- TCP의 Congestion control

잘 도착했는지의 여부 확인

TCP와 UDP가 있음.

- UDP : 약간의 오류 허용하는 경우 사용

- TCP : 중요하고, 오류를 허용하지 않는 경우 사용(Reliable)

UDP(User Datagram Protocol)

- best effort service

- handshaking 없음

- 멀티미디어 스트리밍에서 주로 사용

TCP(Transmission Control Protocol)

- 혼잡 제어, End-to-end flow 제어, error control

TCP Flow Control

- sender와 receiver 사이의 속도를 조절하는 것

- sender의 속도가 더 빨라 receiver가 넘치지 않도록 하는 것

- Stop-and-wait flow control과 Sliding window flow control 방식이 있음.

- Stop-and-wait flow control은 매번 기다리기 때문에 비효율적임.

Error Control

- 주로 Go-back-N 사용.

- Timeout : 일정 시간 안에 ACK를 받지 못하면 재전송.

- Go-back-N : 에러가 나면 난 곳으로 돌아가 다시 재전송.

TCP Congestion Control

- 3 dup ACK : TCP RENO, 선형으로 증가하다가 window size를 절반으로 줄여서 다시 시작.

- TCP Tahoe는 항상 cwnd를 1로 보낸다.

# data[].attributes.body
5.2장 Network Layer Services

(1) Network Layer

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

- Forwarding : router을 보고 전달하는 행위

(2) Circuit switching

- 옛날 전화 방식
- Circuit을 만듦, 미리 예약, Circuit을 끊는 행위
- 오랜시간 통화시 매우 좋음
- Channel의 낭비 존재

(3) Packet Switching
- 데이터를 전송시 커넥션 없이 packet 단위로 끊어서 보냄
- 밀리면 순서가 바뀜
- 시간을 단축 가능(Pipe line)

(4) Routing Algorithms
-  cost가 가장 적은 경로로 이동

(5) Link state routing algorithm
- 각각의 node를 활용하여 Dijkstra's Algorithm 활용
- 최적의 routing pass를 찾음
- routing table을 만든다.
-  Bellman-Ford Algorithm
(a) 이웃한 곳과 데이터를 주고 받음
(b) routing table을 활용하여 계산
(c) 이웃한 곳으로 부터 routing table을 받아서 계산

(6) Hierarchical routing
- 대표 router들을 설정
- 대표 router끼리 데이터를 주고 받음

5.2장  IP

(1) IP addresses
- host 부분과 net 부분으로 나뉨
- 5가지 class로 구분
- class B를 가장 많이 구매

(2) Subnet Addressing
- 체계적으로 관리 가능
- Host net을 구매 후 sub net으로 나눠서 사용
- subnet mask를 사용하여 나눠진 정도를 확인

(3) Problems of IP address scheme
- IPv6를 만들자
- CIDR 많이 사용
- IP address를 할당
- DHCP 임시 IP address로 사용 후 반납
- NAT

(4) Time to Live
- router를 거칠 때 마다 숫자가 줄어드는데 이때, 몇 번 거쳐서 갔는지 알 수 있음

6장 Transport layer

(1) Transport layer protocols
- UDP
매우 간단한 protocol, 잃어버려도 크게 문제 X
라이브 스포츠 경기 등
- TCP
매우 정확해야 함, 은행에 많이 사용

(2) UDP
- 전송이 잘되면 좋지만 크게 중요 X
- sender와 receiver가 컨텍  X

(3) TCP
- Congestion control, End - to - Flow Control, Error Control
- 실수 용납 X
- Flow-control
Sender는 매우 성능이 좋은 컴퓨터
-> reciever는 성능이 좋지 X 컴퓨터 경우
Sender가 보내는 속도를 조절
- Ack를 보냄(with reciever이 받을 수 있는 데이터 양을 보냄)
-Stop-and-wait flow control
(a) Pipelining해서 보냄
- Sliding - window flow

(4) Error Control
- 하나를 보내고 다음에 하나를 받음
- Time-out를 설정하여 Ack가 오지 않았다고 판단하여 다시 보냄
- Go-Back-N ARQ

(5) Congestion control
- 데이터가 많이 모이면 congestion 발생
- 유선 네트워크를 가정하여 만들었음
- Error 때문에 발생하는 경우는 없다고 생각
- Router가 넘침(심각한 문제) -> congestion으로 해결

# data[].attributes.body
(5장 Network Layer & IP)
[Network의 역할]
수신자의 주소를 보고 forwarding을 하는데 그 과정에서 routing(어디로 보낼지 주소를 보고 판단하는 행위)

[circuit switching]
옛날 전화방식: 회선을 미리 예약하여 사용
circuit 생성/data 전송/연결끊음
+) 예약이 되기때문에 real time으로 통화가능
delay 발생 X
-) 채널의 낭비 존재

[message switching]
메시지를 바로 보냄
-) 메시지가 길어지는 경우 딜레이가 길어지고 buffer의 큰 사이즈가 요구됨

[packet switched network]
- data를 쪼개어 쪼갠 packet을 전송
+) 시간 단축
- 하지만 무조건 잘게 자르는 것이 좋은 것은 아님

[Routing Algorithms]
- routing table을 만드는 알고리즘
- 각각의 노드는 이웃한 라우터까지의 cost만 알고 있음
(1) Link State routing algorithm
- 각각의 노드가 이웃한 노드와의 cost를 알고 있으므로 그 정보를 교환하여 table완성

(2) Distance vector routing algorithm
- 이웃한 노드와의 정보를 근접노드와만 공유하여 table완성

[Hierarchical routing]
- 너무나 많은 router가 있기 때문에 대표 라우터가 table을 만들고 내부에서는 각각의 table을 따로 만드는 것

[IP:internet protocol Address]
- 5가지 클래스로 구분이 되며 각 클래스는 net ID와 host ID로 나뉨(class B사용자가 가장 많음)

[subnet Addressing]
- 적은 host ID를 효율적으로 사용하기 위해 subnet ID와 host ID로 나누어 건물-층 등으로 활용함
- subnet mask: 몇 비트로 나누었는지 알기 위함

[problems of IP address scheme]
ip주소 할당이 부족한 문제를 해결하기 위해
- long: IPv6(ip의 새로운 버전을 생성)
- short: CIDR(클래스에 상관없이 슬래시뒤에 네트워크 part를 명시하여 나머지는 host part로 할당) => ip address를 아낄 수 있게 됨

[DHCP]
정규가 아닌 임시 ip address 할당 방식

[NAT]
- 공적 ip이외에 사적ip를 내부에 따로 할당하여 사용

(6장 Transport Layer)
[transport layer protocols]
보낸 데이터가 잘도착했는지, 오류가 났는지, 딜레이가 있는지 등을 확인하는 프로토콜
- TCP: 엄격한 기준, 정확한 정보 전달(은행간의 송금 등)
- UDP: 상대적으로 유연한 기준

[UDP]
- 장식 없고 기본적이 골격만 존재

[TCP]
(1) End-to-end Flow control: sender가 reciver를 넘치지 않게 만들어주는 방식
- sender가 보낸 데이터를 reciver가 따라잡지 못하면 문제가 발생하므로 전송받은 데이터를 잘 받았다는 ack신호를 보낼때 buffer정보를 포함하여 보냄 => sender가 buffer정보를 보고 전송신호 조절함
- stop and wait flow control: 하나씩 전송(비효율적)
-  sliding window flow control(pipeling): ack가 오면 보내는 방식, window size = min(reciver's advertised window, congestion window)

(2)  Error control: error에 대응하는 방법
- stop-and-wait ARQ: tmeout시간동안 ack가 오지 않으면 error인지
- continuous ARQ (Go-Back-N): sliding 방식 이용,  error발생시 해당 번호로 돌아가서 그때부터 나머지 packet을 전송

(3)  Congestion control
유선네트워크를 기반하여(error발생시 중간 라우터의 buffer가 넘친것) 트래픽이 몰린 상황을 조절
- timeout: window size가 미리 정한 ssthresh까지 증가, 이후 선형적으로 증가 => time out에 의해 packet이 오지 않았다면 현재값의 반을 ssthresh값으로 두고 1로 떨어져서 증가 (slow start )
- duplicate Acks: 3 dupack => window size가 현재값의 반으로 떨어져서 증가

# data[].attributes.body
5장-1 Network Layer & IP

network layer servies - 네트워크는 중요한 역할을 함, sender가 보낸 data를 receiver가 안전하게 받을 수 있도록 함, 헤더에 sender와 receiver의 주소(IP)를 적음, 라우터를 통해 IP 주소를 보고 어디로 안전하게 보내야 하는지 판단

network layer
- forwarding - 입력(sender) 라우터측에서 받아서 출력(receiver) 라우터측으로 보내는 일
- routing - 주소를 보고 어디로 보내야 하는지 판단

communication networks = circuit-swirched networks(1,2세대) + packet-switched networks(3,4세대)
circuit switching - 옛날 전화선 방식, 서킷을 만들고 데이터를 전송하고 서킷을 제거하는 3단계로 이루어짐, real-time으로 오랜 시간 통화할 때 딜레이가 없는 점이 장점, 채널의 낭비가 존재하는 점이 단점
packet switching - 긴 메시지를 하나의 패킷이 아니라 여러 패킷으로 나누어 보내는 방식, receiver 측에 도착 순서가 다를 순 있지만 순서를 재정비 함, pipe-lining, 많이 쪼갠다고 빨리 보내는 것은 아님

routing algorithms(중요) - 라우터들이 목적지에 따라 어느 경로로 보내야 하는지(어느 node를 거쳐야 하는지) cost를 고려하여 스스로 계산을 함
1. link state rouing algorithm(dijkstra's algorithm)
- 각각의 node들은 자기들끼리 연결된 이웃한 node와 cost를 알고 전체 network topolgy를 앎, node들이 가장 cost가 적은 경로를 찾기 위해 algorithm을 돌림, 모든 목적지로 가능 가장 짧은 경로를 계산할 수 있음
2. distance vector routing algorithm(bellman-ford algorithm)
- 인접 노드들하고만 정보를 주고 받음, 예를 들어 j에서 나머지 모든 노드로 가는 routing table을 만든다면 j와 이웃한 a,i,h,k로부터 table을 받음, 자신의 인접 노드에 관한 정보와 인접 노드에게 받은 table을 참고하여 최소 cost를 계산함, 이를 통해 스스로의 routing table을 만듦

hierarchical routing - autonomous system에서 대표 router를 선정하고 대표 router들끼리 routing table을 만들고, 하위 router끼리 routing table을 만듦

5장-2 IP(Internet Protocol)

IP addresses - (net ID, host ID)로 이루어짐, A~E까지 5개의 클래스로 구성
class A - 0으로 시작, net id에 7bit, host id에 24bit 할당, range : 0.0.0.0~127.255.255.255
class B - 1, 0으로 시작, net id에 14bit, host id에 16bit 할당, range : 128.0.0.0~191.255.255.255
class C - 1,1,0으로 시작, net id 21bit, host id 8bit 할당, range : 192.0.0.0~223.255.255.255
class D와 E도 있음

subnet addressing - host id 부분을 더 효율적으로 쓰기 위해 host id를 subnet id와 host id 2부분으로 나눔, 몇 비트로 쪼갰는지 알게끔 하는 것을 mask라고 부름
problems of IP address scheme
- 인터넷이 폭발적으로 성장하는 바람에 IP 주소가 모자라게 됨, 이를 해결하기 위해 IETF의 해결책은 IPv6임 그런데 모든 장비를 바꿔야 함
- short time solution = CIDR임, 주소 마지막 부분에 /(slash)와 숫자를 더해서 5bit가 host part임을 나타냄

IP 주소를 할당받는 방법 - manual configuration / DHCP(dynamic host configuration protocol) 정규 ip주소가 아니라 임시 ip주소를 할당 받고 거기서만 사용하고 다시 반납하는 방법

NAT(network address traslation)
- IP 주소 부족 문제를 해결하기 위한 방법, IP 주소 하나를 가지고 호스트를 많이 연결할 수 있음
- 공적으로 할당받은 IP에서 여러 사설 IP를 만들어 호스트에게 할당
- sender가 사설 IP를 통해 어떤 데이터를 목적지(destination)로 보냄, 라우터가 그것을 받아서 다른 인터넷으로 보내면서 NAT translation table에 sender의 주소와 목적지를 기록함, 그리고 라우터가 sender의 주소를 공적 IP 주소(자기 자신)로 바꿔치기함(목적지는 그대로), 답장(reply)이 오고 sender와 destination이 라우터가 보낼 때와는 반대(뒤바뀐)되는 상황, 그리고 아까의 table을 참고하여 destination(라우터의 공적 IP)을 원래 sender 주소로 바꿔치기해서 원래 sender에게 전달함

IP(internet protocol)
- 다양한 protocol이 있음, application layer -> transport layer -> network layer -> data link layer 4개의 layer가 있고 각 layer에 여러 protocol이 있음
- ip는 20bit의 헤더가 있고 그 뒤에 실제 데이터가 따라옴, 현재 version 4의 ip를 사용하고 있음
- physic한 네트워크들은 별도의(각각의) 언어를 씀, 각 네트워크의 패킷 사이즈가 있음(다를 수 있음), 한 네트워크에서 다른 네트워크로 갈 때 패킷 사이즈가 쪼개질 수 있음

6장 Transport Layer

transport layer protocols - sender와 reciever 사이에 데이터 전송이 이루어지고, network layer의 ip가 패킷 단위로 보내서 목적지로 도착함. 중간에 에러가 났는지 등 문제가 발생했는지, 잘 도착했는지의 여부를 확인함
internet transport protocols
- User Datagram Protocol(UDP) - 손실이 좀 있어도 되고 전송에 문제가 약간 있어도 괜찮을 때 사용, 재전송 없음->실시간 중계 등에 사용
- Transmission Contro Protocol(TCP) - 속도보다는 중요한 내용이 있을 때 TCP 사용, 에러가 있으면 안되고 정확해야 함, packet이 사라지면 재전송함

UDP - 가장 기본적인 internet transport protocol
- best effort servie : 전송이 잘 되면 좋지만 안되도 어쩔 수 없다. 최선은 다해보겠다.
- sender, receiver 사이의 handshaking이 없고 바로 보내는 protocol
- streaming 할 때 씀

TCP(중요) - data 교환 전에 TCP 연결을 설림
- congestion control - 데이터 송신자가 데이터를 보내는데, 데이터가 제 때 전송이 되지 않을 때(congestion) 사용
- end-to-end flow control
- error control - 에러 발생 시 사용

TCP flow control
- sender는 성능이 좋음, receiver는 성능이 좋지 않아서 처리 속도가 느림
- sender가 많이 보내는 데 비해 receiver는 많이 처리 못함(receiver가 받으면 ack 신호를 다시 보냄)
- receiver가 처리 가능한 space를 같이 알려주면 sender가 receiver를 고려하여 데이터를 전송함
- stop-and-wait flow control : 하나 보내고 ack 받고 또 하나 보내고 하는 방식, 근데 효율이 좋지 않음
- sliding-window flow control : 여러 패킷을 보내고 ack 패킷을 받는대로 window size를 오른쪽으로 보냄, 그림의 window size와 receiver가 ack에 넣어서 보내는 window size값 중 더 작은 값을 window size로 채택한다

TCP error control
- go-back-N이 많이 쓰임
- stop-and-wait ARQ : 하나 보내고 ack 받고 또 보내고를 반복, 그런데 ack가 오지 않으면 계속 기다림, 영원히 기다릴 수 없으므로 timeout을 줌 = 일정 시간 안에 ack을 받지 못하면 패킷을 재전송, receiver의 ack을 sender가 받지 못한 경우에도 sender가 다시 재전송함
- go-back-N ARQ : 위의 sliding 방식과 비슷, 예를 들어 0,1,2(여러개의) 패킷을 보냄, receiver가 0을 받고 ack을 보내면 sender는 3을 보냄, 1을 받고 ack을 보내면 sender는 4를 보냄... 이런 식으로 반복, 그런데 0~5부터 보냈는데 0,1,2,4,5는 잘 받고 3은 못받음, 그러면 receiver는 못받은 3에 대한 ack만 보내는게 아니라 3,4,5를 다시 받고 3,4,5의 ack을 3부터 다시 보냄
: 만약 0,1,2,3을 보내고 0에 대한 ack을 받고 1,2에 대한 ack을 못받은 후 timeout 안에 3에 대한 ack을 받았다면, sender는 사실 아무 문제가 없다고 여겨서 계속 패킷을 보냄(cumulative) 즉, 3에 대한 ack을 받았으므로 1,2에 대한 ack도 잘 받았다고 인식, timeout에 대한 ack을 받지 못한 경우는 재전송함

TCP segment format 이런게 있음

TCP congestion control
- 교통정체처럼 데이터 혼잡상황을 해결하는 것에 관한 protocol, 유선 네트워크를 가정하고 만듦
- tcp congestion control by timeout : congestion window size는 1로 시작, ack이 잘 오면 2^n씩 증가함(1,2,4,8,...), ssthresh값까지 ack이 오면 그 이후로는 1씩 증가해서 선형적으로 증가, timeout에 의해 패킷이 오지 않으면 현재값의 절반을 thresh로 두고 다시 1로 떨어짐. 이를 반복(slow start)
: dupack이 나오면 timeout이 아니라서 현재값의 절반으로 떨어지고(1로 떨어지는거 아님) 이후 1씩 선형적으로 증가

TCP의 congestion contro, error control, flow control 셋은 모두 연관이 있음

# data[].attributes.body
Chap 5 Network Layer & IP

Network layer servies

수신자가 보낸 메시지를 송신자에게 안전하게 전달하는 역할

패킷에 헤더에 주소를 포함하여 전송

라우터에서 주소를 보고 안전하게 수신자에게 전달

Network layer역할

포워딩: 패킷을 라우터 인풋으로부터 아웃풋으로 전달

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

Taxonomy of Networks:

Circuit – switched networks

1세대,2세대

옛날 전화 방식

Circuit establishment:전화선(회선) 미리 예약 요청

Data transfer:예약이 완성되면 통화

Circuit termination:끝나면 종료 신호전달

장점: real time으로 오랜시간 통화할 때 좋음,딜레이 적음

단점: 채널낭비

Packet - switched networks

3세대이후

Message switching

서킷을 만들거나 끊는 행위 없이 바로 메시지 전달

메시지가 커지면 버퍼도 커져야함

Packet switching

긴 메시지를 짧은 패킷으로 나누어 전달

패킷을 보낼 때 미리 커넥션 없이 패킷 단위로 전달

순서가 바뀌어 받더라도 재정비하여 올바른 메시지 전달

Pipe-lining을 통해 전송딜레이 줄임

패킷이 너무 많아 지면 헤더가 많아진다-오버헤드 발생

라우팅 테이블을 통해 라우터가 목적지로 전달

라우팅 알고리즘을 사용 라우팅 테이블 구성

각각의 라우터가 스스로 계산하는 알고리즘

각각의 노드는 이웃경로의 코스트만 알고 있음

Link state routing

dijkstra’s algorithm

시작점에서 이웃된 모든경로를 비교 가장 짧은 경로 선택

이미 있는 값과 다음경로로 이동 후 이웃된 경로의 코스트를 비교 더 작은 값을 선택

모든 노드가 연결될 때까지 반복하며 shortest path완성

Distance vector routing

Bellman-ford algorithm(for nodeX)

이웃한 노드로부터 각자의 라우팅 테이블 전달받음

목적지까지의 가장 짧은 경로 선택

모든 노드에 대해 라우팅 테이블 작성

Hierarchical routing

구역을 정하여 내부 라우팅 테이블을 만들고 대표 라우팅을 정하여 외부 라우팅 테이블구성

IP(internet protocol)

IP addresses

Ipv4:32bit으로 구성

Net id: 조직을 구분하는 id

Host id: 조직내의 컴퓨터를 구분하는 id

Subnet addressing:

조직내부에서 효율적으로 ip를 배분하기 위해 host id를 subnet id와 host id로 나누어 관리

Subnet mask:

Subnet id와 host id를 구분

주소고갈 문제 해결

IPng(IPv6)사용

Short term solution:

CIDR(class-ful addresses)

클래스와 상관없이 슬래시로 가변적으로 네트워크 파트와 호스트파트로 구분

Ip address할당 방법

Manual configuration

DHCP-임시ip를 할당받아 사용

NAT(Network Address Translation):공적으로 할당받은 ip를 사적아이피로 변환

IP는 다양한 프로토콜로 구성

Application layer-transport layer-Network layer-Data Link layer

Ip는 20byte의 헤더

각자 정의된 패킷사이즈가 다르기 때문에 헤더를 쪼개어 관리

TTL field

몇번의 홉을 거처 목적지로 전달되었는지 기록

Chap6 Transport Layer

Transport layer protocols

송수신시 에러, 딜레이 등 여러 전달 상황을 확인

UDP

No ack,

전송이 제대로 안되어도 큰 상관X

“Best effort” service

Header size:8byte

Transmission control protocol (TCP)

Reliable delivery 제공

속도보다 정확도가 우선

Lost pocket시 retransmission

Congestion Control

End to end flow Control: 송수신자 사이 속도 조절

송신자가 보내는 메시지의 양을 수신자가 모두 처리하기 어려운 경우

수신자가 가능한 Memory space의 정보를 Ack packet에 포함시켜 전송

Stop and wait flow control:

메시지를 보내고 ack가 올때까지 멈춘 뒤 ack수신후 다시 메시지 전송

효율이 떨어짐

Sliding-window flow control

:여러 패킷을 보내고 ack수신에 따라 window size를 옮기면서 다음 패킷을 전송

Receiver’s advertised window와 congestion window사이를 비교 더 작은 값을 window size로 설정

Error Control: 에러의 여부 파악 및 대응 판단

Stop and wait ARQ

Sender가 ack를 받지 못하면 계속 wait상태->time out을 설정하여 시간내 ack을 전달받지 못하면 retransmission

Go-back-N ARQ

window사이즈 만큼 패킷을 보내고 ack신호를 수신하면 window를 이동하며 다음 패킷 전송

패킷이 사라진경우

패킷이 전송 실패하면 receiver는 해당 ack부터 전송을 하지 않고 sender는 남은 메시지를 모두 전달 후 ack를 받지 못한 패킷부터 다시 전달

Ack가 사라진경우

1)Cumulative acks:Time out안에 다음 ack을 수신 받으면 그 전의 ack는 전송 받지 못하여도 메시지를 잘 전달 받았다고 판단

2)Time out안에 패킷을 전달 받지 못하면 sender는 전달받지 못한 메시지부터 다시 전달

TCP segment Format

Header size:20bytes

TCP congestion control

Window size를 조절하여 congestion 문제해결

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

Network Layer Services

sender가 보낸 데이터를 receiver에 안전하게 전달하는 역할 → ip(network layer의 protocol일)가 주로 하는 일

packet(데이터)을 보낼 때마다 헤더에 주소를 써서 보낸다 (보내는 + 받는 ip 주소)

중간에 똥그란 라우터 (= ip address를 보고 패킷을 받아서 어디로 보내서 안전하게 destination까지 도착하게끔 만드는 역할)

network-layer의 핵심 기능

Forwarding

라우터가 input 데이터를 받아서 output으로 보내는 역할. 특히 어느 경로로 보낼지를 결정 ← 이때 Routing

Routing

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

ip 주소를 보고 패킷이 가야할 receiver 주소를 보고 데이터를 어디로 보내야 하는지를 받아서 forwarding

Taxonomy of Networks (Network core)

Communication networks

Circuit-switched networks (1G, 2G)

(예. 유선전화망)

전화 발신자가 전화 수신자에게 번호를 누르면 미리 회선(circuit)을 미리 예약한다. 이 예약이 완성되면 통화가 가능

따라서 circuit-switching은 미리 circuit을 여는 행위(call request signal)와 종료 후 끝났다는 것을 알려주는 행위(call accept signal)가 존재함

Circuit establishment

Data transfer

Circuit termination

장점

한번 circuit이 예약되면 real-time으로 오랜시간 통화할 때 좋다. delay이도 없음

단점

채널의 낭비가 존재함

Message Switching

: 미리 circuit을 만들거나 끊는 행위 없이 바로 message를 보내는 방식

Packet-switched networks

(3G 이후) (예. 최근 컴퓨터 통신망에서 쓰는 방식)

pipelining : 긴 메시지를 하나의 패킷으로 보내는게 아니라 중간중간 잘라서 몇 개의 packet으로 나눠서 보내는 방식

packet을 보낼 때 미리 connection 없이 그냥 데이터를 packet 단위로 쪼개서 보냄

하나의 데이터가 여러개로 쪼개져서 전송되기 때문에 전송 중 하나라도 밀리게 되면 마치 고속도로가 밀리면 다른 경로로 찾아주는것 처럼 라우터가 다른 경로로 안내해줌 → 따라서 receive 측에 도착하는 순서가 달라질 수 있다. 하지만 이건 문제가 되지 않음. 도착해서 순서를 재정비함

packet을 잘라서 pipelining

하지만 message가 길어지면 라우터가 데이터를 전송받고 보내는데 오래걸린다

또한 message가 크면 라우터의 버퍼 사이즈가 커야한다. 특히 메시지가 여러군데에서 오면 그것들을 모두 저장해야 하기 때문에 데이터를 쪼개서 전송함

pipelining으로 인해 시간이 훨씬 단축됨

무조건 잘게 쪼갤수록 좋을까? ㄴㄴ 헤더도 크기를 차지하기 때문에 overhead 발생

라우터는 패킷을 어디로 보내야 할지에 대한 정보를 어떻게 알지?

routing algorithms

Routing Algorithms ← routing table 을 어떻게 만들지? 누가 만들어서 주는게 아니라 라우터들 스스로 계산함 :: distribute route

:: centrol node가 하나를 만들어서 다 전달하는 것이 아닌 각자가 스스로 계산하는 알고리즘

라우터는 이웃한 경로까지 가는 cost만 알고 있다

Link State routing :: Dijkstra 다익스트라 알고리즘

이웃한 노드와 cost를 알고 있기 때문에 → 각각의 노드는 전체 네트워크 토폴로지를 알고 있다 따라서 서로 정보를 주고 받으면 모든 노드가 똑같은 토폴로지 그림을 만들 수 있다

→ 각각의 노드가 이 토폴로지를 가지고 shortest routing algorithm을 돌림

Distance vector routing :: Bellman-Ford 벨만 포드 알고리즘

Hierarchical routing

라우터는 정말정말 많음. 이 수많은 라우터들을 똑같이 연산하기에는 너무나 힘들고 라우팅 테이블도 길어지기 때문에 → 현실에서는 구간(~~system)을 나누어 그 구간의 대표 라우터를 선정하고, 대표 라우터들끼리의 알고리즘을 만들고, 내부에서는 별도의 내부 라우팅테이블을 만든다

[5-2장]

IP (Internet Protocol)

routing algorithm을 실제로 구현하는 프로토콜

version4. 32bit의 ip address를 전세계적으로 사용하고 있음

network ID

기관의 ID

host ID

기관 ID를 제외한 나머지를 할당한 ID

Dotted Decimal Notation

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

subnet addressing : 세부 네트워크로 쪼개어 쓰는 것 → subnet mask

Problems of IP address scheme (class-ful addresses)

ip 주소 고갈 문제 해결법

IETF solutions

IPng (IPv6) - long term solution

CIDR(Classless Inter-Domain Routing) - short term solution

기존의 class 나누는 방식이 아닌, host part가 어디인지 알려주는 방식 → 가변적인, dynamic한 network id → 주소를 아낄 수 있음

그럼 IP address 어떻게 할당?

Manual configuration

DHCP (Dynamic Host Configuration Protocol) - 정규 ip 주소가 아니라 임시로 ip 주소를 할당받음

NAT (Network Address Translation)

공적인 ip address와 개별적인 ip address의 sender와 Destination의 주소 값을 교환하는 방식

개별적인 ip address에서 datagram 보냄 → NAT router가 datagram source 주소를 바꿔 NAT translation table을 업데이트함 → 응답 address가 도착 → NAT router가 도착 address의 ip 주소를 datagram에서 찾아 바꿈

Internet protocol layering

20byte 아래 실제 데이터가 실려있음

‘Time to live’ field

원래는 sender가 receiver까지 보낼 때 걸리는 시간을 측정하는 부분 이었으나 실제로 그렇게 쓰이지는 않고 라우터를 거칠때마나 숫자가 하나씩 줄어들어, 몇 번의 홉을 거쳐서 destination까지 갔는지를 측정하기 위해 사용됨

4byte = 32bit

[6장]

transport layer에서 sender와 receiver 사이에 데이터 전송이 이루어짐

network layer의 ip가 주소를 가지고 패킷 단위로 보내서 transport layer에 도착함

그렇다면 sender가 보낸 것이 destination에 잘 도착했는지, 중간에 에러가 났는지, 혹은 트래픽이 몰려 딜레이가 생기는 등 여러가지 상황이 발생할 수 있는데 이때 잘 도착했는지 여부를 점검함

Transport Layer Protocols

TCP (Transmission Control Protocol)

깐깐함. 속도보다는 아주 정확해야 하는 중요한 트래픽을 전송할 때 사용

(예. 은행에서처럼 잃어버리면 안되는 중요한 정보를 전송할 때 사용)

TCP의 주요 기능 3가지

end-to-end flow control

sender와 receiver 사이의 속도 조절

sender의 속도가 굉장히 빠른 반면 receiver가 성능이 좋지 않아 전송 속도가 느리고 메모리 공간도 많지 않다고 가정. → 빠른 sender에 비해 그걸 처리할 능력이 안되는 receiver는 버퍼가 금방 넘치게 되고 sender는 쓸데없이 버려지는 걸 보내게 됨. 따라서 sender가 보내는 속도를 조절할 필요가 있다 :: flow control

sender가 데이터를 보내면 receiver는 잘 받았다고 ACK packet을 보냄. (ACK = acknowledge). 이때 receiver가 가능한 메모리 space에 대한 정보를 포함해서 보내면 ACK가 올 때마다의 속도를 알게 되니 속도 조절이 가능해진다

→ sender와 receiver가 넘치지 않도록 만들어주는 방식

Stop-and-wait flow control

하나씩 보내고 ACK(sender의 남은 버퍼 정보 포함)를 기다림

하지만 너무 오래 기다려 효율적이지 않음

Pipelining

Sliding-window flow control

여러개를 보내고 올때마다 하나씩을 더 보내는 방식

여러 패킷을 보내고 패킷을 받는대로 윈도우 사이즈를 옮기면서 다음 패킷을 보내는 방식

window size와 receiver가 ACK를 보낼 때마다 포함하는 window size의 minimum 값을 window size로 정해서 보내게 됨

error control

실수가 용납되지 않음. reliable delivery

stop-and-wait ARQ

1. Error-free operation

1. Lost data packet

sender는 계속해서 ACK을 기다림 → 언제까지? ㅋ 문제가 됨 ⇒ timeout이라는 장치를 둠

sender는 매번 패킷을 보낼때마다 timer를 돌려 일정 시간안에 ACK를 받지 못하면 바로 retransmission한다

1. Lost ACK timeout

데이터 패킷이 아닌 ACK 패킷이 사라진 경우

마찬가지로 timer에 걸리면 retransmission 하게 되고 아까 받은 패킷을 버림 (duplicate → discard)

Go-Back-N ARQ

1. Error-free operation

window size = 3

1. Corrupted data packet

3번은 안왔는데 4번, 5번이 옴..

그럼 receiver는 ACK 4 를 하지 않고 버려버림 → 3번이 안왔기 때문에 timeout이 걸리게 되고 다시 3-4-5부터 보내게 됨

1. Corrupted AKCs

(a) cumulative ACK : 1.2번 ACK을 못받았는데 3번 ACK을 받은 경우 그 이전의 데이터들을 잘 받았다는 의미이기 때문에 전혀 문제없이 그저 ACK만 못받은거구나 하고 해석함

(b) time-out 이전에 1번 ACK을 받지 못했기 때문에 1번에 대한 timeout이므로 1번부터 다시 전송함

congestion control

sender가 데이터를 보내는데 마치 traffic congestion처럼 고속도로가 밀려 제때 전송이 안되었을 때와 비슷한 상황 - network traffic도 마찬가지로 congestion이 생김

유선 네트워크를 가정해서 처음 만들었기 때문에 사실 상당히 안전함 → 모든 패킷이 가다가 error가 생기는 경우가 없다고 생각함 → 중간에 router의 버퍼가 넘친 상황으로만 해석함 → 패킷이 loss → traffic 개수를 줄이는 방식을 취함

TCP assumes that timeouts are caused by congestion

Slow start (time-out에 의해 패킷이 오지 않은 상황을 detection한 경우)

ss-threshold를 넘어가는 순간부터 linear하게 증가하도록 함 → time-out에 의해 패킷이 오지 않았다면 → 현재의 절반을 threshold값으로 두고 1로 떨어짐 → 과정 반복

fast retransmit (time-out이 아닌 timeout전에 3번이 오지 않았고 4번이 옴.. 4번이 와도, 5번이 와도, ACK 3번을 보냄 → 앞에서부터 문제가 되는게 아닌 앞에것은 패킷이 사라졌지만 뒤의 것들은 잘 들어와서 → traffic이 심각하게 congestion하지는 않다고 판단) :: dupack

threshold가 1로 떨어지는게 아니라 dupack이 나오면 timeout이 아니어서 현재값의 반으로 떨어져 linear하게 증가하는 방식으로 동작 → window size를 조절함으로써 congestion 문제를 해결

UDP (User Datagram Protocol)

좀 털털한? 약간 잃어버려도, 전송이 잘 안돼도 큰 문제 없음

(예. 실시간으로 운동 경기를 시청하는데 중간중간 전송이 잘 안되거나 했는데 retransmission(재전송) 해봐야 이미 지난 시점이기 때문에 TCP를 쓸 이유가 없음. 데이터가 전송되다가 화질이 약간 깨지거나 소리가 잘 안나와도 괜찮을 때 사용)

‘no frills’, ‘bare bones’ 즉, 프릴이나 군더더기 없는 뼈대만 존재하는 Internet transport protocol

‘best effort’ service

전송이 잘 되면 좋지만 안돼도 어쩔 수 없다는 의미

Connectionless

handshaking (미리 sender와 receiver가 컨택) 하지 않고 그냥 바로 전송하는 프로토콜

Often used for

패킷이 조금 사라져도 상관없는

특히 streaming multimedia application에서 스트리밍할때 많이 사용

# data[].attributes.body
5장

* Networ layer service
- sender가 보낸 내용을 receiver에 안전하게 전달

* Network Layer
- 입력층에서 데이터를 받아서 출력층으로 보낸다.
-forwarding : 어느 곳으로 보내야 될지를 주소를 보고 판단하는 행위

* Circuit switching
- 옛날 전화방식으로 송신자가 회선을 미리 예약하여 회선을 생성하고 통화 후 종료한다.

* Message Switching
- 미리 circuit을 만들지 않고 packet단위로 쪼개서 보내 시간을 단축시킨다. header가 너무 많다면 시간이 더 오래걸린다.

* Routing Algorithnms
- router가 routing table 을 잘 만들어 놓으면 header의 주소를 보고 수신지까지 잘 전달한다. 각자 스스로 계산하는 알고리즘

1. Link state routing
- 각각의 노드가 연결되어 있는 노드끼리 각자의 코스트 값을 교환한다.
ex) Dijkstra's Algorithm
2. Distance vector routing
- 이웃노드끼리 routing table을 공유한다.
ex) Hierarchical routing

* IP addresses
- 5개의 class로 구분된다.
- net ID(구매한 기관의 id),host id(구매한 기관이 이용할 수 있는 ip addresses)

* Subnet Addressing
- host ID를 효율적으로 쓰기 위해 쪼개서 사용 가능

* CIDER
- hostID를 제외한 나머지 32bit에 대해서 효율적으로 class a,bc를 사용하기 위한 방법

* NAT
- IP주소가 부족할 때 할당받은 IP주소 하나를 가지고 많은 호스트를 연결하는 방법

* IP
- 통신에 쓰인다.

* ICMP
- network를 제어 한다.
* IGMP
- 멀티캐스트를 하기 위해 정의 한다.

6장
* Transport layer protocols
- sender가 보낸게 잘 도착했는지

* Internet Transport Protocols
- UDP : 잃어버려도 됨 덜 중요 속도가 빠르다.
- TCP :  속도가 느리고 깐깐하게 진행시킨다

1) TCP Flow control
- stop and wait flow control : 하나보내고 stop한 후 잘받았다고 확인한 수 하나 보내는 방법

2) Sliding-window-flow control
- 여러 패킷을 보내고 ACK가 올때마다 다음단계를 보낸다.

* Error control
- stop and wait arq:
lost data peration : sender는 일정시간안에 ack를 받지 못하면 재전송한다.
lost ack timeout : ack가 time out시간에 다시오지않으면 다시 재전송한다.

* Go back n arq
- corrupted acks : w=3일떼 1,2번이 안왔는데 3번이 온 경우 다보낸후  timeout전에 ack3가 다시 온다.

* TCP Congestion Control
Congestion control by time out
- ssthresh 가 넘으면 linear하게 증가하다가 timeout 에 의해 packet이 오지 않으면 ssthresh값을 현재값의 반으로 떨어져 일부터 시작한다.

# data[].attributes.body
5장 Network Layer & IP

l  네트워크 레이어 서비스

-    Sender가 보내는 데이터를 리시버에게 안전하게 전달하는 역할을 함.

-    컴퓨터 네트워크에서는 패킷 데이터를 보낼 때마다 헤더에 주소를 써서 보낸다.

[기능]

-    Forwarding: 결정된 것을 보고 전달하는 역할

-    Routing: 주소를 보고 어디에 보낼 지를 결정

[커뮤니케이션 네트워크]

-    Circuit-switching

Circuit을 만듦

통화

Circuit을 끊음

장점: real-time으로 오랫동안 통화하기에 좋다

단점: 위와 같은 이유로 채널의 낭비가 존재

-    Message Switching

-    Packet-switching

하나의 데이터를 여러 개의 패킷으로 쪼개서 간다

순서가 뒤바꿔서 전달: 순서를 재정비 함

무조건 잘게 쪼개는 것이 좋은 것은 아님, 많은 헤더가 필요하다

-    라우팅 알고리즘

라우팅 테이블을 만드는 과정

최적의 경로로 가는 방법

(1)    Link state routing algorithm

-    Dijkstra’s Algorithm

각각의 노드는 network topology 알고 있습니다.

선택이 되면 라우팅 테이블을 만든다.

(2)    Distance vector routing

-    각 노드들이 이웃과 주고 받는다.

-    각자가 가지고 있는 라우팅 테이블을 활용해서 계산한다.

-    실제는 대표 라우터를 선정하고 라우팅 테이블을 만들고 내부에서 라우팅 테이블을 만듦.

2.     IP (Internet Protocol)

(1)    IP address

-    32bit IP address

-    Host ID

-    Net ID

-    Subnet mask

-    몇 비트를 사용할 지는 각 기관에서 알아서 함.

-    IP 어드레스가 많이 필요해서 이를 해결하기 위한 방법

IETF solution

CIDR: 클래스 A, B, C 상관 없이 함

-  IP 어드레스를 할당함

어드레스를 다양하게 할당함.

IP 어드레스 할당방식

매뉴얼 Configuration

-  DHCP

-  NAT

IP어드레스 하나에 다양한 호스트를 연결할 수 있다.

-    IP layering

ICMP

IGMP

ARP

-    TTL

3.     Transport Layer protocols

-    센더가 보낸 데이터가 데스티네이션에 잘 도착했는지에 여부 등의 일을 하게 됨.

-    UDP

간단한 프로토콜

기본적이 골격만 유지

전송이 안되면 어쩔 수 없음

Ex) 멀티미디어 어플리케이션에서 스트리밍 할 때 주로 사용함.

간단한 에러 체킹

-    TCP

속도보다 정확함이 중요함.

Ex) 은행간 거래, 완전히 정확해야 할 때

에러가 있으면 안됨.

Congestion control

End-to-end Flow control

Error control

(1)    TCP Flow control

Stop-and-wait flow control

Sliding-window flow control

(2)    Error control

ARQ

Classification

-    Stop-and-Wait ARQ

Error free operation

Lost data packet

-    Go-Back-N ARQ

Corrupted data packet

Corrupted ACKs

(3)    TCP Congestion Control

-    Congestion control by timeout

-    Fast Retransmit

3dupack이 오면 현재 값에 반으로 떨어지고 리니어 하게 증가함.

# data[].attributes.body
AIoT 5장

● Network Layer Services

Packet을 보낼때마다 header에 IP 주소를 적어보냄

라우터들이 안전하게 목적지까지 packet을 보냄

● Network Layer

Data를 입력측에게 받아서 출력측으로 보내는 역할

Forwarding : 라우터가 data를 입력측에게 받아서 어떤 출력측으로 전달하는 행위

Routing : 어느 곳으로 보낼지 주소를 보고 판단하는 행위

● Taxonomy of Networks (Network core)

Circuit switching : 옛날 전화 방식, Circuit을 만들고 data를 전달하고 Circuit을 끊는 방식, 한번 Circuit이 만들어지면 장기간 소통할 수 있다는 장점이 있지만 채널의 낭비가 있다는 단점이 존재

Message switching : Circuit의 생성없이 바로 message를 보내는 방식, Message의 길이가 길면 전송시간이 길어질 수 있고 라우터가 커야함

Packet switching : Message switching방식의 일부, 긴 message를 여러 개의 작은 packet으로 나눠서 보내는 방식, 라우터가 다른 경로를 안내해주면 data의 도착순서가 바뀔 수 있음, Message를 한번에 보내는 것보다 packet으로 나눠서 보내기 때문에 전송속도가 빠름, packet의 길이보다 data header 길이의 영향이 더 커지게 되면 많이 나눠도 속도가 느려짐

● Routing Algorithm

라우팅 table을 만드는 algorithm

각 라우터들이 스스로 계산

Link State routing algorithm : a.k.a. Dijkstra’s Algorithm, 각 라우터끼리 경로와 cost를 교환 후 topology생성 -> 여러 경로의 cost를 비교 후 가장 작은 값을 가지는 경로 선택 -> 라우팅 table 생성

Distance vector routing : bellman-ford algorithm, 이웃한 라우터에게서 라우팅 table을 받아서 경로 계산 가능

● Hierarchical routing

대표 라우터들을 선정 후 라우팅 table을 생성

● IP addresses

class A : 7bit Net ID와 24bit Host ID로 할당

class B : 14bit Net ID와 16bit Host ID로 할당

class C : 21bit Net ID와 8bit Host ID로 할당

class D

class E

Net ID : 기관에서 사용하는 ID

Host ID : Net ID를 제외한 ID

subnet Addressing : 효율적인 사용을 위해 Host ID를 Subnet ID로 나눠서 사용

IP address가 부족하기 때문에 IPng를 해결책으로 제시했으나 모든 장비를 바꿔야 하기 때문에 short term solution이 등장(IETF)

CIDR (Classless Inter-Domain Routing) : class에 상관없이 IP를 x로 나눠 Network부분을 알려주고 나머지 부분인 Host를 알려주는 방식

Manual configuration : 개인에게 IP하나를 할당하는 방식

DHCP : 임시 IP 주소를 할당받아 해당 장소에서 사용한 후 반납하는 방식

● NAT (Network Address Translation)

IP 주소 부족문제를 해결하기 위한 하나의 방법

주소하나로 여러 Host를 연결할 수 있는 방식

공적으로 할당받은 인정된 IP에서 여러 사설 IP를 만들어 Host들에게 할당

Host가 사설 IP를 라우터에게 전달 -> 라우터는 sender를 바꾸고 자신으로 바꾸고 공적 IP로 전달 -> 결국 라우터는 공적 IP를 Host에게 전달

● Time to Live

몇 번의 라우터를 거쳐 목적지까지 가는지 측정하는 용도로 사용

AIoT 6장

● Transport layer protocols

Sender가 보낸 data가 Destination에 정확히 도착했는지 알아보는 역할

● Internet Transport Protocols

- UDP : 전송이 제대로 되지 않아도 상관없는 data의 전송에 사용, 기본적인 골격만 있는 Internet Transport Protocol, 전송이 전달이 잘 안될 수도 있음, sender와 receiver사이에 사전 contact없이 전달하는 protocol, 멀티미디어 파일을 streaming할 때 많이 사용

TCP : 전송이 제대로 되어야만 하는 data의 전송에 사용, 정확하게 도착해야함, 잘못 전달된 packet을 버려야함, 잃어버린 packet들은 retransmission해야함, Congestion control, End-to-end Flow Control, Error Control

● TCP Flow control

Receiver가 ack를 보낼 때 가능한 메모리 space에 대한 정보를 포함시켜 보내면 Sender가 Receiver를 넘치지 않도록 조절해주는 방식

Stop-and-wait flow control : Data를 보내고 ack를 받은 다음 두 번째 data를 보내는 방식, 오래기다려야해서 비효율적

Pipelining : 3개의 데이터를 보내고 첫 번째 데이터의 ack가 도착하면 바로 다음 3개의 데이터를 보내는 방식

Sliding-window flow control

● Error Control

Stop-and-Wait ARQ : Lost data packet -> ack가 오지 않을 때 영원히 기다릴 수 없기 때문에 timeout을 정함(timeout은 정상적인 ack가 오는 시간보다 길어야함) -> ack를 손실한 경우도 같음

- Go-Back-N ARQ : Sliding window에 기초함, error가 난다면 error가 난 packet으로 돌아가 다시 전송하는 방식

- Corrupted ACKs

- 1, 2번 ack가 손실돼었지만 3번 ack가 도착한 경우 : 정상적인 상황으로 간주

- ack가 손실돼어 timeout이 지난 경우 : ack를 수신하지 못한 packet부터 재전송

● TCP Congestion Control

무선에 비해 상당히 안전한 유선 network을 가정한 protocol

traffic이 몰려 buffer가 넘치는 상황을 해결하기 위함

Congestion control by timeout (TCP Taeho) : timeout에 의해 ack이 오지 않으면 ssthresh가 당시 window size의 절반으로 떨어짐 -> window size가 ssthresh까지 다시 2n씩 증가하다가 이후부터는 선형적으로 증가

Fast Retransmit Mechanism : ssthresh값이 당시 window size의 절반으로 줄어듬 -> window size가 1부터 시작하지 않고 ssthresh값부터 선형적으로 증가

# data[].attributes.body
5장, Network Layer & IP

Network layer는 송신자로부터 패킷을 받아, 인터넷을 통해 외부의 네트워크로 전송하는 역할을 한다.

Forwarding: router input으로부터 router output으로 패킷을 전달

Routing: 패킷으로부터 출발지-목적지를 결정함

Forwarding & Routing

네트워크 사이 통신하는 방법

Circuit-switched networks

유선 전화망에서 사용. 요청이 오면 목적지까지의 회선(circuit)을 예약하고, 데이터 전송 후 회선의 예약을 해제한다. 한번 회선이 연결되면 delay가 적기에 long-time communication에 유리하지만, 채널의 낭비가 있다.

Packet-switched networks

컴퓨터 통신망에서 사용. 회선을 예약하지 않고, 긴 메시지를 짧게 쪼개 통신한다. 데이터가 여러 라우터를 거쳐 순서가 섞일 수 있으며, 이후 순서를 재정립한다. 모든 링크를 사용하여 데이터를 전송할 수 있고 채널의 낭비가 없지만, 전송할 데이터가 많을수록 여러번 쪼개 데이터를 전송해야 하므로 느리며 router의 buffer가 커야함.

Pipelining: 패킷을 더 잘게 쪼개서 데이터를 보낸다면 시간은 적게 들지만, 패킷의 헤더를 여러번 작성해야 한다.

difference between circuit and packet switching

Routing Algorithm

Router가 목적지로 향하는 최선의 경로를 저장한 Routing table을 작성하는 알고리즘

Routing table

Link State routing: Dijkstra’s Algorithm을 사용한다.

Distance vector routing: Bellman-Ford Algorithm을 사용한다.

Hierarchical routing

네트워크가 커짐에 따라서 라우팅 테이블을 모두 연결하기 어려우므로, 한 집단에 의해 관리되는 Autonomous System의 대표 router들로만 routing table을 구성한다. 내부에서도 routing table을 구성하여 계층적으로 routing algorithm을 구현한다.

Hierarchical routing

IP(Internet Protocol)

각 host와 router는 IPv4 기준 32bit IP 주소를 할당받는다.

IP 주소는 network ID와 host ID로 이루어지고, network ID는 사용 가능한 망의 수, host ID는 한 network 당 사용 가능한 기기의 수이다.

(ex. class A를 이용 가능한 기관은 $2^7$개이고, 각 기관은 $2^{24}$개의 기기를 사용할 수 있다.

따라서 대부분의 기관은 적절한 기기를 가진 class B를 선택한다.

Subnet Addressing

host ID를 쪼개어, 일부는 subnet ID로 일부는 host ID로 사용한다. subnet과 host를 구분하는 것이 subnet mask이다.

host는 IP 주소와 subnet mask를 이용해 데이터그램의 목적지가 1. 같은 subnet인지, 2. 같은 network 상의 다른 subnet인지, 3. 다른 network인지 구분한다.

IP 주소의 부족을 구축하기 위한 방법

IPv6 구축(long term solution)

CIDR(Classless Inter-Domain Routing, short term solution)

IP 할당은 다음의 방법을 이용한다.

1. Manual configuration

2. DHCP(Dynamic Host Configuration Protocol)

private IP & public IP

public IP는 ISP가 기업 등에게 제공하는 유일한 IP이며, private IP는 기업의 라우터에서 개인 또는 회사의 기기에게 발급하는 IP이다.

private IP는 네트워크 안에서만 고유하며, 다른 네트워크에서도 존재할 수 있다.

NAT(Network Address Translation)

private IP를 public IP로 변환하는 기술.

MTU(Maximum Transmission Unit): 최대 패킷 크기.

6장, Transport Layer

Transport Layer에서는 송신자의 데이터가 목적지에 잘 도착했는지, 에러는 발생했는지, 딜레이가 있는지 등을 살핀다.

UDP(User Datagram Protocol)

NO ack, retransmission

Out of order, duplicates possible

handshake가 없어서 통신을 보장하지 못함. 주로 영상 스트리밍에서 사용.

TCP(Transmission Control Protocol)

Reliable, in-order delivery

Discarding of corrupted packets

Retransmission of lost packet

Flow control: sender와 receiver 사이의 전송 속도를 조절함

Stop-and-wait flow control: 세그먼트 하나를 보내고 ACK를 날리고, 다시 전송을 반복. 낮은 효율

Pipelining increases utilization: 세그먼트 여러개를 병렬적으로(pipelining) 전송한다.

Sliding-window flow control: window size 만큼 세그먼트를 병렬적으로 전송하며, 여러 ACK는 하나의 메시지로 간주된다(cumulative ACK)

Sliding-window flow control

Congestion control: traffic이 몰려서 Router의 buffer가 넘칠 경우에 제어

Slow start: window의 수가 threshold 미만일 경우 2배수로 증가하고, 그 이후에는 linear하게 증가한다. congestion으로 인해 timeout이 발생할 경우 현재 window의 절반을 threshold로 재설정하고 window를 1로 낮춘다.

Slow start

fast retransmit: 3 dupack 이후에는, window size를 절반으로 줄인다.

Error control: 노이즈 등 에러 발생 시 제어

Stop-and-Wait ARQ: sender가 패킷을 전송할 때, timeout을 설정하여 해당 시간 내에 ACK가 도착하지 않으면 재전송한다. 데이터가 제대로 전송되지 않거나, ACK가 유실될 때의 경우.

Go-back-N ARQ: sliding-window 방식을 사용할 때, 데이터를 제대로 수신하지 못한 패킷과 이후로 도착한 패킷들은 모두 폐기하고, 해당 패킷들을 다시 전송받는다.

Go-back-N ARQ

cumulative ACK

# data[].attributes.body
ch. 5-1

Network Layer
- 입력받아 어디로 출력할지 결정(forwarding & routing)

circuit에서 packet switching로 변화

circuit
- delay 없음 but channel 낭비가 발생

packet
-packet 단위로 쪼개서 신호를 보냄

각각의 node가 정보공유를 통해 모두의 cost를 파악할 수 있음

Routing Algorithms
- 각자가 스스로 계산

ch. 5-2
IP(Internet Protocol) addresses
- 주소 고갈 문제 해소를 위해 새로운 version(IPv6)

CIDR(classless inter-domain routing)
"xxx.xxx.xxx.xxx/?"로 가변적으로 만들어 여러개를 만들 수 있음

ch. 6
Transport Layer

TCP(Transmission Control Protocol
- 완전히 정확한 정보를 보내야할 때 사용
- reliable, in-order packets
- flow control ~ 신호를 주고 받는 속도를 조절하기 위해

UDP(User Datagram Protocol)
- 일부 손실이 있어도 되는 경우 사용
- out of order

Error Control
- Stop-and-Wait ARQ
- time out 사용으로 일정시간 이상 신호가 없으면 refresh

TCP Congestion Control
- 라우터가 넘치는 경우, 트래픽 갯수를 줄이는 방법을 선택
- 유선을 가정해서 만듬/ 안정성이 높음

# data[].attributes.body
5장 Network Layer & IP

1. Network layer service
: sender에서 receiver까지 안전하게 전달, 데이터 보낼 때마다 헤더에 주소를 입력

Network Layer
1) Forwarding : 수신자 주소를 보고 데이터를 받아 보내는 행위
2) Routing : 주소를 보고 어느 곳으로 보내야 할지 판단하는 행위

Communication networks
1) Circuit-switched networks
- 회선을 만들어 통화 후 회선을 끊는 방식
- 장점 : 미리 예약할 수 있어 오랜 시간 통화에 좋고 delay가 없음
- 단점 : 채널 낭비가 존재
2) Message Switching
- circuit 만들지 않고 바로 보냄
- Packet Switching : 데이터를 쪼개서 보냄. 중간에 한쪽이 밀리
면 다른 경로로 보낼 수 있음. 순서가 다르게 도착하더라도 재정
비 가능
- 무조건 많이 쪼개는 것이 좋은 건 아님 -> 데이터와 header의 사
이즈가 비슷해지면 header의 영향이 커지기 때문

Routing Algorithms
: 스스로 계산하여 routing table을 만듦.
1) Link State routing algorithm
- 각각의 노드가 자신과 이웃한 노드를 알고 cost를 알고 있어 이를
서로 주고받으면 모든 노드가 똑같은 topology 그림을 알게 됨.
2) Distance vector routing
- 자신의 이웃하고만 데이터를 주고받음.
3) Hierarchical routing
- 수많은 router, 너무 긴 table 때문에 생김
- 대표 router 선정하여 대표끼리 routing table 만들고, 내부안에
서 table을 따로 만드는 방식

2. IP

IP address : 5가지 class

Subnet Addressing : Host ID를 효율적으로 쓰기 위함.

Subnet mask : 몇 비트로 나누었는지 알려주기 위함.

IP address 부족 문제 해결 방안
1) CIDR : class ABC와 상관없이 "/"를 이용해 host part가 몇 비트
임을 알려주는 방식
2) DHCP : 임시 IP address를 받아 쓰고 반납하는 방식
3) NAT : 데이터를 보낼 때 임시 IP주소로 보낸 후 router에서 공적
인 IP로 바꿔 데이터를 보내는 방식, 받을 때도 같은 방법

Time to live(TTL) : 몇 번의 hub을 거쳤는가를 측정

6장 Transport Layer

1. Transport layer : 잘 도착했는지 여부 파악

UDP(User Datagram Protocol)
: 기본 골격만 유지, 잘 되면 좋지만 전달 안될 수도 있음, packet이
조금 사라져도 상관없는 경우 사용.

TCP(Transmission Control Protocol)
1) Flow Control : sender가 빠른 속도로 보내 receiver가 잘 받지
못해 buffer가 넘쳐 sender의 속도 조절이 필요
- Stop-and-wait : 데이터 한개 전송, 멈춘 후 ACK 받을 때까지 기
다림 -> 비효율
- Pipelining : 동시에 여러개 보내고 ACK 기다림.
- Sliding-window flow control : 여러 packet 보내고, ACK 받
을 때마다 다음 Packet 보냄.
2) Error Control
- Stop-and-wait ARQ

Lost data : 데이터 전송 후 ACK 계속 기다림.

이를 방지하기 위해 Timeout을 정해 그 시간만 기다린 후, 같은 데이터 재전송

Lost ACK : Timeout 기다린 후 데이터 재전송하지만 이미 받은 데이터 이므로 ACK만 보낸 후 데이터는 버림.

- Go-Back-N ARQ : n개 보내고 ACK 받자마자 다음 data 전송

Corrupted data : 3번째 data 전송 실패 -> ACK Timeout이 끝난 후 다시 3번째 데이터부터 재전송, 3번째 이후로 보내진 데이터는 버려짐.

Corrupted ACKs : (Timeout 끝나기 전) 앞에 ACK 안왔지만 뒤에 ACK가 오면 그냥 ACK 사라졌다 인식하고 아무런 문제 없이 이어서 보냄. (Timeout 끝난 후) ACK 오지 않았다면 다시 재전송

3) Congestion Control : 많은 packet이 몰리면 buffer 넘침.
- Timeout에 의해 ACK 오지 않으면 다시 1로 떨어짐.

# data[].attributes.body
Chapter 5

Network Layer & IP

네트워크 계층

- 패킷을 받고 목적지에 제대로 전달하는 역할 수행

- 이때, 목적지의 주소가 IP 주소

- 기능 : forwarding(입력 패킷을 다른 라우터로 전달), routing(주소를 받고 어느 라우터로 가야하는지를 결정)

네트워크 계층의 구분

1) circuit-switched networks (1,2g)

- 연결하고자 하는 곳과의 회선을 예약,

- phases (Circuit extavlishment, Data transfer, Circuit termination)

- 단점 : 채널의 낭비 발생

2) Packet Switching

-하나의 데이터를 여러 개의 패킷으로 나눠 전송

- “적절한”pipe – lining을 통해 전송 시간을 단축

네크워크 계층 서비스

- 라우팅 알고리즘 - 라우터 테이블을 만드는 과정

- 중앙집중화된 방식이 아니라 각각의 라우터가 계산하는 분산 방식

- 라우터들을 vertex로 하는 Graph에서 최소비용을 가지는 edge로 forwarding하는 알고리즘(dijkstra’s Algorithm)

%dijkstra’ Algorithm

- 시작 노드와 연결된 노드의 비용 중 가장 작은 노드로 이동

- 그 이동한 노드를 기준으로 인접 행렬을 업데이트

- 비용을 비교하면서 반복

% bellman-form algorithm

- 시작노드와 인접한 노드들의 라우팅 테이블을 활용하여 계산

- 인접 노드들로부터 다른 노드로 가능 비용에 시작 노드로부터 해당 인접노드의 비용을 더하는 알고리즘

Chapter 5 -2 IP : internet protocol

IP 주소란

- 유일한 32bit의 주소로 net ID, host ID 포함

IP 주소의 클래스

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

서브넷 주소

class B를 가정 → host ID를 8 bit, 8bit로 나눠 서브넷, 호스트로 나눔

서브넷 마스크 : 서브넷이 몇 비트를 사용하는지에 대한 정보를 전달

IP 주소 계획의 문제

- 인터넷의 엄청난 성장으로 할당할 수 있는 주소가 부족

- 라우팅 테이블 사이즈의 빠른 증가

해결책 : long term(IPv6), short term(CIDR)

IP 주소의 할당

-수동

-DHCP(Dynamic Host Configuration Protocol)

NAT

- IP주소 부족의 해결방법 중 하나

- 할당된 하나의 IP주소(공적IP)를 사적IP로 변환

- NAT translation table을 활용해 변환이 일어남

Chapter 6 Transport layer

Transport Layer : sender가 보낸 패킷이 잘 도착하였는지 확인하는 계층

UDP : User Datagram Protocol

-보내는 트래픽의 이상이 생기는 것이 큰 문제가 아닌 경우

TCP : Transmission Control Protocol

- 정확하게 도착하는 것이 매우 중요한 경우(예, 금융데이터의 전송)

-no frills

- best effort

- Connectionless

- Often used for

TCP의 controls

- Congestion control

- End-to-End Flow control

- Error control

Error Control

- Stop and wait ARQ : ACK를 받지 못했을 때, timeout 만큼을 대기후 재송신

- GobackN ARQ : error-free operation, corrupted data packet

Congestion Control

- 트래픽에 정체가 생기는 것을 통제

- timeout → ssthresh가 현재 값의 절반→ retransmission

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

Network Layer
: Sender가 보낸 자료를 Destination에 안전하게 전달하는 역할 (IP의 역할이기도 함)
* packet = 데이터
** header = 주소 (IP address)
- 중간에 router을 거쳐 destination에 도착

Netwokr-layer Funtions
1) forwarding (전달)
: packet을 전달하는 행위
2) routing (중계)
: 주소를 보고 어느 방향으로 보낼지 판단

따라서, routing table이 중요
-> 라우터들 간 스스로 계산하여 생성

Circuit-switched networks
: 옛날 유선 네트워크 형태 (1G, 2G)
- 송신자가 Circuit(회선)을 미리 예약하는 형태 [circuit생성 - 통화(transfer) - circuit종료]
- 장점 : 하나의 서킷을 생성하여 사용하기 때문에 real-time으로 오래 사용하기 편리, delay 감소
- 단점 : channel의 낭비가 존재

Packet-switched networks
: 최근 컴퓨터 통신망 형태 (3G ~ )
-> Message-switching에 속함

Message-Switchg (with packet switching)
: 메세지가 크면 전송에 오래 걸리고 버퍼가 커야하는 단점이 존재
따라서, meaasge를 packet단위로 slice하여 전송 = packet switching

Packet switching
- packet을 보낼 때 connetion 없이 data를 packet 단위로 쪼개서 전송
- 한쪽 경로에서 지연이 발생하면 다른 경로를 통해 전달
- 도착 순서가 달라져도 초기 데이터 서열은 바뀌지 않음
* packet size가 작아진다고 해서 전부 시간이 단축되는건 아님 (과도한 header로 인해 지연되는 지점이 발생 : 오버헤드)

Routing algorithms
- link state routing
- Distance vector routing

IP address
- IPv4 : 32비트의 IP address, Net ID와 Host ID로 구성됨
* Net ID : 특정 기관 소속을 알리는 정보
** Host ID : 컴퓨터에 할당되는 정보
- Class B(2¹⁴개 기관에서 각 2¹⁶개 Host IP)를 가장 많이 사용
*Dotted Decimal Notation : 32bit를 8bit씩 쪼개서 10진수로 표현

Subnet addressing
: Host ID 부분을 세부 networks로 쪼개어 사용하는 방식
- Subnet mask : 기관에서 subnet을 몇 bit로 쪼갰는지 구분하기 위한 장치 (1 : Net ID & Subnet ID , 0 : Host ID)

Internet의 발전으로 IPv4주소가 포화상태에 직면
-> IPv6, CIDR 등의 해결 방안 마련

CIDR (Classless Inter-Domain Routing)
: Class간 host ID 격차로 인한 낭비를 감소시키기 위한 주소 할당 방법으로, network ID 부분을 가변적으로 함

ID address 할당방법
1) Manual configuration : 특정 IP를 고정적으로 할당하는 방법
2) DHCP (Dynamic Host Configuration Protocol)
: 임시로 할당받은 IP주소를 사용 후 반납하는 방식, dynamically함

# data[].attributes.body
5장 Network Layer & IP

1. Netwrok Layer Services

(1) 기능 – Forwarding, Routing

(2) Circuit-switching - 서킷을 만들고, 통화를 하고(데이터를 전달하고) , 서킷을 끊고 3가지 단계로 이루어짐

(3) Message Switching

(4) Packet Switching - 패킷을 쪼개면 쪼갤 수록 전달 시간이 단축됨, 그러나 패킷과 해더의 사이즈가 비슷해지면 오히려 시간이 길어짐

2. Routing Algorithms

(1) 라우팅 각자가 스스로 계산하여 최적의 결론을 도출

(2) Link State routing

1) 각각의 노드가 연결되어 있는 노드끼리 각자의 코스트 값을 교환

2) Dijkstra’s Algorithm을 실행

(3) Distance vector routing

(4) Hierarchical routing

3. IP addresses

(1) 32 비트 IP address 사용

(2) Net ID, Host ID, Class A~E

(3) Subnet Addressing

(4) Problems of IP address scheme (class-ful addresses)

(5) CIDR

(6) IP 주소 할당 방법 - DHCP(임시 IP할당하는 방법)

4. NAT (Network Address Translation)

5. IP (Internet Protocol)

6장 Transport layer

1. Transport layer protocols

(1) UDP -털털하고 간단한 프로토콜, 잃어버려도 상관없고 그런 경우

(2) TCP - 속도보단 정확한 전달을 필요로 할 때, 에러가 없어야함

1) Congestion control

2) End to end Flow Control

3) Error Control

2. TCP Congestion Control

(1) Congestion control by timeout

(2) congestion control by 3 duplicate Acks

# data[].attributes.body
AIoT 5-1장

IP : 전세계 공통 주소 체계
라우팅, 포워딩
Circuit-switched networks 회선 예약 방식, 3가지 단계, 딜레이가 없는 대신 낭비가 심함
Packet switched networks 하나의 데이터를 분산시켜 전송, 헤더에 부하가 걸리면 느려짐
Routing Algorithms
Link State routing : 서로의 cost 교환하여 계산
Distance vector routing : 이웃끼리의 cost만 교환하여 계산
Hierarchical routing : AS에서 대표 라우팅만 선정하여 계산

AIoT 5-2장

32bit IP address
5가지 Class
Class A : 0으로 시작, Net ID 7bit, Host ID 24bit 0.0.0.0 - 127.255.255.255
Class B : 1 0으로 시작, Net ID 14bit, Host ID 16bit 128.0.0.0 - 191.255.255.255
Class C : 1 1 0으로 시작 Net ID 21bit, Host ID 8bit 192.0.0.0 - 223.255.255.255

Subnet Addressing 효율적으로 Host분배, subnet mask

IP address scheme의 문제 IP고갈, CIDR : Host부분을 알려줘 IP주소 절약
DHCP 임시 IP주소를 할당받아 사용 후 반납
NAT : 공적 IP주소를 하나 할당받아 사설 IP분배

AIoT 6장

Transport layer protocols 데이터가 잘 도착하였는지 확인

UDP 빠름
데이터 유실에 상관없을 경우 사용, 수, 발신자 확인하지 않고 보냄

TCP 속도보다 신뢰성 우선,
Folw Control : 보내는 속도와 받는 속도 조절
Error Control : Timeout을 이용하여 분실된 데이터 다시 전송
Congestion Control : 라우터 문제로 생각하여 노드를 줄임 (Timeout, Congestion)

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

Network Layer

-데이터 송신 시 헤더 내부에 목적지 주소를 실어 전송

-forwarding&routing

=>데이터를 입력측에서 데이터 수신측 주소 확인 후 전송로 결정

Circuit-switching

- > 회선 연결 - 데이터 전송 - 회선 연결해제

- > 장점: Realtime으로 통신시 유리함.

- > 단점: 한곳에서 독점하고 있어 낭비가 심하다

Packet-switching

- > 하나의 데이터를 여러 패킷으로 송신

- > Circuit-switching과 달리 송신 경로를 미리 확립하지 않음

- > Message-switch의 단점인 메시지 길이 문제를 해결하기 위해 파이프라인을 사용

- > 데이터의 크기를 고려해 적절한 패킷으로 나눠 전송

Routing Algorithms

-> 목적지 경로까지의 비용을 고려해 경로 설정

-Link State routing

-Distance vector routing

-> Dijsdktra's Algorithm=> 인접한 라우터까지의 경로를 계산 후 가장 최적의 비용의 경로 설정

-> 벨만 포드 알고리즘 => 인접한 라우터까지의 경로의 라우팅 테이블을 기준으로 최적의 경로를 계산

-> Hierarchical routing =>현실에 맞게AS routing을 활용해 대표 라우터를 지정 후 Region으로 가는 경로 지정

5-2장

IP ->라우팅알고리즘을 구현하는 곳

-> 4byte 32bit IP

->5개의 클래스로 구분됨(A,B,C,D,E)

A  class

=>range(0.0.0.0~127.255.255.255)

B  class( 기관에서 가장 선호하는 클래스, 호스트 충분히 할당 가능)

=>range(128.0.0.0 ~ 191.255.255.255)

C  class

=> range(192.0.0.0 ~ 223.255.255.255)

D class

=>range(224.0.0.0 ~ 239.255.255.255)

E class

=> range(240.0.0.0 ~ 247.255.255.255)

Subnet Addressing

=> 호스트를 나눠주는 기능

서브넷 마스크

=>호스트를 몇개로 나눠 사용하는지를 결정하는 역할수행

IETF solutions

-> IPv6도입을 통해 IPv4의 자원고갈 문제 해결

CIDR

->  호스트 사용 범위가 큰 클래스방식 문제 해결을 위해 사용

-> /OO입력되는 숫자에서 32을 뺀 나머지를 호스트로 사용

DHCP

-> 임시 IP를 할당받아 사용(스마트폰에서 사용)

NAT

=>HOST에게 사설 IP를 할당하고 공적으로 할당받은 IP주소통해 전송

ICMP-> 망 관리 및 제어에 사용

IGMP->  멀티캐스트시 사용

ARP&RARP-> IP주소를 알지 못할 경우 사용

TTL-> 몇번의 홉을 거쳐 도착하는지를 측정

6장

Transprot layer

-Sender와 Receiver 사이에 데이터 전송시 데이터가 정확히 송수신 되었는지를 확인

-TCP, UDP

UDP

->일부 데이터의 유실이 있더라도 큰 문제가 되지않을 경우 사용

TCP

-> 송수신시 신뢰성이 보장되야하는 경우 사용하는 프로토콜

-> Congestion Control=> sender가 데이터 전송시 문제가 발생했을때

-> End-to-Flow Control => sender와 receiver사이 전송 속도 조절

-> Error Control-> 에러 제어

TCP Flow control

-> Sender가  Receiver의 버퍼가 넘치지 않도록 속도를 조절

-> stop-and-wait(ACK를 확시 다시 전송)

-> Pipelining (지정한 파이프 라인 개수만큼 한 번에 전송)

->Sliding-window flow

Error Control

-> Stop-and-wait ARQ=> 패킷 송신 후 ACK수신시 다음 데이터 전송(Time out을 지정을 통해 유실 확인)

-> Go-Back

=>에러 발생시 AKC를 수신하지 못한 패킷부터 재송신

=>cumulative 중간에 한개의 ACK가 유실되더라도 유실된 패킷 다음 패킷의 ACK수신시 정상 수신으로 가정

=> time-out을 기준으로 ACK 미수신 데이터 재전송

TCP Congestion Control

-> 트래픽 발생시 트래픽 제어 기능 수행

-> 전송하는 window 값을 고려해 전송

# data[].attributes.body
5-1장
1. Network Layer

1.  Routing

2. Communication networks

1. Circuit-swithched networks = 1세대

1. 서킷을 미리 만들고 통화를 끊는 행위가 필요합.

2. 딜레이가 없다

3. 채널의 낭비가 존재한다

2. Packet-switched networks = 3세대

3. 라우팅 알고리즘

1. 라우터들이 스스로 계산을 한다.

2. ***Dijkstra’s 알고리즘

3. 최적의 과정을 찾는 알고리즘

1. 계산과정 숙지

2. Bell-man 알고리즘

1. 각자의 라우팅 테이블을 받고, 경로수를 더해서 비교. 더 작은 값을 선택.

3. Hierarchical routing

1. 대표 라우터를 설정하고, 내부의 라우터를 만드는 것

4. 5-2장

1. IP addresses

1. Net ID, Host ID로 나뉜다.

2. 32 bit 어드레스를 전세계적으로 쓰고있다.

1. classA(7,24), classB(14,16), classC(21,8), classD, classE로 나뉜다.

2. 주로 클래스B를 쓴다.

3. IP address scheme의 문제점

4. IETF solutions

1. Short term solution

2. Long term solution

5. CIDR

6. NAT

1. 하나의 공적인 어드레스를 할당받았지만, 사적으로 ip를 할당 해줄 수 있다.

5. 6장

1. Transport layer protocols

1. TCP, UDP 2개의 종류가 있다. UDP 전송이 안되도 상관없을때, TCP 속도보다는 정확한 데이터를 전송해야 할 때 쓴다. 실수란 있으면 안된다. (Ex. 은행)

2. UDP = 8바이트

3. TCP = congestion control, End-to-end flow control, Error control

4. TCP flow control = sender가 보내면 리시버가 acknowledge(앸크)를 보낸다.

5. Stop-and-wait flow control = 효율적이지 않다. 하나 보내고 너무 오래 기다린다.

6. Sliding-window flow control

7. Go-Back-N

1. Corrupted acts

8. TCP segment Format

1. 생략. 읽어만 보라

9. TCP Congestion Control

1. 유선네트워크를 가정해서 만듦

2. 에러때문에 발생하는 경우는 없다.

3. Timeout 이 오면 ssthresh = 10 으로 떨어지면서 congestion 문제를 해결한다.

# data[].attributes.body
-5장-

○Network Layer

1. router에서 데이터를 받아서 출력측으로 보내는 역할을 함

2. routing: 주소를 보고 출력 위치를 정하는 행위

3. 네트워크 구분

1) Circuit-switched networks: 유선 전화망(1,2세대)

- circuit(회선)을 예약 > Data transfer(통화) > circuit termination(통화 중단 신호)

- 장점: 오랜 시간 통화시 딜레이가 적음

- 단점: 채널의 낭비가 존재

2) Packet-switched networks(Message switching): 컴퓨터 통신망(3세대~)

- 데이터를 packet 단위로 쪼개서 보내는 방식

- 데이터가 밀릴 경우 다른 경로로 데이터 전송

- packet의 사이즈가 작을수록 데이터의 전송속도가 빨라지지만 데이터의 크기와 packet의 크기가 유사할 경우 무조건 빨라지는 것은 아님

4. Routing Algorithms(routing을 만드는 알고리즘)

1) 각각의 node는 다른 node로 이동할 때 드는 비용만 알고 있는데 Router가 최적의 방향을 찾는 알고리즘이 Routing Algorithms

2) 종류

- Link State routing: node1과 직접 연결된 node중 비용이 가장 작은 값을 찾아서 연결하고 이후 연결된 node2와 연결된 node 중 비용이 가장 적은 node를 찾는 방식

- Distance vector routing: 시작 node와 + 연결된 node + 목적지인 node의 최솟값을 찾는 방식

○IP

1. class는 A,B,C,D,E 다섯 가지로 구분

2. class의 알파벳이 작을수록 구매할 수 있는 Net ID가 줄어들지만  HOST ID는 늘어남

3. Subnet Addressing(Subnet ID): HOST ID를 효율적으로 사용하기 위해 쪼개서 사용하는 방식

4. IP 주소 부족에 대한 해법

1) CIDR(Classless Inter-Domain Routing) : class를 위에처럼 나누는 것이 아닌 /를 사용해서 네트워크 부분과 호스트 부분을 알려주는 방식

2) DHCP(Dynamic Host Configuration Protocol)

- 임시 IP를 할당받아서 사용하고 반납하는 형태

- NAT(Network Address Translation): 하나의 할당 받은 IP를 여러 개의 사설 IP로 사용하는 방식

-6장-

○Transport Layer

1. Internet Transport Protocols(트래픽의 종류에 따라)

1) User Datagram Protocol(UDP): ack이 없고 손실돼도 큰 영향이 없음

2) Transmission Control Protocol(TCP): 속도보다는 정확도가 중요, 실수 x

- Congestion control: router에 급격하게 packet이 몰렸을 때 컨트롤하는 방식

- End-to-end Flow Control: sender가 데이터를 보낼 때 receiver는 ack을 보내는데 이 속도의 차이에 따라 데이터 전송량을 컨트롤하는 방식

- Error control: packet 혹은 ack 전송에 있어서 오류가 발생했을 때 제한시간을 설정해서 제한시간이 초과했을 때 재전송하는 방식

# data[].attributes.body
Chap 5. Network Layer & IP

Network layer : 제대로 전달하도록 하는 중요한 역할로 protocol이 주로 하는 일,

*패킷을 보낼 떄마다 헤더에 이름을 적어서 보냄(IP address를 붙임)

->기능 : routing(어느 곳을 보낼지 주소를 보고 판단) / forwarding(입력을 받아 출력)

->분류 :

1. circuit-switched networks : 유선 전화망, circuit을 만들어서 예약(circuit establishment)해 전화를 하고(data transfer) 끝나면 끝났다는 알림을 보냄(circuit termination)(뒤 둘은 overheading 가능)

+) delay가 없음 -)chanel의 낭비가 존재

*message switching : circuit을 만들거나 끊는 과정이 없음(packet이 일부)

-) 메시지가 길어지면 시간이 오래걸림, 메시지가 크면 버퍼의 사이즈가 커야됨

1. Packet-switched networks : 미리 커넥션없이 패킷 단위를 쪼개서 전송

*잘게 자르는 게 좋다는 것은 아니다(어느 순간 많이 자르게 되면 과도한 헤더를 사용 - 파이프 라이닝을 하더라도 데이터와 헤더의 크기가 비슷해지면 overheading)

Routing Algorithms

: router들이 각자 스스로 계산(central x) 이웃한 노드의 cost만 안다

1. Link state routing : Dijkstra’s 알고리즘을 사용해 계산, 각각의 노드가 연결돼 있는 cost를 교환해 모든 노드가 서로의 cost를 알게 된다 = 똑같은 topolgy를 만들 수 있다 -> the shortest routing을 돌림

2. Distance vector routing : Bellman-Ford’s 알고리즘 사용, 자기 이웃하고만 cost를 나눔(덧셈)

IP(Internet Protocol)

IP addresses : ver.4(32bit)로 어떤 단말인지 알 수 있다

-> class 5개로 구분(a,b,c,d,e)

1. net Id : 기관 전용 ID

2. Host Id : 31(전체) - net ID로 남은 ID(2^n)

Subnet Addressing : host ID를 쪼갠 것

Subnet Mask : 몇 bit로 쪼갰는지

Ex) 255.255.255.0라는 것은 subnet이 8bit이고 host ID가 0

*현재 IP address가 부족 -> IETF는 IPv6를 제작하자는 주장(모든 장비를 바꿔야하기 떄문에 short term solution 제작)

CIDR : class를 a,b,c로 나누는 것이 아니라 /를 붙여 네트워크 부분을 알려주고 나머지 host part를 알 수 있게 함 = IP address 할당하는 방법(a와 , b와 c사이도 dynamic하게 구분할 수 있다는 장점)

NAT : (DHCP사용, IP 부족 해결 방안) IP address 하나를 갖고 다수의 host 연결, 내부 라우터가 local IP(사설) 마음대로 할당

Ex) sender(10.0.0.1로 임시로 받은 사설 IP) -> S와 D를 받지만 공적 IP로 sender 바꿔치기, D는 그대로 -> reply는 S와 D를 바꿈

*IP는 다양한 protocol로 만들어짐 = 다양한 application 정의

*ICMP : 망 관리, 네트워크 제어(데이터 전송x)

*IGMP : multi cast를 위한 protocol

*ARP / RARP : 피지컬 어드레스를 IP 변환할 때 사용

Chap 6. Transport Layer

Transport layer protocol :

S가 D에 제대로 도착했는지 여부 등을 알아보는 일을 한다

-> TCP(정확해야하는 protocol로 중요한 traffic 전달) / UDP(간단한 protocol)

UDP : 기본적인 것으로 S와 D가 미리 접촉하지 않고 보내는 connectionless

TCP : reliable, in order delivery / discarding of corrupted packets / retransmission of lost packets / flow control / congestion control

1. congestion control : 혼합이 생길 때 어떻게 할지

-> 트래픽 갯수를 줄이는 방식을 선택

1-1) congestion control by timeout(TCP Taeho) : timeout되면 retransmission

1-2)congestion control by 3 duplicate Acks : Dupack / fast retransmit

2) End-to-end flow control : S와 D 사이의 전송 속도

-> receiver가 가능한 메모리 스페이스를 포함시켜 보내면 보낼 때마다 늘어나고 줄어드는 속도를 아니까 조절 = S가 D를 넘치지 않게 하는 용도

2-1) stop-and-wait flow control : 하나 보내고 ack, 기다리기, simple but inefficient

2-2) sliding-window flow control : 여러 패킷을 보내고 패킷을 받는대로 윈도우 사이즈를 옆으로 옮김

3) Error control : 에러

3-1) Stop-and-Wait ARQ(Automatic repeat reQuest)

->Lost data packet : timeout value

->Lost ACK timeout : 만약 데이터 packet이 아닌 ack패킷이 사라진 경우

3-2) Go-Back-N ARQ : sliding window 사용

->corrupted ACKs : ack가 오다가 사라지는 경우에는

1. cumulative : ack가 사라져도 문제없이 그냥 진행, 3번까지 받았다는 의미는 앞의 것도 전부 정상적으로 받았음을 의미

2. Timeout 되기 전에 1번의 ack를 받지 못해 1번부터 다시 할 수도

=>3개가 다 연관돼있다.

# data[].attributes.body
<5장 Network Layer & IP>

Network Layer
Sender가 보낸 데이터를 안전하게 receiver에게 도착하도록 하는 것.
헤더에 주소(IP address)를 씀.

Network Layer의 기능 : Forwarding(받아서 전달하는 행위), Routing(어느 곳으로 보내야 할지 주소를 보고 판단)

Network 분류 :
- Circuit switching : 서킷 만들기 -> 데이터 전달 -> 서킷 종료. 전화 네트워크. 서킷이 예약되어 오랜 시간 통화 시 좋음. 채널의 낭비가 존재
- Message switching : 미리 예약 없이 바로 메시지를 보내는 방식.
- Packet switching : 메시지 스위칭의 일부. 패킷으로 나눠서. 순서가 바뀌어서 와도 큰 문제가 안 됨. 시간 단축. pipelining. 무조건 작게 쪼개는 게 좋은 것은 아님.(데이터의 사이즈와 헤더 사이즈가 비슷하면 오버헤드)

Routing table 어떻게 만드는지? Routing Algorithms
- Link State routing: Dijkstra’s Algorithm 사용. 서로 정보를 주고받아 토폴로지와 cost를 알고 있음
- Distance vector routing : Bellman-Ford Algorithm 사용. 이웃에게만 정보를 주고받음.

Hierarchical routing : 대표 라우터들을 선정. 대표 라우터들의 라우팅 테이블을 만듦.

IP
라우팅 알고리즘을 실제로 구현하는 프로토콜
IP address : Net ID(지정된 것) + Host ID. Class B를 가장 많이 사용.

Subnet Addressing : Host ID를 Subnet ID + Host ID로 나눈 것.

IP address가 부족 -> 해결책 : IPng(IPV6) / CIDR (network id를 가변적으로 하여)

IP address 어떻게 할당?
- Manual configuration
- DHCP(임시로 할당받고 반납)

NAT : 공적으로 할당받은 IP + 사적으로 할당 받은 IP
NAT router에서 중간에 주소가 바뀜 (NAT translation table 통해)

IP(Internet Protocol)
ICMP : 제어용. 데이터 전송은 X.
IGMP : 멀티캐스팅 위한 프로토콜.

Time to Live : 몇 번의 라우터를 거쳐 목적지에 가는지.

<6장 Transport layer>

센더와 리시버 사이의 데이터 전송. Network layer의 IP 가 주소를 가지고 패킷 단위로 목적지에 도착.

Internet Transport Protocols
- UDP(User Data Protocol) : 큰 문제가 없는 경우 사용.
- TCP(Transmission Control Protocol) : 아주 정확해야 하는 중요한 트래픽 전송 경우 사용.

UDP : No frills. Best effort 노력은 해보겠지만 전송 안될 수도. 미리 컨텍없이 전송. Ex ) 멀티미디어 스트리밍
TCP : 정확히 전송. Congestion control, End-to-end flow control, Error control. 실수가 용납되지 않음.

TCP Flow control : 센더가 리시버에게 데이터 보내는 속도를 조절. 리시버가 잘 받으면 ACK를 보냄.
- Stop-and-wait flow control : 효율적이지 않음.
- Sliding-window flow control : 여러 패킷을 보내고(Pipelining) 윈도우 이용.

TCP Error Control
- Stop and Wait ARQ : 센더는 패킷을 보낼 때마다 Timeout을 돌림.
- Go-Back-N : 에러가 나면 그 번호로 돌아가서 그다음부터 다시 보냄. Corrupted ACKs(0ACK, 3ACK 받은 상태이면 1,2번도 잘 받았다고 생각. 하지만 타임아웃 걸면 1,2번의 ACK를 받지 않았으므로 다시 보냄.)

TCP Congestion Control
- Timeout을 건다. Slow start - ssthresh 값이 현재 값의 반으로 감소. 윈도우 사이즈는 1로 감소.
- 3 dupack. ssthresh 값이 현재 값의 반으로 감소. 윈도우 사이즈는 반으로 감소.

# data[].attributes.body
5장 Network Layer & IP

5-1강) Network Layer

-Network Layer Services의 역할
: IP = Network layer의 프로토콜 network layer는 sender의 데이터가 receiver에게 정상적으로 전달되도록 한다.
Sender -> data(IP address) -> router network -> receiver
Forwarding : sender에게 받은 데이터를 앞으로 보내는 역할
Routing : 받은 데이터의 주소를 보고 맞는 direction을 지정해주는 역할
- 네트워크 방식:
1. circuit-switched networks :
과거의 유선 통화 방식 / 3가지 행위로 구성
-circuit 생성
-데이터 전달
-circuit 제거
장점 : circuit을 열어놓고 통신하기 때문에 데이터를 오래 주고 받을 때 좋음
단점 : 공간의 낭비

2. Packet-switched networks :
별도로 자원을 미리 할당하는 과정이 존재하지 않고 데이터를 packet으로 잘라 파이프라인 형식으로 각각 전송 / 잘려진 데이터는 각각 독립적으로 전송되며 모든 packet이 전달되면 re-ordering과정이 필요하다.

단 packet을 잘게 짜른다고 항상 좋은 것은 아님. 너무 잘게 자르면 header가 많아져서 시간이 오히려 많이 소요.

***Routing algorithm***
각각의 router는 routing table을 갖는다. 이를 만드는 과정
1. Link state routing
Dijkstra's algorithm에 기반을 두고 계산
-Dijkstra's algorithm : 각각의 노드는 각각의 노드로 가는 costs와 위치 정보를 공유한다.
-> 모든 노드가 똑같은 노드 정보를 공유
-> 시작점에서 가장 작은 cost의 노드를 선택 -> 해당 노드에서 갈 수 있는 모든 경로 값을 계산하고 또 최저값 cost의 노드를 선택
->  모든 노드에 대해 최저값은 계속 갱신

2. Distance vector routing
Bellman-Ford Algorithm에 기반하여 계산
-Bellman-Ford Algorithm : 전체 노드가 cost정보를 공유하지 않고 이웃 노드끼리만 공유
이웃 노드는 주변 노드가 아닌 연결되어 있는 노드를 뜻함

-Hierarchical routing
: 전체 테이블에 대한 라우팅 테이블을 만드는 것이 아닌 라우터 묶음의 대표 라우터끼리만 라우팅 테이블을 만들고 각 묶음끼리 내부에서 라이팅 테이블을 또 구성하는 구조

5-2강 IP

-IP address는 Host, net 부분으로 나뉨

-IP address는 5가지 class로 구분
Net ID : 기관이 사용
Host ID : 기관 밑의 각각의 기기들
가장 많이 사용하는 것은 Class B
Class A : 0 + Net ID(7bit) + Host ID(24bit)
0.0.0.0 ~ 127.255.255.255
Class B : 1 + 0 + Net ID(14) + Host ID(16)
128.0.0.0 ~ 191.255.255.255
Class C: 1+1+0+Net ID(21) + Host ID(8)
192.0.0.0 ~ 223.255.255.255
Class D
Class E

Host ID를 잘라서 Subnet 부분을 만들어서 사용하는 것이 더 효율적.
141.223.0.0 = 뒤에 0 이 2개 붙는것을 대표 라우터 주소

-Subnet mask: subnet ID를 몇비트 사용했는지 알기 위해

=> IP가 너무 많이 쓰임에 따라 IP 주소가 점점 부족한 문제가 발생 -> solution
-IETF solutions : IPv6, CIDR
-NAT

-CIDR : IP class에 상관없이 a.b.c.d/x 형태를 만들어서 보다 더 다양한 공간을 사용 가능

-IP 주소를 host가 받는 방법
1. Manual configuration : 아예 하나를 주는 방식(desktop PC)
2. DHCP : 정규 주소가 아닌 임시 주소를 할당해 정해진 공간에서만 사용하고 반납하는 방식(smartphone)

-NAT(Network Address Translation)
: Ip 주소 하나에 많은 host를 연결하는 방식
공적으로 할당받은 IP내에서 라우터가 임의로 할당하는 사설 IP를 만들어내 많은 host가 사용가능하게 해주는 방식.

1. 호스트가 할당받은 사설 ip를 라우터에 보냄
2. 라우터가 이를 공적 ip로 전달
3. NAT 테이블에 기입 후 공적인 IP로 변환하여 table을 참고
4. 테이블에 적힌 정보를 토대로 다시 host에 정보를 전달

-ICMP(Internet Control Message Protocol)
에러 메시지 같은 정보들을 IP layer와 함께 알리는 역할
-IGMP(Internet Group Management Protocol)

6장 Transport layer

-Transport layer protocol
정보를 주고 받음에 있어서 문제가 있는지 없는지 확인하는 프로토콜

-UDP

간단한 프로토콜

잘 전달되지 않아도 되는 프로토콜

화질이 찌그러지고 사운드가 조금 망가져도 상관없을 때

sender와 receiver간에 사전 약속이 없음

-UDP segmant format
: port num / message length / checksum
header size = 8바이트 => 간단한 구성

-TCP(Transmission Control Protocol)

실수가 용납되지 않는 프로토콜

중요한 정보 전달

잃어버리면 재전송

congestion control

end-to-end flow control

error control

-TCP Flow control
sender와 receiver사이의 정보 전달 속도를 조절 (sender 와 receiver 성능 차이가 존재하기 때문에)
1. sender의 데이터 전송
2. receiver는 ack를 보냄
3. receiver는 ack와 함께 메모리 남은 정보를 보냄
4. sender는 그에 따라 정보 전달 속도를 조절할 수 있음

방식 1) Stop-and-wait flow control
정보를 1개 보내고 ack올때까지 대기
-> 1개씩 진행하기 때문에 대기시간이 너무 길어서 비효율적
방식2) Sliding-window flow control
파이프라인을 이용하여 정보를 한번에 많이 보낸 후 도착하는데로 다른 정보를 보내는 방식

-Error control
-ARQ(Automatic Repeat reQuest)
방식1) stop-and-wait
-lost data packet : sender가 보낸 데이터를 receiver가 받지 못했을 때 -> ack가 sender에게 갈 수 없음 -> sender는 무한정 대기가 아닌 timeout 시간에 맞춰 초과 시 보낸 데이터를 재전송한다.
-Lost ACK :  receiver가 보낸 ack를 sender가 받지 못했을 때 -> sender는 timeout 시간에 맞춰 데이터를 재전송 -> receiver는 ack를 재전송

방식2)Continuous ARQ
방식2-1) Go-Back-N
1,2,3,4,5 순서대로 sender가 보낼 때 3번이 중간에 소실되었을 때 -> 3번부터 ack를 보내지 않고 timeout지난 이후에 sender가 3번 재전송
방식2-2) Selective repeat request

-Congestion Control
원인) 라우터가 넘칠 때
timeout을 이용하여 해결
초기엔 window size가 1,2,4,8... 임계치까지 증가 임계치부턴 1개씩
-> timeout에 걸리면 1/2로 size가 줄어들고 임계치도 1/2로 감소

# data[].attributes.body
질문.

1. link cost를 결정하는 요인은 무엇인가요?

강의.

Packet : 네트워크가 전달하는 데이터의 형식화된 블록.

network Layer.

message switching

no call set-up procedures

considerable queueing delay

packet switching

message is divided in to smaller portioions called packets

pipelining

forwarding - moving packets from router input to output

routing - determining a route taken by packets from source to destination

routing algrithms : making routing table.

what is optimal path?

how define cost?

two routing algorithms

link state routing : calculating based on dijkstra’s algorithms

distance vector routing : bellman-ford algorithm

IP addresses - 5 classes

class = Net ID + Subnet ID + Host ID

lack of ip address ->

solution : 1. long term solution IPng (IPv6)  2. short term sol = CIDR ,

CIDR (classless inter-domain routing) : IP address 할당한느 방식 : class 에 상관없이 네트워크 파트와 호스트 파트를 정함.

DHCP (dynamic host configuration protocol )

NAT ( network address translation)

WAN side address / LAN side address

UDP (user datagram protocol)

No ACK, NO retransmissions

TCP( transmission control protocol)

속도보다 정확해야함.

Implements congestion control,  flow control,  error control , etc.

TCP flow control

sender , receiver speed control.

TCP congestion control - 유선네트워크를 가정해서 만듬.

https://blog.naver.com/ndb796/221234424646

Dijkstra algo

C(x,y) : link cost of x,y , if 두노드가 연결 x -> 값 무한대

D(v) : 현재 반복시점 v까지의 min path cost

P(v) : v까지의 현재 최소 비용 경로에서 v의 직전 노드

# data[].attributes.body
5장 및 6장
1. Network Layer
: Forwarding : 입력과 출력 보내기
: Routing : 주소를 확인하고 보낼 위치를 결정

2. Network의 구분
1) Circuit Switched
2) Message Switched
3) Packet Switched

Packet Size에 따른 효과
: Data Size와 Head Size가 비슷한 Over Head가 되면 Time이 오히려 증가함

3. Router Algorithms
1) Link state algorithms
2) Distance vector algorithms

4. IP : Host + Net
: 5개의 class로 구분되며,
Class B를 많이 사용한다.
: Subnet Addressing
Host를 나누어 주는 기능
: IP 주소를 host가 받는 방법
1) Manual configuration
2) DHCP

5. Transprot Layer
: Sender와 Receiver 간의
data 전송시, data가 정확히
송수신 되었는 지를 확인

: UDP : 일부가 유실되어도
큰 문제가 되지 않는다.

: TCP
- congestion control
- end to end flow control
- error control

: TCP Flow Control
: TCP Error Control
: TCP Congestion Control

# data[].attributes.body
5-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선택

5-2장
1. IP Address
- subnet mask로 동일 ip정보 구분함
- CIDR : ip을 다양하게 할당하는 방법

2. NAT
- 부족한 ip address를 nat network를 통해 새롭게 할당함

6장

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

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

Network layer
: sender가 보낸 데이터를 안전하게 receiver쪽에 제대로 전달하게 만드는 중요한 역할

Routing : 데이터를 어느 곳으로 보내야 할지 주소를 보고 판단

Circuit switching

옛날 전화 방식

전화를 하고 싶은 사람이 받을 사람한테 번호를 누르면 미리 회선(Circuit)을 예약해서, 예약이 완성되면 통화 시작 / 통화가 끝나면 끝났다는 메시지가 와서 예약했던 회선을 끊음

Circuit을 만들고, 통화를 하고, Circuit을 끊는 3가지 행위

장점 : 한번 Circuit이 예약이 되기 때문에 real-time으로 오랜 시간 통화할 때 좋음, delay 없음

단점 : 3가지 행위로 인해 채널에 낭비 존재

Message Switching
: 미리 Circuit을 만들거나 끊는 행위 없이 바로 메시지를 보내는 방식

메시지가 길어지면 시간 오래 걸림

메시지가 크면 라우터에 저장돼있는 버퍼의 사이즈가 커야 함

Packet switching
: 패킷을 보낼 때, 미리 Connection없이 긴 메시지를 패킷 단위로 쪼개서 보내는 방식

데이터의 사이즈와 헤더 사이즈가 비슷해지면 오버헤드가 되므로, 무조건 잘게 쪼개는 게 좋은 것은 아님

Routing Algorithms
: 라우터들 각자가 스스로 계산 (destinate router)

Link State routing algorithm

Dikstra's Algorithm을 사용해서 계산

각각의 노드가 알고 있는 이웃한 노드의 cost를 서로 교환 -> 모든 노드가 topology가 어떻게 구성된 지 알게 됨 -> 각각의 노드가 이걸 가지고 shortest routing algorithm을 돌림

Distance vector routing algorithm

Bellman-Ford Algorithm 사용

자신의 이웃들과 이웃한 노드로부터 각자의 라우팅 테이블을 받아서 최단 거리 계산

Hierarchical routing

각각의 AS(Auto-normal System)에서 대표 라우터를 선정하고, 대표 라우터들끼리만 라우팅 테이블을 주고받아서 라우팅 알고리즘을 만듦

AS 내부에서는 또 내부의 라우팅 테이블을 만듦

5-2장. IP(Internet Protocol)

IP Addresses
: Ip Addresses를 가지고 어떤 단말인지를 알 수 있게 됨
Dotted Decimal Notation
: 32 bit를 8 bit씩 쪼개서 10진수로 쓰는 것

Subnet Addressing
: Host ID 부분을 가지고 세부 네트워크로 쪼개서 쓰는 것

Subnet mask
: 한 기관에서 IP Address를 몇 bit로 쪼갰는지 알 수 있도록 한 것

1 : Net ID, subnet ID

0 : host ID

IP address 부족 문제 해결 방안

IPv6

CIDR
: 네트워크 ID 부분을 가변적으로 해서 class B와 C 사이에서도 다이나믹하게 나눌 수 있도록 한 것

NAT(Network Address Translation)

: IP address 하나를 가지고 많은 호스트를 연결할 수 있는 방식

IP address 할당 방법

Manual configuration

DHCP(Dynamic Host Configuration Protocol)

: 임시 IP address를 할당받아서 거기서만 쓰고 반납하는 방식

Network Layer

ICMP(Internet Control Message Protocol) : 망 관리, 네트워크 컨트롤

IP : 실제 통신에 사용

IGMP(Internet Group Message Protocol) : 멀티캐스팅을 하기 위한 프로토콜

6장. Transport Layer
: Sender가 보낸 것이 Destination에 잘 도착했는지, 중간에 에러가 났는지, 트래픽이 몰려서 delay가 있는지 등 여러가지 상황에 대한 일을 함

UDP

데이터를 조금 잃어버려도 상관없고, 전송이 제대로 안돼도 큰 문제가 없는 경우 사용

미리 sender와 receiver가 contact을 하지 않고 바로 보내버림

TCP

속도보다는 정확해야 하는 중요한 트래픽을 전송할 경우 사용

잘못 전달된 패킷은 버려야 됨

패킷이 전송 중 사라지면 재전송

=> 트래픽 종류에 따라 TCP/UDP 나눠서 사용

Congestion control

: sender가 데이터를 보냈는데 traffic congestion 때문에 제때 전송이 안됐을 때 어떻게 할건지에 대한 문제

Flow control

: sender와 receiver 사이에 보내는 속도와 받는 속도를 조절하기 위해 사용

Error control

: 패킷이 가다가 중간에 noise 등에 의해 에러가 발생했을 때의 문제를 다룸

TCP Flow control

Stop-and-wait

- 너무 오래 기다려서 비효율적

Sliding-window

: 여러 패킷을 보내고, 패킷을 받는대로 window size를 움직여서 다음 패킷을 받는 방식

TCP Error Control

Stop-and-Wait ARQ

- Lost data packet : 일정 시간 안에 ACK을 받지 못하면 재전송
- Lost ACK timeout : timeout이 걸리면 재전송해서 ACK를 다시 보냄

Go-Back-N ARQ

: 에러가 나면 그 번호로 돌아가서 그때부터 나머지 패킷을 다 보내는 방식

TCP Congestion Control
: 패킷이 lost돼서 Congestion에 의한 패킷 drop이라고 생각되는 경우, 보내는 window size를 조절함으로써 Congestion 문제 해결

Slow start

: window size가 미리 설정된 값까지 2^n승으로 증가하다가 threshold를 넘어가면 linear하게 증가하고, timeout에 의해 패킷이 오지 않으면 threshold 값이 현재 값의 반으로 바뀌면서 1부터 다시 증가

fast retransmit

: 앞 패킷은 사라졌지만 뒤 패킷들이 잘 들어온 경우(defect)에는 현재 값의 반으로 떨어져서 linear하게 증가하는 방식

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

[Network Layer]

-Sender of packet > Recipient of packet 으로 전송한다.

-데이터 전송 시 패킷의 헤더에 IP address(받는 호스트, 보내는 호스트)를 붙여서 전송한다.

-기능 : forwarding(입력과 출력 보내기), routing(어디로 보낼 지 주소를 보고 판단)

-네트워크 구분

1)Circuit-switched networks : circuit establishment(예약) -> 전화 -> circuit termination(연결해제) / 장점 : 오랜시간 전화하기에 좋음, 단점 : 채널의 낭비가 있음

2)Message switching : 메시지를 작은 메세지(헤더+메시지일부) 로 잘라서 전송. 작은 메시지 전송이 밀리면 다른 경로로 가서 리시버에 순서가 다르게 도착하고  순서 재정비 해서 전송함. / 단점 : 메시지가 크면 재정비 시간이 오래 걸림.

3)Packet-switched networks : 3세대부터 사용. 메시지를 패킷(헤더+메시지일부)으로 잘라서 전송, 패킷 순서대로 막힘없이 전송. 무조건 작게 자른다고 좋은건 아님.

-routing table을 어떻게 만들지 ? = routing algorithms : 목적지로 가는 최적의 경로를 찾음. Cost가 가장 작도록.

1)Link State routing : 각 노드가 자신의 cost를 교환함. 그래서 모든 노드가 같은 topology를 생성함. Dijkstra’s Algorithm 경로에 대한 모든 이동 경로 cost를 계산. 노드를 하나씩 연결하면서 최소의 cost가 되는 경로를 만듬.

2)Distance vector routing : 어느 거리를 가는데에 걸리는 시간이 얼마인지에 따라 경로 결정, Bellman-Frod 알고리즘 / 만약 J시작점, B로 가자. JA,JI,JH,JK 정의됨+AB,IB…도 정의됨 => JA+AB로 계산

-Hierarchical routing : routing table은 시간소모가 큼 -> 그래서 inter-AS routing protocol(대표 라우터 선정해서 routing table만들고 별도로 내부 routing table도 만듬)을 사용.

5-2장.

[IP(Internet protocol)] : routing 알고리즘을 구현하는 프로토콜

-IP address : 전세계적으로 32bit의 IP주소를 사용함.

-Net ID : 기관에서 구매하여 사용하는 IP

-Class A~E : (A) net 7 / host 24 (2^7개의 기관이 구매가능)-> (B) net 14 / host 16 (사람들이 가장 많이 구매함) -> (C) net 21 / host 8 -> mulicast address -> reserved for future use

-Subnet Addressing : net ID을 사고 host ID를 bit 크기별로 쪼개서 사용가능. (기관이 원하는 대로 분리가능)

-Subnet mask

-IP의 문제점 : 인터넷이 발전하면서 IP 주소가 고갈됨. (해결책) IPv6

-CIDR : IP주소를 할당하는 방식, Prefix length에 따라 host 주소의 수가 달라짐.

-IP 할당 방식 : manual configuration, DHCP(임시 주소 할당받고 사용 후 반납), NAT(rest of internet+local network(개인))

-IP는 다양한 프로토콜로 만들어짐, IP network 계층 : application layer, transport layer(TCP, UDP), network layer(ICMP, IP,IGMP), data link layer(ARP, RARP)

6장.

[Transport Layer]

Sender와 receiver 사이에 데이터 전송이 이루어짐. 데이터의 올바른 전송유무를 확인.

[TCP] : 전송이 무조건 제대로 이루어져야 할 때 사용, (in-order/방해 패킷은 삭제/놓친 패킷은 재전송/흐름 컨트롤)

-하는 일 : congestion control, end-to-end flow control, error control

-TCP flow control : 리시버가 처리할 능력이 없으면 버퍼 증가 -> sender가 보내는 속도를 조절함. 데이터를 잘 받으면 보내는 패킷 = ack

1)하나씩 보내는 방식 : stop-and-wait flow control = 하나 보내고 ack 오기를 기다림. Ack 오면 다음 segment 보냄 / 비효율적 à pipelining으로 진행(여러 개를 보내고 ack 오면 하나 더 보내기)하면 효율이 증가함,

2)sliding-window flow control : 패킷이 올 때마다 윈도우 사이즈를 보내는 것. (가장 작은 값으로 보냄)

-Error control : stop-and-wait ARQ (ARQ, Classification)

1)error-free operation

2)lost data operation => sender는 일정 시간안에 ack를 받지 않으면 재전송함.

3)lost ack timeout : 리시버 입장에서 신호가 다시 오면 ack만 보냄.

-Go-Back-N ARQ

1)error-free operation

2)corrupted data packet : 에러가 나면 그 번호로 돌아가서 뒤 패킷을 다 보냄,

3)corrupted ACKs : ack 0을 받고 ack3만 받았다 해도 작업은 그대로 진행됨. 왜냐면 1,2는 받아서 지금 3을 받은 거라고 생각하기 때문에

-TCP congestion control : 받는 데이터가 많아서 라우터가 넘치면 트래픽의 개수를 줄이는 방법을 택함.

1)Timeout

2)3 duplicate acks

[UDP] : 간단한 프로토콜, 전송이 제대로 이루어지지 않아도 되는 경우 사용. Sender와 receiver의 컨택없이 바로 전송함.
-하는일 : port num은 꼭 필요, header size가 8byte밖에 되지 않음.

# data[].attributes.body
질문: (5장 슬라이드 54) 10.0.0.1과 10.0.0.2가 모두 같은 Destination을 향해 data를 보냈다면, 받을 때 누가 보냈는지를 어떻게 구분할 수 있는지, 숫자 3345, 5001과 연관된 것인지 궁금합니다.

Chapter 5 Network Layer & IP

Network Layer Services_

우편물이 우리 손을 떠나 미국으로 가게 하는 우편 시스템처럼, 네트워크는 sender가 보낸 데이터를 reciever 쪽으로 전달하는 데에 중요한 역할을 함. 이는 Protocol인 IP도 마찬가지. 편지를 보낼 때 보내는 사람과 받는 사람을 표기하듯이, 데이터(패킷)에도 head에다가 보내는 IP와 받는 IP를 표기함. IP는 전 세계 공통의 체계임.

Network Layer_

라우터가 데이터를 받아서 출력 쪽으로 보내는 역할을 함. 근데 어느 쪽으로 보낼 것인데? 수신자 측 주소를 보고 그쪽으로. 이때 Routing을 하게 되는데, Routing이란 어느 곳으로 보낼지를 주소를 보고 판단하는 행위를 말함. 주소로 보내는 것은 Forwarding.

Taxonomy of Networks(Network core)_

Network는 Circuit-switched 방식과 Packet-switched 방식으로 구분됨. Circuit-switched는 예전 휴대폰에서 사용하는 방식과 동일. 컴퓨터는 Packet-switched 방식임. 스마트폰도 3G부터 Packet-switched로.

Circuit switching_

전화를 하기 위해 미리 사용할 회선을 예약함. 사용 예약을 요청하고(열고) (Circuit Establishment), 데이터를 전송하고(Transmission), 통화를 끊는 행위를 함(Circuit Termination). 데이터가 클 때는 약간의 오버가 발생할 수 있음. 장점은 서킷이 예약되어 있으므로 오랜 시간 통화하기에 아주 적합함. 그러나 채널의 낭비가 발생하는 것이 단점.

Message Switching_

예약하는 절차 없이 메시지를 바로 보냄. 긴 메시지 보내는 데 시간이 오래 걸림.

Packet Switching_

메시지를 짧게 잘라서 따로따로 보냄. 한쪽 길이 막히면 보내다가 다른 길로도 보냄. 그래서 도착 순서가 달라질 수 있음. 그러나 순서를 알아서 재정비하기 때문에 큰 문제가 되지 않음. 또 1번 패킷을 받으면 자기도 1번을 보내는 동시에 앞 순서로부터 2번 패킷을 받을 수 있음. 이러한 pipelining 덕분에 빠르게 전송하는 것이 가능함. 그런데 너무 잘게 쪼개면 packet에서 실제 data에 비해 header가 더 큰 영향을 미치기 시작하면서 오히려 data를 보내는 시간이 더 길어지기도 함.

Routing Algorithms_

처음에 Data를 보낼 경로를 정하는 Routing Table이 굉장히 중요함. 이를 결정하는 것이 바로 Routing Algorithms. 그래프에서 각각의 node들 사이의 이동 cost를 비교하여 최적의 경로를 찾는 알고리즘은? 두 가지 방법이 있음.

(1) Link State Routing_ 각각의 Node가 자신의 인접한 비용에 대한 정보를 서로서로 교환함. 모든 Node가 전체 경로의 모습을 알고 있음. 같은 Topology. 이후 Dijkstra’s Algorithm 사용함. Dijkstra’s Algorithm은 특정 출발점 A에서 다른 점들로 가는 Shortest path들을 계산해줌. 이를 활용해 Routing Table을 만들 수 있음.

(2) Distance Vector Routing_ 각각의 노드들은 인접한 노드들과의 Cost만을 알고 있음. 이후 Bellman-Ford Algorithm을 활용함. 인접한 노드들로부터 해당 노드들의 Routing Table을 받아 자신과의 cost를 합산해 비교함. 다른 모든 노드들도 똑같은 방식으로 진행함.

Heirarchical Routing_

근데 이 세상 모든 경로의 Routing을 이렇게 하기에는 너무나 힘이 듦. 그래서 현실적으로는 같은 단위(Autonomous System)마다 대표적인 Router를 선정한 뒤 대표 Router들 사이에서의 알고리즘을 만들고, 내부에서는 또 내부의 Routing Table을 만들자는 것.

(5장 계속)

IP (Internet Protocol)_

IP addresses_ 그게 다섯 가지 class로 구분됨. 이 중 A, B, C개를 보게 될 것. Net ID란 어떤 기관에서 공통으로 사용하는 IP. Host ID는 그 다음 각 기관의 컴퓨터마다 사용하는 ID. Class A의 경우 Net ID는 7bit(128가지), Host ID는 24bit(2^24가지 가능). Class C는 Net ID 21bit(2^21가지), Host ID 8bit(256가지). Class B는 A와 C의 중간으로, 대부분의 기관에서 Class B를 사용함.

Subnet Addressing_

Host ID를 가지고 Subnet ID와 Host ID로 나누어 사용 가능. 건물마다 Subnet ID를 주자던가. 대표 라우터는 전체 네트워크를 나타냄. 예를 들어 141.223.0.0은 141.223.xxx.x 형태의 모든 것들에 대한 Routing Table을 가지고 있다는 의미임.

한 조직에서 몇 개의 Subnet으로 나누었는지를 알기 위해 사용하는 것이 Subnet Mask.

예시_

IPv4주소 141.223.108.201

141.223 포항공대 전체 IP

108 인공지능연구원 3층

서브넷 마스크 255.255.255.0

108에 해당하는 부분 전체를 다 Host ID로 사용하고 있음.

Problems of IP address scheme (class-ful addresses)_

근데 점점 32bit만으로 이걸 해결하기에는 부족한 세상이 되어버렸음. 그래서 이를 어떻게 해결할 것인가? 그래서 나온 장기적 해결책이 IPv6임. 한편 단기적 해결책 중 하나인 CIDR을 보면

CIDR(Classless Inter-Domain Routing)_

Class A, B, C의 분할 비율에 얽매이지 않고 27bit / 5bit 등의 형태로도 비율을 나눌 수 있음. 최근 많이 사용하는 방법. Network ID를 굉장히 가변적으로 활용.

IP address를 얻는 방법?_

(1) Manual configuration_수동으로 IP를 할당받음.

(2) DHCP(Dynamic Host Configuration Protocol)_임시의 IP를 할당받아서 쓰고 반납하는 방식. 스마트폰으로 어딘가를 갈 때 많이 쓰는 방식임.

NAT(Network Address Translation)_

할당받은 공적 IP는 하나인데, 라우터를 통해 local network 내에서 마음대로 사적으로 IP를 할당받아 사용할 수 있음. NAT translation table에서 destination의 IP는 그대로 두지만 sender의 IP를 공적 IP로 바꾸어줌. 답신이 오면 NAT translation table에 기록된 것을 보고, Destination의 공적 IP를 사적 IP로 바꾸어줌.

질문: (슬라이드 54) 10.0.0.1과 10.0.0.2가 모두 같은 Destination을 향해 data를 보냈다면, 받을 때 누가 보냈는지를 어떻게 구분할 수 있는지, 숫자 3345, 5001과 연관된 것인지 궁금합니다.

IP(INternet Protocol)_

다양한 Protocol들의 정의들.

ICMP: internet control message protocal. 제어시 사용.

IGMP: multicast를 위한 protocol

Chapter 6 Transport Layer_

Transport layer protocols_

Sender가 보낸 data가 destination에 잘 도착했는지, 에러가 발생했는지, 중간에 딜레이가 발생했는지 등 여러 가지 상황에 대해서 transport layer protocol이 일을 하게 됨. TCP와 UDP 두 가지 방식이 있음.

User Datagram Protocol(UDP)_

아주 간단한 프로토콜. 잃어버려도 상관 없고 전송이 잘 되지 않아도 크게 상0관이 없는 Data를 보낼 때 사용. 운동 경기 영상 전송 등. “no frill” 살이 없다. “best effort” 노력은 해 보겠다. “connectionless” 미리 컨택하지 않고 그냥 바로 보내버린다. 조금 잃어버려도 상관 없는 스트리밍 멀티미디어 앱에서 많이 사용함. Header size가 8byte 밖에 되지 않음.

Transmission Control Protocol(TCP)_

전송이 잘 되어야 하는 아주 중요한 내용을 보낼 때 사용. 은행에서 정보를 보낼 때. “Congestion control” 막힘(Congestion)이 발생했을 때 어떻게 할 것이냐. “End-to-end Flow Control” Data를 보내는 속도를 조절. “Error Control” Error 발생 시. 실수가 용납되지 않음.

TCP (End-to-end) Flow Control_

Sender와 Reciever 간에 성능 차이가 클 때 잘못해서 막 보내면 넘치는 경우(overflow) 발생. 따라서 속도를 조절해야. Reciever가 잘 받았다고 보내는 애크(ACK)를 기준으로 Sender는 속도를 조절할 수 있음.

(1) Stop-and_wait_ 하나 보내고 잘 받았어. 또 하나 보내고 잘 받았어 하는 방식. 잘 받았다고 ACK를 보냄. 근데 너무 비효율적이야. 너무 오래 기다려야 해.

(2) Sliding-window flow control_ 여러 패킷을 보내고 ACK가 올 때마다 다음 단계를 보냄. 예를 들어 pipelining의 경우. 동시에 여러 개를 보내는데, ex. 한번에 3개 보내고 첫 번째 것에 대한 ACK를 받으면 4번째 것 보내고. 이런 식이면 Stop and wait보다 효율이 3배는 좋음. window size가 오른쪽으로 이동한다. 이 때의 Window size = min{ receiver’s advertised window, congestion window }

Error Control_

Error 발생 여부에 따른 대응. 주로 Continuous ARQ 중 Go-Back-N이 많이 쓰임.

(1) Stop-and-Wait ARQ_

1) Error-free operation_ 1개 보내고 1개 잘 받고. Stop-and_wait와 비슷

2) Lost data packet_ 만약 reciever가 segment를 받지 못하면? sender는 ACK를 기다리지만 ACK는 오지 않음. 이를 해결하기 위해 timeout을 사용함. 일정 시간 ACK를 받지 못하면 해당 segment를 다시 전송함(retransmission). 이때 타임아웃 시간은 충분해야한다(Timeout value >= 2t_p + t_proc + t_ACK).

3) Lost ACK timeout_ ACK packet이 사라진 경우. timeout retransmission에 의해 같은 segement가 한 번 더 보내짐. 그러면 아 ACK가 제대로 전송되지 않았구나 하여 ACK를 다시 보냄.

(2) Go-Back-N_

1) Error-free-operation_ 에러가 발생하지 않는 경우

2) Corrupted data packet_ 보내는 도중 3번 segment가 오지 않는다면? reciever는 그 뒤부터 쭉 그냥 버려버림(discard). 그러면 ACK가 가지 않기 때문에 time-out에 의해 sender는 3번부터 다시 보내게 된다.

3) Corrupted ACKs_ ACK가 사라지는 경우_ (a) 1번 2번에 해당하는 ACK가 오지 않았는데 3번에 해당하는 ACK가 온다면? Sender는 전혀 문제가 없다고 생각하게 됨. 3번이 왔다는 얘기는 1 번 2번도 잘 받았다는 의미이기 때문(ACKs are cumulative). (b) time-out이 걸리는 경우는 ACK를 받지 못한 번호부터 다시 보내게 됨.

TCP segment Format_

Header를 보면 UDP가 8byte였던 것에 비하면 얘는 4bytes로 충분히 더 크다.

TCP Congestion Control_

Network도 traffic이 몰리면 congestion 발생. 근데 문제를 나서서 해결해주는 경찰이 없음. TCP에서는 모든 사용자가 함께 해결해야하는 문제라고 여기고 congestion protocol을 사용함. 그런데 맨 처음에는 무선이 아닌 유선을 기준으로 생각했는데, 유선이므로 packet loss by transmission media는 잘 발생하지 않는 것으로 간주하고 라우터가 넘치는 경우만을 가정함.

1) Congestion control by timeout(TCP Taeho)_ timeout을 사용하여 congestion을 해결함(*Slow Start*). 처음에는 window size가 1. ACL이 잘 오면 2, 4, 8..가 됨. 미리 설정된 threshold까지. 해당 threshold 이후로는 linear하게 생각함. ex_ ssthresh=8이라면 9, 10, 11, 12, ... 그러다가 Timeout에 의해 packet이 오지 않으면 현재 windowsize(= cwnd)의 반부터 다시 linear하게 시작함. (cwnd/2)가 새로운 ssthreshold가 됨. 1, 2 ,4, ..., 2^n, new_ssthreshold, new_ssthreshold+1, new_ssthreshold+2, ...

2) Fast Retransmit_ Timeout이 오기 전에 처리함. dupack이란 앞의 packet에 해당하는 ACK가 오지 않았으나 뒤의 ACK은 도착하는 경우(Corrupted ACKs 참조). 3dupack 발생시 cwnd의 반으로 바로 떨어진 뒤 linear하게 증가함.

# data[].attributes.body
5장
network layer services =라우터를 이용해 안전하게 메세지 전달
network layer services 종류=fowarding, routing
forwarding= 입력측 받아 출력을 보냄
routing= 어느곳으로 보낼지 주소를 보고 판단
networks 구분= 유선전화망 1세대=  circuit-switched, ,3세대=packet-switched
circuit-switched 과정= 서킷 만들기->통화-> 서킷 종료 (예약기능 존재 그러므로 장시간 통화시 딜레이x 하지만 체널 낭비)
message-switched = 예약기능 x, 바로 정보 보낼수 있음, 시간 오래걸림, 버퍼 사이즈 용량이 커야함
paket -switched = packet 나누어 정보를 보내 시간이 단축, 데이터 도착 순서가 바뀔수 있지만 최종 순서 제정리함
또한 너무 세분화 하는건 안좋음 이유=>head=데이터 사이즈가 같아지면 시간이 더걸림

routing 알고리즘= 라우터가 스스로 게산해 최적에 경로 찾아줌

routing 알고리즘 종류= link state routing , distance vector routing
link state routing=> dijkstras 알고리즘 = 모든 데이터 노드가 서로 cost 값을 인지해 tree 구성맵을 알고 있음
distance vector routing =>bellman-ford 알고리즘=이웃 노드 정보를 교환해서 최적에 거리 계산

hierarchial routing= 많은 라우터중 축소하여 대표 라운터 선정

ip address= net id, host id
ip address 종류 =class A,B,C,D,E
A= Net Id=7 Host Id=24
b= Net Id=14 Host Id=16
c= Net Id=21 Host Id=8
d= multicastaddress
e= teserved for future

서브 마스크=ID 몇비트인지 알수 있음

ip address 고갈문제점 해결 방안 =IPV6, CIDR(HOST addresses  조절 가능), nat

# data[].attributes.body
Chapter 5. Network Layer & IP

<Network Layer Services>
- sender가 보낸 메시지를 receiver가 안전하게 받음
- header : 주소(IP Address, 보내는 주소, 받는 주소) ->router(입력받아서 forwading 출력 방향 결정)

<Network Layer>
2 key function
1) forwarding (입력 받아 전달)
2) routing (전달 방향 결정, 라우팅 테이블O)

<Taxonomy of Networks(network core)>
1) 1~2세대 : circuit-switched networks
유선 전화 방식 : 미리 전화선(회선, circuit)을 예약 -> 예약 완성 -> 통화 -> 끝났다는 메시지 -> 취소(끊김)
- circuit establishment, data transfer, circuit termination
장점 : 예약 -> real time으로 긴 시간 전화할 때 좋음, delay 없음
단점 : 낭비
2) 3세대 : packet-switched networks
미리 커넥션 없이 쪼개서(패킷 단위) 보냄 -> 중간에 밀리게 되면 다른 경로로 갈 수 있음(받는 순서 달라짐, but, 상관 없음)
buffer 클 필요 없음(시간 단축), pipe-lining
무조건 잘게 자르면 좋을까? 아님, 짧은 메시지에 비해 header가 많아짐(시간 더 오래 걸림)
message switching : 메시지 바로 보냄, 길면 한번에 보낼 때 오래 걸림, 저장되어있는 buffer의 사이즈 커야됨

<routing algorithms>
라우터가 스스로 만듦(라우터 테이블), 이웃한 노드까지 가는 경로만 아는 상태
cost가 제일 적은 경로
1) link state routing
- dijkstra's 알고리즘 기반
- 각 노드는 전체 네트워크 topology를 아는 상태
2) distance vector routing
- bellman-ford 알고리즘 기반
- 이웃 노드랑만 데이터 주고받음
autonomous system에서 대표 라우터 선정 -> 대표 라우터끼리 라우팅 테이블 만듦

<IP addresses>
- 버전4 : 32 bit(4바이트)의 IP address
host 부분 + network 부분
class A ~C(주로 사용) + D(멀티캐스트), E(미래 사용)
net id : 기관의 IP + host id: 컴퓨터에 할당
subnet addressing : host id 일부 -> 기관에서 네트워크 세분화하여 사용
- subnet mask
문제
- 폭발적 성장 -> 고갈 문제 -> IPv6(장기적, 새로운 버전)
-shortterm : host id의 크기가 중간이 없음 -> CIDR : class에 상관 없이 200.23.16.0/27(슬래쉬)
- DHCP : 임시 IP address 사용 -> 반납
- NAT : IP 주소 하나에 많은 호스트 - 공적IP+사적(사설)IP
- NAT translation table : WAN side address(공적), LAN side address -> 데스티네이션은 바꾸지 않음, sender를 바꿈 -> 돌아올때는 데스티네이션(공적) -> NAT router 데스티네이션(사적)

<IP>
IP format : header(20바이트) - version:ip버전
TIme To Live : 원래 시간 측정, 라우터 지날때마다 숫자 줄어듦

Chapter 6. Transport Layer

<Transport Layer Protocols>
sender가 보낸 것이 잘 도착했는지, 딜레이는 없는 지 등 확인
1) UDP
잃어버려도 상관없을때
no frill, bare bones : 장식X
best effort : 노력은 해보겠지만, 전달 안될 수도
connetionless : 미리 센더와 리시버 컨택X
port number(반드시 있어야 함, 애플리케이션 구분), message => header 8바이트
ex) 중계방송(재전송해봐야 지난 시점)-화질이 별로여도, 끊겨도 괜찮을때
2) TCP
중요할 때, 순서 중요, 잘못전달된패킷 버림, 잃어버린 패킷 재전송
ex) 은행 송금
congestion control : 밀려서 제때 전송이 안되었을 때
- 트래픽이 몰려서 라우터가 넘치면 버퍼가 넘침
- slow start(타임아웃) : threshold값이현재값의 절반, 1로 떨어짐
- fast retransmit(타임아웃X) : dupack이 오면 앞이 문제고 뒤는 정상 ->1로 떨어지지 않고, 현재값의 절반으로 떨어짐
end-to-end flow control : 센더와 리시버 사이의 보내는 속도, 받는 속도 조절
- 리시버 잘 받았으면 ack 패킷 보냄 : 리시버가 가능한 메모리스페이스 정보 포함해서 보냄 -> 속도조절
1) stop-and-wait flow control : 하나씩 잘받았다고 ack 보냄
2) sliding-window flow contol : 여러개씩, 윈도우 사이즈가 오른쪽으로 이동
error control
1) stop-and-wait ARQ : 하나씩
- error-free operation
- lost data packet -> timeout(일정 시간 안에 오지 않으면 ack가 안 옴, 다시 전송)
-lost ack timeout -> timeout
2) Continuous ARQ
Go-back-n : 슬라이딩 윈도우 방식
- 만약 3번 안옴 : 3번부터 ack 버림, 3번부터 다시 보냄
- ack 1번 오고 중간 안오고 3번 옴 : 잘 받았다고 생각 -> timeout 안함 / 단 timeout안에 3번 전송안되면 재전송
TCP 헤더 : 20바이트

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

Network Layer & IP

network layer의 역할 - sender가 보낸 정보를 안전하게 receiver에게 보내는 역할

header에 주소를 적어서 보냄 (IP)

라우터가 안전하게 데이터를 전송시킨다.

Routing- 라우터가 forwarding 을 할 때 어디로 보낼지 결정하는 행위

forwarding - 정보를 전달하는 행위

network는 크게 두가지로 나눌 수 있다.

- circuit -switched networks

- packer-switched networks

circuit-switched networks = 유선전화망

전화를 하고싶어서 번호를 누르면 회선(circuit)을 미리 예약, 예약이 완료가 되면 통화가 이루어 진다.

circuit을 만듦 → 통화를 함 → circuit을 제거(종료)

overhead가 될 수 있다.

장점 : circuit이 예약 되기 때문에 realtime으로 통화할 때 좋다. delay없음

단점 : 체널의 낭비가 존재한다.

packet-switched networks = 셀룰러 3세대부터 (Message switching의 일부)

긴 메세지를 중간중간 잘라서 몇개의 packet 단위로 나눠서 전송 → 시간이 매우 절약된다.

여러 packet을 보내는데, 각각의 packer을 보낼 때 라우터가 한쪽이 밀리면 일부는 다른쪽으로도 안내 한다.

→ 상관없다. 다 도착하면 순서를 기억해서 다시 정렬.

무조건 잘게 자른다고 좋은게 아님.

헤더와 데이터의 비율을 고려하고 잘라서 보내야 한다.

***중요***

local forwarding table을 만드는 것이 routing algorithm

라우터들이 스스로 계산을 함

각 라우터들은 이웃한 경로로 가는 비용만 알고있다.

Two routing algorithms

1. link state routing algorithm

- 각 라우터들은 이웃한 경로로 가는 비용만 알고있지만 서로 그 정보를 공유해서 알맞은 알고리즘을 만들어낸다.

→ 똑같은 topology를 만듦

2. distance vector routing

- 이웃하고만 주고받는다. (모든노드가 아니라)

5-2장

IP(internet protocol)

*IP addrsses (IP ver.4, 4byte)

-크게 5가지 클래스로 구분이 된다. 보통 ABC 3개 중 하나

Net ID, Host ID를 나누는 비율에 따라 나뉨

Net ID(14), Host ID(16)인 class B를 제일 많이 쓴다. (포항공대가 쓰는 주소)

*subnet mask

- subnet ID를 몇비트를 썻는지

*CIDR

-class 하나가 차이날 수록 host ID의 갯수가 너무 큰 차이가 나서(ex, class A의 host ID = 2^16개 = 64000개 , class B의 host ID = 2^8개 = 256개) 그 중간지점을 만들어주는 방

32bit - /뒤의 숫자

법

*NAT(network address Translation)

(network address가 부족한 것을 해결하는 방법 중 하나)

IP address 하나를 가지고 엄청나게 많은 호스트를 할당받는 방법 중 하나.

6장

*Transport layer

정보가 잘 도착했는지 유무

UDP(User Datagram Protocol), TCP(Transmission Control Protocol) 두 가지가 있다.

1.UDP(User Datagram Protocol)

정보의 손실이 조금 발생해도 괜찮을 때 사용

ex) 월드컵 중계

2.TCP(Transmission Control Protocol)

정보가 아주 정확하게(속도보다는) 전달되어야 할 때 사용.

ex) 은행 間 송금

reliable 해야함.

Retransmission of lost packets

* TCP(Transmission Control Protocol)

- control 종류가 세가지 있다.

Congestion control

:sender가 데이터를 보냈는데 밀려서 안보내졌을 때

End-to-end Flow control

:sender 와 receiver 사이에 속도조절을 위해 사용

Error Control

:에러발생에 관한 문제

*Flow control

ex) sender는 슈퍼컴퓨터

receiver는 일반컴퓨터

-sender가 속도를 조절 할 필요가 있다.

receiver가 정보를 잘 받았다고 ack(?)를 보냄

sender가 receiver 넘치지 않게 보내는 것을 조절하는 방법

inefficient 하다

해결 → pipelining (여러개를 보내고 여러개를 받는 방식)

*Error Control

- stop and wait ARQ 방식

- Go back N ARQ 방식

→ error-free operation

→ corrupted data packet

→ corrupted ACKs (cumulative)

TCP Congestion Control

- 트래픽 혼잡상황 해결

모든 control은 연관되어있다.

# data[].attributes.body
1. 배운점
- LAN, WLAN의 정의, 특징 및 차이점에 대해 자세하게 알 수 있었습니다.
- ....................

2. 질문 (궁금한 점이 있는 경우 게시)