------------------------------------------------------------------------------ 『해킹강좌 (go sghack)』 [171] 제 목 : [강좌] 네트워크 tcp/ip - 퍼온글 올린이 : 장동현(흔들흔들) 등록시각:99-10-04 19:14:42 읽음 : 211 받음 : 0 관련자료 없음 ------------------------------------------------------------------------------ 『리눅스 학당-리눅스 강좌 / 연재 (go LINUX)』 657번 제 목:[강좌1] TCP/IP에 대하여.. 올린이:hetta (이기천 ) 99/08/21 19:28 읽음:793 관련자료 없음 ----------------------------------------------------------------------------- 주제: 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 읽음:398 관련자료 없음 ----------------------------------------------------------------------------- ######################################################################### 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 읽음:329 관련자료 없음 ----------------------------------------------------------------------------- ------------------------------------------------------------------ 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 ) 그럼 이제 각 필드에대한 설명을 합니다. IP의 버전이 들어갑니다. 현제 IP버전은 4입니다. 그래서 IPV4라고도 부르지요 IPV6도있습니다. IPV6는 현제 실제로 쓰이고 있지는 않지만 머지 않아서 IPV4를 대체할것입니다.
헤더의 길이가 들어갑니다. 옵션이 없다고 했을때 헤더는 20바이트입니다. 헤더의 길이는 4비트입니다. 들어가는 숫자는( 헤더의 바이트수 / 4 )입니다. 즉 20 바이트라면 20 / 4 = 5 죠? 그래서 5가 들어가는것입니다. 헤더길이 필드가 4비트이기 때문에 헤더는 60바이트를 넘을수없습니다. (잘계산해보세요 ^^) 실제로 현제 쓰이는 것은 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) 헤더를 포함한 전체적인 길이입니다. 이길이와 헤더길이를 비교해서 데이터가 어디서 시작하는지 알수있겠죠? 8비트이기때문에 65535까지 들어갈수있습니다. 이값은 각각의 패킷을 구별하게합니다. 즉,패킷이 잘려져서 목적지에 패킷이 도달했을때, 그 패킷들을 재조합 할때 쓰이죠 flag와 fragment offset은 fragmentation을 다룰때설명드리겠습니다.