2 분 소요

1. 서론

    오늘은 헤더의 구조에 대해서 배워보았다.

2. 본론

1. 네트워크

image
(Service with protocol + port number)

image
(IP Protocol)

image
(IPv4 Header)

//TCP Header(IPv4)
1. (IP)Version : 4bits
- Ipv4는 4로 고정(0100)

2. Internet Header Length (IHL) : 4bits
- IPv4 헤더 사이즈. 위 사진상 Options의 Size에 따라 값이 달라짐. 최솟값 5(5 * 32 = 160bits), 최댓값 15(15 * 32 = 480bits = 60bytes)

3. Differentiated Services Code Point (DSCP) : 6bits
- ToS(Type of Service) 영역

4. Explicit Congestion Notification (ECN) : 2bits
- 네트워크 혼잡 알림을 위해 사용. 00 : 패킷이 ECN 기능을 사용하지 않음, 01 또는 10 : 발신측에서 종단점이 ECN 기능을 수용, 11 : 라우터가 혼잡이 발생했음을 알림

5. Total Length : 16bits
- Packet 전체 사이즈(Header + Data). 최솟값 20bytes(Header only, without Data)

6. Identification : 16bits
- IP datagram의 Fragments Group을 식별하기 위한 값

7. Flags : 3bits
- Fragments를 컨트롤하거나 식별하기 위해 사용
- 0: Reserved; must be zero.[b], bit 1: Don't Fragment (DF), bit 2: More Fragments (MF)

8. Fragment offset : 13bits

9. Time to live (TTL) : 8bits
-  Rotuing Loop 방지를 위해 사용하며 초단위. 실질적으로 Router에 도착할때마다 1씩 감소되므로, Hop Count 용으로 사용 가능(Traceroute에서 사용). 값이 0이 되면 라우터가 패킷을 버리고 일반적으로 ICMP time exceeded message를 발신자에게 보냄

10. Protocol : 8bits
- RFC 790에 따라 사용중인 프로토콜 명시

11. Header checksum : 16bits
- 헤더의 에러 체크를 위해 사용. 라우터가 TTL값을 감소시킬 때마다, Header Checksum을 반드시 새로 계산해야 함

12. Source address : 32bits

13. Destination address : 32bits

14. Options
- 잘 사용되지 않으며, 일부 라우터에서는 위협으로 여겨져 블락될수도 있다.

image

1. Fragmentation(단편화)
- 위의 구조에서 봤던 Flags, Fragment Offset을 활용
- Packet Size가 MTU보다 클 경우, DF(Do not Fragment)가 0으로 설정된 후 라우터가 단편화 수행
- Packet을 Fragment들로 나눈다. 각각의 Fragment들의 최대 크기는 MTU - IP header size(20-60bytes)
- MF(More Fragments) flag는 마지막 fragment를 제외하고 0으로 설정
- Checksum 재계산

2. Reassembly(재결합)
2-1. Fragmentation 확인
- MF가 마지막 fragment를 제외하고 1로 설정돼있음
- fragment offset이 첫번째를 제외하고 0이 아님
- 위 2가지 조건 중 하나를 만족하면, 수신자는 Packet이 단편화 돼있음을 알 수 있고 재결합을 진행한다.
2-2. Reassembly
- source and destination addresses, the protocol ID, and the identification field를 통해 fragments를 매칭시킴
- 매칭된 fragments들을 fragment offset과 fragment flag들을 이용하여 재결합

image
(IPv6 Header)

image
(TCP Header)

image
(TCP 3-way Handsahking)

image

//TCP Header(IPv4)
1. Source port (16 bits)
- 발신자의 포트를 식별하기 위해 사용

2. Destination port (16 bits)
- 수신자의 포트를 식별하기 위해 사용

3. Sequence number (32 bits)
- SYN flag가 설정되어 있으면 여기서부터 시작된다고 파악, 진짜 첫 데이터의 ACK는 이 SYN에 1을 더하면 됨
- SYN flag가 비어있으면, 현재 세션의 이번 segment의 순서번호로 사용

4. Acknowledgment number (32 bits)
- ACK flag가 설정되어 있으면 이 필드의 값은 발신자 ACK의 다음 sequence number로 예상됨

5. Data offset (4 bits)
- 32bits words로 TCP header의 사이즈를 표시
- 최소 20bytes(5words), 최대 60bytes(15words)
- TCP segment 첫 실제 데이터의 시작을 나타냄

6. Reserved (4 bits)
- 미래에 사용하기 위해 남겨둔 공간으로 보통 0으로 설정

7. Flags (8 bits)
- CWR (Congestion window reduced, 1 bit): 발신자에 의해 설정된 경우, 호스트가 ECE flag가 포함된 TCP segment를 수신했으며 혼잡제어메커니즘(Congestion Control Mechanism)에 의해 응답했음을 표시
- ECE(ECN-Echo, 1 bit):
a. SYN flag가 설정된 경우, ECN(Explicit Congestion Notification)이 가능
b. SYN flag가 비어있는 경우, CE(Congestion Experienced) flag가 설정된 패킷이 정상적인 전송 중에 수신됨을 표시
- URG (1 bit): 긴급 데이터가 있음을 표시
- ACK (1 bit): SYN segment 전송 이후 항상 1로 설정
- PSH (1 bit): 데이터가 버퍼에 들어갈 때까지 기다리지 않고 전송
- RST (1 bit): 연결 리셋
- SYN (1 bit): 위 TCP's 3-way Handsahking 사진 참고
- FIN (1 bit): 세션 종료를 위해 사용.(더이상 보낼 데이터가 없음)

8. Window size (16 bits)

9. Checksum (16 bits)
- 에러체크

10. Urgent pointer (16 bits)
- URG flag가 설정되어 있을 때, 데이터 필드에서 어디까지가 긴급 데이터인지 알려주는 포인터

11. Options (0–320 bits, 32배수 단위)
- 이 필드의 길이는 data offset에 의해 정해짐
- 최대 3가지의 영역으로 이루어짐 [Option-Kind(1byte, 필수), Option-Length(1byte, 옵션), Option-Data(variable, 옵션)]
- Padding : Options field가 32bits 배수 크기를 갖지 않을 경우, 0을 채워넣어 32 배수로 만들어주는 역할

udp_pseudo

udp_header

//UDP Header(IPv4)
1. Source port number : 16bits(Optional)

2. Destination port number : 16bits

3. Length : 16bits
- bytes단위로 UDP Header와 UDP data의 Length 표시
- 최소 Length는 8bytes(header만 존재할 때)
- 최대 65,535bytes(8bytes header + 65,527bytes data)

4. Checksum : 16bits(Optional)

//pesudo header는 packet을 보내기 위한 진짜 header가 아니라, checksum 계산을 위해서만 사용됨

image
(UDP predominance and TCP starvation)

2. 리눅스

image

//ftp 설정
1. ip설정(문제를 위해)
# nmtui
ip add: 192.16.10.100/24
gateway: 192.16.10.254
dns: 168.126.63.1 / 8.8.8.8

2. 설치 및 실행
# dnf install -y vsftpd //fsftpd(Very Secure File Transfer Protocol Daemon)
# systemctl enable --now vsftpd

3. 방화벽 / SELinux 설정
# firewall-cmd --add-service=ftp --permanent
# semanage port -l | grep ftp //ftp포트 허용돼있는지 체크

4. anonymous 설정
# vim /etc/vsftpd/vsftpd.conf
12, 19, 29, 33 //주석해제
23(umask=22)
87 //주석해제. 배너설정
# systemctl restart vsftpd

5. ftp 폴더 권한설정
# chown ftp:ftp pub
# chmod 777 pub
# ls -ltr //verify

6. 파일 생성
# cd /var/ftp/pub
# cat > test_ftp
# ls -ltr

7. 접속
//ping to host
//알드라이브 설치 후 확인
//R1
# int f0/0
# no sh
# ip add 192.168.10.254 255.255.255.0
!
# int f1/0
# no sh
# ip add dhcp
!
# access-list 10 permit 192.168.10.0 0.0.0.255
# ip nat inside source 10 int f1/0 overload
!
# int f1/0
# ip nat outside
!
# int f0/0
# ip nat inside
!
# ip route 0.0.0.0 0.0.0.0 f1/0 10.0.0.1

//Host1
ip: 192.168.10.1/24
gateway: 192.168.10.254
dns: 168.126.63.1 / 8.8.8.8

3. 결론

    주말까지 하루남았다.

4. 참고자료

1. 자료

  1. 문웅호, 정보통신망

2. Cisco Docs

  1. ARP
  2. CDP / VLAN
  3. Frame Relay
  4. Static Routing
  5. VLAN
  6. VTP
  7. Routed Port
  8. AD
  9. Route Selection
  10. FHRP
  11. HSRP
  12. DHCP
  13. DNS
  14. STP
  15. NAT
  16. EtherChannel
  17. DTP
  18. RIP
  19. NTP
  20. Offset List
  21. Password Encryption
  22. ACL
  23. CAR Attack
  24. Broadcast
  25. Port Assignments
  26. IPv6 Static Routing
  27. HSRP for IPv6
  28. Clock Rate
  29. DHCPv6 Guard
  30. EIGRP
  31. Express Forwarding
  32. Routing and Switching
  33. Load Balancing
  34. Ping, Traceroute
  35. Load Balancing
  36. Fast Switching
  37. CEF

3. Linux

  1. Linux Directory Structure
  2. File Types in Linux
  3. fstab
  4. Vim Cheat Sheet

클라우드 엔지니어를 꿈꾸며 공부를 시작한 초보 엔지니어입니다. 틀린점 또는 조언해주실 부분이 있으시면 친절하게 댓글 부탁드립니다. 방문해 주셔서 감사합니다 :)

댓글남기기