Notice
Recent Posts
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 누가 보기는 하는걸까...ㅠㅠ
- Null Safety
- flutter secure storage
- 편하다요
- 코딩 잘하고 싶어!!
- bloc
- 플러터
- 쒸익!!!!!!!!!
- 플러터 책
- flutter_secure_storage
- hero animation
- network
- 이직
- 주니어개발자
- 다트&플러터
- flutter-layout
- TODO
- 댓글이 하나도 없오...ㅠㅠ
- Flutter2.8
- flutter_local_notification
- 크레인 인형뽑기
- 다트 책
- 주변에는 능력자 뿐이야!!
- open weather api
- 프로그래머스
- 포?코DX
- dfs
- FutureBuilder
- 나도 코딩 잘할래!!!!!!!!!!!
- flutter
Archives
- Today
- Total
오늘하루도 우힣ㅎ
CH4. Network Layer(2) 본문
- DHCP(Dynamic Host Configyration Protocol)
: 네트워크 자동 설정시 자동으로 네트워크 정보를 받아오는 mechanism을 의미한다.
주소를 재사용할수 있도록 해준다.
- 다음의 과정을 따르게 된다.
- DHCP discover : DHCP server가 어디에 있는지를 발견하는 과정.
- DHCP offer : DHCP server에서 client에게 적절한 IP 주소를 제안해주는 과정이다.
- DHCP request : DHCP client가 DHCP server에 해당 IP 주소를 쓰겠다고 요청하는 과정
- DHCP ACK : DHCP server에서 client의 요청에 응하는 과정.
- 이후부터 client는 할당 받은 IP 주소를 사용하게 된다.
- IP addr을 받은 후에 그것을 사용할수 있는 시간이 50% 남게 되면 client측은 server로 DHCP request를 보낸다.(server서 반응이 없으면 다시 보낸다.)
- server는 DHCP NACK, ACK 중 하나를 보내게 된다.
- NACK의 경우 server에서 거절을한 경우로 client는 처음부터 다시 모든 과정을 시작한다.
- ACK의 경우 server에서 계속 사용할수 있도록 한것으로 client는 계속해서 사용을 한다.
- 모두 사용을 하게 나면 client는 DHCP Release를 하게 된다.
- Network Address Translation (NAT)
- 1개의 실제 공인 IP에 다량의 가상의 IP 주소를 할당하게 되는 것이다.
- 할당된 IP 주소는 local network 내에서는 유니크 하지만 전체적으로는 유니크 하지 않다.
- IPv4에서 사용할수 있는 대부분의 주소를 사용했지만 아직 IPv4를 쓸수 있는 이유중 하나이다.
- local network내에서 IP 주소가 바뀌더라도 다른쪽에 알려줄 필요가 없다(자신이 연결된 router로만 알려주면 된다.)
- 16 bit port number field : 60,000개의 연결이 하나의 공인 주소에 할당이 될수 있게 해준다.
- NAT의 문제점
- network 통신중에 IP addr이 중간에 바뀌지 않는것을 원칙으로 하지만 이것은 바뀌게 된다.
- routers는 Layer 3까지만 신경을 쓰면 되지만 이것같은 경우 Layer 4까지(port #)까지 신경을 쓰게 된다.
- NAT traversla problem
client가 local network에 있는 server에 접근을하고 싶을때 외부에서는 해당 서버의 IP addr을 알수가 없어 접근이 불가능하다.
Solution 1 : Statically configure NAT to forward incoming connection requests at given port to server
: 강제적으로 특정 router로 들어오는 특정 port를 server와 맵핑을 시켜두어 무조건 server와 연결이 될수 있도록 하는 방식이다.
Solution 2 : rleaying
: relay server : public network에 존재하며 중간에서 매개체 역할을 하게 되는 서버를 의미한다.
: NATed host(server)에 의해서 relay server와 연결이 되게 된다.
: client에 의해서 relay server와 연결이 된다.
: relay server를 통해 client와 server는 통신을 하게 된다.
- ICMP
- 에러 reporting & 네트워크 상태를 진단하는 메카니즘이다.
: 에러가 발생하게 되면 ICMP는 단지 에러를 src에 보고를 할뿐 다른 다른 추가적인 일은 하지 않는다.(recovery x) - ICMP는 첫번째 fragment에 대해서만 보고한다.(하나만 error가 생겨도 다른 fragment들은 다 버려지기 때문에 다 보고할 필요가 없다.)
- checksum에 대해서는 ICMP를 src로 전달하지 않는데 그 이유는 checksum에는 src의 IP addr도 더해져있기 때문에 src의 IP addr이 잘못됐을 경우도 있다고 판단을 한다.
- ICMP 메세지에서 에러가 발생해도 error 메세지는 보내지지 않는다.
ICMP Type | Code | 설명 |
---|---|---|
0 | 0 | echo reply(to ping) |
3 | 0 | destination network unreachable |
3 | 1 | destination host unreachable |
3 | 2 | destination protocol unreachable |
3 | 3 | destination port unreachable |
3 | 4 | destination unreachable(datagram too big) |
3 | 6 | destination network unknown |
3 | 7 | destination host unknown |
8 | 0 | echo request |
11 | 0 | TTL expired |
- echo request/ reply : 해당 network에 문제가 없는지를 확인하기 위해서 사용이 된다.
- 이때 reply는 request에서 보낸 데이터를 동일하게 보내야 한다.
- Destination unreachble : datagram이 제대로 전달이되지 않음을 의미한다.
- path MTU를 확인하기 위해 사용이 되기도 한다. (type3 code4를 사용한다.)
- IP header에 Flag 필드를 DF=1로 설정하여 보내어 해당 fragment가 제대로 도착할때까지 MTU 사이즈를 줄이며 성공할때까지 보내게 되는 것이다.
- Time Expired
- Reassembly timer나 TTL이 0이 되면 해당 패킷들은 다 버려지게 된다.
- destination까지 몇개의 홉을 거쳐 가야하는지 계산할때 쓰여지기도 한다.
- IPv6
- IPv4 (32bit 주소 체계가 곧 다 할당이 될것이다.)
- header 의 형태를 바꿔서 더 빠르게 forwarding을 할수있다.
- QoS를 제공하여 줄수 있다.(Traffic class, Flow label 필드를 통해서)
- 128bit 주소 체계 이다.
- 고정된 헤더의 길이를 가지고 있다.(40byte)
- IPv6는 IPv4에서 사용하던 field를 삭제하거나, 새로 만들거나, 이름을 변경시켜 좀 더 간단한 형태를 지니게 됐다.
- version field 만이같은 이름에 같은 위치를 사용중이다.
- Address Notation
- Preferred form : Colon-Hexadecimal => 0000:0000:0000:000A:3243:0000:ABCD
- 0인부분을 한번은 그냥 스킵하고 넘어갈수 있다. => 0000::0000:000A:3243:0000:ABCD(하나만 지우기 가능)
- 앞부분이 모두 0이라면 모두 생략이 가능하다 => ::000A:3243:0000:ABCD
- 16bit중 앞부분이 연속적인 0이면 생략이 가능하다. => 0000:0000:0000:A:3243:0000:ABCD
- IPv4를 위하여 마지막 32bit를 dot-decimal로 표현할수 있도록 했다.
- Transition From IPv4 To IPv6
- 모든 router들은 한번에 IPv6로 바꿀수는 없기에 IPv4와 IPv6가 동시에 사용될수 있도록 해야한다.
- header의 앞부분을 통해 각각의 version을 확인하여 동시에 사용할수 있도록 조치를 취한다.
- Tunelling
- IPv6로 오는 데이터가 IPv4를 지원하는 router를 만났을때 해당 데이터 자체를 IPv4로 다시 감싸 IPv4 router들을 지나갈수 있도록 하여 준다.(IPv4로 감쌀때 IPv4는 어디까지 보낼지 명시를 해준다.)
- IPv4에서 다시 IPv6를 지원하는 router를 만나게되면 감싸두었던 IPv6만 꺼내어 다시 전송을 한다.
- IPv6가 IPv4의 데이터로 들어가게 되는 형식이다.
'네트워크 > 강의정리' 카테고리의 다른 글
CH6. Link Layer and LANs (0) | 2020.01.20 |
---|---|
CH5. Network Layer : The Control Plane (0) | 2020.01.14 |
CH4. Network Layer(1) (0) | 2020.01.08 |
CH3. Transport Layer(4) (0) | 2020.01.05 |
CH3. Transport Layer(3) (0) | 2020.01.03 |
Comments