From YYpBD's MediaWiki
667
PRINTER/CAPTURE 가 준비되었습니까(Y/n) ? y
『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 656번
제 목:[강좌예고?] TCP/IP 를 배워보자
올린이:hetta (이기천 ) 99/08/21 11:23 읽음:796 관련자료 없음
-----------------------------------------------------------------------------
안녕하세요?
그동안 잘지내셨는지요? ^^
기나긴 방학이 언제 끝날까? 했는데.
방학이 얼마남지 않았네여-- 시간은 정말 솔직하네여..--.
개강이 이제 10여일남았습니다.이번방학 별로 한것도 없이 지나버리는거 같아서..
너무 아쉽네요.
남은 기간동안 뭘할까...하다가 전에 책을 사두고 책장에 그대로 꽂혀있는
Richard Stevens 의 "TCP/IP Illustrated, Volume 1"을 공부하기로 했습니다.
매일 2챕터씩 책내용을 토대로.이야기를 이끌어갈 예정입니다.^^
저도 공부하면서 올리는 글이기 때문에...잘못된부분이 있을것것같습니다.
잘못된 부분 꼭 지적해주세여....
언제까지 한다는 확답은 못드리겠습니다.^^저도 인간이니까요..
이 책엔 정말 친절한 그림들이 많이 있는데..그 주옥같은 그림들을 이 텍스트
기반의 게시판에 올릴수 없는게 좀 아쉽네여...--
-----------------------------------------------------------------------------
TCP/IP Illustrated, Volume 1 의 목차
-----------------------------------------------------------------------------
Chapter 1. Introduction
Chapter 2. Link Layer
Chapter 3. IP:Internet Protocol
Chapter 4. ARP:Address Resolution Protocol
Chapter 5. RARP: Reverse Address Resolution Protocol
Chapter 6. ICMP: Internet Control Message Protocol
Chapter 7. Ping Program
Chapter 8. Traceroute Program
Chapter 9. IP Routing
Chapter 10. Dynamic Routing Protocols
Chapter 11. UDP: User Datagram Protocol
Chapter 12. Broadcasting and multicasting
Chapter 13. IGMP: Internet Group Management Protocol
Chapter 14. DNS: The Domain Name System
Chapter 15. TFTP:Trivial File Transfer Protocol
Chapter 16. BOOTP: Bootstrap Protocol
Chapter 17. TCP: Transmission Control Protocol
Chapter 18. TCP Connection Establishment and Termination
Chapter 19. TCP Interactive Data Flow
Chapter 20. TCP Bulk Data Flow
.
.
.
---------------------------------------------------------------------------
자그럼 오늘 저녁에 이곳에서 여러분을 뵙죠.!!~~~
Coming Soon!!!
『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 657번
제 목:[강좌1] TCP/IP에 대하여..
올린이:hetta (이기천 ) 99/08/21 19:28 읽음:1664 관련자료 없음
-----------------------------------------------------------------------------
주제: tcp/ip에 대한 개론적 이야기
#프로토콜이 뭐지?
먼저 프로토콜이 무엇이가부터 말씀드리겠습니다. 프로토콜은 한글로 번역
을 굳이하자면 전송규약입니다. 서로 대화를 할때의 규칙이라고 이해하시면
될것입니다. tcp/ip에대한 말은 많이 들어보았을것입니다. 윈도그에서 인터
냇하려면 꼭 tcp/ip프로토콜을 설치해야했죠?왜 그랫을까요?그 많은 프로토
콜이 있는데 왜 이걸 설치해야만 할까요. 그것은 인터냇이라는 커다란 네트
웍에서 통용되는 프로토콜이기 때문입니다. 유닉스에서도 리눅수에서도 맥
에서도 윈도그에서도 이 프로토콜은 꼭 설치되어있어야만 인터냇을 할수있
으며 외부세계와 대화할수있는것입니다.즉, tcp/ip라느것은 어떠한 기계에
서도..어떠한..운영체제에서도 통용되는 프로토콜이라는것입니다.
#레이어(layer)가 뭐지?
레이어란 '층'으로 번역이 될수있겠죠? tcp/ip는 4개의 층이있습니다.
한번 그려볼까요?^^
-----------------------
| Application | Telnet,FTP,e-mail.....
-----------------------
| Transport | TCP,UDP
-----------------------
| network | IP,ICMP,IGMP
-----------------------
| Link | device driver and interface card
-----------------------
왼쪽에있는것이 레이어이고 오른쪽에 각레이어당 존재하는 프로토콜입니다.
즉,tcp/ip에서 각 레이어는 자기가 할일만해서 위쪽 레이어로 패킷을 전달
합니다.일종의 '분업'입니다. 한 레이어가 모든것을 하는게 아니고 각각의
레이어는 자기가 할것만 하면 됩니다.
오른쪽에 보시면 여러가지 프로토콜이 보이지요? 맨윗쪽에 있는것은 다
아시겠죠? 그건 어플리케이션 레이어에이쓴 프로토콜이랍니다.즉..우리가
평소에 통신을 한다는것은 밑에층에 있는레이어에는 신경쓰지 않고 맨윗쪽
레이어만을 썼다는것을 알수있을것입니다. 일바적으로 나머지 밑에있는것들
은 커널이 친절하게 다 처리해줍니다.^^
하지만 밑에층도 어떻게 이뤄졌을까 궁금하죠? 하나하나 알아봅시다.
Link : 이층은 일반적으로 네트워크 카드를 지칭합니다.우리가 패킷을
받을 때 가장먼저 패킷이 거치는곳이지요.
network: 패킷의 이동에 관여합니다.즉 패킷을 라우팅하는일이 여기서
일어납니다.
transport: 두개의 호스트간에 어플리케이션레이어를위한
데이터의 흐름을 제공합니다.
두개의 프로토콜이있죠? 이 두개는 매우 상이 합니다.
간단히말해서 TCP는 신뢰적인 프로토콜이고...
UDP는 비신뢰적인 프로토콜이죠. 자세한건 나중에설명합니다.
application:우리가 평소에 쓰는 레이어죠?
오른쪽에있는..각각의 프로토콜을 알아보죠^^
tcp transmission control protocol
연결지향적인 프로토콜입니다
udp user datagram protocol
비연결지향적인 프로토콜입니다.
icmp internet coltrol message protocol
라우터와 호스트사이에서 에러와 제어정보를 제공합니다.
대표적인 어플로 ping 이있습니다.
igmp internet group management protocol
멀티케스팅에 사용되는 프로토콜입니다.
arp adress resolution protocol
하드웨어 어드레스와 ip넘버를 매칭시켜주는 프로토콜입니다.
ip 넘버로 하드웨어 어드레스를 답합니다.
rarp reverse address resolution protocol
arp 의 반대로 하드웨어 어드레스로 ip 넘버를 답합니다.
diskless system 에서 자신의 ip넘버를 알기위해서 사용합니다.
udp user datagram protocol
신뢰성이 없으므로 프로그래밍을 할때 상대편에 정확히 도착했
는지를 알기위해서는 어플리케이션에서 그작업을 해주어야합니다.
인증과정이 없으므로 tcp보다 빠른 전송을 할수있습니다.
real audio가 대표적인 케이스입니다.
tcp transmission control protocol
tcp는 연결지향적이므로 three way handshaking이라는 과정을
거쳐서 접속이 이뤄지게됩니다. 또한 흐름제어가 가능합니다.
windows사이즈에 따라서 전송을 제어할수가 있습니다. tcp는
full-duplex이다 즉 어플리케이션은 어느때든지 데이터를
보내고 받을수있습니다.
인터넷의 중요한 목표는 세부적인것은 숨기는것입니다.우리가 통신을 한다고
할때 국내 사이트에 접속하든 아니면 지구반대편 미국에 접속을 하든지,
어플리케이션 레이어에서는 알수도 없고 알려고하지도않고
상관하지도 않습니다. 다만 자기가 맡은 일을 묵묵히(?)할뿐이지요^^
이 세부적인 사항을 숨기는것이 인터냇을 파워풀하게 만듭니다.
# 인터냇 주소는 어떻게 매기는걸까?
인터냇에있는 각각의 컴퓨터는 유일한 자신만의 주소가 있어야만합니다.
주소는 A -- E까지 class로 나누어져있습니다.
주소는 4바이트,즉 32비트로 이루어집니다.
각 클레스별로 알아보면..
class A 는 0 으로 시작하고....
class B 10
class C 110
class D 1110
class E 11110
이제 각 클레당 범위를 알아보죠.
범위
class A 0.0.0.0 -- 127.255.255.255
class B 128.0.0.0 -- 191.255.255.255
class C 192.0.0.0 -- 223.255.255.255
class D 224.0.0.0 -- 239.255.255.255
class E 240.0.0.0 -- 247.255.255.255
(물론 특별한 의미로 쓰이는 주소도 있습니다. 그것은 다음에^^)
#켑슐화(Encapsulation)가 뭘까?
앞의 그림을 다시봅시다.
-----------------------
| Application | |
-----------------------
| Transport | |
-----------------------
| network | |
-----------------------
| Link | \|/
-----------------------
우리가 패킷을 보낼때 화살표방향으로 데이터가 이동합니다.
이동을 하면서 각각의 레이어에서 자기에게 할당된일,즉 패킷앞에다가
헤더를 붙여주는겁니다.
예를들어,사용자데이터가
transport지날때 어플리 케이션데이터앞에 tcp 해더를 붙이고,
network를 지날때 ip헤더를 붙이고,
link로 내려갈때 ethernet 헤더를 붙이는것이지요.
이것이 캡슐화입니다.
그럼 켐슐화가 끝난 패킷의 그림을 볼까요?
+-------------------------------------------------------------------+
|ethernet | IP | TCP | | ethernet |
|header | header | header | application data | trailer |
+-------------------------------------------------------------------+
이런상태로 패킷은 인터냇을 떠도는(?)것입니다.
-------------------------------------------------------------------
참고:엄밀한 의미로 말하자면....
tcp가 ip에 보내는것은 TCP segment
ip가 네트워크 인터페이스에 보내는것은 IP datagram
이더넷의 케이블을 흘러다니는 것은 frame
이라 부르는것이 옳습니다.
저는 의미전달에 큰 혼란이 없다고 판단될경우에는
모두 패킷이라고 부르겠습니다. 패킷!
-------------------------------------------------------------------
# Demultiplexing 이 뭐지?
이것은 위에서 보낸 패킷이 목적지에 도달했을때 행해지는것으로
캡슐화를 역으로 생각하면 됩니다.
즉 ethernet header를 풀고 , ip header를 플고, tcp헤더를 풀고,
이런식으로 다 풀면 사용자 데이터가 나오겠죠?
---------------------------------------------------------------------
link 에서 network 로갈때는 ethrnet header의 frame type에따라서,
network 에서 transport 로갈때는 ip header 의 protocol 에따라서,
transport에서 application로갈때는 tcp나 udp 의port number에따라서 ,
demultiplexing이 이뤄집니다.
---------------------------------------------------------------------
이 사실은 매우 중요하므로 꼭 암기하세요.
자세한 사항은... 다음에 알아보죠.
오늘은 워밍업이니까요...^^
# port number
텔넷은 23번포트 , 웹은 80번포트를 사용합니다.
/etc/services에보면 알려진 포트넘버가 있죠?
알려진(well-known) 포트넘버는 1과 1023 사이에있습니다.
서론적인 이야기는 여기까지 하겠습니다.
다음 강좌는 link레이어에 대한 이야기입니다.
『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 658번
제 목:[강좌2]TCP/IP에 대하여..
올린이:hetta (이기천 ) 99/08/22 07:32 읽음:913 관련자료 없음
-----------------------------------------------------------------------------
#########################################################################
Link Layer
#########################################################################
링크층에 대해서 알아봅시다.
여러가지 장치(ethernet,ppp,FDDI,.....)중에서
가장 많이 접하는 이더넷에 대한것만 알아보겠습니다.
# 이더넷의 켑슐화 (Ethernet Encapsulation)
IP로부터 받은 데이터를 인터냇에 내보내기전에 이 링크층을 거쳐야만
하고, 링크층에서는 이더넷 헤더를 앞에 붙이는 작업을하게됩니다.이것이
이더넷의 켑슐화입니다.
하드웨어 주소라는것이있습니다. 이값은 6바이트,즉 48비트의 수입니다.
이값또한 ip주소처럼 전세계에서 유일합니다.
우리가 예를들어 telnet 11.22.33.44 라고 쳤을때, 실제로 인터넷상
에서 11.22.33.44를 찾는것이아니고, ip주소를 하드웨어 주소로 변환한다음
이 하드웨어 주소로 목적지를 찾는것입니다.이때 하드웨어 주소와 IP주소를
변환해주는 프로토콜이 ARP와 RARP입니다.
ifconfig를 쳐보십시요.만약 랜카드가 설정되어있다면.
eth0 Link encap:Ethernet HWaddr 00:C0:26:11:72:CB
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
Interrupt:11 Base address:0x6100
이런식으로 나오겠죠? 여기서 위에 HWaddr이 바로 하드웨어 주소입니다.
00:C0:26:11:72:CB 이값은 전세계에서 유일합니다.이값은 우리가 임으로 바꿀
수없습니다.왜냐하면 랜카드 회사에서 고정되어 나오기 때문입니다.
자 그럼 이더넷 켑슐화를 를 좀더 자세히 알아볼까요?
+----------------------------------------------------------------------+
|destination | source addr | type| data | CRC |
| addr | | | | |
+--------------------------------------------------------------------- +
6 6 2 46-1500 4
+------------------------------------+
| type| |
| 0800| IP datagram |
--------------------------------------
2 46-1500
+------------------------------------+
|type | | |
|0806 | ARP reauest/reply | PAD |
+------------------------------------+
2 28 18
+------------------------------------+
| type| | |
| 8035| RARP request/reply | PAD |
+------------------------------------+
2 28 18
밑에있는 숫자는 바이트수입니다.
맨앞에 목적지 하드웨어 주소로 6바이트,그다음 발신지 하드웨어주소로 6바이트
가 들어갑니다.
type값이 무엇이냐에 따라서 어디로 전달되는지가 달라집니다.
0800 이면 IP 로 전달되고,
0806 이면 ARP 로 전달되고,
8035 이변 RARP로 전달됩니다. (모두 16비트 수입니다.^^)
CRC 는 패킷안에 에러를 체크하기위해서 있습니다.
이더넷 프레임(ethernet frame)에는 최소값이 있습니다. 위에서 보듯이 46이죠.
ARP와 RARP request/reply는 46바이트를 채울수없으므로 데이터가 덧붙여집니다
PAD란 덧붙여진 값을 뜻합니다.
# MTU(maximun transmision unit) 가 뭐지?
위의 그림에서 보이듯이 프레임사이즈에는 한계가 있습니다. 바로 1500byte 입
니다. 링크층의 이러한 특성을 MTU라고 합니다.
IP가 보내야할 데이터그램이 있을경우,그 데이터그램이 링크층의 MTU보다 크다
면 IP는 분열(fragmentation)을 수행합니다.즉,데이터그램을 작은 조각으로
나누는 것이지요.
위의 ifconfig 출력결과에도보면 3번째 줄에 MTU:1500 이 보이죠?
이값은 네트워크마다 틀립니다.
이더넷인경우는 위와같이 1500이고 PPP인 경우는 296입니다.
#Path MTU 가 뭐지?
두개의 호스트가 똑같은 네트워크(즉, 어떠한 라우터도 거치지 않고 연결될수
있는상태)에있다면 MTU값이 중요합니다. 하지만 두개의 호스트가 멀리 떨어져
있을경우 MTU값은 그리 중요하지 않습니다. 왜냐하면 제가 미국의 yahoo.com
에 이더넷으로 연결한다고 가정했을때, 똑같은 네트워크(이더넷)을 통과한다는
보장이 없기때문이지요. 만약 패킷이 ppp를 만났다면 296바이트로 쪼개지는것
입니다. 두개의 호스트가 멀리떨어져있을때는 가장 작은 MTU값이 중요합니다.
모든 패킷이 결국에는 이 MTU값에 따라서 잘려지기 때문이지요.
이값을 Path MTU라 부릅니다.
이것으로 링크층에 대한 이야기를 마치겠습니다.
이번이야기는 다소 지루한 이야기였던것같습니다.
다음 이야기는 IP(internet protocol)과 ARP(Address Resolution Protocol)에
대해서 알아보겠습니다.
그럼 행복하십시요. :)
『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 659번
제 목:[강좌3]TCP/IP 에대하여
올린이:hetta (이기천 ) 99/08/22 19:10 읽음:788 관련자료 없음
-----------------------------------------------------------------------------
------------------------------------------------------------------
IP: Internet Protocol
------------------------------------------------------------------
안녕하세요?
이번이야기의 주제는 IP헤더에대한 설명, IP라우팅,서브넷의 구축법 입니다.
그럼 이제 하나하나 알아보죠.~
#도대체 IP가 뭐지?
IP는 비연결적(connectionless)이고, 비신뢰적(unreliable)입니다.
처음 tcp/ip를 접하시는 분들은 아마 ip가 비연결적이고 비신뢰적인 프
로토콜이라고 말한다면 이상하게 생각하실지도 모르겠습니다.
비연결적이라함은 성공적인 통신에대한 어떠한 정보도 유지하지 않는다
는것입니다. 각각의 패킷은 모든 다른것들에 대해서 독립적입니다.
그러므로 각각의 패킷은 서로 순서가 바뀌어서 전달될수있다는것이죠.
비신뢰적이라함은 패킷이 성공적으로 전달되었다는 어떠한 인증도
없다는것입니다.IP는 최선의 서비스를 위해 노력합니다. 무엇인가
문제가 생길경우에는 IP는 패킷의 발신지에 ICMP에러메세지를
돌려보냅니다.인증은 더높은 층(TCP....)에서 이루어집니다.
#IP헤더는 어떻게 생겼을까? :)
0 3 4 8 9 15 16 31
---------------------------------------------------------------------------
| | header | | |
| version| length | type of service| total length |
---------------------------------------------------------------------------
| | | |
| identification | flags | fragment offset |
---------------------------------------------------------------------------
| | | |
| time to live | protocol | header checksum |
---------------------------------------------------------------------------
| |
| source Ip address |
---------------------------------------------------------------------------
| |
| destination IP address |
---------------------------------------------------------------------------
@ @
@ ip option (if any) @
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
이렇게 생겼습니다.^^
처음 보시는분은 무척 복잡하다는걸 느낄수있을것입니다.
맨윗줄의 숫자는 비트수입니다. 각줄당 32비트,즉 4바이트씩 끊어서 보기좋게
그린것이지요. 즉 처음 0비트에서 3비트까지가 version이고 다음 4비트에서 8비트
까지가 header length등등 이런식으로 나갑니다. IP옵션이 없을경우 IP헤더의
길이는 총20바이트입니다.(5줄이니까 4*5=20 )
그럼 이제 각 필드에대한 설명을 합니다.
<version>
IP의 버전이 들어갑니다. 현제 IP버전은 4입니다. 그래서 IPV4라고도 부르지요
IPV6도있습니다. IPV6는 현제 실제로 쓰이고 있지는 않지만 머지 않아서
IPV4를 대체할것입니다.
<header length>
헤더의 길이가 들어갑니다. 옵션이 없다고 했을때 헤더는 20바이트입니다.
헤더의 길이는 4비트입니다. 들어가는 숫자는( 헤더의 바이트수 / 4 )입니다.
즉 20 바이트라면 20 / 4 = 5 죠? 그래서 5가 들어가는것입니다.
헤더길이 필드가 4비트이기 때문에 헤더는 60바이트를 넘을수없습니다.
(잘계산해보세요 ^^)
<type of services>
실제로 현제 쓰이는 것은 4비트입니다.
각 비트는 하나씩만 켜져야 됩니다. 2개가 켜질수는없습니다.
minimize delay maximize throughout
maximize reliability minimize monetary cost
이렇게 4가지의 비트가 있습니다.
예를 들어 텔넷 같은 경우에는 minimize delay가 켜져야겠죠?왜냐하면 우리가
타이핑할때 상호대화적인 통신이 이뤄져야 되기때문입니다. 만약 우리가 ls를
쳤는데 한1분뒤에나 결과가 나온다면 무척 열받겠죠?
하지만 FTp같은 경우에는 maximize throughout 비트가 켜집니다.1메가 데이터 전
송을 해야하는데 1바이트마다 패킷이 하나씩 전송된다면? 어떨까요? 네트워크
과부하가 걸리겠죠..?
하지만...오늘날에는 대부분의 tcp/ip장비에서 이 tos를 지원하지 않는다네요.--
(The TOS feature is not supported by most TCP/IP implementation today)
<total length>
헤더를 포함한 전체적인 길이입니다. 이길이와 헤더길이를 비교해서 데이터가
어디서 시작하는지 알수있겠죠?
8비트이기때문에 65535까지 들어갈수있습니다.
<identification>
이값은 각각의 패킷을 구별하게합니다. 즉,패킷이 잘려져서 목적지에 패킷이
도달했을때, 그 패킷들을 재조합 할때 쓰이죠
flag와 fragment offset은 fragmentation을 다룰때설명드리겠습니다.
<time to live>
이값은 각각의 라우터를 지날때마다 1씩 감소합니다. 만약 0에 도달하면
패킷을 없애버리고, 발신지에 icmp메세지를 보냅니다. 즉, 패킷이 영원히
인터냇상을 떠도는것을 방지합니다.
<protocol>
이값은 저번 이야기에서 말씀드렸죠? 즉 어느 상위 레이어(층)으로 갈지를
결정하는것입니다.
tcp ? udp? ....
<header checksum>
이값은 패킷이 아무이상없이 목적지에 도달했는지를 검증합니다. 즉 중간에
패킷이 잘리거나, 데이터가 변조 된것은 거부해버리는것이지요.
모든 IP는 32비트 발신지 주소, 32비트 목적지 주소를 갖습니다.
옵션은 옵션입니다.(^^)
옵션은 여러가지 용도로 쓰입니다. 이것도 다음에 설명드리죠.
이상으로 IP헤더에 대한 간단한 설명을 살펴보았습니다.
# IP 라우팅이 뭐지?
라우팅은 길찾기 입니다. 내가 보낸 패킷이 정확히 목적지에 도달하게 하는것
입니다.
자 그럼 그림으로 알아보죠.(IP는 설명을 쉽게하기위해서 조작된것임)
(4.4.4.4) X --------------------------+
|
(INTERNET)
|
|
+--------------------------------- C(3.3.3.3)
|
+-------------------------+
| |
A(1.1.1.1) B(2.2.2.2)
이런 네트웍에서 A라는 호스트가 4.4.4.4에 가고자 한다면 어떻게할까요?
A라는 호스트는 자신의 라우팅 테이블을 봅니다. 그리고 자신의 라우팅 테이블에
4.4.4.4 라는 호스트는 없는것을 확인하고 C라는 디폴트 라우터로 패킷을 보내야
합니다. 이때 앞에서 잠깐언급했지만, ARP프로토콜을 이용해서 4.4.4.4라는 IP
값에대한 하드웨어 주소를 알아냅니다.
이제 패킷을 보냅니다. 이때의 패킷은 어떤 모양일까요?
+-------------------------------------+
| | | @
| link | IP | @
| header | header | @
+-------------------------------------+
link header 에서 목적지는 3.3.3.3의 하드웨어주소
IP header 에서 목적지는 4.4.4.4
이렇게 됩니다.
라우팅을 하는동안 IP header의 목적지주소는 바뀌지 않습니다.!
(사실,바뀔수는 있습니다. 이것은 다음에....)
바뀌는것은 link header의 목적지 하드웨어 주소입니다.
C에서도 똑같은 과정이 반복됩니다.
IP 헤더의 목적지 주소는 바뀌지 않고,
link header의 목적지 주소만 디폴트 경로의 하드웨어 주소가 들어가지요.
이렇게 계속하다보면... X(4.4.4.4.)에 도달할수있겠죠?
# 서브넷은 어떻게 구성하지?(Subnet Addressing)
서브넷을 구축하는 이유는 A 클래스의경우 2^24 -2 개나 호스트를 연결할수잇고
B의 경우도 보면 2^16-2개나 호스트를 연결할수있기때문입니다. 이많은 호스트
들을 한 내트워크에 연결하는 관리자는 없을것입니다.
서브넷이란 배정받은 주소를 쪼게서 쓰는것입니다.외부세계에서는 서브넷을
알수가 없겠죠.
210.94.165.0을 나눠보죠!
그것은 몇개의 서브넷으로 나눌것인지에 따라서 달라집니다.
만약에 4개의 서브넷으로 나눈다고 한다면 2비트가 필요하겠죠? ( 2*2=4 )
서브넷을 보면
210.94.165.0
210.94.165.64
210.94.165.128
210.94.165.192
이렇게 4개로 나울수있습니다^^
서브넷 메스크는? 210.94.165.192 가 되겠죠?
(1111111.11111111.11111111.11000000)
4개로 서브넷을 나눈다면 각 서브넷당 몇개의 호스트가 연결이 가능할까요?
6비트가 호스트에 할당되므로 2^6=64 입니다.
하지만 6비트가 전부0인것은 네트워크주소이고, 전부 1인것은
브로드케스트주소이지요? 그래서 64-2가 됩니다.
각 서브넷당 62개의 호스트를 가질수있는것이지요.
이것으로 IP에대한 이야기를 마치겠습니다.
소개식으로 설명한 부분들은 뒷부분에서 좀더 자세히 설명할 기회가있을것입니다
강좌내용중 이해안가는 부분있으면 질문해주세요.
제가 아는거면 답변해드릴께여. :)
오늘은 숙제를 내드리겠습니다.
숙제검사도 할거니까(?) 숙제다해오시기바립니다.^^ 히히
그럼 다음시간에 뵙죠.
<숙제>
1.오늘은 서브넷4개를 나눌때를 예로 들었습니다.
그렇다면 서브넷을 8개로 나눌려면,
각각의 서브넷주소는?(8개)
서브넷 매스크는?
각 서브넷당 몇개의 호스트가 연결가능할까요?
(8개를 나눌때 서브넷id를 어떻게 배정하든지 상관은 없습니다....)
2. IP헤더의 길이가 60바이트를 넘을수없다고했습니다.
왜 그럴까요?
『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 660번
제 목:[강좌4]TCP/IP에 대하여
올린이:hetta (이기천 ) 99/08/23 21:10 읽음:770 관련자료 없음
-----------------------------------------------------------------------------
--------------------------------------------------------------------------
ARP AND RARP
--------------------------------------------------------------------------
ARP 와 RARP 에대해서 알아보겠습니다. 앞에서 잠깐 언급했듯이
ARP(Address Resolustion Progocol)는 32비트 인터넷주소를 48비트 하드웨어주소
로 변환하고, RARP(reverse Addres Resolusion Progocol)는 그 역입니다.
32-bit internet address
| /|\
| |
| |
\|/ |
48-bit Ethernet address
+------------------------------------------------------------+
| | | | | |
| dest | source | type | ARP request/reply | PAD |
| address | address | 0806 | | |
+------------------------------------------------------------+
6 6 2 28 18
어디서 많이 본그림이죠? 두번쩨 강좌 켑슐화부분에서 나왓었죠.
여기서 ARP request/reply부분을 자세히 그려보죠.
+ --------------------------------------------------------------------+
| hard | prot |hard|prot| | sender | sender| target | target |
| type | type |size|size| op | ethernet |ip addr | ethernet| ip addr |
| | | | | | addr | | addr | |
+---------------------------------------------------------------------+
2 2 1 1 2 6 4 6 4
<hard type>
하드웨어 주소의 타입을 말합니다. 이더넷의 경우 이값은 1입니다.
<prot type>
맵핑된 프로토콜주소의 타입을 표시합니다.
(type of protocol address being mapped)
IP 주소의 경우 이값은 0x0800입니다.
<hard size , prot size >
하드웨어 주소와 프로토콜주소(IP주소)의 바이트 크기입니다. ARP request or
reply인경우 이값은 각각 6과 4이죠.
<op>
1인경우는 arp request
2인경우는 arp reply
3인경우는 rarp request
4인경우는 rarp reply를 뜻합니다.
이것은 frame type이 arp request 일때와 arp reply일때 같기 때문에,
그것을 구분하기 위해서 필요합니다.
그다은 발신지 하드웨어주소,목적지 ip 주소
목적지 하드웨어주소,목적지 ip 주소 가 들어가죠.
[!!] arp request가 보내질때 목적지 하드웨어 주소를 제외한 모든 필드가
채워져서 보내집니다. 보내질때는 브로드캐스트로 보내집니다.
이 패킷을 받은 곳에서는 아직 비어있는 하드웨어 주소를 채우고, 발신지와
목적지의 주소들을 바꾸고, op필드를 2로 세팅하여 보냅니다.
arp 캐시(cache)가있어서 현제의 하드웨어 주소와 ip주소를 저장해둡니다.
그럼..실제로 어떻게 쓰이는지 알아보죠.
다음은 192.168.0.1에서 192.168.0.2로 텔넷을 실행했을때의 상황을 보여줍니다.
-----------------------------------------------------------------------
[root@super /root]# arp -a
[root@super /root]#
file://arp -a 는 arp 케시(cache)를 보여좁니다.현제 아무것도 없죠?
file://이때 telnet 192.168.0.1을 실행시키면 아래와같은 tcpdump결과가 나옵니다.
[root@super /root]# tcpdump -i eth0
tcpdump: listening on eth0
18:30:28.357656 arp who-has 192.168.0.2 tell 192.168.0.1
18:30:28.357656 arp reply 192.168.0.2 is-at 0:0:1c:2:51:2b
18:30:28.357656 192.168.0.1.1114 > 192.168.0.2.telnet: S 2440910836:2440910836
(0) win 512 <mss 1460>
file://tcpdump는 패킷을 잡아서 보여줍니다.
// 먼저 192.168.0.2에대한 하드웨어 주소를 모르기때문에 arp를 이용해서
file://알아보고있죠?
file://하드웨어 주소를 알고난 후에야 실제로 패킷을 보내고있습니다.(3번째줄)
[root@super /root]# arp -a
? (192.168.0.2) at 00:00:1C:02:51:2B [ether] on eth0
[root@super /root]#
file://그다음 arp 캐시를 보면 192.168.0.2의 하드웨어 주소가 적혀있죠?
---------------------------------------------------------------------------
#이제 RARP를 알아보겠습니다.
RARP는 ARP와 거의 유사합니다.
보내지는 패킷의 모양도 위에서 보여준 arp것과 거의 같습니다.
다른점만적어보면 frame type이 0x8035
op 이 rarp request 일때 3,
op 이 rarp reply 일때 4라는것입니다.
arp와 같이 rarp도 브로드캐스트 됩니다.
rarp가 쓰이는 용도는 디스크없는(diskless)컴퓨터가 자신의 IP주소를 얻기위해서
사용합니다. 하지만 요즘 하드디스크가 엄청싸져서...과연 디스크 없이 운영되는
컴퓨터는 거의 없을것입니다.
이것으로 ARP,RARP를 살펴보았습니다.
이제, 어제내준 숙제를 한번 풀여보죠!
먼저 219.94.165.을 8개의 서브넷으로 나눌려면,
3비트가 필요하겠죠?
8개의 네트워크 주소는
210.94.165.0
210.94.165.32
210.94.165.64
210.94.165.96
210.94.165.128
210.94.165.160
210.94.165.192
210.94.165.224
가 되겠죠.
세브넷 메스크는 255.255.255.224(11111111.11111111.11111111.11100000)가 되고,
각 서브넷당 30( 2^5 - 2 )개의 호스트가 연결할수있겠죠?
(서브넷에대한 자세한것은
/usr/doc/HOWTO/translations/ko/mini/IP-Subnetworking을 참고하세요)
다음문제는 ip해더가 60바이트를 넘을수없는이유였죠?
ip헤더의 길이를 나타내는필드는 4비트입니다.
실제 바이트수 / 4 가 여기에 들어간다고했죠?
그렇다면 4비트가 표현할수있는최고의수는 15입니다.( 8+4+2+1 )
그러므로 15 * 4 = 60 이죠?
이것으로 오늘이야기를 마칩니다.
어떠한 피드백도 환영합니다.
내일 이시간까지 안녕히계십시요 :)
『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 663번
제 목:[강좌5]TCP/IP에 대하여
올린이:hetta (이기천 ) 99/08/24 17:12 읽음:683 관련자료 없음
-----------------------------------------------------------------------------
--------------------------------------------------------------------------
ICMP( Internet Control Message Protocol) and Ping Programing
--------------------------------------------------------------------------
오늘은 ICMP와 ping 프로그램에 대해서 알아보겠습니다.
icmp는 말그대로 제어메세지를 교환하는 프로토콜입니다. 즉,에러메세지나 현제
의 상태를 나타내는 메세지들을 보내지요.
아래 그림은 ICMP 메세지가 IP에의해 켑슐화 되는그림입니다.
<-----------IP datagram --------------------->
+----------------------------------------------+
| | |
| IP | ICMP message |
| header | |
+----------------------------------------------+
20byte
그럼 ICMP message가 어떻게 생겼는지 알아보죠.
+--------------------------------------------------------------------+
| | | |
| 8bit- type | 8bit- code | 16bit- checksum |
+--------------------------------------------------------------------+
| |
/ 여기 적히는것은 type와 code에 따라서 달라짐 /
| |
+--------------------------------------------------------------------+
type 와 code는 매우 많습니다. /usr/include/linux/icmp.h 에 있는값들이
전부 들어갈수있습니다. type이라는것은 메세지의 형태를 말하며,code 라는것은
좀더 type을 세분화 시키는것입니다.
몇개만 예를들어서 알아보겠습니다...
type code 설명 query error
0 0 echo reply(ping reply) *
3 3 port unreachable *
3 1 host unreachable *
. . .
8 0 echo request(ping request) *
. . .
13 0 timestamp request *
14 0 timestamp reply *
. . .
17 0 address mask request *
18 0 address mask reply *
등등 여러가지가 있습니다. 우리가 ping을할때 type 8 code 0으로 패킷이 나가
나가고, type 0 code 0 으로 목적지 호스트에서 우리 호스트로 패킷을 보내는것
입니다.
또한 우리가 존재하지 않는 포트에 패킷을 보냈을때는 type 3 code 3 으로 그러
한 포트가 이호스트에 존재하지 않는다는것을 발신지 호스트에 보내는것입니다.
다른것들도 다 이와 비슷합니다.똑같은 type3이지만 code가 1인가,3인가에 따라
서 메세지가 틀려짐을 확인할수 있을것입니다.
맨 오늘쪽에 query와 error는 이메세지가 query(질문?)메세지인지 error메세지
인지를 나타냅니다.예를들어 ping프로그램이 보내는 echo request ,echo reply
는 상대방 호스트가 살아있는지에 대한 질문하는 메세지죠?하지만 port unreacha
ble 이나 host unreachable는 포트,호스트를 찾을수없다는 에러를 나타내는
메세지입니다.
icmp에러 메세지는 아래와 같은 경우 생성되지 않습니다.
1. icmp에러메세지에 대한 응답으로
2. 브로드케스트나 멀티케스트주소로 보내지는 패킷에 대한 응답으로
icmp에러메세제에 대한 응답으로 icmp에러메세지가 생성될때는 어느것이 잘못되
었는지에 대한것이 불분명하게되기때문입니다.
브로드캐스트나 멀티캐스트에 대한 icmp에러메세지가 보내질수있다면, 수많은
패킷들이 한번에 방출되어 네트워크 과부하가 걸릴수있습니다.
이제 실제적으로 쓰이는 몇가지 예를 알아보겠습니다.
##
## icmp timestamp request and reply
##
timestamp request는 현제 시간을 다른 시스템에 묻는것입니다. 응답으로 오는
것은 자정으로부터의 밀리세컨드(miliseconds)입니다.
기준시간은 Coordinated Universal Time(UTC)입니다.
이메세지의 장점이라면 miniseconds로 시간을 알수있다는것이며, 단점이라면
자정으로부터의 시간이 응답되므로, 현제 오늘이 며칠인지 알아아만 한다는것
입니다...
다음은 이메세지가 보내지는 형식입니다.
0 7 8 15 16 31
+----------------------------------------------------------------------+
| | | |
| type(13 or 14)| code (0) | checksum |
+----------------------------------------------------------------------+
| | |
| identifier | sequence number |
+----------------------------------------------------------------------+
| |
| originate timestamp |
+----------------------------------------------------------------------+
| |
| receive timestamp |
+----------------------------------------------------------------------+
| |
| transmit timestamp |
+-----------------------------------------------------------------------
request를 보낼때는 originate timestamp를 채워서 보내게 됩니다.받는쪽에서는
받은시간을 receive timestamp에 채우고 보내는 시간을 transmit timestamp에
채워서 reply를 보내는것입니다.그러나 대부분의 컴퓨터가 receive timestamp와
transmit timestamp는 같습니다.
도표로서 3가지 시간을 알아보면,
originate received tranmit
| request | | reply |
|=============================>| |==================================>|
| | | |
|<------------------------------ RTT -------------------------------->|
( RTT란 round trip time으로 패킷을 보낼때와 되돌아올때의 시간간격입니다.)
##
## 이제 Ping 프로그램을 알아보죠.
##
0 7 8 15 16 31
+----------------------------------------------------------------------+
| | | |
| type( 0 or 8 )| code (0) | checksum |
+----------------------------------------------------------------------+
| | |
| identifier | sequence number |
+----------------------------------------------------------------------+
| |
/ optional data /
| |
+----------------------------------------------------------------------+
다음은 192.168.0.1에서 192.168.0.2로 ping을 실행한 출력결과입니다.
[root@super /root]# ping 192.168.0.2
PING 192.168.0.2 (192.168.0.2): 56 data bytes
64 bytes from 192.168.0.2: icmp_seq=0 ttl=32 time=2.2 ms
64 bytes from 192.168.0.2: icmp_seq=1 ttl=32 time=1.1 ms
64 bytes from 192.168.0.2: icmp_seq=2 ttl=32 time=1.1 ms
64 bytes from 192.168.0.2: icmp_seq=3 ttl=32 time=1.1 ms
64 bytes from 192.168.0.2: icmp_seq=4 ttl=32 time=1.0 ms
64 bytes from 192.168.0.2: icmp_seq=5 ttl=32 time=1.0 ms
--- 192.168.0.2 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max = 1.0/1.2/2.2 ms
icmp_seq 이값이 1씩 증가함을 알수있습니다. 이값은 위의 메세지 형태에서
sequence number를 뜻합니다.
ping 프로그램은 RTT를 계산할수있습니다. ping이 패킷을 보낼때 optional data
부분에 현제시간을 넣어서 패킷을 보냅니다.상대방에서 패킷이 되돌아오면 현제
시간에서 optional data에 적힌 시간을 빼줌으로서 RTT를 계산할수있는것입니다.
위의 출력결과에서 맨 오른쪽에 보이는 time이 RTT를 뜻합