[Network] 네트워크 핵심이론2
- 네트워크 학습 입문
- IPv4 Header 형식
- Subnet Mask
- Broadcast IP 주소
- Loopback Address
- 인터넷은 라우터의 집합체라고 할 수 있는 논리 네트워크이다.
- TTL과 단편화
- 인터넷 사용 전에 해야 할 설정
- DHCP
- ARP(Address Resolution Protocol)
- Ping과 RTT
- TCP와 UDP
- TCP 연결 과정 (3-way handshaking)
- TCP 연결 종료 과정 (4-way handshaking)
- TCP (연결) 상태 변화
- TCP Header 형식
- UDP Header 형식
- TCP 연결이라는 착각
- TCP 연결과 게임 버그
- 대표적인 TCP 장애 유형
네트워크 학습 입문
IPv4 Header 형식
패킷의 구성
- MTU : 1500bytes
- IHL : IP Header의 길이를 4bytes로 나눈다. 그림에서 Header length는 5 * 4 = 20bytes
- Total Length : 패킷의 길이
- TTL (Time To Live) : 패킷이 경유할 수 있는 최대 Hop수이다.
- 패킷이 라우터를 통과할 때마다 TTL은 1씩 감소된다. 0이 되면 패킷은 폐기된다.
- Header checksum : 패킷이 송수신되는 과정에서 일어난 손상(오류)을 검사한다.
Subnet Mask
- Subnet : IP주소에서 네트워크 영역을 부분적으로 분할해 나누어진 작은 부분 네트워크
- Subnetting : 잘린 네트워크를 또 분할
- Subnet Mask : 현재 내가 속한 네트워크 주소의 비트 수를 명시한 값 (255.255.255.0)
- IP주소에서 Subnet Mask 값을 가지고 비트 단위로 AND연산을 한다.
- Mask 연산 : 비트 단위로 AND 연산을 해서 Host Id를 0으로 잘라내는 연산
- Network ID가 같다면 우리 네트워크에 오는 패킷이라고 판단한다.
- 표기방법
- CIDR(Classless Inter-Donmain Routing)
- 192.168.0.10/24
- 24bit의 Net Id
- 192.168.0.10
255.255.255.0
- CIDR(Classless Inter-Donmain Routing)
- Host ID를 subnetting해서 2자리를 Network ID로 넘긴다면 HostId는 6bit가 된다.
192.168.0.10/24 -> 192.168.0.192/26
Broadcast IP 주소
- Broadcast : Host ID의 비트를 다 1로 채워버리면 192.168.0을 쓰는 네트워크에서 Broadcast 주소로 쓰인다.
- Multicast : Broadcast와 비슷하지만 전체에 전달한다고 하면 전달하는 데이터를 따로 모아서 그룹핑한다.
- 네트워크에서 쓸 수 없는 IP 주소
- Host ID가 0이면 Subnet Mask 결과와 일치해서 사용불가 + Host ID가 255면 Broadcast => 256개 - 2개 = 254개만 사용 가능
- Gateway도 빼면 대략 250개의 IP주소만 사용가능
- Gateway에 패킷 전달 (패킷의 목적지 -> 3.3.3.3)
- Gateway는 목적지가 3.3.3.3인 걸 확인하고 Internet으로 보내준다.
- 만약 목적지가 192.168.0.255라면?
- Broadcasting으로 패킷에 올라가는 순간 전체에게 다 보내진다.
- 효율이 떨어지기 때문에 broadcast 도달 범위를 통제해야 한다.
Loopback Address
- 127.0.0.1
- Host 자신을 가리키는 IP 주소
- 소켓을 이용해서 내가 나한테 접속하는 방식으로 프로세스 간의 통신이 이루어지도록 지원한다.
인터넷은 라우터의 집합체라고 할 수 있는 논리 네트워크이다.
- Internet = Router + DNS의 집합체
TTL과 단편화
- TTL(Time To Live)
- 패킷이 목적지까지 도달하는 것(라우터를 타고 라우팅)이 실패하는 경우, 좀비 패킷이 많이 생겨 네트워크 전체가 다운될 수 있다.
- 이를 막는 게 TTL이다.
- TTL로도 안되면 패킷을 빠르게 없애야 한다.
- 단편화는 MTU 크기 차이로 발생한다.
- PC - 1 - 3 - 5 - 6 - Server
- 만약 패킷과 라우터의 MTU가 다 1500bytes인데, 5번 라우터만 1400bytes면?
- 단편화 발생
- 패킷이 2개로 늘어나게 된다
- 최종적으로 Server가 2개의 패킷을 조립한다.
- 라우터에서 라우터로 하나씩 지날 때마다 (단위 : Hop)TTL값은 1씩 감소한다. 만약 목적지에 도달하지 못해 TTL값이 0이 되면 라우터는 패킷을 폐지한다.
인터넷 사용 전에 해야 할 설정
- IP 주소
- Subnet Mask
- Gateway IP 주소
- DNS 주소
DHCP
- DHCP (Dynamic Host Configuration Protocol) : 복잡한 인터넷 설정을 자동으로 해준다.
- 내가 사용할 IP주소를 서버가 알려준다.
- DHCP Server는 Broadcast 도메인 내에서만 인터넷 설정에 필요한 정보를 보내준다.
- PC의 전원이 켜지면 Broadcast가 된다.
- DHCP Server가 응답한다. (나머지는 응답X)
- Server가 IP 주소 (192.168.0.100) + Gateway IP 주소 + Subnet Mask + DNS 주소를 보내준다.
ARP(Address Resolution Protocol)
- Address는 IPv4주소 + MAC주소로 구성
- ARP는 IP 주소로 MAC 주소를 알아내려 할 때 활용 된다.
- 보통의 경우 PC를 부팅하면 Gateway의 MAC주소를 찾아내기 위해 ARP Request가 발생하며 이에 대응하는 Reply로 MAC주소를 알 수 있다.
- 어떤 PC가 Naver와 같은 호스트에 접속 시 목적지 MAC Address는 Gateway로 잡힌다.
Ping과 RTT
- Ping 유틸리티 : 특정 Host에 대한 RTT(Round Trip Time)을 측정할 목적으로 사용된다.
- 인터넷이 안될 때 명령창에 Ping을 보냈을 때 response가 없다면 다운 된 것으로 볼 수 있다.
- ICMP 프로토콜을 이용한다.
- Dos(Denial of Service) 공격용으로 악용되기도 한다.
TCP와 UDP
- TCP에만 연결(Connection, Session) 개념이 있다.
- 연결은 결과적으로 순서번호로 구현된다.
- 연결은 상태(전이) 개념을 동반한다.
- Zero window, 즉 상대가 보내지 못하면 TCP도 보내지 않는다.
- UDP는 상관없이 보낸다.
- PID를 가진 Process가 Socket을 생성해서 Open한다.
- Process는 자신의 식별자인 PID를 가진다.
- Socket에 TCP Port 번호를 부여한다.
- 이 컴퓨터의 IP 주소는 192.168.0.10이다.
- TCP Port 번호가 3000이면 Port를 열어서 192.168.0.20 서버에 접속한다.
- 만약 웹 서버면 TCP 80을 연다.
- 연결 중인 프로세스가 Listen 상태의 Socket을 열어서 연결대기 상태가 된다.
- TCP 80로 연결해야한다고 하면
- TCP 80로 연결해야한다고 하면
TCP 연결 과정 (3-way handshaking)
- sequence 번호를 교환한다.
- 정책을 교환한다.
- Maximum Segment Size(MSS)를 알려준다.
- client 접속시 MSS가 1460이라고 알려주고, Server도 1460이라고 알려준다.
- 만약 Server가 갑자기 1400이라고 한다면, client는 Server에 따라 1400으로 맞춘다.
TCP 연결 종료 과정 (4-way handshaking)
- Application Protocol 설계시 Client가 먼저 연결을 끊도록 Active close를 하게 유도해야 한다.
- client에서 연결을 끊는다면 time wait -> closed 됐을 때 소켓이 회수된다.
- 서버가 먼저 연결을 끊는다면 서버 쪽에서 time wait가 발생한다.
- 소켓이 일정시간동안 낭비되는 현상이 나타난다.
- 소켓이 일정시간동안 낭비되는 현상이 나타난다.
TCP (연결) 상태 변화
TCP Header 형식
UDP Header 형식
- 게임서버에서는 UDP로 서버를 개발한다.
- UDP 프로토콜을 이용해서 TCP가 가진 혼잡제어 기능을 구현한다.
- UDP는 멀티미디어 데이터 전송에 최적화되어 있다.
- HTTP3에 UDP가 활용된다.
TCP 연결이라는 착각
- 재전송 타이머의 기본 근사 값
- 초기 재전송 타이머 값은 대략 3초이다.
- 패킷을 전송한 후에 해당 패킷의 확인 응답을 기다리는 시간을 의미한다.
- 하지만 대부분의 운영체제들은 실제로 1초 미만으로 설정되어 있다.
- 재전송 타이머 만료 후의 동작
- 재전송 타이머 만료 후에도 확인 응답을 받지 못한 경우 TCP는 해당 세그먼트를 재전송한다.
- 이 때, 재전송 시간은 RTO(Retransmission Time-Out) 값에 따라 결정된다.
- RTO 값은 재전송이 실패할 때마다 두 배로 증가한다.
- 예를 들어, 1초 > 2초 > 4초 > 8초 > 16초 간격으로 재전송한다.
- 재전송 횟수 제한
- TCP는 보통 최대 5회의 재전송을 시도하고, 만약 5회 이상 모두 실패할 경우 보통 전송 오류가 발생한다.
- TCP는 보통 최대 5회의 재전송을 시도하고, 만약 5회 이상 모두 실패할 경우 보통 전송 오류가 발생한다.
TCP 연결과 게임 버그
- MMORPG 게임에서 아이템 복제 버그 : 여러 플레이어가 동시에 게임을 즐길 때, 아이템의 중복 또는 복제가 발생하는 심각한 문제가 발생
- 논리적 TCP 연결과 물리적 링크 간 차이를 이용한 시간차 공격에 해당한다.
- TCP 연결은 네트워크 상에서 논리적인 연결을 제공하지만 게임 클라이언트와 서버 간의 실제 통신은 물리적인 링크를 통해 이루어진다.
- 논리적 연결은 실제로는 End-point의 주관적인 판단에 불과하다.
대표적인 TCP 장애 유형
- Packet Loss : 패킷이 유실된 경우
- TCP Out of order : 패킷의 순서가 뒤바뀐 경우
- Retransmission과 Dup ACK
- Zero-window : 수신측 버퍼에 여유 공간이 하나도 없는 경우
외워서 끝내는 네트워크 핵심이론 - 기초를 참고하였습니다