리피터 : 반복한다 / 랜이 너무 커서 10km가 되면 랜인 회선으로 연결되어있는데 전기신호가 10키로 동안 계속 가는건 저항이 생긴다 떄문에 중간 중간 리피터(증폭기)를 설치를 한다. - 요즘은 사용하지 않음
브릿지: 랜을 버츄얼하게 나누고 싶을때 사용 / 라우터의 랜을 가상으로 한 포트당 몇개씩 버츄얼 하게 하기 위해서 랜선 하나 따서 그 밑에 여러개를 묶는 것 - 요즘은 라우터 값이 싸져서 사용하지 않음
랜에서 시작하여 첫번째로 만나는 라우터를 게이트웨이라고함
라우터 설명할때는 3계층 밖에 없다 - 왜냐면, 인터넷 상에 있는 라우터들은 최종 목적지가 아니기 떄문에 네트워크 계층에서 반환되고 다시 물리적 계층으로 내려간다 (목적지 아이피 주소가 나인지 아닌지만 확인함)
- 네트워크 계층
- 데이터 링크 계층
- 물리 계층
PART 2
전송 (4계층) - 신뢰성 또는 통신품질에 대해 배울 예정
오류 제어
전송 오류의 유형
화자가 이야기 한 것에 대해 청자가 바르게 알아 들어야한다.
수신(청자) 호스트의 응답 프레임
긍정응답프레임: 데이터가 정상적으로 도착했을때, 수신 호스트가 송신 호스트에게 회신
부정응답프레임: 데이터가 꺠져서 도착했을떄, 수신 호스트가 송신 호스트에게 회신
(부정 응답 프레임을 받은 송신 호스트는 재전송 기능으로 오류 복구 시도)
프레임 분실: 내가 말한 것이 통으로 없어진다. (저녁먹을래 → 저녁 … ? )
1) 송신호스트에서 프레임 분실
송신 호스트는 타임아웃 시간을 갖고 상대방의 응답을 기다리는 시간이 있음 / 타임아웃 시간이 지날때까지 응답이 없으면 데이터를 재전송한다.
송신 호스트는 내가 말한 것을 상대방이 알아들었는지 못알아들었는지 판단이 가능하다. )
2) 수신호스트에서 프레임 분실
송신 호스트에서 데이터를 전송하고 “수신 호스트”에서 긍정 응답을 주는 와중에도 데이터 손실이 발생할 수 있다. → 그럼 송신 호스트에서 데이터를 재전송한다.
순서 번호 (sequence number)
대화의 순서번호를 저장을 해둬야한다.
송신호스트가 대화를 수신호스트에게 했는데, 수신호스트가 긍정응답을 하는 중 프레임분실이 일어난다면, 송신 호스트는 일정 시간 타임아웃을 주고 기다리다가 다시 재전송을 한다.
만약 순서번호가 없으면 데이터의 중복이 발생한다. (금전적으로 보면 돈을 두번 보내는 꼴)
전송 오류의 유형
수신 호스트의 응답 프레임
부정 응답 프레임을 받은 송신 호스트는 재전송 기능으로 오류 복구 시도
송신 호스트의 타이머 기능
데이터 분실시 수신호스트로부터 어떠한 응답프레임도 발생하지 않음 → 송신 호스트는 일정 시간동안 응답 프레임이 없으면 타임아웃 기능으로 재전송을 시도
순서번호의 기능
수신호스트가 중복 프레임을 구분 할 수 있도록 지원
흐름제어
수신 호스트가 감당할 수 있는 속도로 송신 호스트가 데이터를 전송하도록 제어를 해야한다.
너무 빨리 전송하는 경우
수신 호스트가 내부 버퍼에 보관하지 못할 수 있음 -> 이는 프레임 분실과 동일한 효과를 야기함
내가 상대방한테 데이터를 줄때 상대방이 받는 응답의 속도에 맞춰서 흐름 제어를 한다. (슬라이딩 윈도우 프로토콜)
1, 2 계층 프로토콜
CSMA/CD(Carrier Sense Multiple Access with Collision Detection)
이더넷 =( LAN = MAC = 1,2 계층 = 물리적) 모두 같은말이다.
Dummy HUB : 인터넷을 공유한다 (BUS 구조로 되어있음)
스위칭 HUB : 나만 연결한다 - > 속도가 더미허브에 비해 빠름
MA(Multiple Access):다수 호스트가 하나의 공유 매체에 연결됨
CS(Carrie Sense): 호스트는 공유 매체의 사용 가능 여부를 신호 감지로 확인
CD(Collision Detection): 공유 매체에서 데이터 충돌 여부 확인
공유매체(LAN)의 길이가 길면 길수록 전송 지연이 증가하여 충돌가능성이 높아진다.
--------
1,2 계층 = 프레임 (3 계층에서 내려온 데이터 + 헤더를 칭함)
3 계층 = 패킷 (4 계층에서 내려온 데이터 + 헤더를 칭함)
4 계층 = TCP 세그먼트 / UDP 데이터그램 (위에서 내려온 데이터 + 헤더를 칭함)
---------
1,2 계층 헤더 크기는 14byte
3계층 헤더 크기 20byte
4계층 헤드 크기 20byte
-------
0-1500바이트까지 데이터를 담을 수 있다
패킷의 최대사이즈 1500바이트 (그림에서 Data 부분)
패킷의 최대사이즈는 1500을 넘을 수 없다. 하지만 어느날 데이터가 1600이 되어 있으면 ‘비정상’적 이기 때문에 잡아내면 된다.
8비트 = 1바이트
헤더의 구성
목적지 맥주소 6byte + 소스 맥주소 6byte + type 2byte (length)
= 물리계층의 총 헤더의 길이는 14byte이다.
헤더 뒤에는 패킷이 따라옴
type(Length) 이 0x0800 (숫자 하나 하나가 16진수)이면 IP에게데이터를 줘야한다.
16진수는 2^4이기때문에 = 4비트이다.
‘영’ 4비트 ‘팔’4비트 ‘영’4비트 ‘영’4비트
8비트+ 8비트 = 2바이트
Type(Length): 내께 맞으면 데이터를 위로 올려야하는데 OS단에는 stack, IP .. 여러개가 있는데 누구한테 줘야하는지 정해준다. (포트 역할)
preamble : 데이터가 가기 전에 미리 알려주는 것 = (수신 호스트가 송신 호스트의 블록 동기를 맞추는 용도)
start delimiter : 1바이트 쉬고 데이터를 보내준다 = 프레임의 시작
traller: LAN 카드는 OS에 영향을 받을 수 밖에 없는다 OS에는 64비트, 32비트 설정하는게 있다. 이런것은 bus의 단위를 말함. CPU하고 죽은 기기를 통신할때 1비트씩 보내는게 아닌 64비트는 64를 한번에 보낸다. 만약 버스가 있다고 하면 64의 배수가 되어야 한다. 그럼 데이터를 맞추기 위해 PAD 를 통해 0000000을 집어넣어 64틀에 딱 맞춰서 보낸다.
checksum : 무결성값을 보낸다 // 앞에서 계산한 checksum 과 뒤에서 계산한 checksum값을 비교한다. 값이 다르면 랜카드는 폐기를 한다.
Wireshark
랜에서 돌아가는 트래픽을 수집을 한다.
원래 통신은 자기 랜카드 주소에 대한 것만 수집을 해야하는데, 랜카드에 접속되는 모든 전기신호를 다 수집을 한다.
프레임의 순서 | 캡쳐를 시작한 상대적 시간 | source IP주소 | destination | protocol | length | info: info 프레임에 대해 세그먼트에 대해 해석된 것
왼쪽 하단 = 구조적으로 보여줌
물리적계층 단을 보여준다 = 이더넷
출발지, 목적지, type
오른쪽 하단
목적지와 소스의 아이피의 16진수(각 6바이트) + type 2바이트 아스키코드
랜카드가 물어봐야하니까 랜카드 맥주소를 씀
와이어샤크 캡처 옵션에서 “모든 인터페이스에서 무작위 모드 사용” 가 사용함이 되어있어야한다. 그렇지 않으면 내 껏만 받음
ARP : IP → MAC 주소로 변환해준다.
ARP 로 뿌리면 해당되는 IP주소가 응답을 하면서 MAC주소를 알려줌
who has 192.168.1.40? Tell 192.168.1.1
192.168.1.40이 누구에요? 192.168.1.1한테 말해주세요
192.168.1.40의 MAC주소는 74:5d:22:9b:14:a2 이야 !
3계층 네트워크 계층의 기능
서비스의 종류
연결형: 종이컵 2개에 실을 연결해서 대화를 하듯 연결을 하는 것
비연결형 서비스: 데이터나 경로가 미리 정해져있지않음 (데이터가 가는데 주소만 간다) - 주소만 가지고 가까운 길로 간다.
(비연결형 서비스)
패킷(데이터와 헤더가 합쳐짐)이 IP주소(네트워크계층이니까) 를 가지고 서로 다른 경로로 전송되므로 도착 순서가 일정하지 않는다. -> 그래서 상위 계층(4 전송계층)에서 순서를 재조정해야한다.
IP계층의 핵심목적은 정보가 깨지는 걸 신경쓰는게 아니라 빨리 보내는 것.
그렇기에, 패킷 분실 가능성이 있다
패킷의 100% 도착을 보장하지 않는다.
상위 계층에서 패킷 분실 오류를 복구해야한다.
IP 프로토콜
IP 프로토콜은 비연결형이다 = 품질을 보장하지않는다 (쿠팡맨은 보내면 끝이고 상위계층 쿠팡에서 물건을 보상해줌)
MAC source address | MAC destination address | type(length) | 패킷 (version number 4 + header length 5)
모든 패킷의 시작점은 45 로 시작한다.
45가 아닌 숫자가 나오면 비정상으로 잡아내야한다.
service type : 세팅값에 따라 어떤건 빠르고 어떤건 늦게 간다 (하지만 지금은 의미가 없어져서 사용하지 않는다) = 0 → 만약 숫자가 0이 아니고 1이라는 숫자가 하나라도 나오면 잡아내야함
Covert Channel Hacking 은밀한 채널 해킹: 모든 OS는 service type 이 안쓴다는 걸 알기 떄문에 해석을 하지 않음, 해석하면 속도가 느려지니까 → 해커들이 좀비pc 에 명령을 때려서 시그니처를 하는데, 데이터에 attack 명령어를 쓰는게 아니고 service type 에서 명령을 때린다. 왜냐? 아무도 사용하지 않기 때문에 걸리지 않는다.
packet length(fragment offset) : 패킷의 최대 사이즈 1500 // 8바이트 단위로 계산한다.
Time to live : 패킷이 살아남기 위한 시간 // 예를들어 100으로 설정되어 있으면 라우터를 지날떄마다 하나씩 깐다 0이되면 소멸한다. - 쓰레기 패킷을 없애기 위함 (전송은 안되고 라우터끼리 핑퐁을 하는 등 ..)
transport : TCP 를 보낼지 IP를 보낼지 적어놓고 받는쪽에 배려를 한다는 의미. 윗계층 누구한테 줘야하는지를 적어놓음
header checksum: hash값으로 혹시나 의심스러울때 비교를 했는데 같으면 무결성 o 같지 않으면 무결성에서 어긋나서 잡아내야함 // UDP 17 TCP 6
*UDP 17과 TCP 6은 각각 UDP와 TCP 프로토콜을 식별하는 프로토콜 번호입니다. 이 번호들은 IP 헤더에서 해당 프로토콜을 구분하는 데 사용됩니다.
scanner : 내가 상대방을 공격하기 전에 상대방의 정보를 꺼내 오는 것 ( Nmap )
1기가를 전송하기 위한 패킷이 몇개가 팔요한가 ?
1기가 / 1500byte (패킷의 최대 사이즈)
하지만 헤더 20을 빼면 1480 만 한번에 전송될 수 있다 =
한번에 1기가를 받지 않고 1500byte씩 나눠서 받는 이유는 중간에 전송중 에러가 나면 1500만 다시 보내면 되지만 1기가로 보낼경우 1기가를 처음부터 다시 보내야한다.
identification: 어디 데이터에서 왔는지 식별을 한다. A B C를 한번에 다운받는다고 가정을하면. A에서 쪼개고 B에서 쪼개서 전송되고하면 섞인다. 이것을 식별하고 모으기 위한 장치
DF (Dont Fragment):분할하지 마라 / 있는 그대로 전송하면되고 분할하지 마라 (쪼개서오면 잡아내면된다)
fragmentation attack : 분할하지않아야 하는 것을 분할해서 하는 공격.
(패턴 = rule = signiture = 침해사고 = 악성코드// 모두 같은 말)
정보보호 기술은 패턴매칭밖에 없다
V3 백신이 하는게 헤더와 데이터에 어택이 있으면, 어택 공격을 잡아내는 것 안잡히게 하려면 fragmentation을 해서 쪼개지 않아야 할 것을 강제로 쪼갬 → 보안장비를 속여 식별이 안됌 → 끝에 가면 헤더를 때고 합치기 떄문에 공격이 된다.
MF (More Fragment?) : 전송된 데이터가 완전히 다 들어왔는지 확인하는 장치 (내 뒤에 조각이 더 있나요? 하고 물어봄- 조각이 더 있으면 1 이라고 답함 그리고 마지막에 more fragment의 응답은 0으로 끝난다. - 반드시 마지막은 0으로 끝나야한다.)
—---------------------- 문제 -----------------------
IP 프롤토콜
**분할의 예
IP 헤더를 제외한 전송 데이터의 크기가 380 바이트
패킷의 최대 크기가 128 바이트 일경우**
Identification : 우리가 설정하는 값
Packet length: 패킷의 최대크기 128바이트 에서 헤더 20을 떼고 봤을때 108바이트. Fragement Offset을 구하기 위해서는 8바이트로 나눠서 정수로 떨어져야 한다. 그래서 104 로 데이터 크기를 임의로 줄여 8바이트로 나눴을때 정수로 결과가 나오게 한다. (기존 108→104로 줄이면서 남은 값들은 모아서 맨뒤에서 처리할 예정)
104 + 헤더20 = 124 가 하나의 packet legnth(패킷 길이는 헤더값을 포함함) 값이 되는 것
최종적으로 124 / 124 / 124 / 88 이 나오는데 헤더크기 20을 각각 떼고 총 합을 더하면 데이터의 크기 380바이트로 데이터 전부 정상 전송하게 된다.
MF (more fragment) : 너 뒤에 더 있니? 있으면 1 마지막은 무조건 0 이되어야 한다.
Fragment Offset: 8바이트로 나눠져야함/ 패킷의 최대 크기 128바이트에서 헤더 20 떼고 108바이트에서 8로 나눴을때 정수로 떨어지게 하기 위해 104바이트로 줄임 → 이값을 8바이트 단위로 나누면 104/8 = 13
오프셋은 중첩이 되어 표에 작성된다. 13 / 26 / 39 … 데이터의 크기 380바이트가 모두 전송될때까지 늘어남