TCP Length는 1514이상 넘을 수가 없다. (패킷의 최대 사이즈는 1500 + 프레임의 최대크기는 14 ) → 1514
transport layer (전송 계층) (4계층)
데이터 링크 계층은 물리적으로 1:1 연결된 호스트 사이의 전송이라면, 전송계층은 논리적으로 1:1 연결된 호스트 사이의 전송
흐름 제어
물리적 계층과 비교하여 상대적으로 복잡
수신자가 슬라이딩 윈도우 프로토콜의 윈도우 하단 값을 조정
슬라이딩 윈도우 프로토콜은데이터 전송의 흐름을 제어하는 방법입니다. 이 프로토콜은 주로 TCP(전송 제어 프로토콜)에서 사용되며, 송신자와 수신자 간의 데이터 전송을 효율적으로 관리하기 위해 사용됩니다.
슬라이딩 윈도우 프로토콜의 기본 개념:
윈도우 크기: 슬라이딩 윈도우 프로토콜에서는 송신자가 한 번에 전송할 수 있는 데이터의 양을 "윈도우 크기"로 정의합니다. 이 윈도우 크기는 수신자가 처리할 수 있는 데이터의 양을 나타냅니다.
윈도우 하단 값: 윈도우 하단 값은 현재 수신자가 수신할 수 있는 데이터의 시작 지점을 나타냅니다.데이터가 수신되면 이 하단 값이 이동하여 새로운 데이터가 수신될 준비가 됩니다.
수신자가 윈도우 하단 값을 조정하는 이유: 수신자는 자신의 버퍼 크기 및 처리 능력에 따라 윈도우 하단 값을 조정합니다. 만약 수신자의 버퍼가 가득 차면, 수신자는 송신자에게 더 이상 데이터를 보내지 못하도록 하여 데이터 손실을 방지합니다.
오류 제어
데이터 변형, 데이터 분실 오류
재전송 기능으로 복구
빨리말하면 이해 못한다.
TCP 헤더 크기는 20 이다.
1480 - 20 = 1460
TCP
연결형 서비스를 지원
전이증(쌍방향) 방식의 가상 회선을 제공
신뢰성 있는 데이터 전송을 보장
TCP 헤더
1층은 4byte
TCP 헤더 크기: 4 * 5층 = 20 byte
6층// padding 은 배수를 맞춰주기 위해 사용한다. // 마지막 층은 지금은 사용하지 않는다.(제외)
TCP, UDP (4계층)의 상위 계층은 7계층(응용프로그램) 이다.
포트번호
TCP, UDP 프로토콜이 상위 계층에 제공하는 주소 표현 방식
TLS (port 443)
SSL (port 20)
TLS(전송 계층 보안, Transport Layer Security)는 인터넷에서 데이터의 안전한 전송을 보장하기 위해 설계된 암호화 프로토콜입니다
Well-known 포트
많이 사용하는 인터넷 서비스에 고정된 포트 번호 할당
포트 숫자가 1024 보다 작으면 모두 Well-known 포트이다. (전세계 통용)
Source port : 보내는 쪽의 포트 // 웹서버 포트는 port 80
Sequence Number: 3계층 네트워크 계층까지는 데이터만 빨리가면 되었지만, 4계층에서는 데이터 전송의 신뢰성과 순서를 보장하는 데 필수적인 역할을 합니다.
Acknowlegement number : 말풍선 100개를 했는데 응답이 50번 까지만 받으면 100을 다 받기 위해 기다린다. 응답이 오지 않으면 51번 부터 다시 보낸다. - 상대가 어디까지 받았는지를 확인하는 것
Data Offset(= headerLength 20byte)
Reserved : 앞으로 예약된 것이 있다. (요즘은 사용하지 않아서 0 값을 넣는다)
Flag 각 1비트 (1비트는 경우의 수가 2개)
URG (urgent) : 패킷을 빠르게 처리 할 수 있는 방법 ( urgent 라고 빨리 보낼 수있는 것이 요즘은 없기 떄문에 사용하지 않는다 비트번호 0 으로 처리)
ACK : SYN 에서 의견을 물어보고 ACK 에서 대답을 한다. 응답하면 okay sign 응답을 안보내면 no
PSH (push) : 해더 해석이 다 되었으면 상위계층으로 올릴때 사용
RST (reset): 급한일이 있을때 너랑 이야기 안해하고 끝남 FIN은 1의 신호를 받아야끝나지만 이건 내가 통보하는 방식임
SYN : 0하고 1밖에 없다고 가정하면, 나는 너하고 이야기하고 싶어라고 신호 1(말풍선)을 던지는 의견을 물어봄
FIN (finish) : 할말 다 끝나고 FIN을 1로 보내면 그 이후에 내가 어떤말을 하든 간에 듣지 못한다.
Window : 슬라이딩 윈도우 프로토콜과 같음 // 상대방이 초당 100 마디하면 난 능력이 안되 초당 50마디만 말해줘 라고 제어해주는 흐름제어장치
Checksum : 무결성을 확인하기 위함
Urgent Pointer : URG가 1이 되었을때 사용, 급한 일이 있을떄 사용하기 위함 // 요즘은 URG 를사용하지 않기 떄문에 비트번호가 0 이 되어야한다.
Sequence Number 는 정하기 나름 (보통 1로 시작)
Sequence number
ACK number : 다음에 수신하기를 원하는 데이터를 지정
6계층에서 내려온 것을 캡슐로 싸면 캡슐라이제이션
UDP - 8byte
비연결형 서비스를 제공
Best effort (빨리만 보내면 된다) 전달방식을 지원
실시간적 중요성을 하기 위해 생김 (헤더 처리가 없기 떄문)
신뢰성이 의미가 없을때 빨리 하기 위해서 사용
지금의 모든 것들은 TCP 를 사용한다.
지금 실시간 방송은 TCP 를 사용 // 엄밀히 따지만 실시간은 아니다 UDP를 사용해야함
ex) 프랑스에서 금메달 땃으면 바로 주는게 아니고 2~3초동안 데이터의 분실이 있나 확인하고 송출한다.
해커들이 명령어 때릴 떄는 UDP 를 사용한다 ( 응답을 받을 일이 없기 때문)
SYN Flooding
SYN Flood는 반개방 공격이라고도 하며, 보낸 SYN 요청에 대한 서버의 SYN-ACK에 응답하지 않고 SYN 요청만 마구잡이로 보내는 네트워크 계층 공격입니다. 결과적으로 많은 수의 열린 TCP Connection으로 인하여 서버의 리소스가 과도하게 소모되어 정상 트래픽의 처리를 어렵게 하면서 정상적인 새로운 Connection을 열 수 없으며, 이미 연결된 사용자의 Connection의 경우에도 서버가 올바르게 작동하기 어렵게 됩니다.
리피터 : 반복한다 / 랜이 너무 커서 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바이트가 모두 전송될때까지 늘어남