TCP라는 프로토콜은 생각보다 매우 정교하다. 그리고 굉장히 복잡하다
장애 대응 대원칙 (순서)
- 무조건 아래에서 위로!!!
Layered 구조
- 아래가 전제가 되어야 위에가 성립됨
- 네트워크가 안된다? 제일 먼저 LAN선 확인, L1, L2 수준 확인, ...
- TCP도 IP 통신이 성립된 뒤에!
예를 들어
파일을 다운 받는 경우
- 파일을 읽어서 프로세스가 버퍼에 담은 후 타고 내려가서 PC 쪽의 Process까지 올라감
- 이 때 조립이 일어난다
- 조립된 것이 Buffer 쪽으로 가서 쌓인다
- 남는 공간이 window size
장애 유형1. LOSS
- L1, L2 수준
- 보낸 애는 보냈다 하는데 받는 애가 못 받았다거나, 안 보내서 못 받았거나
- 네트워크에서 Packet을 잃어버리는 경우
- HOST Endpoint 끝단에서는 네트워크 구간 전체에서 어떤 일이 중간에 알기가 힘들다
- LOSS라는 결과적인 현상은 Endpoint ~ Endpoint 구간 전체에서 날 수 있다
- Endpoint 탓은 아니다
- Loss는 네트워크 수준에서 뭔가 인프라 상의 문제가 난 것 아닌지 의심
- Loss 난 것은 손실
- LAN선이 빠진 것일 수도
TCP에서의 "LOSS"는 데이터 패킷이 손실된 것을 의미한다. 데이터를 보낼 때, 그 데이터는 여러 작은 조각들, 즉 패킷들로 나뉘어서 전송된다. 그런데 이 패킷들이 목적지에 모두 도착하지 않는 경우가 있다.
간단한 예로, 우리가 편지를 여러 장으로 쪼개서 친구에게 보낸다고 생각하자. 친구는 편지를 받아서 조립하여 원래의 메시지를 이해하려고 할 것이다. 그런데 편지의 일부분이 도중에 사라져서 친구에게 도착하지 않았다면, 친구는 편지의 내용을 완벽하게 이해하기 힘들 것이다. TCP의 "LOSS"도 이와 비슷하다. 데이터의 일부 패킷이 중간에 손실되어, 완전한 데이터를 받는 데 문제가 생긴다.
장애 유형2. Duplicated Ack
장애 유형3. Retransmission
- TCP는 정교함, 그런데 중간에 인프라에 문제가 생겨 속도 차이가 발생할 때 남
- 보내는 쪽에서 segment하나를 보내고 Wait 상태
- 속도를 높이려고 Wait을 안하고 미리 보낸다던가
- Network 지연 의심
- Kernel에서 장애가 날 수도 있음
- 송수신하는 쪽에서 세팅이나 정책이 안 맞아서 이런 경우가 나오기도
- 타이머 계산 잘못 하면
- 보통 둘이 따라다님
Duplicated ACK는 TCP에서의 중복 확인 응답을 의미한다. TCP는 데이터 전송 시 패킷들을 순서대로 보내고, 각 패킷이 잘 도착했는지 확인하기 위해 ACK라는 응답을 받는다.
Duplicated ACK는 같은 ACK 번호를 여러 번 받는 현상을 말한다. 간단한 예로, 편지를 친구에게 보냈는데, 친구가 "편지 잘 받았어!"라는 답장을 한 번만 보내야 할 것을 여러 번 보내는 상황이라고 생각하면 된다.
이렇게 중복된 ACK가 발생하는 이유는 보통 패킷이 중간에 손실되었을 때 발생한다. 손실된 패킷을 대체하려는 메커니즘의 일환으로 중복 ACK가 생성되고, 이는 송신측에 패킷 재전송을 요청하는 신호로 작용한다.
Retransmission은 TCP에서 패킷을 다시 보내는 것을 의미한다. 패킷은 컴퓨터가 다른 컴퓨터에 데이터를 보낼 때 작은 조각으로 나눠서 보내는 데이터 단위다.
간단한 예로, 편지를 보내는 것을 생각해보자. 편지를 우편함에 넣었는데 친구가 그 편지를 받지 못했다면, 같은 편지를 다시 써서 보내야 한다. TCP의 Retransmission도 이와 비슷하다. 데이터의 일부 패킷이 도착하지 않았을 때, 그 패킷을 다시 보내는 것이 Retransmission이다.
이렇게 다시 보내는 이유는 네트워크 환경에서 데이터가 손실되거나 문제가 발생할 수 있기 때문이다. Retransmission은 이러한 문제를 해결하기 위한 방법 중 하나다.
혼잡
- 1, 2, 3번 전체를 혼잡(Congestion)이라고 함
Congestion control
- 둘 간 통신 속도를 떨어트림
- 타이머 조정
TCP 혼잡 제어는 인터넷에서 데이터를 보낼 때 너무 많은 데이터를 한꺼번에 보내지 않도록 조절하는 기능이다. 이렇게 조절하지 않으면 네트워크는 "혼잡" 상태가 되어 데이터가 제대로 전송되지 않을 수 있다.
쉬운 예로, 큰 길에서 많은 사람들이 동시에 달리기 시작하면 길이 혼잡해져서 사람들이 서로 부딪히거나 넘어질 수 있다. 이렇게 되면 길을 빠르게 지나가기 어렵다. TCP 혼잡 제어도 이와 비슷하게 작동한다. 너무 많은 데이터를 한꺼번에 보내면 네트워크 길이 혼잡해지기 때문에, 데이터를 조금씩, 적당한 속도로 보내는 것이 좋다.
TCP는 이 혼잡을 방지하기 위한 몇 가지 방법을 사용한다. 데이터를 보낼 때 너무 빨리 보내지 않도록 시작은 천천히 하고, 네트워크 상황을 계속 확인하면서 전송 속도를 조절한다. 문제가 발생하면, 속도를 줄이거나 일시적으로 데이터 전송을 멈추는 등의 조치를 취한다.
결론적으로, TCP 혼잡 제어는 네트워크에서 데이터를 안정적으로 전송하기 위해 필요한 기능이다. 네트워크 길이 혼잡하지 않게, 데이터를 적절한 속도로 보내주는 역할을 한다.
장애 유형4. Zero Window
- Window size가 0
- 수신측 버퍼가 꽉 참
- 수신측에서 뭔가를 받았으면 빨리 끄집어내서 처리로 넘겨 버퍼를 비워줘야 하는데 뭔가가 늦고 있음
- 주로 Application을 의심해봐야한다
- PC 방화벽 등 다른 요인이 있을 수도 있다
장애 유형5. RST
- TCP 통신이 Reset됨
- PC가 네트워크에서 무언가를 다운 받고 있는 와중에 이 프로그램을 작업관리자에서 강제로 kill, 프로그램이 열어놨던 소켓을 운영체제가 회수, OS가 연결됐었던 서버쪽으로 RST를 보냄
- 프로그램이 정상적이지 않은 절차로 죽었거나 (죽지 않았을 수도)
- Socket이 Endpoint Process에서 비정상 상태로 날라감(죽음)
- 해킹 시도
- 비정상적으로 sequence가 안 맞을 때 등
- 만약 Server에 100명이 연결돼있는데 서버가 (비정상적으로)죽으면 연결된 100개 쪽으로 RST가 나감
MSA
- 구간마다 선을 연결해서 out of path로 한 다음
데이터 흐름과는 별도로, 특정 구간의 데이터를 모니터링하기 위해 별도의 경로로 데이터를 복사하여 전송하는 방식을 의미
- port mirroring하듯이 dump를 뜬다
Port mirroring: 스위치나 라우터의 특정 포트에 통과하는 데이터를 다른 포트로 복사해서 보내는 기능. 이렇게 해서 해당 데이터를 다른 장치에서 분석하거나 모니터링할 수 있다.
dump를 뜨다: 네트워크에서 전송되는 데이터 패킷을 캡쳐하거나 저장하는 것을 의미
- segment 하나가 지나갈 때 마다 3번을 다 캡쳐한다
- 구간단위의 속도를 측정해서 어디에서 사라지나 안 사라지나 계측하는 방식
MSA는 "Microservices Architecture"의 약자이다. MSA는 큰 프로그램을 작은 부분들로 나누는 방법이다. 각 작은 부분은 독립적으로 동작하며, 특정 기능을 수행한다.
이를 예로 들자면, 레고 블록을 생각하면 된다. 각 블록은 작은 부품이지만, 여러 블록을 조합하면 다양한 형태와 기능의 물건을 만들 수 있다. MSA도 마찬가지로 각각의 작은 서비스(레고 블록)를 조합하여 큰 프로그램(레고 조립품)을 만든다.
이런 구조의 장점은 하나의 부분에 문제가 생겼을 때, 그 부분만 수정하면 되기 때문에 유지보수가 편리하다. 또한, 각 부분을 독립적으로 개선하거나 확장할 수 있어서 변화에 유연하게 대응할 수 있다.
출처: https://youtu.be/8mY1pKW2m7k?si=q9gJcXhRGdBum7jN
'백엔드 > 네트워크' 카테고리의 다른 글
[네트워크기초이론]#33. 길 잃은 Packet의 소멸과 TTL (0) | 2023.10.24 |
---|---|
[네트워크기초이론]#32. L2 스위치와 ARP 작동원리 (1) | 2023.10.23 |
[네트워크기초이론]#31. TCP/IP통신과 MAC주소의 변화 (0) | 2023.10.20 |
[네트워크기초이론]#27. TCP 연결, LAN선 뽑기 그리고 게임해킹! (0) | 2023.10.19 |
[네트워크기초이론]#26. TCP 연결이라는 착각에 대해 (0) | 2023.10.18 |