커널 소스에서 바로 파지 않고 가능한 한 많은 연구를 수행했습니다. 주제에 대한 많은 양의 잘못된 정보 / 잘못된 정보가있는 것 같습니다. 그래서 이것이 저와 다른 사람들에게 한 번에 대한 질문에 대답하기를 바랍니다.
엄격하게 IPv4를 사용하면 실제로 포트 소진이 가능합니까? 설명하겠습니다 :
- 사용 가능한 65535 포트가 있습니다. 0을 사용할 수 없습니다.
- 포트 소진은 (src ip, src port, dst ip, dst port) 튜플이 고유해야한다는 것을 읽었습니다.
- 명확하고 가정하면 sysctl net.ipv4.ip_local_port_range 설정을 통해 임시 포트를 100 % 사용할 수 있다고 가정합니다.
그리고 이것이 질문입니다 : 이것이 어떻게 작동합니까?
- 127.0.0.1:(x)에서 127.0.0.1:80까지 65k 연결 가능
- 127.0.0.1:(x)에서 127.0.0.1:555까지 65k 연결 가능
- 기본적으로 다시 한 번 질문은 (srcip, srcport, dstip, dstport) 고유해야합니까?
- ip "A"에서 IP "B", 포트 "N"으로 65k 이상 연결 을 열 수 없습니다.
- 마찬가지로 xxxx : 80에서 단일 IP 가 웹 서버에 65k 이상 연결을 열 수 없지만 다른 소스 IP 에서 온다면 65k 이상을 지원할 수 있습니까?
마지막으로, 나는 들어오는 임시 포트와 수신 포트에 대해 약간 혼란스러워합니다. 일단 연결이 설정되면 연결의 각면이 피어와 동등하다는 것을 알지만 그 전에는 다음과 같습니다.
예를 들어 실제로 (srcip, srcport, dstip, dstport) 튜플이 고유해야하는 경우, 예를 들어 활성화하면 왜 그렇습니까?
net.ipv4.ip_local_port_range = 1024 65535
1024-65535의 임시 포트를 사용할 수 있으므로 포트 3306 (예 : mySQL)에서 바인딩하는 서비스가있는 경우 포트가 사용 중이기 때문에 시작되지 않는 경우가 있습니다.
이것은 사실과 관련이 있습니까? (그리고 이것은 내가 확인을 요구하는 진술입니다) :
- (srcip, srcport, dstip, dstport)는 포트 범위가 1-65535 인 각 연결마다 고유해야합니다 (OS의 임시 포트 사용에주의하지 않음)
- 그러나 소켓을 바인드하려면 (srcip, srcport, *, *)로 표시 될 수 있습니다. 또는 이것을 넣는 또 다른 방법은 IP가 바인딩을 위해 어떤 이유로 포트를 사용하지 않아야합니까?
위의 동작을 확인할 수 있습니다. 즉, 위의 정확한 sysctl 줄을 사용하면 OS가 해당 포트를 사용한다고 가정하여 mySQL을 때때로 무작위로 다시 시작하지 못하기 때문에 mySQL을 1024보다 낮은 포트로 옮겼습니다 (3306) 임시 포트.