TCP
- TCP Header
- Data 필수는 아님
- HLEN : 가변적(20~60 바이트) -> 헤더의 길이를 기입하여 Data 구분
- Sequence Number : 데이터의 번호
- Acknowledgment Number : seq + 데이터의 길이 => 신뢰성 보장
- Flag
① urg : 우선적으로 데이터 보내고 싶을때 사용 -> urg가 1이면 sequence number가 아니라 urgent pointer 확인
② ack : 3 way handshaking -> 패킷을 잘 받았다는 응답 flag
③ psh : payload된 데이터가 MMS보다 작아도 그냥 전송
④ rst : 비정상 종료
⑤ syn : 3 way handshaking -> 연결 요청 flag
⑥ fin: 3 way handshaking -> 연결 종료 flag - 3 Way Handshaking : TCP 연결과정
① 클라이언트 연결 요구
② 서버 측 응담 연결 요구
③ 서버 연결 요구에 대한 클라이언트 측 최종 응답
* 상태 종류
① Listen : 포트가 열린 상태로 연결 요청을 대기하는 상태
② SYN Sent : 연결 요청 하고 sever ack를 기다리는 상태
③ SYN Received : 연결 요청에 응답/연결을 요청하고 client 응답 기다리는 상태
④ Established : 연결된 상태 (가상회선 성립) - 트래픽 전송 과정
① 정상일때
- 송신측의 다음 seq와 수신측의 ack가 같기때문에 통신이 잘 이루어짐
② 비정상일 때 (응답하다가 데이터 누락될 경우)
- 송신측의 다음 seq와 수신측의 ack가 다름 -> 300바이트 loss
- 송신측의 다음 seq와 수신측의 ack가 같아질때까지 재전송
③ 비정상일 때 (응답을 아예 못할 경우)
- 응답하다가 중간에 문제가 생겼을 경우 송신측에서 일정 시간을 기다렸다가 다시 재전송
-> 일정시간이란 대략 RTT(왕복시간) * 2
- 트래픽 제어 -> Window Size & MSS 사이즈 조절
① Window Size가 segment size보다 클때
- Window Size에 맞춰서 트래픽 전송
② 단편화된 데이터 누락되었을 때
- 수신측에서도 seq를 확인 seq가 6400인 데이터와 seq가 8800인 데이터 사이가 너무 커 재전송을 요청
- 재전송하는 방법 2가지 : 전체 재전송 (default) / 부분 재전송
③ Window Size가 0일 때
- window size = 0이면 잠시 휴식
- Keep Alive 이후
① 'window size = 0' 전송하면 계속 휴식
② ' window size = XXX ' 전송하면 다시 시작
③ 대답 없으면 세션을 끊음
- 4 Way Handshaking
① client는 sever에게 연결을 종료한다는 FIN 전송 -> FIN에는 실질적으로 ACK의미 포함
② sever는 FIN을 확인했다는 ACK 전송
③ sever 연결을 종료할 준비가 되면, 연결해지를 위한 준비가 되었음을 알리기 위해 client에게 FIN 전송
④ client는 해지 준비가 되었다는 ACK 전송
⑤ sever가 먼저 끊고 어느정도 기다렸다가 client가 끊음
-> client가 먼저 끊는다면 client가 ACK가 전송 실패할 경우에 sever에서는 소켓을 종료하지 못하게 되어 오버헤드 유발
UDP
- UDP Header
- 길이가 고정 -> 8byte
- data 전송을 위한 사전에 필요한 process 없음
- 신뢰성 보장 못함
-> 재전송 메커니즘이 없기 때문에 7계층에서 이에 대한 대책을 세움
- TCP와 UDP 차이점
- UDP는 Message-Oriented Transport Protocol 이지만 TCP는 Stream-Oriented Transport Protocol
- UDP는 payload된 데이터를 단편화하지 않지만 TCP는 단편화를 함
IP
- IP Header
- Data 필수
- VER : IP버전
- HLEN : 가변적(20~60 바이트)
- Total length : 헤더 길이 + 데이터 길이
- Identification : 단편화된 데이터를 식별할 수 있게 해줌
- Flags
① DF (Don't Fragment) : 단편화 금지 플래그
② MF (More Fragment) : 이 패킷 이후 추가 단편이 있음을 알려주는 플래그
- TTL : 목적지까지 가는데 통과를 위해서 거칠수 있는 최대 홉수, 0이 되면 패킷은 버려짐
- Protocol : IP 헤더 다음 헤더가 무엇인지 알려줌 (SAP)
- Header Checksum : 패킷의 손상 여부를 검출
-> IP 헤더에서 Checksum 필드를 제외한 모든 필드의 값을 더한 값 - MTU(Maxium Transfer Unit)
- LAN card가 전송할 수 있는 최대 데이터 수
- Ethernet = 1500 - MSS(Maxium Segment Size)
- 최대 세그먼크 사이즈 -> 전송할 수 있는 데이터의 최대 크기
- 최적의 크기 경우 4계층에서만 단편화 진행 가능
-> 최적의 크기 : 1500 - (IP헤더의 크기) - (TCP헤더의 크기)
- 단편화 (Fragmentation)
- MTU보다 MSS가 클 경우 발생
- 원래 IP헤더의 ID 필드는 고유 번호여야지만 연속된 ID가 나오면 단편화된 경우임
- Flags 필드에서 DF가 1일 때 단편화된 조각 더 있다는 의미이고 0이면 마지막 조각이라는 의미
- Fragment Offset은 일정한 수로 증가함
- 3계층에서 단편화하는거 보다 4계층에서 단편화하는게 더 과정이 심플함
-> L3 : ID, Offset, Flag 확인 / L4 : seq만 확인
-> MSS를 조절해서 L4에서 단편화 가능
- UDP는 단편화가 안되기 때문에 단편화가 필요한 경우엔 3계층에서 단편화를 진행
- TCP는 4계층, 3계층 모두 단편화 가능
① MSS = 5000byte 일때
② MSS = 2000byte 일때
③ MSS = 1400byte 일때
'rookies > 네트워크' 카테고리의 다른 글
sk shieldus rookies 16기 클라우드기반 스마트 융합보안 (네트워크 보안 4일차) (0) | 2023.11.18 |
---|---|
sk shieldus rookies 16기 클라우드기반 스마트 융합보안 (네트워크 보안 3일차_2) (0) | 2023.11.16 |
sk shieldus rookies 16기 클라우드기반 스마트 융합보안 (네트워크 보안 3일차_1) (0) | 2023.11.16 |
sk shieldus rookies 16기 클라우드기반 스마트 융합보안 (네트워크 보안 2일차_1) (1) | 2023.11.15 |
sk shieldus rookies 16기 클라우드기반 스마트 융합보안 (네트워크 보안 1일차) (1) | 2023.11.13 |